190 likes | 296 Views
Csempe. Programozás érettségi mintafeladat 2004.03.19. A Csempe feladat szövege - adottak.
E N D
Csempe Programozás érettségi mintafeladat 2004.03.19.
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. Csempe
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! Csempe
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 Csempe
Változók 1 Rekord a csempe adataira kód: string[5] menny: Integer ar: Real Fájl a fenti rekordból Csempe
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 Csempe
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 } Csempe
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?? Csempe
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; Csempe
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; Csempe
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 Csempe
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ő Csempe
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<=ra.menny) és (bdb>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.') Csempe
Kódolás-deklaráció 1Program csempe; * 2Uses crt; * 3Type trek=record • kod: string[5]; • menny: Integer; • ar: Real; • end; 2pont • tfile=file of trek; 1pont (a tömbre is) 9Var f : tfile; • ra, rb: trek; • n: Byte; • vtip: string[4]; • vkod: string[5]; • mag, szel: Integer; • adb, bdb: Integer; • oszl, sor: Integer; • i: Byte; • l: Boolean; 5pont (arányosan elosztva) 19Begin Csempe
Kódolás–adatfájl feltöltése 19Begin • Clrscr; • Write('Hány adatrekord lesz? '); Readln(n); • Assign(f,'csempe.dat'); • rewrite(f); • For i:=1 to n do • Begin with ra do • begin write('Kérem az ',i,'. rekordot!'); • write('kód: '); readln(kod); • write('mennyiség: '); readln(menny); • write(' r/db: '); • end; • write(f,ra); • end; • close(f); 3pont • clrscr; • Write('Milyen típusú csempét választott? '); readln(vtip); Csempe
Kódolás–adatbevitel+csempeszám • Write('Milyen típusú csempét választott? '); readln(vtip); • akod:=vtip+'a'; • bkod:=vtip+'b'; 1pont • Write('Milyen széles a burkolandó felület m-ben? '); • readln(szel); szel:=szel*100; • Write('Milyen magas a burkolandó felület m-ben? '); • readln(mag); mag:=mag*100; 1pont • 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; 2pont • sor:=mag div 22; • If (sor*22)<mag then sor:=sor+1; • bdb:=sor*oszl; 2pont • reset(f); Csempe
Keresés–melyik olcsóbb • reset(f); • l:=false; • While not(l) and not(eof(f)) do • begin read(f,ra); • l:=ra.kod=akod; • end; 3pont • If not(l) • then write('Nincs ilyen csempe a raktárban.') 1pont • else begin read(f,rb); 1pont • aar:=ra.ar*adb; • bar:=rb.ar*bdb; 1pont • Writeln('A 15*15-ösből ',adb,'db szükséges. Az ára: ',aar); • Writeln('A 22*15-ösből ',bdb,'db szükséges. Az ára: ',bar); • If (adb<=ra.menny) and (bdb<=rb.menny) 1pont • then begin If aar<bar • then write ('A 15*15-ös az olcsóbb.') 1pont • else begin • If bar<aar then write('A 22*15-ös az olcsóbb') 1pont Csempe
Kódolás–valamelyikbőlnincselég • If bar<aar then write('A 22*15-ös az olcsóbb') 1pont • else write('Azonos az áruk.') 1pont • end • end • else begin • If (adb>ra.menny) and (bdb<=rb.menny) • then write('Csak a 22*15-ösből van elég.') 2pont • else begin • If (adb<=ra.menny) and (bdb>rb.menny) • then write('Csak a 15*15-ösből van elég.') 2pont • else begin • If (adb>ra.menny) and (bdb>rb.menny) • then write('Egyik fajtából sincs elég raktáron.') • end 2pont • end • end • end; close(f); • Readln; • 84End. Csempe
Tesztadatok fájlban vagy tömbben van mindkettő, de kevés 2pont 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) Csempe