Informatikai tehetséggondozás:



Hasonló dokumentumok
Halmaz típus Értékhalmaz:

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

Informatikai tehetséggondozás:

Programozási tételek. Jegyzet. Összeállította: Faludi Anita 2012.

RENDEZÉSEK, TOVÁBBI PROGRAMOZÁSI TÉTELEK

Multihalmaz, intervallumhalmaz

Programozás I. Metódusok C#-ban Egyszerű programozási tételek. Sergyán Szabolcs

Informatikai tehetséggondozás:

hatására hátra lép x egységgel a toll

Informatikai tehetséggondozás:

Egyszerű programozási tételek

INFORMATIKAI ALAPISMERETEK

INFORMATIKAI ALAPISMERETEK

REKURZIÓ. Rekurzív: önmagát ismétlő valami (tevékenység, adatszerkezet stb.) Rekurzív függvény: függvény, amely meghívja saját magát.

Miskolci Egyetem. Diszkrét matek I. Vizsga-jegyzet. Hegedűs Ádám Imre

XIII. Bolyai Konferencia Bodnár József Eötvös József Collegium, ELTE TTK, III. matematikus. A véletlen nyomában

INFORMATIKAI ALAPISMERETEK

Struktúra nélküli adatszerkezetek

II. Halmazok. Relációk. II.1. Rövid halmazelmélet. A halmaz megadása. { } { } { } { }

80-as sorozat - Idõrelék A

BEVEZETÉS A FUZZY-ELVŰ SZABÁLYOZÁSOKBA. Jancskárné Dr. Anweiler Ildikó főiskolai docens. PTE PMMIK Műszaki Informatika Tanszék

JUHÁSZ TIBOR TÓTH BERTALAN KOLLEKCIÓK ALKALMAZÁSA A FELADATMEGOLDÁSOKBAN

MATEMATIKA ÉRETTSÉGI TÍPUSFELADATOK KÖZÉPSZINT Statisztika

p j p l = m ( p j ) 1

Tartalom. Matematikai alapok. Termékgyártási példafeladat. Keverési példafeladat Szállítási példafeladat Hátizsák feladat, egészértékű feladat

Programoza s I. 10. elo ada s Rendezett to mbo k. Sergya n Szabolcs

JANUS PANNONIUS TUDOMÁNYEGYETEM. Schipp Ferenc ANALÍZIS I. Sorozatok és sorok

