Programozási alapismeretek 6. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 6.2/512014. 07. 12.2014. 07. 12.2014. 07. 12.  Rekordok/struktúrák.

Slides:



Advertisements
Hasonló előadás
C++ programozási nyelv Gyakorlat hét
Advertisements

Tömbök C#-ban.
Programozási alapismeretek
Programozási alapismeretek 9. előadás
Programozási alapismeretek 5. előadás. ELTE Szlávi - Zsakó: Programozási alapismeretek 5.2/  Programozási tételek.
Algebrai specifikációk Szlávi Péter ELTE IK Média- és Oktatásinformatikai Tanszék
INFOÉRA 2006 Kombinatorika
Rekurzió (Horváth Gyula és Szlávi Péter előadásai felhasználásával)
Algoritmizálás, adatmodellezés tanítása 4. előadás
Programozás alapjai A programozás azt a folyamatot jelenti, melynek során a feladatot a számítógép számára érthető formában írjuk le. C++, Delphi, Java,
Copyright, 2009 © Szlávi Péter A kupac és a prioritási sor típuskonstrukciók Szlávi Péter ELTE IK Média- és Oktatásinformatikai Tanszék
Minimális költségű feszítőfák
Programozási ismeretek oktatása: kód vagy algoritmus
Programozási alapismeretek 4. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 4.2/  A szöveg A szöveg.
Programozási alapismeretek 2. előadás. ELTE Szlávi - Zsakó: Programozási alapismeretek 2.2/  Adatokkal kapcsolatos.
Programozási alapismeretek 7. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás2/  Sorozatszámítás.
Programozási alapismeretek 3. előadás
Programozási alapismeretek 13. előadás. ELTE Érdekességek - kombinatorika  Az iskola bejáratánál N lépcsőfok van. Egyszerre maximum K fokot tudunk lépni,
Programozási alapismeretek
Programozási alapismeretek 1. előadás
Programozási alapismeretek 10. előadás
Programozási alapismeretek 5. előadás. ELTE 2/  Programozási tételek – a lényeglényeg  Sorozatszámítás Sorozatszámítás.
Programozási alapismeretek 8. előadás. ELTE 2/  További programozási tételek További programozási tételek 
Programozási alapismeretek 11. előadás. ELTE Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 11.2/ Tartalom.
Programozási alapismeretek 9. előadás. ELTE Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 9. előadás2/
Programozási alapismeretek 12. előadás. ELTE  Tapasztalatok a rendezésről Tapasztalatok a rendezésről  Keresés rendezett sorozatban Keresés rendezett.
5. előadás (2005. március 22.) Függvények definíciója, deklarációja, hívása Enumerációs adattípus 1.
4. előadás (2005. március 8.) Pointerek Pointer aritmetika
Ez a dokumentum az Európai Unió pénzügyi támogatásával valósult meg. A dokumentum tartalmáért teljes mértékben Szegedi Tudományegyetem vállalja a felelősséget,
Fák, bináris fák INFOÉRA Ez így 60 perc.
ELTE Szlávi - Zsakó: Programozási alapismeretek 5.1/ Keresés Specifikáció:  Bemenet: N:Egész, X:Tömb[1..N:Valami]
ELTE Szlávi-Zsakó: Programozási alapismeretek 8.1/ Kiválogatás Specifikáció:  Bemenet: N:Egész, X:Tömb[1..N:Valami]
ELTE Szlávi-Zsakó: Programozási alapismeretek 10.1/ Összegzés mátrixra Feladat: Egy mátrix elemeinek összege.
ELTE Szlávi - Zsakó: Programozási alapismeretek 5.1/ Sorozatszámítás Specifikáció (a végleges) :  Bemenet:
ELTE Szlávi-Zsakó: Programozási alapismeretek Szlávi-Zsakó: Programozási alapismeretek 3. 1/
Copyright, 1999 © Szlávi Péter Prioritási sor típuskonstrukció Szlávi Péter ELTE Informatika Szakmódszertani Csoport
Tökéletes Hash függvények keresése Kasler Lóránd-Péter.
Helyes zárójelezés programozási tétele LL.
Kényszerek megadása. Indexek kezelése.
A problémamegoldás lépései
ELTE Adatokkal kapcsolatos fogalmak  Konstans: az az adat, amely a műveletvégzés során nem változtat(hat)ja meg értékét, mindvégig ugyanabban az „állapotban”
Bevezetés az alakmodellezésbe I. Budapesti Műszaki Főiskola Neumann János Informatikai Főiskolai Kar A Műszaki Tervezés Rendszerei 2000/2001 tanév, I.
A REKORD TIPUS Páll Boglárka. Ismétlés: Feladat Készítsünk kimutatást a XI.B osztály tanulóiról. Minden tanuló esetén a következő adatokat tartjuk nyilván:
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
Specifikáció Specifikáció Követelményei: Tömör legyen, egyértelmű, precíz, jól formalizált, szemléletes, érthető Meg kell adni a program bemenő adatait.
Programozási alapismeretek 11. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 11.2/ Tartalom  Rendezési.
Algoritmizálás, adatmodellezés tanítása 7. előadás
Copyright, 1999 © Szlávi Péter Sor típuskonstrukció Szlávi Péter ELTE IK Média- és Oktatásinformatikai Tanszék
Dinamikus programozás
CUDA C/C++ programozás Szál struktúra A segédanyag készítése a TÁMOP A/ Nemzeti Kiválóság Program című kiemelt projekt keretében.
Algoritmizálás, adatmodellezés tanítása 8. előadás.
Algoritmizálás, adatmodellezés tanítása 2. előadás.
INFOÉRA 2006 Nagypontosságú aritmetika I.
Programozási alapismeretek * A Zh-írás módszertana.
Programozási alapismeretek 8. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 8.2/  További programozási.
Algoritmizálás, adatmodellezés
Programozási alapismeretek 10. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 10.2/  Kiválogatás + összegzés.
Programozási alapismeretek 11. előadás
Programozási alapismeretek 2. előadás. ELTE Szlávi - Zsakó: Programozási alapismeretek 2.2/  Adatokkal kapcsolatos.
INFOÉRA 2006 Nagypontosságú aritmetika II.
Geometriai feladatok programozása Geometriai programozás Szlávi Péter ELTE IK Média- és Oktatásinformatika Tanszék 2010.
Objektum orientált programozás 4. Mutatók, típusok és struktúrák Nagy Szilvia.
Informatikai gyakorlatok 11. évfolyam
Programozási alapismeretek 4. előadás. ELTE  Programozási tételek – a lényeglényeg  Sorozatszámítás – összegzés… Sorozatszámítás  Megszámolás.
INFOÉRA 2006 Nagypontosságú aritmetika III.
NJSzT Nemes Tihamér Országos Középiskolai Sámítástechnikai Tanulmányi Verseny.
Gráfok 2. Szlávi Péter ELTE IK Média- és Oktatásinformatikai Tanszék
Adatszerkezetek -- Típusok
Programozási tételek.
Előadás másolata:

