Berikut ini adalah pertanyaan dari kielsihombing23 pada mata pelajaran TI untuk jenjang Sekolah Menengah Atas
Tolong ya, terima kasih
Jawaban dan Penjelasan
Berikut ini adalah pilihan jawaban terbaik dari pertanyaan diatas.
Kode Program (Pascal)
{$mode objfpc}
{$modeswitch ADVANCEDRECORDS}
program RecordMhs;
uses
crt, sysutils;
{ Record data mahasiswa }
type
TMahasiswa = record
nim: string[8];
nama: string;
nilai: record
tugas,
uts,
uas,
na: real;
end;
grade: char;
procedure hitungNilaiAkhirDanGrade();
procedure inputData();
end;
procedure TMahasiswa.hitungNilaiAkhirDanGrade();
begin
with self do
begin
with nilai do
na := (tugas + uts + uas) / 3;
if (nilai.na >= 85) then
grade := 'A'
else if (nilai.na >= 70) then
grade := 'B'
else if (nilai.na >= 60) then
grade := 'C'
else if (nilai.na >= 50) then
grade := 'D'
else grade := 'C';
end;
end;
procedure TMahasiswa.inputData();
begin
with self do
begin
write('NIM : '); readLn(nim);
write('Nama : '); readLn(nama);
write('Tugas : '); readLn(nilai.tugas);
write('UTS : '); readLn(nilai.uts);
write('UAS : '); readLn(nilai.uas);
end;
end;
var
n, i: integer;
dataMhs: array of TMahasiswa;
begin
clrscr;
writeLn('Input Data Nilai Mahasiswa');
write('Berapa mahasiswa? ');
readLn(n);
setLength(dataMhs, n);
for i := 1 to n do
begin
writeln('Mahasiswa ke :', i:3);
dataMhs[i].inputData;
dataMhs[i].hitungNilaiAkhirDanGrade;
end;
writeLn('-------------------------------------------------------');
writeLn(' NO NIM NAMA TUGAS UTS UAS NA GRADE');
writeLn('-------------------------------------------------------');
for i := 1 to length(dataMhs) do
begin
with dataMhs[i] do
begin
writeln(
i:3, ' ',
nim, ' ',
nama, ' ',
nilai.tugas:2:2, ' ',
nilai.uts:2:2, ' ',
nilai.uas:2:2, ' ',
nilai.na:2:2,
grade:5
);
end;
end;
writeLn('-------------------------------------------------------');
writeLn;
end.
________________
Pembahasan
Program di atas merupakan contoh implementasi tipe data Record pada Pascal, berdasarkan gambar output pada pertanyaan. Data mahasiswa berupa NIM, nama, nilai tugas, nilai UTS, nilai UAS, dan grade, disimpan dalam bentuk record dengan nama TMahasiswa.
Jenis record yang digunakan adalah advanced record, karena pada record TMahasiswa terdapat procedure hitungNilaiAkhirDanGrade( )daninputData( ). Oleh karena itu, pada bagian baris teratas disisipkan compiler directive yang diperlukan, yaitu {$mode objfpc}dan{$modeswitch ADVANCEDRECORDS}. Jika tidak ada procedure dalam record, maka record tersebut berjenis fixed record, dan kedua compiler directive tersebut tidak diperlukan.
Karena tidak ada keterangan tentang penentuan grade dari nilai akhir (NA), maka saya menentukan sendiri, dengan memperhatikan hasil output yang diinginkan.
Aturan penentuan grade untuk kasus ini ditentukan sebagai berikut:
- Grade A: 85 ≤ NA ≤ 100.
- Grade B: 70 ≤ NA < 85.
- Grade C: 60 ≤ NA < 70.
- Grade D: 50 ≤ NA < 60
- Grade E: 0 ≤ NA < 50.
Hasil eksekusi dengan data masukan menyesuaikan pertanyaan dapat dilihat pada gambar lampiran.
Catatan:
- Compiler yang digunakan: FreePascal 3.2.2 (dalam WSL)
- IDE: VSCode (Windows)
Semoga dengan pertanyaan yang sudah terjawab oleh henriyulianto dapat membantu memudahkan mengerjakan soal, tugas dan PR sekolah kalian.
Apabila terdapat kesalahan dalam mengerjakan soal, silahkan koreksi jawaban dengan mengirimkan email ke yomemimo.com melalui halaman Contact
Last Update: Sun, 25 Dec 22