Csempe Programozás érettségi mintafeladat
Csempe2 A Csempe feladat szövege - adottak Egy burkolatokkal kereskedő áruházban minden falicsempe kétféle méretben található: 15*15cm- es és 22*15cm-es. (Az első szám a csempe magassága a második a csempe szélessége. A minták miatt a csempéket nem lehet elfordítani.) A nagyobb csempe ára 1,35-szöröse a kisebb méretűnek. Az áruház nyilvántartásában a csempéket 5 karakterből álló kóddal jelölik. (A karakterek az angol abc betűi és számok lehetnek.) Az első négy karakter a csempe tulajdonságaira az utolsó a méretre utal. Az utolsó karakterhelyen az A jelöli a 15*15-ös a B a 22*15-ös méretet. A nyilvántartásban tárolják, hogy a csempéből hány db van raktáron (egész típus) és a darabárat.
Csempe3 Mi a feladat? A vevő vásárláskor megmondja, hogy mekkora falfelületet akar burkolni (a magasságot és a szélességet m-ben), és a minta alapján kiválasztott csempe kódjának első 4 karakterét. Készítsen programot, amely megállapítja, hogy melyikből olcsóbb a szükséges mennyiség. Továbbá kiírja hogy, melyik méretűból van elég raktáron. A program ellenőrzéséhez készítsen megfelelő tesztadatokat minden olyan esetre, amely előfordulhat és írja bele a beadandó programba!
Csempe4 Megjegyzések a megoldandó problémához Az 1,35-szöröst számoltatni, majd kerekíttetni akarjuk, vagy számolja ki fejben és írja be? Az utolsó helyen álló betűt ugye mi akarjuk az adathoz illeszteni?! A megfelelő tesztadatokat fájlban kérjük tárolni vagy csak kézzel a kódba írni. Jár-e plusz pont a fájlos megoldásért? Nem olyan könnyű olyan adatokat találni, ahol a 15*15- ös az olcsóbb. Sok időt vihet el amíg kitalálja a versenyző. Ha ezt nem teszteli, akkor mennyi pontot veszít? Az adatok elkészítéséről nem derül ki, hogy azt is pontozza
Csempe5 Változók 1 Rekord a csempe adataira kód: string[5] menny: Integer ar: Real Fájl a fenti rekordból
Csempe6 Tesztadatok 1.Nincs ilyen kódú csempe a fájlban 2.Az első rekordban van 3.Az utolsó rekordban van 4.Elég a fájlba 4*2 rekordot írni 5.Köztük egy olyat, ahol nagyon kevés az „A”típus és egy olyat, ahol nagyon kevés a „B”típus
Csempe7 Változók 2. f : tfile; ra, rb: trek; {célszerű egyszerre látni kétféle méret rekordját} n : Integer; {a csemperekordok száma} vtip: string[4]; {a vásárló által megadott kód} akod, bkod: string[5]; {a két lehetséges csempeméret kódja} mag, szel: egész; {a burkolandó felület magassága, szélessége} adb, bdb: egész; {a típusokhoz tartozó darabszámok} aar, bar: Integer; {a típusokhoz tartozó összárak} oszl, sor: Integer; {a burkolandó felületre szükséges csempeoszlopok ill. sorok száma} l: Boolean; {logikai változó a lineáris kereséshez }
Csempe8 Adatbevitel Beolvasandó adatok vtip, szel, mag A vtip beolvasásakor csak ez első 4 karakter, amit a programban kiegészítünk egy „A” és egy „B” végződésűre –elején (ha ezt választjuk- felesleges tárolás) –menet közben mindig, ha kell mind az 5 karaktert beolvassuk, ekkor ellenőrizni kellene a programmal hogyan pontozzuk?? Beolvasási stratégiák az elején beolvas mindent, vagy mielőtt bármit csinál ellenőrzi, hogy létezik-e a kód! Futtatási stratégiák hátul tesztelősen folytatja a futást kívánságra másik kóddal, vagy újra kell indítani??
Csempe9 Algoritmus a keresésig {***A méretek kiszámítása***} {A fájlfeltöltésről nem készült algoritmus} olvas(vtip) akod:=vtip+'a'; bkod:=vtip+'b'; {***Átváltás***} szel:=szel*100; mag:=mag*100; oszl:=szel div 15; If (oszl*15)<szel then oszl:=oszl+1; sor:=mag div 15; If (sor*15)<mag then sor:=sor+1; adb:=sor*oszl; sor:=mag div 22; If (sor*22)<mag then sor:=sor+1; bdb:=sor*oszl;
Csempe10 A keresés Hozzárendel(f,fizikai fájlnév) reset(f); l:=false; While not(l) and not(eof(f)) do begin read(f,ra); l:=ra.kod=akod; end;
Csempe11 A keresés eredményének értékelése Ha nem l akkor kiír('Nincs ilyen csempe a raktárban.')** különben Ha van elegendő mindkettőből akkor melyik olcsóbb különben melyik elegendő kiírás(melyiket vegyük) **Ha ismételni akarjuk másik típussal, akkor itt be kell kérni
Csempe12 melyik olcsóbb Ha aar<bar akkor kiír ('A 15*15-ös az olcsóbb.') különben Ha bar<aar akkor kiír('A 22*15-ös az olcsóbb') különben kiír('Azonos az áruk.') A többirányú elágazás lenne ideális programnyelvfüggő
Csempe13 melyik elegendő Ha (adb>ra.menny) és (bdb<=rb.menny) akkor kiír('Csak a 22*15-ösből van elég.') különben Ha (adb rb.menny) akkor kiír('Csak a 15*15-ösből van elég.') különben Ha (adb>ra.menny) és (bdb>rb.menny) akkor kiír('Egyik fajtából sincs elég raktáron.')
Csempe14 Kódolás-deklaráció 1Program csempe;* 2Uses crt;* 3Type trek=record 4 kod: string[5]; 5 menny: Integer; 6 ar: Real; 7 end;2pont 8 tfile=file of trek;1pont (a tömbre is) 9Var f : tfile; 10ra, rb: trek; 11 n: Byte; 12vtip: string[4]; 13vkod: string[5]; 14mag, szel: Integer; 15adb, bdb: Integer; 16oszl, sor: Integer; 17i: Byte; 18l: Boolean;5pont (arányosan elosztva) 19Begin
Csempe15 Kódolás–adatfájl feltöltése 19Begin 20Clrscr; 21Write('Hány adatrekord lesz? '); Readln(n); 22Assign(f,'csempe.dat'); 23rewrite(f); 24For i:=1 to n do 25Begin with ra do 26 begin write('Kérem az ',i,'. rekordot!'); 27 write('kód: '); readln(kod); 28 write('mennyiség: '); readln(menny); 29 write(' r/db: '); 30 end; 31 write(f,ra); 32end; 33close(f);3pont 34clrscr; 35Write('Milyen típusú csempét választott? '); readln(vtip);
Csempe16 Kódolás–adatbevitel+csempeszám 35Write('Milyen típusú csempét választott? '); readln(vtip); 36akod:=vtip+'a'; 37bkod:=vtip+'b';1pont 38Write('Milyen széles a burkolandó felület m-ben? '); 39readln(szel); szel:=szel*100; 40Write('Milyen magas a burkolandó felület m-ben? '); 41readln(mag); mag:=mag*100;1pont 42oszl:=szel div 15; 43If (oszl*15)<szel then oszl:=oszl+1; 44sor:=mag div 15; 45If (sor*15)<mag then sor:=sor+1; 46adb:=sor*oszl;2pont 47sor:=mag div 22; 48If (sor*22)<mag then sor:=sor+1; 49bdb:=sor*oszl;2pont 50reset(f);
Csempe17 Keresés–melyik olcsóbb 50reset(f); 51l:=false; 52While not(l) and not(eof(f)) do 53 begin read(f,ra); 54 l:=ra.kod=akod; 55 end;3pont 56If not(l) 57 then write('Nincs ilyen csempe a raktárban.')1pont 58 else begin read(f,rb); 1pont 59 aar:=ra.ar*adb; 60 bar:=rb.ar*bdb;1pont 61 Writeln('A 15*15-ösből ',adb,'db szükséges. Az ára: ',aar); 62 Writeln('A 22*15-ösből ',bdb,'db szükséges. Az ára: ',bar); 63 If (adb<=ra.menny) and (bdb<=rb.menny)1pont 64 then begin If aar<bar 65 then write ('A 15*15-ös az olcsóbb.')1pont 66 else begin 67 If bar<aar then write('A 22*15-ös az olcsóbb')1pont
Csempe18 Kódolás–valamelyikből nincs elég 67. If bar<aar then write('A 22*15-ös az olcsóbb')1pont 68. else write('Azonos az áruk.')1pont 69. end 70. end 71.else begin 72. If (adb>ra.menny) and (bdb<=rb.menny) 73. then write('Csak a 22*15-ösből van elég.')2pont 74. else begin 75. If (adb rb.menny) 76. then write('Csak a 15*15-ösből van elég.')2pont 77. else begin 78. If (adb>ra.menny) and (bdb>rb.menny) 79. then write('Egyik fajtából sincs elég raktáron.') 80. end2pont 81. end 82. end 83. end; close(f); 84. Readln; 85.84End.
Csempe19 Tesztadatok fájlban vagy tömbben van mindkettő, de kevés2pont van, de csak a drágább elegendő 2pont van elegendő az olcsóbból 2pont Csempe kódja olyan, amely nem szerepel a raktáron 1pont olyan, amelyből kevés van 2pont olyan, amelyből csak a drágább van 2pont olyan, amelyik éppen megfelelő 2pont Tesztadatok felvitele (a fájlfeltöltésnél pontoztuk 3ponttal)