Programozási alapismeretek 6. előadás

ELTE Szlávi-Zsakó: Programozási alapismeretek 6.2/  Rekordok/struktúrák – adatabsztrakció Rekordok/struktúrák  Összetett típusok – kitekintés Összetett típusok  Függvények – algoritmikus absztrakció Függvények Tartalom

ELTE Szlávi-Zsakó: Programozási alapismeretek 6.3/ Rekordok/Struktúrák Feladat: Adjuk meg, hogy egy P síkbeli pont melyik síknegyedbe esik! Megoldás felé:  A síkbeli pontokat x- és y-koordinátájukkal adjuk meg. Ehhez egy új összetett adattípus- ra van szükség: P:Rekord(x,y:Valós)  A rekordok a tömbökhöz hasonlóan össze- tett adattípusok, itt azonban az elemeknek nem indexük (sorszámuk) van, hanem nevük (P.x, P.y).

ELTE Szlávi-Zsakó: Programozási alapismeretek 6.4/ Rekordok/Struktúrák Specifikáció: xy  Bemenet: P:TPont, TPont=Rekord(x,y:Valós)  Kimenet: SN:Egész  Előfeltétel: –  Utófeltétel: P.x  0 és P.y  0  SN=1 és P.x<0 és P.y  0  SN=2 és P.x<0 és P.y<0  SN=3 és P.x  0 és P.y<0  SN=4 C++ típus definíció : struct TPont{double x,y;} típusazonosító mezőtípus mezőazonosító(k) Típusdefiníció

