kész OraHalmazProgram.exe programot a OraHalmaz_Keret.zip kicsomagolása után!

Hasonló dokumentumok
Programozási tételek általánosítása 2. Szlávi Péter 2015

Algoritmizálás és adatmodellezés tanítása 1. előadás

Adatszerkezetek I. 1. előadás

Algoritmizálás és adatmodellezés tanítása 4. előadás

Halmaz típus Értékhalmaz:

Algoritmizálás és adatmodellezés tanítása 6. előadás

Multihalmaz, intervallumhalmaz

Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek

Maximum kiválasztás tömbben

C programozási nyelv Pointerek, tömbök, pointer aritmetika

HORVÁTH ZSÓFIA 1. Beadandó feladat (HOZSAAI.ELTE) ápr 7. 8-as csoport

Algoritmizálás, adatmodellezés 1. előadás

Bánsághi Anna 2014 Bánsághi Anna 1 of 33

Programozás alapjai gyakorlat. 2. gyakorlat C alapok

Bevezetés az informatikába

Programozás alapjai C nyelv 4. gyakorlat. Mit tudunk már? Feltételes operátor (?:) Típus fogalma char, int, float, double

Occam 1. Készítette: Szabó Éva

ADATSZERKEZETEK TANTÁRGY, 1. FÉLÉV 2. ELŐADÁS 2009 (VÁZLAT)

Mit tudunk már? Programozás alapjai C nyelv 4. gyakorlat. Legnagyobb elem keresése. Feltételes operátor (?:) Legnagyobb elem keresése (3)

8. gyakorlat Pointerek, dinamikus memóriakezelés

Programozási nyelvek a közoktatásban alapfogalmak II. előadás

Programozási alapismeretek 3. előadás

C memóriakezelés. Mutató típusú változót egy típus és a változó neve elé írt csillag karakterrel hozhatjuk létre.

A C programozási nyelv I. Bevezetés

A C programozási nyelv I. Bevezetés

NAGYPONTOSSÁGÚ EGÉSZ-ARITMETIKA TARTALOM

S0-02 Típusmodellek (Programozás elmélet)

Struktúra nélküli adatszerkezetek

Komputeralgebra Rendszerek

Java II. I A Java programozási nyelv alapelemei

Bevezetés a Programozásba II 2. előadás. Adattípusok megvalósítása egységbe zárással. Adattípusok megvalósítása egységbe zárással

Programozás I gyakorlat

Programozási nyelvek (ADA)

Térinformatikai algoritmusok Elemi algoritmusok

Tömbök kezelése. Példa: Vonalkód ellenőrzőjegyének kiszámítása

Házi feladatok megoldása. Nyelvek használata adatszerkezetek, képek leírására

Feladat. Bemenő adatok. Bemenő adatfájlok elvárt formája. Berezvai Dániel 1. beadandó/4. feladat április 13. Például (bemenet/pelda.

Térinformatikai algoritmusok Elemi algoritmusok

A programozás alapjai előadás. A C nyelv típusai. Egész típusok. C típusok. Előjeles egészek kettes komplemens kódú ábrázolása

7. Laboratóriumi gyakorlat: Vezérlési szerkezetek II.

Bevezetés a C++ programozási nyelvbe

3 A C programozási nyelv szintaktikai egységei

Aritmetikai kifejezések lengyelformára hozása

INFORMATIKAI ALAPISMERETEK

FUNKCIONÁLIS PROGRAMOZÁS

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

S z á m í t ó g é p e s a l a p i s m e r e t e k

Készítette: Ernyei Kitti. Halmazok

A C# programozási nyelv alapjai

Programozás Minta programterv a 1. házi feladathoz 1.

Informatika terméktervezőknek

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós május 6. Széchenyi István Egyetem, Gy r

Mindenki abból a három tantárgyból tesz szigorlatot, amelyet hallgatott.

OOP I. Egyszerő algoritmusok és leírásuk. Készítette: Dr. Kotsis Domokos

Programozás II. 2. Dr. Iványi Péter

Pásztor Attila. Algoritmizálás és programozás tankönyv az emeltszintű érettségihez

Szkriptnyelvek. 1. UNIX shell

INFORMATIKAI ALAPISMERETEK

Assembly Utasítások, programok. Iványi Péter

Adatszerkezetek Tömb, sor, verem. Dr. Iványi Péter

Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3)

Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2)

Adatszerkezetek Adatszerkezet fogalma. Az értékhalmaz struktúrája

