asmodeus94

rekordyDO

Mar 10th, 2012
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. program rekordy;
  2. uses crt;
  3. type
  4. dziennik=record
  5. nr : byte;
  6. nazwisko : string[20];
  7. ocena_polski : byte;
  8. ocena_matematyka : byte;
  9. ocena_mepr : byte;
  10. srednia : real;
  11. end;
  12. const
  13. n = 40;
  14. ileWklasie = n; {zakres numerow od 1 - ileWklasie}
  15. maxNaStr = 20; {ilosc rekordow na stronie}
  16. naStrX = 24; {pozycja (x) info ile jest na stronie}
  17. naStrY = 23; {pozycja (y) -||-}
  18. var osoba : array [1..n] of dziennik;
  19. kopiaOsobaRos : array [1..n] of dziennik;
  20. kopiaOsobaMal : array [1..n] of dziennik;
  21. schowek : dziennik; {schowek wartosci}
  22. x,wybor,nrOsoby,iloscPrzedmiotow,a,b,ktoreMenu,coSkopiuj,iluJest,licznik10 : integer;
  23. {po to, aby sie ladnie wyswietlalo}
  24. rosCzyMal : byte;
  25. rosMalInformuj,jakieInformuj : string;
  26. procedure menu(ktoreMenu : byte);
  27. begin
  28. case ktoreMenu of
  29. 1:begin gotoxy(26,9);TextBackGround(7);textcolor(red);
  30. write('Aktualnie jest ',iluJest,' osob w dzienniku');textcolor(7);TextBackGround(0);gotoxy(1,1);
  31. writeln('1 - wypelnij danej jednej osoby');
  32. writeln('2 - wyswietl dane jednej osoby');
  33. writeln('3 - wyswietl dane wszystkich osob');
  34. writeln('4 - wyswielt dane osoby o najwiekszej sredniej');
  35. writeln('5 - wyswietl dane osoby o najmniejszej sredniej');
  36. writeln('6 - Wyswietl od do...');
  37. writeln('7 - sortuj');
  38. writeln('8 - wyjscie');
  39. write('Twoj wybor: ');read(wybor);end;
  40. 2:begin clrscr;
  41. writeln('1 - sortuj wg indeksu');
  42. writeln('2 - sortuj wg numeru');
  43. writeln('3 - sortuj wg oceny z polskiego');
  44. writeln('4 - sortuj wg oceny z matematyki');
  45. writeln('5 - sortuj wg oceny z mepru');
  46. writeln('6 - sortuj wg srednich');
  47. writeln('7 - powrot do menu');end;
  48. 3:begin
  49. writeln('1 - sortuj rosnaco');
  50. writeln('2 - sortuj malejaco');end;
  51. end;
  52. end;
  53. procedure wypelnijLosowo;
  54. var y,rNr,jest : byte;
  55. begin randomize;
  56. for x:=1 to n-10 do begin
  57. REPEAT jest:=1;
  58. rNr:=random(ileWklasie)+1;
  59.     for y:=1 to x do begin
  60.         if rNr=osoba[y].nr then begin jest:=0;break;end;
  61.     end;
  62. UNTIL jest=1;
  63. osoba[x].Nr:=rNr;osoba[x].nazwisko:=chr(random(25)+61);
  64. osoba[x].ocena_polski:=random(6)+1;osoba[x].ocena_matematyka:=random(6)+1;
  65. osoba[x].ocena_mepr:=random(6)+1;
  66. osoba[x].srednia:=(osoba[x].ocena_polski+osoba[x].ocena_matematyka+osoba[x].ocena_mepr)/3;
  67. end;
  68. end;
  69. procedure jednaOsobaWpr;
  70. var z,zs,y,schowek,jest,enda : byte;
  71. begin jest:=0;
  72.       for x:=1 to n do begin
  73.           if osoba[x].nr=0 then begin jest:=1;break;end;end;
  74.           if jest=1 then begin
  75.           write('Podaj numer osoby: ');
  76.           REPEAT readln(schowek);UNTIL (0<schowek)AND(schowek<=ileWklasie);
  77.           enda:=1;
  78.               for y:=1 to n do begin
  79.                   if osoba[y].nr=schowek then begin
  80.                   write('Uczen o takim numerze juz istnieje (',osoba[y].nazwisko,')');
  81.                   readkey;enda:=0;break;end;
  82.               end;
  83.           if enda = 1 then begin
  84.           osoba[x].nr:=schowek;
  85.           write('Wpisz nazwisko: ');readln(osoba[x].nazwisko);
  86.           write('Wpisz ocene z polskiego: ');
  87.           REPEAT readln(osoba[x].ocena_polski);UNTIL (0<osoba[x].ocena_polski)AND(osoba[x].ocena_polski<7);
  88.           write('Wpisz ocene z matematyki: ');
  89.           REPEAT readln(osoba[x].ocena_matematyka);UNTIL (0<osoba[x].ocena_matematyka)AND(osoba[x].ocena_matematyka<7);
  90.           write('Wpisz ocene z mepr-u: ');
  91.           REPEAT readln(osoba[x].ocena_mepr);UNTIL (0<osoba[x].ocena_mepr)AND(osoba[x].ocena_mepr<7);
  92.           osoba[x].srednia:=(osoba[x].ocena_polski+osoba[x].ocena_matematyka+osoba[x].ocena_mepr)/iloscPrzedmiotow;
  93.           write('Dodano.');delay(1500);
  94.               for z:=1 to n do begin
  95.                    if kopiaOsobaRos[z].nr=0 then begin kopiaOsobaRos[z]:=osoba[x];break;end;
  96.               end;zs:=n;
  97.               for z:=1 to n do begin
  98.                    kopiaOsobaMal[z]:=kopiaOsobaRos[zs];
  99.               zs:=zs-1;
  100.               end;
  101.  
  102.           end;
  103.           end ELSE begin write('Dziennik zapelniony (maks: ',n,' osob)');readkey;end;
  104. end;
  105. procedure naglowek;
  106. begin
  107. gotoxy(10,1);write('Numer');gotoxy(16,1);write('Nazwisko');gotoxy(33,1);write('polski');gotoxy(40,1);write('matematyka');
  108. gotoxy(51,1);write('mepr');gotoxy(56,1);write('srednia');
  109. end;
  110. procedure jednaOsobaZcz;
  111. var jest : byte;
  112. begin jest:=0;
  113. if iluJest <> 0 then begin
  114. write('Podaj nr osoby: ');read(nrOsoby);
  115. for x:=1 to n do begin
  116.     if osoba[x].nr = nrOsoby then begin
  117.     write('Nr ',nrOsoby,' to ',osoba[x].nazwisko);
  118.     write(' ocena z polskiego: ',osoba[x].ocena_polski);
  119.     write(' ocena z matematyki: ',osoba[x].ocena_matematyka);
  120.     writeln(' ocena z mepr-u: ',osoba[x].ocena_mepr);write('srednia: ',osoba[x].srednia:2:2);
  121.     jest:=1;break;
  122.     end;
  123. end;if jest=0 then write('Nie ma ucznia o takim numerze.'); end  ELSE write('Pusto...'); end;
  124. {schowek do 3(2), 7(2), 8(1-6)}
  125. procedure bigSchowek(coSkopiuj : byte);
  126. begin
  127. case coSkopiuj of
  128. 0: begin
  129.    schowek:=osoba[x];osoba[x]:=osoba[x+1];osoba[x+1]:=schowek;
  130. end; {sortowanie (podmiana wartosci)}
  131. 1: begin gotoxy(naStrX,naStrY);write('Liczba rekordow na stronie: ',licznik10); end;
  132. 2:begin naglowek;
  133.     if osoba[x].nr <> 0 then begin
  134.        gotoxy(10,licznik10+1);write(osoba[x].nr);
  135.        gotoxy(16,licznik10+1);write(osoba[x].nazwisko);
  136.        gotoxy(33,licznik10+1);write(osoba[x].ocena_polski);
  137.        gotoxy(40,licznik10+1);write(osoba[x].ocena_matematyka);
  138.        gotoxy(51,licznik10+1);writeln(osoba[x].ocena_mepr);
  139.        gotoxy(56,licznik10+1);write(osoba[x].srednia:2:2);writeln;bigSchowek(1);
  140.     end;
  141. end; {wypisywanie}
  142. 3:begin naglowek;
  143.     if kopiaOsobaRos[x].nr <> 0 then begin
  144.        gotoxy(10,licznik10+1);write(kopiaOsobaRos[x].nr);
  145.        gotoxy(16,licznik10+1);write(kopiaOsobaRos[x].nazwisko);
  146.        gotoxy(33,licznik10+1);write(kopiaOsobaRos[x].ocena_polski);
  147.        gotoxy(40,licznik10+1);write(kopiaOsobaRos[x].ocena_matematyka);
  148.        gotoxy(51,licznik10+1);writeln(kopiaOsobaRos[x].ocena_mepr);
  149.        gotoxy(56,licznik10+1);write(kopiaOsobaRos[x].srednia:2:2);writeln;bigSchowek(1);
  150.     end;
  151. end; {wypisywanie kopia rosnaco}
  152. 4:begin naglowek;
  153.     if kopiaOsobaMal[x].nr <> 0 then begin
  154.        gotoxy(10,licznik10+1);write(kopiaOsobaMal[x].nr);
  155.        gotoxy(16,licznik10+1);write(kopiaOsobaMal[x].nazwisko);
  156.        gotoxy(33,licznik10+1);write(kopiaOsobaMal[x].ocena_polski);
  157.        gotoxy(40,licznik10+1);write(kopiaOsobaMal[x].ocena_matematyka);
  158.        gotoxy(51,licznik10+1);writeln(kopiaOsobaMal[x].ocena_mepr);
  159.        gotoxy(56,licznik10+1);write(kopiaOsobaMal[x].srednia:2:2);writeln;bigSchowek(1);
  160.     end;
  161. end; {wypisywanie kopia malejaco}
  162. end;
  163. end;
  164. procedure wysWszystkich;
  165. begin licznik10:=0;clrscr;
  166. if iluJest <> 0 then begin
  167.     for x:=1 to n do begin
  168.         if osoba[x].nr <> 0 then licznik10:=licznik10+1;
  169.         if licznik10 = MaxNaStr+1 then begin licznik10:=1;
  170.         gotoxy(75,25);write('>>>');readkey;clrscr;naglowek;writeln;
  171.         end;coSkopiuj:=2;
  172.         bigSchowek(coSkopiuj);
  173.      end;
  174. end ELSE write('Pusto...');
  175. end;
  176. procedure najwiekszaSr;
  177. var poz,jest2 : byte;
  178. max : real;
  179. begin jest2:=0;max:=1;
  180. for x:=1 to n do begin
  181.     if (osoba[x].srednia>max)AND(osoba[x].srednia<>0)AND(osoba[x].nr<>0) then begin max:=osoba[x].srednia;poz:=x;jest2:=1;end;
  182. end;
  183. if jest2 = 1 then begin write('Najwieksza srednia ma nr ',osoba[poz].nr,'. (',osoba[poz].nazwisko);
  184. write(') i wynosi ona: ',osoba[poz].srednia:2:2);end
  185. ELSE write('Pusto...');
  186. end;
  187. procedure najmniejszaSr;
  188. var poz,jest : byte;
  189. min : real;
  190. begin jest:=0;min:=10;
  191. for x:=1 to n do begin
  192.     if (osoba[x].srednia<min)AND(osoba[x].srednia<>0)AND(osoba[x].nr<>0) then begin min:=osoba[x].srednia;poz:=x;jest:=1;end;
  193. end;
  194. if jest = 1 then begin write('Najmniejsza srednia ma nr ',osoba[poz].nr,'. (',osoba[poz].nazwisko);
  195. write(') i wynosi ona: ',osoba[poz].srednia:2:2);end
  196. ELSE write('Pusto...');
  197. end;
  198. procedure wyswietlOdDo(a,b : byte);
  199. var jest : byte;
  200. begin licznik10:=0;jest:=0;
  201. for x:=a to b do begin
  202.     if osoba[x].nr <> 0 then begin jest:=1;
  203.     licznik10:=licznik10+1;
  204.     if licznik10 = maxNaStr+1 then begin licznik10:=1;
  205.         gotoxy(75,25);write('>>>');readkey;clrscr;naglowek;writeln;
  206.         end;coSkopiuj:=2;
  207.         bigSchowek(coSkopiuj);
  208.     end;
  209. end;
  210. if jest = 0 then write('Nie ma nikogo w tym przedziale');
  211. end;
  212. procedure kopiaZapasowa;
  213. var y,yP : byte;
  214. begin
  215. for y:=1 to n do begin
  216.     kopiaOsobaRos[y]:=osoba[y];
  217. end;
  218. yP:=n;
  219. for y:=1 to n do begin
  220.     kopiaOsobaMal[y]:=osoba[yP];
  221.     yP:=yP-1;
  222. end;
  223. end;
  224. procedure ileJestNaLiscie;
  225. begin iluJest:=0;
  226. for x:=1 to n do begin
  227.     if osoba[x].nr <> 0 then iluJest:=iluJest+1;
  228. end;
  229. end;
  230. procedure sortowanie;
  231. var y,jakieSortowanie : byte;
  232. begin
  233. REPEAT clrscr;
  234. ktoreMenu:=2;menu(ktoreMenu);
  235. write('Twoj wybor: ');REPEAT read(wybor); UNTIL (0<wybor)AND(wybor<8);clrscr;
  236. jakieSortowanie:=wybor;
  237. if (0<jakieSortowanie)AND(jakieSortowanie<7) then begin
  238. ktoreMenu:=3;menu(ktoreMenu);write('Twoj wybor: ');REPEAT read(wybor); UNTIL (0<wybor)AND(wybor<3);
  239. rosCzyMal:=wybor;clrscr;gotoxy(1,2);
  240. licznik10:=0;
  241. case jakieSortowanie of
  242. 1:begin jakieInformuj:='indeksu';
  243.      for x:=1 to n do begin
  244.          if rosCzyMal=1 then begin
  245.          coSkopiuj:=3;
  246.          osoba[x]:=kopiaOsobaRos[x];
  247.               if kopiaOsobaRos[x].nr <> 0 then licznik10:=licznik10+1;
  248.          end ELSE begin
  249.                   osoba[x]:=kopiaOsobaMal[x];coSkopiuj:=4;
  250.                        if kopiaOsobaMal[x].nr <> 0 then licznik10:=licznik10+1;
  251.                   end;
  252.               if licznik10 = maxNaStr+1 then begin licznik10:=1;
  253.               gotoxy(75,25);write('>>>');readkey;clrscr;writeln;
  254.               end;
  255.          bigSchowek(coSkopiuj);
  256.      end;
  257. end;
  258. 2:begin jakieInformuj:='numeru';
  259.      for y:=1 to n-1 do begin
  260.          for x:=1 to n-1 do begin
  261.              case rosCzyMal of
  262.              1:begin
  263.                   if osoba[x].nr>osoba[x+1].nr then begin
  264.                      schowek:=osoba[x];osoba[x]:=osoba[x+1];osoba[x+1]:=schowek;
  265.                   end;
  266.              end;
  267.              2:begin
  268.                   if osoba[x].nr<osoba[x+1].nr then begin
  269.                      schowek:=osoba[x];osoba[x]:=osoba[x+1];osoba[x+1]:=schowek;
  270.                   end;
  271.              end;
  272.              end;
  273.          end;
  274.      end;
  275.     for x:=1 to n do begin
  276.         if osoba[x].nr <> 0 then licznik10:=licznik10+1;
  277.         if licznik10 = maxNaStr+1 then begin licznik10:=1;
  278.         gotoxy(75,25);write('>>>');readkey;clrscr;writeln;
  279.         end;coSkopiuj:=2;
  280.          bigSchowek(coSkopiuj);
  281.      end;
  282. end;
  283. 3:begin jakieInformuj:='oceny z polskiego';
  284.      for y:=1 to n-1 do begin
  285.          for x:=1 to n-1 do begin
  286.              case rosCzyMal of
  287.              1:begin
  288.                   if osoba[x].ocena_polski>osoba[x+1].ocena_polski then begin
  289.                      schowek:=osoba[x];osoba[x]:=osoba[x+1];osoba[x+1]:=schowek;
  290.                   end;
  291.              end;
  292.              2:begin
  293.                   if osoba[x].ocena_polski<osoba[x+1].ocena_polski then begin
  294.                      schowek:=osoba[x];osoba[x]:=osoba[x+1];osoba[x+1]:=schowek;
  295.                   end;
  296.              end;
  297.              end;
  298.          end;
  299.      end;
  300.     for x:=1 to n do begin
  301.         if osoba[x].nr <> 0 then licznik10:=licznik10+1;
  302.         if licznik10 = maxNaStr+1 then begin licznik10:=1;
  303.         gotoxy(75,25);write('>>>');readkey;clrscr;writeln;
  304.         end;coSkopiuj:=2;
  305.          bigSchowek(coSkopiuj);
  306.      end;
  307. end;
  308. 4:begin jakieInformuj:='oceny z matematyki';
  309.      for y:=1 to n-1 do begin
  310.          for x:=1 to n-1 do begin
  311.              case rosCzyMal of
  312.              1:begin
  313.                   if osoba[x].ocena_matematyka>osoba[x+1].ocena_matematyka then begin
  314.                      schowek:=osoba[x];osoba[x]:=osoba[x+1];osoba[x+1]:=schowek;
  315.                   end;
  316.              end;
  317.              2:begin
  318.                   if osoba[x].ocena_matematyka<osoba[x+1].ocena_matematyka then begin
  319.                      schowek:=osoba[x];osoba[x]:=osoba[x+1];osoba[x+1]:=schowek;
  320.                   end;
  321.              end;
  322.              end;
  323.          end;
  324.      end;
  325.     for x:=1 to n do begin
  326.         if osoba[x].nr <> 0 then licznik10:=licznik10+1;
  327.         if licznik10 = maxNaStr+1 then begin licznik10:=1;
  328.         gotoxy(75,25);write('>>>');readkey;clrscr;writeln;
  329.         end;coSkopiuj:=2;
  330.          bigSchowek(coSkopiuj);
  331.      end;
  332. end;
  333. 5:begin jakieInformuj:='oceny z mepru';
  334.      for y:=1 to n-1 do begin
  335.          for x:=1 to n-1 do begin
  336.              case rosCzyMal of
  337.              1:begin
  338.                   if osoba[x].ocena_mepr>osoba[x+1].ocena_mepr then begin
  339.                      schowek:=osoba[x];osoba[x]:=osoba[x+1];osoba[x+1]:=schowek;
  340.                   end;
  341.              end;
  342.              2:begin
  343.                   if osoba[x].ocena_mepr<osoba[x+1].ocena_mepr then begin
  344.                      schowek:=osoba[x];osoba[x]:=osoba[x+1];osoba[x+1]:=schowek;
  345.                   end;
  346.              end;
  347.              end;
  348.          end;
  349.      end;
  350.     for x:=1 to n do begin
  351.         if osoba[x].nr <> 0 then licznik10:=licznik10+1;
  352.         if licznik10 = maxNaStr+1 then begin licznik10:=1;
  353.         gotoxy(75,25);write('>>>');readkey;clrscr;writeln;
  354.         end;coSkopiuj:=2;
  355.          bigSchowek(coSkopiuj);
  356.      end;
  357. end;
  358. 6:begin jakieInformuj:='sredniej';
  359.      for y:=1 to n-1 do begin
  360.          for x:=1 to n-1 do begin
  361.              case rosCzyMal of
  362.              1:begin
  363.                   if osoba[x].srednia>osoba[x+1].srednia then begin
  364.                      schowek:=osoba[x];osoba[x]:=osoba[x+1];osoba[x+1]:=schowek;
  365.                   end;
  366.              end;
  367.              2:begin
  368.                   if osoba[x].srednia<osoba[x+1].srednia then begin
  369.                      schowek:=osoba[x];osoba[x]:=osoba[x+1];osoba[x+1]:=schowek;
  370.                   end;
  371.              end;
  372.              end;
  373.      end;
  374. end;
  375.     for x:=1 to n do begin
  376.         if osoba[x].nr <> 0 then licznik10:=licznik10+1;
  377.         if licznik10 = maxNaStr+1 then begin licznik10:=1;
  378.         gotoxy(75,25);write('>>>');readkey;clrscr;writeln;
  379.         end;coSkopiuj:=2;
  380.          bigSchowek(coSkopiuj);
  381.      end;
  382. end;
  383. end;
  384. readkey;end;
  385. UNTIL jakieSortowanie=7;
  386. end;
  387. procedure all;
  388. begin wypelnijLosowo;kopiaZapasowa;
  389. iloscPrzedmiotow:=3;
  390. REPEAT ileJestNaLiscie;
  391. ktoreMenu:=1;menu(ktoreMenu);
  392. case wybor of
  393. 1:begin jednaOsobaWpr;end;
  394. 2:begin jednaOsobaZcz;readkey;end;
  395. 3:begin wysWszystkich;readkey;end;
  396. 4:begin najwiekszaSr;readkey;end;
  397. 5:begin najmniejszaSr;readkey;end;
  398. 6:begin
  399. if iluJest<>0 then begin
  400. REPEAT
  401. write('Podaj od ktorego nr indeksu: ');read(a);write('Do ktorego numeru indeksu: ');read(b);clrscr;
  402. UNTIL (0<b)AND(0<a)AND(a<=b)AND(a>0)AND(b<=n);wyswietlOdDo(a,b);readkey;end ELSE
  403. begin write('Pusto...');readkey;end;
  404. end;
  405. 7:begin if iluJest <> 0 then begin ktoreMenu:=2;menu(ktoreMenu);sortowanie;end ELSE begin
  406. write('Pusto...');readkey;end;
  407. end;
  408. end;
  409. clrscr;
  410. UNTIL wybor=8;
  411. end;{eng...}
  412. begin clrscr;
  413. all;
  414. end.
Advertisement
Add Comment
Please, Sign In to add comment