program jedlo; uses crt; { program pre vypocet kalorickej hodnoty stravy. Na zaklade zaklade zvoleneho jedla z jedalnicka vypocita celkovu kaloricku hodnotu v kJ. Popis vstupov a vystupov : Najskor sa vypise ponuka vsetkych jedal. Potom sa ponukaju jednotlive jedla a uzivatel odpoveda celym cislom. Hodnoty 0 .. n urcuju , kolko udanych jednotiek si vybral. Vyber jedal je ukonceny zadanim zaporneho cisla. Uzivatel moze ponukane jedla prechadzat pri objednavke aj niekolkokrat. Nakoniec je vypisany zoznam vybranych jedal s prislusnou kalorickou hodnotou a celkova kaloricka hodnota. Program je upraveny zo zdroja : T.Hruska - Pascal pro zacatecniky , SNTL 1989 program 7.2 , strana 165 az 169 } type JEDLA = (VLSALAT,SARDINKY,ZAVINAC,SLANINA,HERMELIN, EIDAM,TVAROZKY,MASLO,KLOBASY,PARKY,UHORSAM, UDENE,JAHDZEM,MARDZEM,SACHR,BABOVKA,ROHLIK, CAJ,MUST,DZUS,PLZENSKE); TYPJOULY = 0 .. 2147483647; { typ kalorickej hodnoty } TYPPONUKA = string[30]; {** v originali packed array[1..30] of char ** } { retazec pre popis ponuky } TYPOBJED = 0 .. 2147483647 ; { typ objednaneho poctu kusov } ZOZJOULY = array[JEDLA] of TYPJOULY; { zoznam kalorickych hodnot } ZOZPONUKA = array[JEDLA] of TYPPONUKA; { zoznam popisov jedal } ZOZOBJED = array[JEDLA] of TYPOBJED; { zoznam objednanych poctov } var JOULY : ZOZJOULY ; { kaloricke hodnoty } PONUKA: ZOZPONUKA ; { popis jedal } OBJEDNAVKA : ZOZOBJED ; { objednane pocty jedal} procedure POCATHODNOTY(var JOULY:ZOZJOULY; var PONUKA:ZOZPONUKA; var OBJEDNAVKA:ZOZOBJED); { nastavenie pociatocnych hodnot } var i : JEDLA ; { riadiaca premenna } begin { POCIATOCNEHODNOTY } PONUKA[VLSALAT] := '100 g Vlassky salat '; PONUKA[SARDINKY] := '100 g Sardinky v oleji '; PONUKA[ZAVINAC] := '100 g Zavinace '; PONUKA[SLANINA] := '100 g Anglicka slanina '; PONUKA[HERMELIN] := '100 g HERMELIN - syr '; PONUKA[EIDAM] := '100 g Syr EIDAM '; PONUKA[TVAROZKY] := '100 g Olomoucke tvarozky '; PONUKA[MASLO] := ' 50 g Maslo vyberove '; PONUKA[KLOBASY] := '100 g Moravske klobasy '; PONUKA[PARKY] := '100 g Jemne parky '; PONUKA[UHORSAM] := '100 g Uhorsky salam '; PONUKA[UDENE] := '100 g Moravske udene '; PONUKA[JAHDZEM] := ' 50 g Jahodovy dzem '; PONUKA[MARDZEM] := ' 50 g Marhulovy dzem '; PONUKA[SACHR] := ' 1 ks Sahrova torta '; PONUKA[BABOVKA] := ' 1 ks Trena babovka '; PONUKA[ROHLIK] := ' 1 ks Rohlik '; PONUKA[CAJ] := ' 1 ks Salka caju '; PONUKA[MUST] := '0,2 l Must jablcny '; PONUKA[DZUS] := '0,2 l Pomarancovy dzus '; PONUKA[PLZENSKE] := '0,5 l Plzenske pivo 12 '; JOULY[VLSALAT] := 1046; JOULY[SARDINKY] := 1407; JOULY[ZAVINAC] := 736; JOULY[SLANINA] := 2654; JOULY[HERMELIN] := 1134; JOULY[EIDAM] := 1088; JOULY[TVAROZKY] := 575; JOULY[MASLO] := 1506; JOULY[KLOBASY] := 878; JOULY[PARKY] := 1319; JOULY[UHORSAM] := 2100; JOULY[UDENE] := 1470; JOULY[JAHDZEM] := 527; JOULY[MARDZEM] := 523; JOULY[SACHR] := 815; JOULY[BABOVKA] := 609; JOULY[ROHLIK] := 576; JOULY[CAJ] := 0; JOULY[MUST] := 378; JOULY[DZUS] := 411; JOULY[PLZENSKE] := 966; for i:= VLSALAT to PLZENSKE do OBJEDNAVKA[i]:= 0; { vynulovanie objednavok } end; { POCIATOCNEHODNOTY } procedure VYPISLISTKU ( var PONUKA :ZOZPONUKA ); { Vypis jedalneho listku } var i : JEDLA ; { riadiaca premenna } begin { VYPISLISTKU } writeln('VYPOCET KALORICKEJ HODNOTY'); writeln; writeln('Stlac klavesu ENTER alebo RETURN '); readln; writeln('Jedalny listok'); writeln('= = = = = = = = = = = = = = = = = = ='); for i:= VLSALAT to PLZENSKE do writeln(PONUKA[i]); writeln('Stlac klavesu ENTER alebo RETURN '); readln; end; { VYPISLISTKU } procedure OBJJEDAL( var PONUKA:ZOZPONUKA; var OBJEDNAVKA:ZOZOBJED); { objednavka jedal } var POCET : integer; i : JEDLA ; begin { OBJJEDAL} writeln('Objednavaj cislom udavajucim pocet jednotiek '); writeln('Zaporne cislo objednavku ukonci '); i:=VLSALAT; { Prve objednavane jedlo } repeat writeln(PONUKA[i]); { vypis ponuky } readln(POCET); {citanie zadaneho poctu } if POCET > 0 then { nieco bolo objednane } OBJEDNAVKA[i]:=OBJEDNAVKA[i]+POCET; { zaznamenanie } if i = PLZENSKE then { posledny v zozname } i:= VLSALAT { opet na zaciatok zoznamu } else i := succ(i); until POCET < 0 ; { zaporne cislo ukonci cyklus } end ; { OBJJEDAL } procedure VYPISHODNOTY ( var PONUKA : ZOZPONUKA; var OBJEDNAVKA : ZOZOBJED ); { Vypis kalorickej hodnoty } var celkom : TYPOBJED ; { sucet kJ } i : JEDLA ; { riadiaca premenna } KALORICHOD: TYPJOULY; { kaloricka hodnota jedneho druhu } begin { Vypis hodnoty } writeln; writeln; writeln( 'OBJEDNANE kJ'); writeln; celkom := 0 ; { Sucet kJ } for i:= VLSALAT to PLZENSKE do if OBJEDNAVKA[i]>0 then begin { cez vsetky objednavky } { pocet kJ } KALORICHOD:=OBJEDNAVKA[i]*JOULY[i]; writeln(OBJEDNAVKA[i]:2,' x ',PONUKA[i], KALORICHOD:6); { do celkoveho suctu } celkom:=celkom + KALORICHOD; end; { cez vsetky objednavky } writeln('------------------------------------'); writeln('Celkom ',celkom:7); end ; { Vypis hodnoty } begin { JEDLO } clrscr; { priradenie pociatocnych hodnot } POCATHODNOTY(JOULY,PONUKA,OBJEDNAVKA ); { Vypis jedalneho listku } VYPISLISTKU(PONUKA); { Objednavka jedal } OBJJEDAL(PONUKA,OBJEDNAVKA); { vypis kalorickej hodnoty } VYPISHODNOTY(PONUKA,OBJEDNAVKA); writeln('Stlac klavesu ENTER alebo RETURN '); readln; end. { JEDLO }