Programozás I. Sergyán Szabolcs Óbudai Egyetem Neumann János Informatikai Kar szeptember 10.

Bevezetés a programozásba. 9. Előadás: Rekordok

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

9. előadás. Programozás-elmélet. Programozási tételek Elemi prog. Sorozatszámítás Eldöntés Kiválasztás Lin. keresés Megszámolás Maximum.

Programozás I. Sergyán Szabolcs Óbudai Egyetem Neumann János Informatikai Kar szeptember 10.

7. gyakorlat Sorozatok, Fájlkezelés

Programozási Nyelvek: C++

1. kérdés: Mi a sor? Válaszok. a) szűkebb ( hagyományos ) válasz: egy típus, amelyre az alábbi jellegzetes műveletek alkalmazhatók:

HÁZI FELADAT PROGRAMOZÁS I. évf. Fizikus BSc. 2009/2010. I. félév

BASH script programozás II. Vezérlési szerkezetek

Mindent olyan egyszerűvé kell tenni, amennyire csak lehet, de nem egyszerűbbé.

5. A kiterjesztési elv, nyelvi változók

C++ referencia. Izsó Tamás február 17. A C++ nyelvben nagyon sok félreértés van a referenciával kapcsolatban. A Legyakoribb hibák:

Operációs rendszerek. 11. gyakorlat. AWK - szintaxis, vezérlési szerkezetek UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

C programozás. 1 óra Bevezetés

Készítette: Nagy Tibor István

Kinek szól a könyv? A könyv témája A könyv felépítése Mire van szükség a könyv használatához? A könyvben használt jelölések. 1. Mi a programozás?

Felvételi tematika INFORMATIKA

ALGORITMIKUS SZERKEZETEK ELÁGAZÁSOK, CIKLUSOK, FÜGGVÉNYEK

OEP Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1. Feladat. Elemzés 1

Algoritmizálás, adatmodellezés tanítása 6. előadás

Programozás I gyakorlat

1. Alapok. #!/bin/bash

Függvény pointer. Feladat: Egy tömbben soroljunk fel függvényeket, és hívjuk meg valahányszor.

Programozási nyelvek JAVA EA+GY 1. gyakolat

A SystemC programok adattípusai

Informatikai tehetséggondozás:

A modell-ellenőrzés gyakorlata UPPAAL

Struktúrák (struct) A struktúra szerkezetét meghatározó deklaráció általános formája:

Mindent olyan egyszerűvé kell tenni, amennyire csak lehet, de nem egyszerűbbé. (Albert Einstein) Halmazok 1

Java II. I A Java programozási nyelv alapelemei

5. SOR. Üres: S Sorba: S E S Sorból: S S E Első: S E

A feladat címe, rövid emlékeztetje

Kifejezések. Kozsik Tamás. December 11, 2016

Aritmetikai utasítások I.

Miről lesz ma szó? A PROGAMOZÁS ALAPJAI 1. Programtervezési stratégiák. Top-down tervezés. Top-down tervezés. Bottom-up tervezés. 4.

Átírás:

Feladat A kurzusra járókról tudjuk, hogy kinek mikor van elfoglaltsága. Válaszoljunk az alábbi kérdésekre: 1. Mikorra szervezhető konzultáció, azaz mikor van mindannyiuknak szabadideje? 2. Mely napokon van adott intervallumban (pl. 8-16 óra között) legalább egy kurzustagnak szabadideje? Az adatokat egy karakteres fájlból olvassuk be, a 2. feladat többlet paraméterét pedig klaviatúráról. Mielőtt nekilátna a megoldásnak, nézze meg az én megoldásomat, futtassa a mellékelt, kész OraHalmazProgram.exe programot a OraHalmaz_Keret.zip kicsomagolása után! Megoldás Az alábbiakból is kiderül, hogy a megoldás kézenfekvően vezet az órák (pontosabban a szabad órák) alkotta halmaz adatszerkezetre. Így készítjük el az órák halmaz típusát (óra-halmaz típust). A feladat specifikációja Be: N N, ntk Naptárak, Naptárak=Naptár*, Naptár=Halmaz(Óra)Nap, Nap=(Hétfő,...,Vasárnap), Óra=0..23 1&2. feladathoz tól,ig Óra 2. feladathoz Ki: mindenki Naptár valaki Naptár 1. feladathoz 2. feladathoz Ef: N=Hossz(ntk) Uf: n Nap: ( o mindenkin i [1..N]: o ntki,n ) 1. feladat vagyis n Nap: mindenkin= n Nap: ( o valakin i [1..N]: o ntki,n ) vagyis n Nap: valakin= Az ÓraHalmaz típus megadása Elvárások az ÓraHalmaz típustól exportmodul Exportmodul TÓraHalmaz: Típus TÓra TÓraHalmaz Konstans Soha:TÓraHalmaz [üres halmaz] Mindig:TÓraHalmaz [alaphalmaz] Eljárás ReadHalmaz(Konstans kérdés:szöveg, Változó h:tórahalmaz) WriteHalmaz(Konstans elő:szöveg, h:tórahalmaz, utó:szöveg) Bele(Változó h:tórahalmaz, Konstans o:tóra) Függvény BenneE(Konstans h:tórahalmaz, o:tóra):logikai Elemszám(Konstans h:tórahalmaz):egész 1 2. feladat

