program sort_record ;
uses wincrt;
CONST MaxData = 100 ;
type Datasiswa = record
No_induk : integer;
Nama, jurusan,mtk : string[30];
semester : byte ;
nilai : record
uts,uas, tugas,quis,absen : real ;
end;
Nilai_akhir : real;
nilai_huruf : char;
end;
Daftar_siswa = Array[1..maxData] of DataSiswa ;
var siswa : daftar_siswa ;
jum_siswa : integer;
procedure baca_data_siswa;
var lagi : char;
function nilhuruf ( Nilai : real ) : char;
begin
if nilai >= 80 then
nilhuruf := 'A'
else if ( nilai <>=70) then
nilhuruf := 'B'
else if ( nilai <>=60) then
nilhuruf:= 'C'
else if ( nilai <>= 40 ) then
nilhuruf := 'D'
else
nilhuruf := 'E'
end;
begin
jum_siswa := 0;
repeat
jum_siswa := jum_siswa + 1;
with siswa [ jum_siswa ] do begin
writeln(' masukan data siswa : ');
write(' Nama Siswa : '); readln(nama);
write(' nomor induk : ');readln (no_induk);
write(' Jurusan : ' ); readln(jurusan) ;
write(' Mata Kuliah : '); readln(mtk);
write(' Semester : ' ); readln(semester);
writeln(' nilai-nilai ; ');
write(' tugas : '); readln(nilai.tugas);
write(' Quis : '); readln(nilai.quis);
write(' Nilai Absensi : '); readln(nilai.absen);
write(' nilai UTS : '); readln(nilai.uts);
write(' Nilai UAS : '); readln(nilai.uas);
nilai_akhir := 0.15* nilai.absen+ 0.15 * nilai.tugas+0.15*nilai.quis+ 0.25* nilai.uts + 0.3 * nilai.uas;
nilai_huruf := nilhuruf(nilai_akhir);
end;
write (' adakah data lagi (Y/T)? '); readln(lagi);
if jum_siswa + 1> maxData then begin
writeln('data telah maxsimal, segera akan durutkan ! ');
lagi := 'T'
end;
until upcase ( lagi ) = 'T';
end;
procedure urutDatasiswa ;
var i,j : integer ;
tampung : datasiswa ;
begin
for i := 1 to jum_siswa -1 do
for j:= 1 + 1 to jum_siswa do
if siswa[i].nilai_huruf <>
tampung := siswa[i];
siswa[i] := siswa[j];
siswa[j]:= tampung ;
end;
end;
procedure cetakdatasiswa;
var i : integer ;
begin
writeln('no.induk':4,' ','nama':11,' ','N.akhir',' ','huruf');
for i := 1 to jum_siswa do
with siswa[i] do
writeln( no_induk:5,' ',nama:15,' ',nilai_akhir:6:2,' ',nilai_huruf:5);
end;
begin
clrscr;
baca_data_siswa ;
urutDatasiswa;
cetakdatasiswa;
end.