{ Doplňte kód procedur, načtěte několik zaměstnanců (nejméně 4), pak vypište - všechny dojíždějící motorovými prostředky - všechny zaměstnance účtárny - všechny, kdo pracují ve výrobě a zároveň jsou mladší 20 let (vždy vypište zadanou tabulku, pak čekejte na stisknutí jakékoliv klávesy, zobrazte další tabulku, ...). Potom vypište všechny zaměstnance, zeptejte se, kterého propustit, proveďte a znovu všechny vypište. Vyzkoušejte na druhém zaměstnanci v pořadí. P. S. Něco je nutné přidat také na začátek, aby program fungoval. } program Zamestnanci; uses crt; type TDoprava = (pesky, vlak, auto, bus, kolo, kolobezka); TOddeleni = (vyroba, uctarna, pokladna, vedeni); TNazev = string[20]; TZamestnanec = record prijmeni, jmeno: TNazev; oddeleni: TOddeleni; eCislo: word; doprava: TDoprava; { doprava do zamestnani } narozen: word; { rok narozeni } end; const dojizdejici: set of TDoprava = [vlak, auto, bus]; dProstredky: set of TDoprava = [vlak, auto, bus, kolo, kolobezka]; MaxZam = 22; var zam: array [1..MaxZam] of TZamestnanec; pocetZam: byte; procedure VypisHlavicku; { smaze obrazovku a vypise hlavicku tabulky ve tvaru Prijmeni Jmeno Oddeleni Cislo Doprava Narozen a zaradkuje (tedy pouzije writeln) } begin clrscr; writeln('Prijmeni Jmeno Oddeleni Cislo Doprava Narozen'); writeln('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'); end; procedure VypisZamestnance(z: TZamestnanec); { vypise udaje o zadanem zamestnanci zarovnane podle hlavicky, pak zaradkuje } function Zarovnej(s: TNazev; na_delku: byte): string; { vnorena funkce, ktera vrati retezec zarovnany na zadanou delku } var delka, j: byte; begin delka := length(s); if delka > na_delku then Delete(s, na_delku+1, delka-na_delku) else if delka < na_delku then for j := delka+1 to na_delku do s := s + ' '; Zarovnej := s; end; begin with z do begin write(Zarovnej(prijmeni,20), Zarovnej(jmeno,20)); case oddeleni of vyroba: write('vyroba '); uctarna: write('uctarna '); pokladna: write('pokladna '); vedeni: write('vedeni '); end; write(eCislo:5,' '); case doprava of pesky: write('pesky '); vlak: write('vlak '); auto: write('auto '); bus: write('autobus '); kolo: write('kolo '); kolobezka: write('kolobezka '); end; writeln(narozen:5); end; end; procedure NactiZamestnance; { smaze obrazovku, zjisti, zda pocet zamestnancu jeste neni na maximu, jestlize ne, postupne nacita jednotlive udaje o zamestnanci, uklada je na nejblizsi volne misto v poli zamestnanců a nezapomene zvysit hodnotu promenne pocetZam } var c: char; begin if pocetZam < MaxZam then begin clrscr; inc(pocetZam); with zam[pocetZam] do begin write('Jmeno: '); readln(jmeno); write('Prijmeni: '); readln(prijmeni); writeln('Oddeleni'); write('(u: uctarna, p: pokladna, v: vedeni, jinak vyroba)'); c := readkey; case c of 'u': oddeleni := uctarna; 'p': oddeleni := pokladna; 'v': oddeleni := vedeni; else oddeleni := vyroba; end; writeln; write('Evidencni cislo: '); readln(eCislo); writeln('Doprava do zamestnani'); write('(p: pesky, v: vlak, a: auto, b: bus, k: kolo, jinak kolobezka)'); c := readkey; case c of 'p': doprava := pesky; 'v': doprava := vlak; 'a': doprava := auto; 'b': doprava := bus; 'k': doprava := kolo; else doprava := kolobezka; end; writeln; write('Rok narozeni: '); readln(narozen); write('Diky za snahu, zamestnanec prijat'); readkey; end; end; end; procedure PropustZamestnance(ktery: byte); { Jestlize existuje zamestnanec s timto poradovym cislem (tzn. cislo je mensi nebo rovno pocetZam), posune na jeho misto nasledujiciho zamestnance, na misto toho nasledujiciho dalsiho, ... az na konec pole, pak snizi pocet zamestnancu } var i: byte; begin if (ktery > 0) and (ktery <= pocetZam) then begin for i := ktery+1 to pocetZam do with zam[i-1] do begin jmeno := zam[i].jmeno; prijmeni := zam[i].prijmeni; oddeleni := zam[i].oddeleni; eCislo := zam[i].eCislo; doprava := zam[i].doprava; narozen := zam[i].narozen; end; dec(pocetZam); end; end; begin pocetZam := 0; for i := 1 to 4 do NactiZamestnance; VypisHlavicku; for i := 1 to pocetZam do if (zam[i].doprava in dojizdejici) then VypisZamestnance(zam[i]); writeln; write('Vypsani vsichni, kdo dojizdi motorovymi prostredky.'); readkey; VypisHlavicku; for i := 1 to pocetZam do if (zam[i].oddeleni = uctarna) then VypisZamestnance(zam[i]); writeln; write('Vypsani vsichni, kdo pracuji v uctarne.'); readkey; VypisHlavicku; for i := 1 to pocetZam do with zam[i] do if (oddeleni = vyroba) and ((2002-narozen)<20) then VypisZamestnance(zam[i]); writeln; write('Vypsani vsichni, kdo pracuji ve vyrobe a je jim mene nez 20 let.'); readkey; VypisHlavicku; for i := 1 to pocetZam do VypisZamestnance(zam[i]); writeln; write('Koho propustit? (zadejte poradove cislo) '); readln(i); PropustZamestnance(i); VypisHlavicku; for i := 1 to pocetZam do VypisZamestnance(zam[i]); readln; end.