[Turbo Pascal] Dodawanie elementów do listy


(Zmuszony) #1

Witam,

mam poniższy kod (wiem, że nie zoptymalizowany, na razie próbuję go złożyć żeby działał, później będę go skracał :wink: ):

program project1;


Uses CRT, SysUtils;


Type

Tdane =record

Imie : string[20];

Nazwisko: string[20];

Ocena : array[1..5] of byte;

//Przedmiot : array[1..10] of string;

end;


var uczen1, uczen2, uczen3, uczen4, uczen5 : TDane;

    name, surname : string;

    licznik,a : byte;

    subjects : array[1..5] of string = ('Matematyka','Fizyka','Jezyk polski','WF','Historia');

    mark : array[1..5] of byte;


procedure przypisz(licznik:byte);

begin

if licznik=1 then

begin

uczen1.imie:=name;

uczen1.nazwisko:=surname;

for a:=1 to 5 do

begin

uczen1.ocena[a]:=mark[a];

end;

clrscr;

end;

if licznik=2 then

begin

uczen2.imie:=name;

uczen2.nazwisko:=surname;

for a:=1 to 5 do

begin

uczen2.ocena[a]:=mark[a];

end;

clrscr;

end;

if licznik=3 then

begin

uczen3.imie:=name;

uczen3.nazwisko:=surname;

for a:=1 to 5 do

begin

uczen3.ocena[a]:=mark[a];

end;

clrscr;

end;

if licznik=4 then

begin

uczen4.imie:=name;

uczen4.nazwisko:=surname;

for a:=1 to 5 do

begin

uczen4.ocena[a]:=mark[a];

end;

clrscr;

end;

if licznik=5 then

begin

uczen5.imie:=name;

uczen5.nazwisko:=surname;

for a:=1 to 5 do

begin

uczen5.ocena[a]:=mark[a];

end;

clrscr;

end;

end;


procedure wyswietl;

begin

clrscr;

With uczen1 do

Writeln(imie,' ',nazwisko,' ',mark[1]);

With uczen2 do

Writeln(imie,' ',nazwisko,' ',mark[1]);

With uczen3 do

Writeln(imie,' ',nazwisko,' ',mark[1]);

With uczen4 do

Writeln(imie,' ',nazwisko,' ',mark[1]);

With uczen5 do

Writeln(imie,' ',nazwisko,' ',mark[1]);

end;



begin

write('Wcisnij [ENTER] aby dodac dane osobowe uczniow');

readln();

clrscr;

licznik:=1;


repeat


writeln('[UCZEN ',licznik,']');

write('Imie: ');

readln(name);

write('Nazwisko: ');

readln(surname);

//for a:=1 to 5 do

a:=1;

  repeat

    begin

    write('Ocena z ',subjects[a],':');

    readln(mark[a]);

    a:=a+1;

    end;

  until a>5;

przypisz(licznik); //przypisuję uczniom dane

licznik:=licznik+1;

until licznik>5;


readln;



wyswietl;

readln;

end.

Wszystko działa oprócz wczytywania ocen:

a:=1;

  repeat

    begin

    write('Ocena z ',subjects[a],':');

    readln(mark[a]);

    a:=a+1;

    end;

  until a>5;

Do jednego przedmiotu (subjects[a]) ma wczytać jedną ocenę (marka[a]). Przedmiotów jest 5, wiec powinno dla każdego ucznia zapamiętać 5 ocen.

Jednak po wywołaniu procedury (wyswietl), w której na sztywno ustawiłem wyświetlanie tylko pierwszych ocen (tylko z matmy - subjects[1] to matematyka) - niestety każdemu uczniowi zawsze wyświetla pierwszą ocenę ostatniego ucznia :frowning:

Wpisywałem:

uczeń1: 1 2 3 4 5

uczeń2: 2 3 4 5 6

uczeń3: 3 4 5 6 1

uczeń4: 4 5 6 1 2

uczeń5: 5 6 1 2 3

Otrzymałem:

uczeń1: 5

uczeń2: 5

uczeń3: 5

uczeń4: 5

uczeń5: 5

Chce uzyskać:

uczeń1: 1

uczeń2: 2

uczeń3: 3

uczeń4: 4

uczeń5: 5

Prosiłbym o szybką pomoc, bo gonią mnie terminy :frowning:

Za wszelkie uwagi i pomysły serdecznie dziękuję :slight_smile:


(etam) #2
With uczen1 do

Writeln(imie,' ',nazwisko,' ',ocena[1]);

a nie

With uczen1 do

Writeln(imie,' ',nazwisko,' ',mark[1]);

(Zmuszony) #3

:-x Argh! Taka głupota a cały dzień nad tym siedziałem! !!

Dzięki stary, życie mi ratujesz :smiley: