Contoh Soal-soal algoritma 1
Procedure dan Function
program functionlembur;
{$APPTYPE CONSOLE}
uses
SysUtils;
var unama : string;
ujk, uupj, ugaji : integer;
Procedure InputData(var Nama: String; var jk, upj : integer);
begin
write('Nama : ');readln(Nama);
write('Jam Kerja : ');readln(jk);
write('UPJ : ');readln(upj);
end;
Function GajiTotal(jam, upj : integer) : integer;
begin
if jam <= 8 Then Result := jam * upj
else Result := Round((upj * 8) + ((jam - 8) * (upj * 1.5)));
end;
procedure CetakData(gaji : integer);
begin
writeln('==== result ====');
Writeln('Total Gaji : ', FormatFloat('############', gaji));
end;
begin
inputdata(unama, ujk, uupj);
ugaji := GajiTotal(ujk, uupj);
cetakdata(ugaji);
readln;
end.
assembler style
program functionna;
{$APPTYPE CONSOLE}
uses
SysUtils;
var unama : string;
utgs, uuts, uuas, una : integer;
Procedure InputData(var Nama: String; var tgs, uts, uas : integer);
begin
write('Nama : ');readln(Nama);
write('Tugas : ');readln(tgs);
write('UTS : ');readln(uts);
write('UAS : ');readln(uas);
end;
function NilaiAkhir(tgs, uts, uas: integer) : integer;
begin
result := Round((0.2 * tgs) + (0.3 * uts) + (0.5 * uas));
end;
function indeks(NA : integer) : char; assembler;
asm
mov edx, eax
cmp edx, 85
jge @n85
cmp edx, 70
jge @n70
cmp edx, 60
jge @n60
mov eax, 68
jmp @end
@n60 : mov eax, 67
jmp @end
@n70 : mov eax, 66
jmp @end
@n85 : mov eax, 65
jmp @end
@end :
end;
{
function Indeks(NA : integer) : char;
begin
if na >= 85 then result := 'A'
else if na >= 70 then result := 'B'
else if na >= 60 then result := 'C'
else result := 'D';
end;
}
procedure CetakData(NA : integer; indek : char);
begin
writeln('==== result ====');
Writeln('Nilai Akhir : ', FormatFloat('00.0', na));
writeln('Indeks : ', indek);
end;
begin
inputdata(unama, utgs, uuts, uuas);
una := nilaiakhir(utgs, uuts, uuas);
cetakdata(una, indeks(una));
readln;
end.
Array
program parray;
{$APPTYPE CONSOLE}
uses
SysUtils;
const ID_UTS = 1;
ID_UAS = 2;
ID_TGS = 3;
ID_NA = 4;
JML = 3;
var Nilai : Array[1..JML, 1..4] of Word;
Nama : Array[1..JML] of String;
x,y : Integer;
ruts, ruas, rtgs,rna : Integer;
s : string;
Procedure BacaData(var vNama : String; var vUTS, vUAS, vTGS : Word);
Begin
Write('Nama : ');Readln(vNama);
Write('UTS : ');Readln(vUTS);
Write('UAS : ');Readln(vUAS);
Write('TGS : ');Readln(vTGS);
End;
Function NilaiAkhir(vUTS, vUAS, vTGS : Integer) : Integer;
Begin
Result := Round(vUTS * 0.3 + vUAS * 0.5 + vTGS * 0.2);
End;
begin
for x := Low(Nama) To High(Nama) Do
BacaData(Nama[x], Nilai[x, ID_UTS], Nilai[x, ID_UAS], Nilai[x, ID_TGS]);
for x := Low(Nama) To High(Nama) Do
Nilai[x, ID_NA] := NilaiAkhir(Nilai[x, ID_UTS], Nilai[x, ID_UAS], Nilai[x, ID_TGS]);
ruts := 0;
ruas := 0;
rtgs := 0;
rna := 0;
Writeln('------------------------------------------------------');
Writeln('-- Nama -- UTS -- UAS -- TGS -- NA --');
Writeln('------------------------------------------------------');
for x := Low(Nama) To High(Nama) Do
Begin
ruts := ruts + Nilai[x, ID_UTS];
ruas := ruas + Nilai[x, ID_UAS];
rtgs := rtgs + Nilai[x, ID_TGS];
rna := rna + Nilai[x, ID_NA];
s := '';
for y := 0 to 11 - Length(Nama[x]) Do s := s + ' ';
if Length(Nama[x]) > 13 then Nama[x] := Copy(Nama[x], 1, 13)
else Nama[x] := Nama[x] + s;
Write('-- ',Nama[x], ' -- ', FormatFloat(' 000 ', Nilai[x, ID_UTS]), ' -- ');
write(FormatFloat(' 000 ', Nilai[x, ID_UAS]), ' -- ',FormatFloat(' 000 ', Nilai[x, ID_TGS]), ' -- ');
writeln(FormatFloat(' 000 ', Nilai[x, ID_NA]), ' -- ');
end;
ruts := ruts div High(Nama);
ruas := ruas div High(Nama);
rtgs := rtgs div High(Nama);
rna := rna div High(Nama);
Writeln('-------- RATA RATA -----------------------------------');
Writeln('-- UTS : ',FormatFloat('000',ruts),' UAS : ',FormatFloat('000', ruas),' TGS : ', FormatFloat('000', rtgs),' NA : ', FormatFloat('000', rna),' --');
Writeln('------------------------------------------------------');
readln;
end.
Record:
program mhsrecord;
{$APPTYPE CONSOLE}
uses
SysUtils;
type TScore = Record
NA,
UTS,
UAS,
TGS : Real;
End;
TMHS = Record
Nama : String[255];
NIM : String[30];
idx : Char;
Score : TScore;
End;
Procedure inputdata(var Value : TMHS);
Begin
with Value Do
Begin
Write('Nama : '); readln(nama);
Write('NIM : '); readln(nim);
with score do
begin
Writeln('----[ Nilai ]----');
Write('TGS :');readln(TGS);
Write('UTS :');readln(UTS);
Write('UAS :');readln(UAS);
end;
end;
end;
Procedure calcNA(var Value : TScore);
Begin
with Value Do
NA := (0.2 * TGS) + (0.3 * UTS) + (0.5 * UAS);
End;
Procedure calcIDX(var Value: TMHS);
Begin
With Value.Score Do
Begin
if NA > 90 Then
Value.idx := 'A'
else if NA > 75 Then
Value.idx := 'B'
else if NA >= 60 Then
Value.idx := 'C'
else Value.idx := 'D';
end;
end;
procedure cetak(Value: TMHS);
Begin
with Value Do
Begin
Writeln('----[ Kalkulasi ]----');
Writeln('Nilai Akhir : ', Score.NA);
Writeln('Indeks : ', idx);
end;
end;
var MHS : TMHS;
begin
inputdata(MHS);
calcna(MHS.Score);
calcidx(MHS);
cetak(MHS);
readln;
{ TODO -oUser -cConsole Main : Insert code here }
end.
kalo ada yang salah, error, bingung, ga ngerti tentang algoritma 1 silahkan posting ke thread ini