ELTE Szlávi-Zsakó: Programozási alapismeretek 6.5/ Rekordok/Struktúrák Specifikáció: Px,y  Bemenet: P:TPont, TPont=Rekord(x,y:Valós)  Kimenet: SN:Egész  Előfeltétel: – P.xP.y  Utófeltétel: P.x  0 és P.y  0  SN=1 és P.x<0 és P.y  0  SN=2 és P.x<0 és P.y<0  SN=3 és P.x  0 és P.y<0  SN=4 C++ típus deklaráció : TPont P; típusazonosító adatazonosító adatazonosító. mezőazonosító

ELTE Szlávi-Zsakó: Programozási alapismeretek 6.6/ P.x  0 P.y  0 P.yP.y0P.yP.y0 SN:=1SN:=4SN:=2SN:=3 P.x  0 P.y0P.y0P.y0P.y0 SN:=1SN:=4SN:=2SN:=3 Rekordok/Struktúrák Algoritmus: I N I N I N adatazonosító. mezőazonosító

ELTE Szlávi-Zsakó: Programozási alapismeretek 6.7/ Rekordok/Struktúrák P.x  0 P.y  0 P.yP.y0P.yP.y0 SN:=1SN:=4SN:=2SN:=3 C++ hivatkozás: x y y if (P. x>=0){ if (P. y>=0) SN=1; else SN=4; }else{ if (P. y>=0) SN=2; else SN=3; } Algoritmus: adatazonosító. mezőazonosító I N I N I N

ELTE Szlávi-Zsakó: Programozási alapismeretek 6.8/ Rekordok/Struktúrák A teljes C++ kód: Típusdefiníció Típusdeklarációk

ELTE Szlávi-Zsakó: Programozási alapismeretek 6.9/ Rekordok/Struktúrák A teljes C++ kód: Beolvasások

ELTE Szlávi-Zsakó: Programozási alapismeretek 6.10/ Rekordok/Struktúrák A teljes C++ kód: A lényeg Kód Kód jegyzet- ként Kód Kód jegyzet- ként Kód

ELTE Szlávi-Zsakó: Programozási alapismeretek 6.11/ Összetett típusok

ELTE Szlávi-Zsakó: Programozási alapismeretek 6.12/ Feladat: Adjuk meg, hogy az origóból nézve az 1. sík- negyedbe eső P ponthoz képest a Q balra, jobbra, vagy pedig egy irányban látszik-e! Irány(P,Q) = Függvények (irány)

ELTE Szlávi-Zsakó: Programozási alapismeretek 6.13/ Értelmezés: A pontok irányát megadhatjuk az oda vezető egyenes és az x-tengely szögével.  <   tan(  )<tan(  ) tan(  )=P.y/P.x Függvények (irány)

ELTE Szlávi-Zsakó: Programozási alapismeretek 6.14/  <   tan(  )<tan(  )  P.y/P.x<Q.y/Q.x  P.y*Q.x<Q.y*P.x  P.y*Q.x–Q.y*P.x<0 Állítás: Irány(P,Q)=sgn(P.y*Q.x–Q.y*P.x ) (és ez igaz nem csak az 1. síknegyedben!). Ellenőrizze a teljesülését: sgn(P.y*Q.x–Q.y*P.x ) = Függvények (irány)

ELTE Szlávi-Zsakó: Programozási alapismeretek 6.15/ Specifikáció :  Bemenet: P,Q:TPont, TPont=Rekord(x,y:Valós)  Kimenet: Ir:Egész  Előfeltétel: –  Utófeltétel: Ir=Irány(P,Q)  Definíció: Irány:TPont  TPont  Egész Irány(p,q):=sgn(p.y*q.x–q.y*p.x ) Algoritmus: Ir:=Irány(P,Q) Aktuális paraméterek Formális paraméterek Aktuális paraméterek Függvények (irány)

