Kód:
program Zajazd;
uses crt;
type myString = string[12];
var i2, suma, suma2:integer;
zoznam: text;
meno, meno2: myString;
koniec: boolean;
m: char;
procedure UpravMeno(var s: myString);
var i: integer;
begin
for i:= 1 to 12 do
if (s[i] = ' ') then
begin
delete(s, i, 12-i+1);
exit;
end;
end;
procedure Celyvypis;
begin
clrscr;
writeln('Tu je zoznam ziakov aj s ich usporami.');
while (not (eof(Zoznam))) do
begin
readln(zoznam, meno, suma);
writeln(meno, ' ', suma);
end;
end;
procedure Aktualizuj;
var i: integer;
begin
clrscr;
i:= 0;
writeln('Zadajte meno ziaka, ktoreho stav uspor chcete upravit.');
readln(meno2);
writeln('Zadajte sumu,ktoru chcete pripocitat.');
readln(suma2);
while (not (eof(zoznam))) do
begin
inc(i);
readln(zoznam, meno, suma);
UpravMeno(meno);
if (meno = meno2) then suma:= suma+suma2;
end;
end;
procedure Vybranyvypis;
begin
clrscr;
i2:=0;
writeln('Zadajte sumu.');
readln(suma2);
writeln('Menej ako ',suma2,' EUR maju nasetrene ziaci:');
while (not (eof(zoznam))) do
begin
readln(zoznam, meno, suma);
if (suma < suma2) then
begin
writeln(meno, ' ', suma);
inc(i2);
end;
end;
if (i2 = 0) then writeln('Vsetci ziaci maju nasetrene viac ako ',suma2,' EUR.');
end;
procedure Vypisjedneho;
begin
clrscr;
writeln('Zadajte meno ziaka.');
readln(meno2);
while (not (eof(zoznam))) do
begin
readln(zoznam, meno, suma);
UpravMeno(meno);
if (meno = meno2) then
writeln('Ziak ',meno2,' ma nasetrenych ',suma,' EUR.');
end;
end;
begin
assign(Zoznam, 'zoznam.txt');
clrscr;
writeln('Vitajte v programe LYZIARSKY ZAJAZD.');
koniec:= false;
repeat
reset(zoznam);
writeln;
writeln;
writeln('Pre zobrazenie stavu vsetkych uspor stlacte 1.');
writeln('Pre zmenu stavu nasetrenych penazi stlacte 2.');
writeln('Pre zistenie chybajucich penazi stlacte 3.');
writeln('Pre zistenie stavu jedneho ziaka stlacte 4.');
writeln('Pre ukoncenie programu stlacte 5.');
m:= readkey;
case m of
'1': Celyvypis;
'2': Aktualizuj;
'3': Vybranyvypis;
'4': Vypisjedneho;
'5': koniec:= true;
end;
until (koniec = true);
clrscr;
writeln('Program sa ukoncil.');
close(zoznam);
end.
Hlavný problém bol v tom, že zo súboru si načítal meno v tvare:
'Dobrota '
tzn aj s medzerami. Vyriešené pomocou procedúry
UpravMeno. Upravil som ti aj úvodné načítavanie znakov. Nefunguje ešte procedúra aktualizuj, pretože zapisovať do stredu súboru deklarovaného ako text je dosť krkolomné. Myslím, že najvohdnejšie by bolo, keby si použil inú premennú deklarovanú ako File of ... nejaká štruktúra (string[12] a integer), pomocou ktorej by si rovno načítal aj meno aj sumu.