Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Jul 11th, 2012  |  syntax: None  |  size: 6.28 KB  |  hits: 23  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. program zadanie1;
  2.  
  3. uses
  4.     crt;
  5.  
  6. type
  7.     wsk = ^element;
  8.     element = record
  9.             imie : string;
  10.             nazwisko : string;
  11.             klasa : string;
  12.             wf : integer;
  13.             polski : integer;
  14.             angielski : integer;
  15.             avg : real;
  16.             prev : wsk;
  17.             next : wsk;
  18. end;
  19.  
  20.     nodeList = ^k;
  21.     k = record
  22.             first : wsk;
  23.             last: wsk;
  24.             aktualny: wsk;
  25. end;
  26.  
  27. var
  28.    lista: nodeList;
  29.    a,b,c : string;
  30.    d,e,f : integer;
  31.    key: integer;
  32.  
  33. procedure showActual(var lista: nodeList); // definiuje elementy aktualnego skladnika
  34.  
  35. begin
  36.      writeln(lista^.aktualny^.imie);
  37.      writeln(lista^.aktualny^.nazwisko);
  38.      writeln(lista^.aktualny^.klasa);
  39.      writeln(lista^.aktualny^.wf);
  40.      writeln(lista^.aktualny^.polski);
  41.      writeln(lista^.aktualny^.angielski);
  42.      writeln(lista^.aktualny^.avg);
  43. end;
  44.  
  45. procedure createList(var lista : nodeList);  // tworzy nowa liste
  46.  
  47. begin
  48.      lista^.first := nil;
  49.      lista^.last := nil;
  50.      lista^.aktualny := nil;
  51. end;
  52.  
  53. procedure deleteList(var lista : nodeList); // kasuje liste skladnikow
  54.  
  55. var
  56.    tmp: wsk;
  57.  
  58. begin
  59.      lista^.aktualny := lista^.first;
  60.      while lista^.aktualny <> nil do
  61.            begin
  62.                 tmp := lista^.aktualny^.next;
  63.                 dispose(lista^.aktualny);
  64.                 lista^.aktualny := tmp;
  65.            end
  66. end;
  67.  
  68. procedure readList(var lista : wsk); // wyswietla lista skladnikow
  69.  
  70. var
  71.    tmp : wsk;
  72.  
  73. begin
  74.      writeln('Dziennik Uczniow:');
  75.      tmp := lista;
  76.      while tmp <> nil do
  77.            begin
  78.                 writeln(' Uczen: ',tmp^.imie,'  ',tmp^.nazwisko);
  79.                 writeln(' => ','Klasa: ',tmp^.klasa);
  80.                 writeln(' => ','Ocena z wf: ',tmp^.wf);
  81.                 writeln(' => ','Ocena z polskiego: ',tmp^.polski);
  82.                 writeln(' => ','Ocena z angielskiego: ',tmp^.angielski);
  83.                 writeln(' => ','Srednia z ocen: ',tmp^.avg:0:2);
  84.                 writeln(' ');
  85.                 tmp := tmp^.next;
  86.            end;
  87.      writeln;
  88. end;
  89.  
  90. procedure dodajFront(var lista : nodeList; nowy: wsk);  // dodaje pierwszy skladnik
  91.  
  92. begin
  93.      lista^.first := nowy;
  94.      nowy^.next := lista^.aktualny;
  95.      lista^.aktualny^.next := nowy;
  96.      nowy^.prev := nil;
  97.      lista^.aktualny := nowy;
  98. end;
  99.  
  100. procedure dodajInside(var lista : nodeList; nowy: wsk);  // dodaje nastepny skladnik,gdy pierwszy jest stworzony
  101.  
  102. begin
  103.      lista^.aktualny^.prev^.next := nowy;
  104.      nowy^.next := lista^.aktualny;
  105.      nowy^.prev := lista^.aktualny^.prev;
  106.      lista^.aktualny^.prev := nowy;
  107. end;
  108.  
  109. procedure dodajEnd(var lista: nodeList; nowy: wsk); // dodaje skladnik na koncu
  110.  
  111. begin
  112.      if lista^.first = nil then
  113.         lista^.first := nowy
  114.      else
  115.          begin
  116.               lista^.last^.next := nowy;
  117.               nowy^.prev := lista^.last;
  118.          end;
  119.      lista^.last := nowy;
  120. end;
  121.  
  122. // DODAWANIE
  123.  
  124. procedure dodaj(var lista: nodeList; wart,wart1,wart2: string; wart3,wart4,wart5 : integer);
  125.  
  126. var
  127.    nowy: wsk;
  128.    suma,suma1 : real;
  129.  
  130. begin
  131.      new(nowy);
  132.      nowy^.imie := wart;
  133.      nowy^.nazwisko := wart1;
  134.      nowy^.klasa := wart2;
  135.      nowy^.wf := wart3;
  136.      nowy^.polski := wart4;
  137.      nowy^.angielski := wart5;
  138.      suma:=wart3+wart4+wart5;
  139.      suma1:=suma/3;
  140.      nowy^.avg:= suma1;
  141.      if lista^.aktualny <> nil then
  142.         begin
  143.              if lista^.aktualny = lista^.first then
  144.                 dodajFront(lista, nowy)
  145.              else
  146.                  dodajInside(lista, nowy)
  147.         end
  148.      else
  149.          dodajEnd(lista, nowy)
  150. end;
  151.  
  152. procedure usunFront(var lista: nodeList);   // usuwa pierwszy skladnik listy
  153.  
  154. begin
  155.      lista^.first := lista^.first^.next;
  156.      write('Usunieto skladnik ');
  157.      showActual(lista);
  158.      dispose(lista^.aktualny);
  159.      lista^.aktualny := lista^.first;
  160.      if lista^.first <> nil then
  161.         lista^.first^.prev := nil
  162.      else
  163.          lista^.last := nil
  164. end;
  165.  
  166. procedure usunInside(var lista: nodeList);  // usuwa kolejny skladnik listy
  167.  
  168. var
  169.      tmp: wsk;
  170.  
  171. begin
  172.      tmp := lista^.aktualny^.prev;
  173.      tmp^.next:= lista^.aktualny^.next;
  174.      lista^.aktualny^.next^.prev := tmp;
  175.      write('Usunieto skladnik ');
  176.      showActual(lista);
  177.      dispose(lista^.aktualny);
  178.      lista^.aktualny := tmp;
  179. end;
  180.  
  181. procedure usunEnd(var lista: nodeList);   // usuwa ostatni skladnik listy
  182.  
  183. var
  184.    tmp: wsk;
  185. begin
  186.      tmp := lista^.aktualny^.prev;
  187.      tmp^.next := nil;
  188.      lista^.last := tmp;
  189.      write('Usunięto skladnik ');
  190.      showActual(lista);
  191.      dispose(lista^.aktualny);
  192.      lista^.aktualny := nil;
  193. end;
  194.  
  195. // USUWANIE
  196.  
  197. procedure usun(var lista : nodeList);
  198.  
  199. begin
  200.      if lista^.aktualny = nil then
  201.         if lista^.aktualny = lista^.first then
  202.            usunFront(lista)
  203.         else
  204.             begin
  205.                  if lista^.aktualny = lista^.last then
  206.                     usunEnd(lista)
  207.                  else
  208.                      usunInside(lista)
  209.             end
  210. end;
  211.  
  212. // MAIN BLOCK
  213.  
  214. begin
  215.      new(lista);
  216.      createList(lista);
  217.      while 1<>0 do
  218.          begin
  219.            clrscr;
  220.            writeln('1 - Dodaj ucznia do listy');
  221.            writeln('2 - Usun ucznia w listy');
  222.            writeln('3 - Wypisz liste uczniow');
  223.            writeln('4 - Zakoncz');
  224.            readln(key);
  225.            case key of
  226.                 1:begin
  227.                      writeln('Podaj imie: ');
  228.                      readln(a);
  229.                      writeln('Podaj nazwisko: ');
  230.                      readln(b);
  231.                      writeln('Podaj klase: ');
  232.                      readln(c);
  233.                      writeln('Podaj ocene z w-f: ');
  234.                      readln(d);
  235.                      writeln('Podaj ocene z polskiego: ');
  236.                      readln(e);
  237.                      writeln('Podaj ocene z angielskiego: ');
  238.                      readln(f);
  239.                      dodaj(lista, a,b,c,d,e,f);
  240.                 end;
  241.  
  242.                 2:begin
  243.                      usun(lista);
  244.                 end;
  245.                 3: begin
  246.                      readList(lista^.first);
  247.                      readln(key);
  248.                 end;
  249.                 4:break;
  250.            end;
  251.          end;
  252.      deleteList(lista);
  253. end.