Erdélyi Magyar TudományEgyetem (EMTE

Dualitás Dualitási tételek Általános LP feladat Komplementáris lazaság 2015/ Szegedi Tudományegyetem Informatikai Tanszékcsoport

Eszterházy Károly Főiskola Matematikai és Informatikai Intézet. Adatszerkezetek és algoritmusok. Geda Gábor

Relációs algebra áttekintés és egy táblára vonatkozó lekérdezések

MATEMATIKA 9. osztály Segédanyag 4 óra/hét

INFORMATIKAI ALAPISMERETEK

INFORMATIKAI ALAPISMERETEK

Gyakorló feladatok ZH-ra

23. Kombinatorika, gráfok

Előadó: Dr. Kertész Krisztián

Analízisfeladat-gyűjtemény IV.

Halmazelmélet alapfogalmai

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

Egyszerű programozási tételek

Az INTEL D-2920 analóg mikroprocesszor alkalmazása

C# gyorstalpaló. Készítette: Major Péter

as sorozat - Időrelék A Felu gyeleti és időrelék

Informatikai tehetséggondozás:

C# feladatok gyűjteménye

ELEMI PROGRAMOZÁSI TÉTELEK

Gyakorlatok. P (n) = P (n 1) + 2P (n 2) + P (n 3) ha n 4, (utolsó lépésként l, hl, u, hu-t léphetünk).

Adatok szűrése, rendezése





Közgazdaságtan I. Tizenegyedik alkalom Kupcsik Réka G2 kurzus Kedd 12:15-13:45 QA240

2. Piaci modellek Oligopóliumok

Készítette:

ACNSEM2 Forgalom irányító lámpa vezérlés 2 lámpához

Informatikai tehetséggondozás:

Adatkezelési és adatvédelmi tájékoztató

DM-GN (Hungarian) Kereskedői kézikönyv. Általános működés

Informatikai tehetséggondozás:

Helyi tanterv Német nyelvű matematika érettségi előkészítő. 11. évfolyam

Sport szponzorszervezés. Kecse- Nagy Sándor Kommunikációs szakértő

3. Gyakorlat Ismerkedés a Java nyelvvel

A térinformatika t. Az informáci. ciós s rendszerek funkciói. Az adatok vizsgálata

S Z A K D O L GO Z AT

Közismereti informatika I. 4. előadás

Véletlenített algoritmusok. 4. előadás

BIZONYTALAN ADATOK KEZELÉSE: FUZZY SZAKÉRTŐI RENDSZEREK

2015, Diszkrét matematika

Algoritmusok Tervezése. Fuzzy rendszerek Dr. Bécsi Tamás

Régi, statikus adatok élővé tétele és vizsgálata

Másolásra épülő algoritmusok

Helyi tanterv. Batthyány Kázmér Gimnázium Matematika emelt ( óra/hét) 9-12 évfolyam Készült: 2013 február

7. A Poisson folyamat

A FELADATLAPOT A MEGOLDÁSSAL EGYÜTT KÖTELEZİ BEADNI!

Scherlein Márta Dr. Hajdu Sándor Köves Gabriella Novák Lászlóné MATEMATIKA 1. A FELMÉRŐ FELADATSOROK ÉRTÉKELÉSE

Fazekas nyílt verseny matematikából 8. osztály, speciális kategória

100% BIO Natur/Bio kozmetikumok és testápolás

A rendszerbe foglalt reléprogram, 1954 óta. Szilárdtest relék optocsatolóval, bekapcsolás a feszültség nullátmeneténél vagy nem szinkronizált módon

4. Programozási nyelvek osztályozása. Amatőr és professzionális

Valószínűségszámítás

Digitális technika VIMIAA01

Információk. Ismétlés II. Ismétlés. Ismétlés III. A PROGRAMOZÁS ALAPJAI 2. Készítette: Vénné Meskó Katalin. Algoritmus. Algoritmus ábrázolása

Hraskó András, Surányi László: spec.mat szakkör Tartotta: Surányi László. Feladatok

Bevezetés a C++ programozásba

Programozási alapismeretek 11. előadás

7. Strukturált típusok

(Nem tartalmazza falusi vendégasztal során elkészített, értékesített ételek jó higiéniai gyakorlatát, az erre vonatkozó szabályokat)

1. Alapfogalmak Algoritmus Számítási probléma Specifikáció Algoritmusok futási ideje

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

HALMAZOK TULAJDONSÁGAI,

Vízhasználatok gazdasági elemzése

XXI. Országos Ajtonyi István Irányítástechnikai Programozó Verseny

Darts: surranó nyilak, gondolkodtató problémák Kombinatorika 6. feladatcsomag

A 2013/2014 tanévi Országos Középiskolai Tanulmányi Verseny első forduló javítási-értékelési útmutató. INFORMATIKA II. (programozás) kategória

Adatbázis és szoftverfejlesztés elmélet. Programozási tételek

Líneáris függvények. Definíció: Az f(x) = mx + b alakú függvényeket, ahol m 0, m, b R elsfokú függvényeknek nevezzük.

MATEMATIKA ÍRÁSBELI ÉRETTSÉGI-FELVÉTELI FELADATOK május 19. du. JAVÍTÁSI ÚTMUTATÓ

Programozás I. Egyszerű programozási tételek. Sergyán Szabolcs

Átírás:

Ég és Föld vonzásában a természet titkai Informatikai tehetséggondozás: Multihalmaz típus TÁMOP-4.2.3.-12/1/KONV

Értékhalmaz: az alaphalmaz (amely az Elemtípus és egy darabszám által van meghatározva) iteráltja ( mely elem hányszoros multiplicitással van benne a multihalmazban ). Mûveletek: + (egyesítés - unió), max (értékek uniója, multiplicitások maximuma), min (értékek uniója, multiplicitások minimuma 1 ), * (metszet), mindközös? (a két multihalmaz az elemek multiplicitásától eltekintve azonos-e), - (különbség), Eleme (egy elem benne van-e a multihalmazban), multiplicitás (egy elem hányszoros multiplicitással van benne a multihalmazban), Üres (üres multihalmaz létrehozás: eljárás), vagy Üres'Halmaztípus elõre definiált konstans, Üres? (logikai értékû függvény). Relációk: =, <,,, >, (parciális rendezés: a tartalmazás, azon belül pedig az elemszám alapján). Például: Típus Fajta=Rekord(név: Szöveg, multi: Egész) Állomány=Multihalmaz(Fajta) Változó A: Állomány A:=Állomány(("nyúl",3),("kecske",5)) Multihalmazok ábrázolása többféleképpen is megoldható. Közülük tekintsük át a legfontosabbakat: Elemek felsorolása Típus halmazelem=rekord(érték: Elemtípus, multi: Egész) =Rekord(db: Egész, elem: Tömb(1..MaxDb:Halmazelem)) Egy felsorolásként adjuk meg a multihalmazt, annyi elemű tömbben, ahány elemű éppen a multihalmaz (pontosabban az első Db darab elemében). Nézzük meg a Multihalmaz típus néhány mûveletét! Elemek felsorolása esetén a multihalmaz műveleteket az alábbi módon valósíthatjuk meg: Eljárás Beolvasás(Változó a: ): Be: a.db [a multihalmaz elemszáma] Ciklus i=1-től a.db-ig Be: a.elem[i].érték,a.elem[i].multi Műveletigény számítása: a ciklus a multihalmaz elemértékeinek számaszor fut le, azaz a futási idő a multihalmaz elemszámával arányos. 1 Ha van ennek egyáltalán értelme. 2

Eljárás Kiírás(Konstans a: ): Ki: a.db [a multihalmaz elemszáma] Ciklus i=1-től a.db-ig Ki: a.elem[i].érték,a.elem[i].multi Műveletigény számítása: a ciklus a multihalmaz elemértékeinek számaszor fut le, azaz a futási idő a multihalmaz elemszámával arányos. Eljárás Üres(Változó a: ): a.db:=0 Függvény Üres?(Konstans a: multihalmaz(elemtípus)): Üres?:=(a.db=0) Eljárás Multihalmazba(Változó a:, Konstans e: Elemtípus): Ciklus amíg i a.db és a.elem[i].érték e Ha i a.db akkor a.elem[i].multi:=a.elem[i].multi+1 különben a.db:=a.db+1; a.elem[a.db].érték:=e a.elem[a.db].mult Műveletigény számítása: arányos a multihalmaz elemszámával. Eljárás Multihalmazból(Változó a:, Konstans e: Elemtípus): Ciklus amíg i a.db és a.elem[i].érték e Ha i a.db akkor Ha a.elem[i].multi=1 akkor a.elem[i]:=a.elem[a.db] a.db:=a.db-1 különben a.elem[i].multi:=a.elem[i].multi-1 Műveletigény számítása: a ciklus a multihalmaz elemeinek számaszor fut le, azaz a futási idő a multihalmaz elemszámával arányos. 3

Függvény eleme(konstans e: Elemtípus, a: ): Logikai Ciklus amíg i a.db és e a.elem[i].érték eleme:=i a.db Műveletigény számítása: a ciklus az A multihalmaz elemszámaszor fut le, azaz a futási idő a multihalmaz elemszámával arányos. Függvény multiplicitás(konstans a:, e: Elemtípus): Egész Ciklus amíg i a.db és e a.elem(i).érték Ha i a.db akkor multiplicitás:=a.elem(i).multi különben multiplicitás:=0 Műveletigény számítása: a ciklus az A multihalmaz elemszámaszor fut le, azaz a futási idő a multihalmaz elemszámával arányos. Függvény benne(konstans e: Halmazelem, a: ): Logikai Ciklus amíg i a.db és e a.elem[i] benne:=i a.db és e.multi a.elem[i].multi Műveletigény számítása: a ciklus az A multihalmaz elemszámaszor fut le, azaz a futási idő a multihalmaz elemszámával arányos. Függvény része(konstans a,b: ):Logikai Ciklus amíg i a.db és benne(a.elem[i],b) része:=i a.db Műveletigény számítása: a külső ciklus az A, a benne műveletben levő belső ciklus a B multihalmaz elemszámaszor fut le, azaz a futási idő a két multihalmaz elemszáma szorzatával arányos. 4

Operátor unió(konstans a,b: ): Változó c: c:=a Ciklus i=1-tõl b.db-ig j:=1 Ciklus amíg j a.db és b.elem(i) a.elem(j) j:=j+1 Ha j>a.db akkor c.db:=c.db+1: c.elem(c.db):=b.elem(i) különben c.elem(j).multi:=c.elem(j).multi+b.elem[i].multi unió:=c Függvény max(konstans a,b: ): Változó c: c:=a Ciklus i=1-tõl b.db-ig j:=1 Ciklus amíg j a.db és b.elem(i) a.elem(j) j:=j+1 Ha j>a.db akkor c.db:=c.db+1: c.elem(c.db):=b.elem(i) különben ha b.elem[i].multi>c.elem(j).multi akkor 2 c.elem(j).multi:=b.elem[i].multi max:=c Operátor metszet(konstans a,b: ): Változó c: c.db:=0 Ciklus i=1-tõl a.db-ig j:=1 Ciklus amíg j b.db és b.elem(j) a.elem(i) j:=j+1 Ha j b.db akkor c.db:=c.db+1: c.elem(c.db):=a.elem(i) Ha b.elem(j).multi<a.elem(i).multi akkor c.elem(c.db).multi:=b.elem(j).multi Elágazások vége metszet:=c 2 A min mûvelet ugyanez, csak ebben a sorban a > relációt <-re kell cserélni. 5

A megoldás alapvető problémája, hogy sehol sem ellenőrizhető, hogy a multihalmazban valóban csak a benne előfordulható elemek vannak. Az így ábrázolt multihalmazok elemtípusára semmilyen megkötést nem kell tennünk, hiszen egy tömbben bármilyen elem elhelyezhető. Még arra sincs korlátozás, hogy mekkora lehet az alaphalmaz elemszáma, amiből a multihalmaz elemei származnak. Csak annyi a megkötésünk, hogy a konkrét multihalmazok elemszámát korlátozzuk. Darabszám vektor Vegyünk fel egy annyi elemből álló sorozatot, amennyi a multihalmaz lehetséges elem fajtáinak száma! Képezzük le a multihalmaz elemtípusát az 1..Max'Elemszám típusra! Legyen az i. elem x értékű, ha az i. lehetséges elem x-szer van benne van a multihalmazban, illetve 0, ha nincs benne! =Tömb(Min'Elemtípus..Max'Elemtípus:Egész) Ebben az esetben a multihalmazműveleteket egész aritmetikai műveletekre visszavezetve valósítjuk meg: Eljárás Beolvasás(Változó a: ): Be: N [a multihalmaz elemszáma] Üres(a) Ciklus i=1-től N-ig Be: e,db; a[e]:=db Műveletigény számítása: a ciklus a multihalmaz elemeinek számaszor fut le, azaz a futási idő a multihalmaz elemszámával arányos. Eljárás Kiírás(Konstans a: ): Ha a[i]>0 akkor Ki: i,a[i] Eljárás Üres(Változó a: ): a[i]:=0 6

Függvény Üres?(Konstans a: ): i:=min'elemtípus Ciklus amíg i Max'Elemtípus és nem eleme(i,a) Üres?:=(i>Max'Elemtípus) Eljárás Multihalmazba(Változó a:, Konstans e: Elemtípus): a[e]:=a[e]+1 Eljárás Multihalmazból(Változó a: multihalmaz(elemtípus), Konstans e: Elemtípus): Ha a[e]>0 akkor a[e]:=a[e]-1 Függvény eleme(konstans e: Elemtípus, a: ): Logikai eleme:=a[e]>0 Függvény multiplicitás(konstans a:, e: Elemtípus): Egész multiplicitás:=a[e] Függvény része(konstans a,b: ): Logikai i:=min'elemtípus Ciklus amíg i Max'Elemtípus és a[i] b[i] része:=i>max'elemtípus 7

Operátor metszet(konstans a,b: ): Változó c: c[i]:=min(a[i],b[i]) metszet:=c Operátor unió(konstans a,b: ): Változó c: c[i]:=a[i]+b[i] unió:=c Operátor max(konstans a,b: ): Változó c: c[i]:=max(a[i],b[i]) unió:=c Operátor különbség(konstans a,b: ): Változó c: c[i]:=max(a[i]-b[i],0) különbség:=c 8

Feladatatok multihalmazokra a Nemes Tihamér OITV-ről és az Informatika OKTV-ről 1. feladat Egy almatermelő N (1 N 100) fajta almát termel, ismerjük, hogy melyik fajtából mennyit. Egy kereskedő M (1 N 100) fajta almát szeretne venni tőle, azt is tudjuk, hogy melyik fajtából mennyit. Készíts programot (alma.pas, alma.c, ), amely megadja, hogy (A) a termelőnek melyik fajtából mennyi marad, valamint hogy (B) a kereskedő melyik fajtából mennyit tud vásárolni! Példa: Bemenet: Termelő fajtái száma: 3 Kereskedő fajtái száma: 2 1. fajta neve: jonagold 1. fajta neve: golden 1. fajta mennyisége: 100 1. fajta mennyisége: 50 2. fajta neve: golden 2. fajta neve: starking 2. fajta mennyisége: 30 2. fajta mennyisége: 100 3. fajta neve: idared 3. fajta mennyisége: 500 Kimenet: Termelőnél marad: Kereskedő vesz: jonagold 100 golden 30 idared 500 Az A feladat megoldása a termelő és a kereskedő multihalmazának különbsége, a B feladat megoldása pedig a két multihalmaz metszete. A: x:=különbség(termelő,kereskedő) B: x:=metszet(termelő,kereskedő) 2. feladat Egy programozási versenyen minden versenyző választhat egy programozási nyelvet, amin dolgozni fog. Készíts programot (NYELVEK.PAS, NYELVEK.C, ) a következő feladat megoldására, A programod olvassa be a választható nyelvek számát (1 M 10) és a versenyen induló tanulók számát (1 N 100), majd a választható nyelveket, s legvégül az egyes tanulók által válasz- 9

tott nyelveket! Ezután adja meg, hogy mely tanulók választottak illegális nyelvet (olyat, ami nem szerepelt a felsoroltak között), mely nyelveket nem választotta senki, s melyik választott nyelvet hányan választották! Példa: Nyelvek száma: 3 Illegális nyelv: 3. versenyző Versenyzők száma: 5 Választható nyelvek: Pascal Logo C++ Választott nyelvek: Pascal Pascal Delphi C++ Pascal Nem választott nyelv: Logo Választott nyelvek: Pascal: 3 versenyző C++: 1 versenyző Itt a harmadik részfeladat egy multihalmaz előállítása, majd kiírása: (a megoldás a választott nyelvek beolvasásával kezdődik) C(N): Üres(a) Ciklus i=1-től N-ig Be: x; Multihalmazba(a,x) Kiírás(a) 3. feladat A kukutyini állatkert N, a rátóti pedig M fajta (N,M 100) állatot tart. Tudjuk, hogy melyik állatkertben melyik fajtából hány példány van. A két állatkert olyan állatokat cserélhet egymással, amelyekbõl mindkettõnek legalább K példánya van, illetve olyan állatokat ajándékozhat a másiknak, amelyekbõl legalább L példánya van, a másiknak pedig egyetlen példánya sincs. Készíts programot, amely beolvassa a kukutyini, majd a rátóti állatkert adatait, végül pedig K és L értékét! Mind a két esetben be kell olvasni az állatfajták számát, majd az egyes állatfajták nevét és példányszámát. A program írja ki, hogy (A) mely állatfajtákból cserélhet a két állatkert, illetve (B) mely állatfajtákból ajándékozhat a kukutyini a rátótinak, s (C) melyekbõl a rátóti a kukutyininak! Példa: A kukutyini fajták száma? 4 1. állat? kecske A rátóti fajták száma? 5 1. állat? kecske 10

példányszáma? 12 2. állat? nyúl példányszáma? 41 3. állat? ló példányszáma?8 4. állat? liba példányszáma? 76 példányszáma? 8 2. állat? pulyka példányszáma? 16 3. állat? szamár példányszáma? 1 4. állat? ló példányszáma? 4 5. állat? liba példányszáma? 60 Mekkora létszám fölött lehet cserélni? 6 Mekkora létszám fölött lehet ajándékozni? 12 Csere: kecske liba Kukutyin ajándékoz: nyúl Rátót ajándékoz: pulyka Az A részfeladat megoldása a két multihalmaz metszetének azon elemei, amelyek multiplicitása legalább K, a B és a C részfeladaté pedig azon elemek, amelyek egyik multihalmazban legalább L a másikban pedig 0 multiplicitással fordulnak elő. A: x:=metszet(kukutyin,rátót) Ciklus i=1-től x.db-ig Ha x.elem[i].multi K akkor Ki: x.elem[i].érték B: Ciklus i=1-től kukutyin.db-ig Ha kukutyin.elem[i].multi L és multiplicitás(rátót,kukutyin.elem[i].érték)=0 akkor Ki: kukutyin.elem[i].érték C: Ciklus i=1-től rátót.db-ig Ha rátót.elem[i].multi L és multiplicitás(kukutyin,rátót.elem[i].érték)=0 akkor Ki: rátót.elem[i].érték 11