Eljárás Egyesít(Változó új:tórahalmaz, Konstans h1,h2:tórahalmaz) Metsz(Változó új:tórahalmaz, Konstans h1,h2:tórahalmaz) Kivon(Változó új:tórahalmaz, Konstans h1,h2:tórahalmaz) Operátor AzonosE(Konstans h1,h2:tórahalmaz):logikai LegyenEgyenlő(Változó mi:tórahalmaz, Konstans mivel:tórahalmaz) Másként mi:=mivel Modul vége. Megjegyzések: 1) Elnézést a nagyképű Pascalizmusért : Read/Write a művelet nevében. Didaktikai oka van: kérdés kapcsolódik majd hozzá. 2) Operátor: kétváltozós, infix (köztes, azaz az operandusok közé illeszkedő) jelölésű eljárás vagy függvény. 3) Az operátornak neve is van (pl. AzonosE, LegyenEgyenlő), és egy használat szintaxisát leíró szabály (pl., Másként mi:=mivel). A név szükségességére visszatérünk, a használat szintaxisa világos. Az ÓraHalmaz megalkotása modul Egy lehetséges megvalósítás lényege: a Logikai elemű tömbbel ábrázolás: Modul TÓraHalmaz: Reprezentáció Típus TÓra=0..23 TÓraHalmaz=Tömb(TÓra:Logikai) [Igaz=ráér] Konstans Soha:TÓraHalmaz(Hamis,Hamis, 24-szer) [üres halmaz] Mindig:TÓraHalmaz(Igaz,Igaz, 24-szer) [alaphalmaz] Változó h:tórahalmaz [ilyen tartozik minden egyes TÓraHalmaz típusú adathoz] Implementáció Eljárás ReadHalmaz(Konstans kérdés:szöveg, Változó h:tórahalmaz): [pl. addig olvasunk szabad órák intervallumait, amíg az nem üres ] Eljárás WriteHalmaz(Konstans elő:szöveg, h:tórahalmaz, utó:szöveg): [pl. szóközzel elválasztva a szabad órákat ] Eljárás Bele(Változó h:tórahalmaz, Konstans o:tóra): [Uf: h(o)] Függvény BenneE(Konstans h:tórahalmaz, o:tóra):logikai [Uf: BenneE(h,e)=h(o)] Függvény Elemszám(Konstans h:tórahalmaz):egész [Uf: Elemszám(h)=Megszámolás(h,.=Igaz)] Eljárás Egyesít(Változó új:tórahalmaz, Konstans h1,h2:tórahalmaz): [] Eljárás Metsz(Változó új:tórahalmaz, Konstans h1,h2:tórahalmaz): [] Eljárás Kivon(Változó új:tórahalmaz, Konstans h1,h2:tórahalmaz): [] 2