ELTE Szlávi-Zsakó: Programozási alapismeretek 6.16/  Függvénydefiníció: a forgásirány meghatározására. Irány(p,q:TPont):Egész S:=p.y*q.x – q.y*p.x S<0S=0S>0 F:= – 1F:=0F:=1 Irány:=F Formális paraméterek Függvények (irány)

ELTE Szlávi-Zsakó: Programozási alapismeretek 6.17/  C++ kódolás: int Irany(TPont p, TPont q) { int F,S; //segédváltozók S=p.y*q.x-q.y*p.x; //típuskonverzió if (S 0) F=1; return F; } int Ir=Irany(P,Q); Függvények (irány)

ELTE Szlávi-Zsakó: Programozási alapismeretek 6.18/  C++ kódolás – egésze: Függvények (irány) Függvényfejsor- definíciók ( prototípusok ) Főprogram Típusdefiníció Formális paraméter- konvenció: _azonosító

ELTE Szlávi-Zsakó: Programozási alapismeretek 6.19/  C++ kódolás – egésze: Függvények (irány) A lényegi finomítás (=függvény)

ELTE Szlávi-Zsakó: Programozási alapismeretek 6.20/  C++ kódolás – egésze: Függvények (irány) A bemenet finomításai (=függvény)

ELTE Szlávi-Zsakó: Programozási alapismeretek 6.21/  C++ kódolás – egésze: Függvények (irány) Kód Kód jegyzet- ként Kód Kód jegyzet- ként Kód A kimenet és kilépés finomításai (=függvény)

ELTE Szlávi-Zsakó: Programozási alapismeretek 6.22/  Megjegyzés: a bemenet sokszor értékvisszaadás nélküli függ- vénnyel (eljárással) történik; az előbbi pl. így: Függvények (irány) void BePont(string _pontNev, TPont &_pont) { _pont.x=BeKoordinata("Add meg "+_pontNev+ " x-koordinatajat!"); _pont.y=BeKoordinata("Add meg "+_pontNev+ " y-koordinatajat!"); return; } TPont BePont(string _pontNev) { TPont pont;//segéd pont pont.x=BeKoordinata("Add meg "+_pontNev+ " x-koordinatajat!"); pont.y=BeKoordinata("Add meg "+_pontNev+ " y-koordinatajat!"); return pont; } Bementi paraméter Kimenti paraméter

ELTE Szlávi-Zsakó: Programozási alapismeretek 6.23/ C++ tudnivalók – összefoglalás:  Függvényfej-definíció:  Függvény-definíció: fvTíp fvAzon(parTíp formParAzon,…); vagy void fvAzon(parTíp formParAzon,…); A formális paraméterek elmaradhatnak, de a zárójelek nem! A fejsor, pontosvessző nélkül { … //fvtörzs return fvÉrték } void esetén fvÉrték nélküli return ! Függvények

ELTE Szlávi-Zsakó: Programozási alapismeretek 6.24/ C++ tudnivalók – összefoglalás:  Formális skalár paraméter: o bemeneti  nincs speciális kulcs-szó (jel) o kimeneti  & a speciális prefix kulcs-szó (jel)  Aktuális skalár paraméter: ha a megfelelő formális paraméter o bemeneti  akár konstans, akár változó o kimeneti  csak változó lehet. Függvények Pontosabban: nem tömb

ELTE Szlávi-Zsakó: Programozási alapismeretek 6.25/ Függvények C++ tudnivalók – összefoglalás:  Skalár paraméterátadás: o Értékszerinti − a formális paraméterből keletkezett lokális változóba másolódik a híváskor az aktuális paraméter értéke, így ennek a törzsön belüli megváltozása nincs hatással az aktuális paraméterre. Pl.: o Hivatkozás szerinti − a formális paramé- terbe az aktuális paraméter címe (rá való hivat- kozás) kerül, a lokális néven is elérhetővé válik. Pl.: int max(int x, int y) void max(int x, int y, int &max_xy) Input-paraméterek. Input-paraméterek. In-/Output-paraméter.

ELTE Szlávi-Zsakó: Programozási alapismeretek 6.26/ C++ tudnivalók – összefoglalás:  Formális tömb paraméter: o bemeneti  const prefix kulcs-szó o kimeneti  nincs speciális kulcs-szó  Aktuális tömb paraméter: ha a megfelelő formális paraméter o bemeneti  akár konstans, akár változó o kimeneti  csak változó lehet. Függvények

ELTE Szlávi-Zsakó: Programozási alapismeretek 6.27/ Finomítások a C++ kódban C++ tudnivalók – összefoglalás:  Tömb paraméterátadás: o Alapelv: a tömbök mindig hivatkozás szerint adódnak át! o Bemeneti − példa a fejsorra: o Kimeneti (is) − példa a fejsorra: void ki_int_tomb(const int x[], int n, int maxN) vagy void ki_int_tomb(const int x[maxN], int n, int maxN) void be_int_tomb(const int x[], int &n, int maxN) vagy void be_int_tomb(const int x[maxN],int &n, int maxN) Input-paraméterek. In-/ Output-paraméterek. Ellenőrzési céllal

ELTE Szlávi-Zsakó: Programozási alapismeretek 6.28/ Finomítások a C++ kódban C++ tudnivalók – összefoglalás:  Tömb paraméterátadás: o Alapelv: a tömbök mindig hivatkozás szerint adódnak át! o Bemeneti − példa a fejsorra: o Kimeneti (is) − példa a fejsorra: Megjegyzés: az 1. változat mátrixokra nem működik! void ki_int_tomb(const int x[], int n, int maxN) vagy void ki_int_tomb(const int x[maxN], int n, int maxN) Input-paraméterek. void be_int_tomb(int x[], int &n, int maxN) vagy void be_int_tomb(int x[maxN],int &n, int maxN) In-/ Output-paraméterek. Ellenőrzési céllal

ELTE Szlávi-Zsakó: Programozási alapismeretek 6.29/ Finomítások a C++ kódban C++ tudnivalók – összefoglalás:  A program makró-szerkezete 1 …függvényfej-definíciók… int main()// a főprogram { // bemenet: …bemeneti_adatok deklarációi… // kimenet: …kimeneti_adatok deklarációi… // a programtevékenység legfelsőbb szintje: beolvasó_függvény ( bemeneti_adatok ); lényegi_függvény ( bemeneti_adatok,kimeneti_adatok ); kiíró_függvény ( kimeneti_adatok ); return 0; } …függvény-definíciók… Programparaméterek, a specifikáció Bemenet és Kimenet része alapján. A legfőbb transzformáció a specifikáció Utófeltétel része alapján. Aktuális paraméterek.

ELTE Szlávi-Zsakó: Programozási alapismeretek 6. 30/ Finomítások a C++ kódban C++ tudnivalók – összefoglalás:  A program makró-szerkezete 2 // bemenet: …bemeneti_adatok deklarációi… // kimenet: …kimeneti_adatok deklarációi… …függvényfej-definíciók… int main()// a főprogram { // a programtevékenység legfelsőbb szintje: beolvasó_függvény ( bemeneti_adatok ); lényegi_függvény ( bemeneti_adatok,kimeneti_adatok ); kiíró_függvény ( kimeneti_adatok ); return 0; } …függvény-definíciók… Programparaméterek, a specifikáció Bemenet és Kimenet része alapján. A paraméterezés elhagyható. A program GLOBÁLIS adatai.

ELTE Szlávi-Zsakó: Programozási alapismeretek 6. 31/ Finomítások a C++ kódban C++ tudnivalók – összefoglalás:  A program makró-szerkezete 2 // bemenet: …bemeneti_adatok deklarációi… // kimenet: …kimeneti_adatok deklarációi… …függvényfej-definíciók… int main()// a főprogram { // a programtevékenység legfelsőbb szintje: beolvasó_függvény (); lényegi_függvény (); kiiró_függvény (); return 0; } …függvény-defíníciók… Programparaméterek, a specifikáció Bemenet és Kimenet része alapján. A program GLOBÁLIS adatai.

ELTE Szlávi-Zsakó: Programozási alapismeretek 6. 32/ Finomítások a C++ kódban C++ tudnivalók – összefoglalás (egy teljesebb példa) :  Feladat: Nyelvvizsgán a nyelvtani tesztek pontszámait (0..maxP, maxP>0) ülési sorrendben jegyezték föl. Keressünk olyan vizsgázót, aki ugyanannyi pontot kapott, mint valamelyik szomszédja!  Megoldás: Keresés tétel – egy pontszám-sorozatból kell kikeresni olyan elemet, amely megegyezik a szomszédjával (pontosítsunk: a következővel). Hf: specifikálás + algoritmizálás Figyeljük meg a kód alprogramokra bontását!

ELTE Szlávi-Zsakó: Programozási alapismeretek 6.33/ Finomítások a C++ kódban C++ tudnivalók – összefoglalás:  Egy teljesebb kódpélda: Függvényfej-definíciók.

ELTE Szlávi-Zsakó: Programozási alapismeretek 6.34/ Finomítások a C++ kódban C++ tudnivalók – összefoglalás:  Egy teljesebb kódpélda: Adatbeolvasások, és a főprogram.

ELTE Szlávi-Zsakó: Programozási alapismeretek 6.35/ Finomítások a C++ kódban C++ tudnivalók – összefoglalás:  Egy teljesebb kódpélda: Paraméterbeolvasó eljárás definíciója. maxN

ELTE Szlávi-Zsakó: Programozási alapismeretek 6.36/ Finomítások a C++ kódban C++ tudnivalók – összefoglalás:  Egy teljesebb kódpélda: A lényegi eljárás definíciója. (Keresés tétel!) maxN

ELTE Szlávi-Zsakó: Programozási alapismeretek 6.37/ Finomítások a C++ kódban C++ tudnivalók – összefoglalás:  Egy teljesebb kódpélda: A keresés eredményét kiíró eljárás definíciója.

ELTE Szlávi-Zsakó: Programozási alapismeretek 6.38/ Finomítások a C++ kódban C++ tudnivalók – összefoglalás:  Egy teljesebb kódpélda: További eljárások definíciói. Kód jegyzet- ként Kiválasztás + sorozatszámítás tétel „fúziója”.

ELTE Szlávi-Zsakó: Programozási alapismeretek 6.39/ Feladat: Egy s (A  B) sza- kaszhoz képest egy t (B  C) szakasz mi- lyen irányban fordul? Megoldásötlet: Toljuk el az s-t és a t-t úgy, hogy az A pont az origóba kerüljön! Ezzel visszave- zetjük az „irányos” feladatra! Fordul(A,B,C)=Irány(B–A,C–A)Irány Függvények (fordul)

ELTE Szlávi-Zsakó: Programozási alapismeretek 6.40/ Specifikáció:  Bemenet: A,B,C:TPont, TPont=……  Kimenet: Ford:Egész  Előfeltétel: –  Utófeltétel: Ford=Fordul(A,B,C)  Definíció: Fordul(a,b,c):=… a feladat leírása szerint –1, +1 vagy 0…  Megjegyzés: Ezzel ekvivalens feladat: Az (A,B)-n átmenő egyenestől a C pont balra van, vagy jobbra van, vagy az (A,B)-re illeszkedő egyenesen van? Függvények (fordul)

ELTE Szlávi-Zsakó: Programozási alapismeretek 6.41/  A megoldásban hívjuk az Irány függvényt! Fordul(a,b,c:TPont):Egész p.x:=b.x – a.x p.y:=b.y – a.y q.x:=c.x – a.x q.y:=c.y – a.y Fordul:=Irány(p,q) Ford:=Fordul(A,B,C) int Fordul(TPont a, TPont b, TPont c){ TPont p,q; p.x=b.x – a.x; p.y=b.y – a.y; q.x=c.x – a.x; q.y=c.y – a.y; return Irany(p,q);} Függvények (fordul)

ELTE Szlávi-Zsakó: Programozási alapismeretek 6.42/ Feladat: Döntsük el, hogy egy C pont rajta van-e egy (A,B) szakaszon! Specifikáció:  Bemenet: A,B,C:TPont  Kimenet: RajtaE:Logikai  Előfeltétel: –  Utófeltétel: RajtaE=Rajta(A,B,C)  Definíció: Rajta(a,b,c,):=… Függvények (rajta?)

ELTE Szlávi-Zsakó: Programozási alapismeretek 6.43/ Definíció: Rajta(a,b,c):= Fordul(a,b,c)=0 és Közte(a.x,c.x,b.x) és Közte(a.y,c.y,b.y) Azaz még egy függvényt kell definiálnunk, ami el- dönti, hogy a második paramétere a másik kettő között van-e! Közte(r,s,t):= r ≤ s ≤ t vagy t ≤ s ≤ r Függvények (rajta?)

ELTE Szlávi-Zsakó: Programozási alapismeretek 6.44/ Közte(r,s,t:TPont):Logikai Közte:=r  s és s  t vagy t  s és s  r Rajta(a,b,c:TPont):Logikai Rajta:= Fordul(a,b,c)=0 és Közte(a.x,c.x,b.x) és Közte(a.y,c.y,b.y) Függvények (rajta?)

ELTE Szlávi-Zsakó: Programozási alapismeretek 6.45/ Függvények (metszi?) Feladat: Döntsük el, hogy az (A,B) szakasz metszi-e a (C,D) szakaszt! Lehetséges esetek:

ELTE Szlávi-Zsakó: Programozási alapismeretek 6.46/ Specifikáció:  Bemenet: A,B,C,D:TPont  Kimenet: MetsziE:Logikai  Előfeltétel: –  Utófeltétel: MetsziE= ( Fordul(A,B,C)*Fordul(A,B,D)<0 és Fordul(C,D,A)*Fordul(C,D,B)<0 vagy Rajta(A,B,C) vagy Rajta(A,B,D) vagy Rajta(C,D,A) vagy Rajta(C,D,B) )FordulRajta Függvények (metszi?) Metszi(A,B,C,D)

ELTE Szlávi-Zsakó: Programozási alapismeretek 6.47/ Metszi(a,b,c,d:TPont):Logikai fabc:=Fordul(a,b,c) fabd:=Fordul(a,b,d) fcda:=Fordul(c,d,a) fcdb:=Fordul(c,d,b) Metszi:=fabc*fabd<0 és fcda*fcdb<0 vagy Rajta(a,b,c) vagy Rajta(a,b,d) vagy Rajta(c,d,a) vagy Rajta(c,d,b) Algoritmus: Függvények (metszi?)

ELTE Szlávi-Zsakó: Programozási alapismeretek 6.48/ Feladat: Döntsük el, hogy a D pont az (A,B,C) há- romszög belsejében van-e! Megoldásötlet: Belül van, ha a háromszöget A  B  C  A sorrendben körbejárva a D pont vagy min- dig balra, vagy mindig jobbra van. Függvények (háromszögben?)

ELTE Szlávi-Zsakó: Programozási alapismeretek 6.49/ Specifikáció:  Bemenet: A,B,C,D:TPont  Kimenet: BentE:Logikai  Előfeltétel: –  Utófeltétel: BentE=(Fordul(A,B,D)= =Fordul(B,C,D)=Fordul(C,A,D))Fordul Algoritmus: Belül(a,b,c,d:TPont):Logikai Belül:=Fordul(a,b,d)=Fordul(b,c,d) és Fordul(b,c,d)=Fordul(c,a,d)Fordul Függvények (háromszögben?) Kissé „szabadon” értelmezve a „lánc- azonosságot”!

ELTE Szlávi-Zsakó: Programozási alapismeretek 6.50/ Függvények Háromszögben Fordul Irány Metszi Fordul Irány Rajta Fordul Irány Közte A (lényegi) függvények egymásra épü- lése – a programok makró-struktúrája:

Programozási alapismeretek 6. előadás vége