asmodeus94

rekordy (nNNn)

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