Operátor AzonosE(Konstans h1,h2:tórahalmaz):logikai Operátor LegyenEgyenlő(Változó mi:tórahalmaz, Konstans mivel:tórahalmaz): Másként mi:=mivel Inicializálás h:=soha [ez hajtódik végre minden deklarációkor a helyfoglalás után] Modul vége. Megjegyzések: 1) Egy típus definiálásakor a modulbeli Változó rész írja le, hogy milyen szerkezet tartozik minden egyes ilyen típusú adathoz, annak deklarálásakor. Pl. most: Változó ma,holnap:tórahalmaz mind a ma-hoz, mind a holnap-hoz 24-24 logikai értékhez szükséges mennyiségű bájt 2) Hogy minek az operátornak az olvasható név? Lássuk csak: hogy nézne ki az operátordefiniálás az alábbi logikus esetben: Operátor =(Konstans h1,h2:tórahalmaz):logikai = := h1(0..23)=h2(0..23) [implicit ciklus; visszavezetés Logikai értékadásra] Operátor vége. Ugye, milyen furcsa lenne?!? E helyett így kell definiálni: Operátor AzonosE(Konstans h1,h2:tórahalmaz):logikai AzonosE := h1(0..23)=h2(0..23) Operátor vége. 3) Az Inicializálás részben található utasításokat hajtja végre minden egyes ilyen típusú adat helyfoglalásakor. Az 1)-beli példában a ma és a holnap létrejöttekor mindkettő Soha kezdőértéket kap. Kódolás Készítse el a típust megvalósító unitot! Kiindulhat az OraHalmaz_Unit_Keret.pas-ból, amelyben már kész a beolvasó és kiíró művelet. Ne felejtse átnevezni OraHalmaz_Unit-ra (a programban így kell hivatkozni rá)! Mielőtt belenéz a keret-unitba, próbáljon válaszolni a következő kérdésekre: 1. Milyen részei vannak egy Pascal unitnak? 2. Hogyan néz ki egy mondjuk S nevű, 1..5 indextípusú, Integerekből álló Pascal tömbkonstans deklarációja? Írjon föl egy helyes szintaxisú példát! 3. Egy T felsorolás típus esetén mit ad meg a Low(T), High(T) függvény? Például: Low(TNap)=?, High(TNap)=? 4. Lehet-e egy tömb indextípusa egy felsorolás típus? 5. Hány eleme van annak a tömbnek, amelyet a TNap típussal indexelünk? 6. Hogy kódolunk (szabályszerűen) egy beolvasást? Készítse el az alapfeladatot megoldó programot! Kiindulhat az OraHalmazProba.pas-ból. Ebben is már kész az I/O, csak a két lényegi eljárás (OsszesMetszet, OsszesEgyesites) megvalósítása hiányzik. 3

Fájlszerkezetek 1. sor: N (emberek száma) (i-1)*7+j. sor:24 jel (i=1..n, j=1..7), ahol jel=f/. Foglalt (=dolgozik)/szabad; j=1 Hétfő...j=7 Vasárnap Értelmezze az alábbi két példafájlt: 1. példabemenet (naptarak1.dat) 2. példabemenet (naptarak2.dat) Probléma Gondolja meg, mi az ára, hogy a fenti halmazábrázolást tetszőleges elemtípusra megfogalmazhassuk! Kérdések: 1. milyen műveleteket kellene az elemtípusnak exportálnia, s ilyeneket feltéve 2. hogyan írhatnánk újra a halmaz-unitunkat úgy, hogy lehetőleg semmit ne kelljen rajta változtatni pusztán a miatt, mert megváltoztatjuk az elemtípust? Ha ezekre a kérdésekre válaszol, akkor már tudja: hogyan készíthet egy típussal paraméterezett ún. típuskonstrukciót? Házi feladatok Hf-1 Hogyan módosítaná a halmaz típust akkor, ha egy elem bent létén túl a multiplicitása is érdekes. Ez vetődhetne föl akkor, ha a kérdés az volna, hogy mikor tartsanak 1 órás szemináriumot? Nyilván akkor, amikor a legtöbben bent tartózkodnak, azaz a 2. kérdést bővítsük ezzel! Megoldáshoz Ez a fajta halmaz az ún. multihalmaz. A halmaz ábrázolásához használt tömb ez esetben nem logikai típusú, hanem egész. A továbbiak a fentihez hasonlóan végzendők el. 4

Hf-2 24 órához elegendő lenne 24 bit is, amíg a SizeOf(TOraHalmaz)=24 bájt. (Ellenőrizze!) Valósítsa meg a típust olcsóbban, kisebb helyfoglalás mellett. Például: a) Longint SizeOf(Longint)=4, azaz 32 bit (kicsit több ugyan, de mégsem 24 bájt!) b) 3-karakter THaromKar=Array [1..3] of Char SizeOf(THaromKar)=3 (mily meglepő: 24 bit ) Megoldásokhoz Bitműveletek: x shl b=x balra shift (=léptetés) y bittel; x shr b=x jobbra shift y bittel. A szokásos And/Or/Not műveletek bitműveletek is. A jelölések egyszerűsítéséhez: Hf-3 hexadecimális konstans-írás: $ff=255, $101=256+1=257 bináris konstans-írás: %1010=8+2=10, %11111111=255 Nevezze át a típus I/O-műveleteit: Read-re/Write-ra! Fordítsa le! Mit tapasztal? Hogyan tehetné ismét szintaktikusan helyessé? 5