- program zadanie1;
- uses
- crt;
- type
- wsk = ^element;
- element = record
- imie : string;
- nazwisko : string;
- klasa : string;
- wf : integer;
- polski : integer;
- angielski : integer;
- avg : real;
- prev : wsk;
- next : wsk;
- end;
- nodeList = ^k;
- k = record
- first : wsk;
- last: wsk;
- aktualny: wsk;
- end;
- var
- lista: nodeList;
- a,b,c : string;
- d,e,f : integer;
- key: integer;
- procedure showActual(var lista: nodeList); // definiuje elementy aktualnego skladnika
- begin
- writeln(lista^.aktualny^.imie);
- writeln(lista^.aktualny^.nazwisko);
- writeln(lista^.aktualny^.klasa);
- writeln(lista^.aktualny^.wf);
- writeln(lista^.aktualny^.polski);
- writeln(lista^.aktualny^.angielski);
- writeln(lista^.aktualny^.avg);
- end;
- procedure createList(var lista : nodeList); // tworzy nowa liste
- begin
- lista^.first := nil;
- lista^.last := nil;
- lista^.aktualny := nil;
- end;
- procedure deleteList(var lista : nodeList); // kasuje liste skladnikow
- var
- tmp: wsk;
- begin
- lista^.aktualny := lista^.first;
- while lista^.aktualny <> nil do
- begin
- tmp := lista^.aktualny^.next;
- dispose(lista^.aktualny);
- lista^.aktualny := tmp;
- end
- end;
- procedure readList(var lista : wsk); // wyswietla lista skladnikow
- var
- tmp : wsk;
- begin
- writeln('Dziennik Uczniow:');
- tmp := lista;
- while tmp <> nil do
- begin
- writeln(' Uczen: ',tmp^.imie,' ',tmp^.nazwisko);
- writeln(' => ','Klasa: ',tmp^.klasa);
- writeln(' => ','Ocena z wf: ',tmp^.wf);
- writeln(' => ','Ocena z polskiego: ',tmp^.polski);
- writeln(' => ','Ocena z angielskiego: ',tmp^.angielski);
- writeln(' => ','Srednia z ocen: ',tmp^.avg:0:2);
- writeln(' ');
- tmp := tmp^.next;
- end;
- writeln;
- end;
- procedure dodajFront(var lista : nodeList; nowy: wsk); // dodaje pierwszy skladnik
- begin
- lista^.first := nowy;
- nowy^.next := lista^.aktualny;
- lista^.aktualny^.next := nowy;
- nowy^.prev := nil;
- lista^.aktualny := nowy;
- end;
- procedure dodajInside(var lista : nodeList; nowy: wsk); // dodaje nastepny skladnik,gdy pierwszy jest stworzony
- begin
- lista^.aktualny^.prev^.next := nowy;
- nowy^.next := lista^.aktualny;
- nowy^.prev := lista^.aktualny^.prev;
- lista^.aktualny^.prev := nowy;
- end;
- procedure dodajEnd(var lista: nodeList; nowy: wsk); // dodaje skladnik na koncu
- begin
- if lista^.first = nil then
- lista^.first := nowy
- else
- begin
- lista^.last^.next := nowy;
- nowy^.prev := lista^.last;
- end;
- lista^.last := nowy;
- end;
- // DODAWANIE
- procedure dodaj(var lista: nodeList; wart,wart1,wart2: string; wart3,wart4,wart5 : integer);
- var
- nowy: wsk;
- suma,suma1 : real;
- begin
- new(nowy);
- nowy^.imie := wart;
- nowy^.nazwisko := wart1;
- nowy^.klasa := wart2;
- nowy^.wf := wart3;
- nowy^.polski := wart4;
- nowy^.angielski := wart5;
- suma:=wart3+wart4+wart5;
- suma1:=suma/3;
- nowy^.avg:= suma1;
- if lista^.aktualny <> nil then
- begin
- if lista^.aktualny = lista^.first then
- dodajFront(lista, nowy)
- else
- dodajInside(lista, nowy)
- end
- else
- dodajEnd(lista, nowy)
- end;
- procedure usunFront(var lista: nodeList); // usuwa pierwszy skladnik listy
- begin
- lista^.first := lista^.first^.next;
- write('Usunieto skladnik ');
- showActual(lista);
- dispose(lista^.aktualny);
- lista^.aktualny := lista^.first;
- if lista^.first <> nil then
- lista^.first^.prev := nil
- else
- lista^.last := nil
- end;
- procedure usunInside(var lista: nodeList); // usuwa kolejny skladnik listy
- var
- tmp: wsk;
- begin
- tmp := lista^.aktualny^.prev;
- tmp^.next:= lista^.aktualny^.next;
- lista^.aktualny^.next^.prev := tmp;
- write('Usunieto skladnik ');
- showActual(lista);
- dispose(lista^.aktualny);
- lista^.aktualny := tmp;
- end;
- procedure usunEnd(var lista: nodeList); // usuwa ostatni skladnik listy
- var
- tmp: wsk;
- begin
- tmp := lista^.aktualny^.prev;
- tmp^.next := nil;
- lista^.last := tmp;
- write('Usunięto skladnik ');
- showActual(lista);
- dispose(lista^.aktualny);
- lista^.aktualny := nil;
- end;
- // USUWANIE
- procedure usun(var lista : nodeList);
- begin
- if lista^.aktualny = nil then
- if lista^.aktualny = lista^.first then
- usunFront(lista)
- else
- begin
- if lista^.aktualny = lista^.last then
- usunEnd(lista)
- else
- usunInside(lista)
- end
- end;
- // MAIN BLOCK
- begin
- new(lista);
- createList(lista);
- while 1<>0 do
- begin
- clrscr;
- writeln('1 - Dodaj ucznia do listy');
- writeln('2 - Usun ucznia w listy');
- writeln('3 - Wypisz liste uczniow');
- writeln('4 - Zakoncz');
- readln(key);
- case key of
- 1:begin
- writeln('Podaj imie: ');
- readln(a);
- writeln('Podaj nazwisko: ');
- readln(b);
- writeln('Podaj klase: ');
- readln(c);
- writeln('Podaj ocene z w-f: ');
- readln(d);
- writeln('Podaj ocene z polskiego: ');
- readln(e);
- writeln('Podaj ocene z angielskiego: ');
- readln(f);
- dodaj(lista, a,b,c,d,e,f);
- end;
- 2:begin
- usun(lista);
- end;
- 3: begin
- readList(lista^.first);
- readln(key);
- end;
- 4:break;
- end;
- end;
- deleteList(lista);
- end.