51
Programozási alapismeretek 6. előadás

Programozási alapismeretek 6. előadás

  • Upload
    mieko

  • View
    42

  • Download
    4

Embed Size (px)

DESCRIPTION

Programozási alapismeretek 6. előadás. Rekordok/struktúrák – adatabsztrakció Összetett típusok – kitekintés Függvények – algoritmikus absztrakció. Tartalom. Rekordok/Struktúrák. Feladat: Adjuk meg, hogy egy P síkbeli pont melyik síknegyedbe esik! Megoldás felé: - PowerPoint PPT Presentation

Citation preview

Page 1: Programozási alapismeretek  6. előadás

Programozási alapismeretek

6. előadás

Page 2: Programozási alapismeretek  6. előadás

ELTEELTE

Szlávi-Zsakó: Programozási Szlávi-Zsakó: Programozási alapismeretek 6.alapismeretek 6.

22/51/5123.04.21.23.04.21.

Rekordok/struktúrák – adatabsztrakció

Összetett típusok –kitekintés

Függvények – algoritmikus absztrakció

Tartalom

Page 3: Programozási alapismeretek  6. előadás

ELTEELTE

Szlávi-Zsakó: Programozási Szlávi-Zsakó: Programozási alapismeretek 6.alapismeretek 6.

33/51/5123.04.21.23.04.21.

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).

Page 4: Programozási alapismeretek  6. előadás

ELTEELTE

Szlávi-Zsakó: Programozási Szlávi-Zsakó: Programozási alapismeretek 6.alapismeretek 6.

44/51/5123.04.21.23.04.21.

Rekordok/Struktúrák

Specifikáció: Bemenet: P:TPont,

TPont=Rekord(xx,yy:Valós) Kimenet: SN:Egész Előfeltétel: – Utófeltétel: P.x0 és P.y0 SN=1

és P.x<0 és P.y0 SN=2

és P.x<0 és P.y<0 SN=3

és P.x0 és P.y<0 SN=4

C++ típusdefiníció:struct TPont{double x,y;}

típusazonosító mezőtípus mezőazonosító(k)

Típusdefiníció

Page 5: Programozási alapismeretek  6. előadás

ELTEELTE

Szlávi-Zsakó: Programozási Szlávi-Zsakó: Programozási alapismeretek 6.alapismeretek 6.

55/51/5123.04.21.23.04.21.

Rekordok/Struktúrák

Specifikáció: Bemenet: PP:TPont,

TPont=Rekord(xx,,yy:Valós) Kimenet: SN:Egész Előfeltétel: – Utófeltétel: P.x0 és P.y0 SN=1

és P.x<0 és P.y0 SN=2

és P.x<0 és P.y<0 SN=3

és PP..xx0 és PP..yy<0 SN=4

C++ típusdeklaráció:TPont P;

típusazonosító adatazonosító

adatazonosító.mezőazonosító

Page 6: Programozási alapismeretek  6. előadás

ELTEELTE

Szlávi-Zsakó: Programozási Szlávi-Zsakó: Programozási alapismeretek 6.alapismeretek 6.

66/51/5123.04.21.23.04.21.

P.x0P.y0 PP..yy0

SN:=1

SN:=4

SN:=2

SN:=3

P.x0P.y0 P.y0

SN:=1

SN:=4

SN:=2

SN:=3

Rekordok/Struktúrák

Algoritmus:

I N

I N I N

adatazonosító.mezőazonosító

Page 7: Programozási alapismeretek  6. előadás

ELTEELTE

Szlávi-Zsakó: Programozási Szlávi-Zsakó: Programozási alapismeretek 6.alapismeretek 6.

77/51/5123.04.21.23.04.21.

Rekordok/Struktúrák

P.x0P.y0 PP..yy0

SN:=1

SN:=4

SN:=2

SN:=3

C++ hivatkozás:if (P.xx>=0){ if (P.yy>=0) SN=1; else SN=4;}else{ if (P.yy>=0) SN=2; else SN=3;}

Algoritmus:

adatazonosító.mezőazonosító

adatazonosító.mezőazonosító

I N

I N I N

Page 8: Programozási alapismeretek  6. előadás

ELTEELTE

Szlávi-Zsakó: Programozási Szlávi-Zsakó: Programozási alapismeretek 6.alapismeretek 6.

88/51/5123.04.21.23.04.21.

Rekordok/Struktúrák

A teljes C++ kód:

Típusdefiníció

Típusdeklarációk

Page 9: Programozási alapismeretek  6. előadás

ELTEELTE

Szlávi-Zsakó: Programozási Szlávi-Zsakó: Programozási alapismeretek 6.alapismeretek 6.

99/51/5123.04.21.23.04.21.

Rekordok/Struktúrák

A teljes C++ kód:

Beolvasások

Page 10: Programozási alapismeretek  6. előadás

ELTEELTE

Szlávi-Zsakó: Programozási Szlávi-Zsakó: Programozási alapismeretek 6.alapismeretek 6.

1010/51/5123.04.21.23.04.21.

Rekordok/Struktúrák

A teljes C++ kód:

A lényeg

Kód Kód jegyzet-jegyzet-

kéntként

Kód Kód jegyzet-jegyzet-

kéntként

Page 11: Programozási alapismeretek  6. előadás

ELTEELTE

Szlávi-Zsakó: Programozási Szlávi-Zsakó: Programozási alapismeretek 6.alapismeretek 6.

1111/51/5123.04.21.23.04.21.

Összetett típusok

Page 12: Programozási alapismeretek  6. előadás

ELTEELTE

Szlávi-Zsakó: Programozási Szlávi-Zsakó: Programozási alapismeretek 6.alapismeretek 6.

1212/51/5123.04.21.23.04.21.

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) =

anegy iránybha0, jobbraha1,balraha1,

Függvények(irány)

Page 13: Programozási alapismeretek  6. előadás

ELTEELTE

Szlávi-Zsakó: Programozási Szlávi-Zsakó: Programozási alapismeretek 6.alapismeretek 6.

1313/51/5123.04.21.23.04.21.

É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

P

Q

P

P.y

P.x

Függvények(irány)

Page 14: Programozási alapismeretek  6. előadás

ELTEELTE

Szlávi-Zsakó: Programozási Szlávi-Zsakó: Programozási alapismeretek 6.alapismeretek 6.

1414/51/5123.04.21.23.04.21.

< 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) =

anegy irányb P és Qha 0, jobbratöl -Pa Qha 1,balratöl -Pa Qha 1,

Függvények(irány)

Page 15: Programozási alapismeretek  6. előadás

ELTEELTE

Szlávi-Zsakó: Programozási Szlávi-Zsakó: Programozási alapismeretek 6.alapismeretek 6.

1515/51/5123.04.21.23.04.21.

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:TPontTPontEgészIrá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éterekAktuális paraméterek

Függvények(irány)

Page 16: Programozási alapismeretek  6. előadás

ELTEELTE

Szlávi-Zsakó: Programozási Szlávi-Zsakó: Programozási alapismeretek 6.alapismeretek 6.

1616/51/5123.04.21.23.04.21.

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.xS<0 S=0 S>0

F:=–1

F:=0 F:=1

Irány:=F

Formális paraméterek

Függvények(irány)

Page 17: Programozási alapismeretek  6. előadás

ELTEELTE

Szlávi-Zsakó: Programozási Szlávi-Zsakó: Programozási alapismeretek 6.alapismeretek 6.

1717/51/5123.04.21.23.04.21.

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; else if (S==0) F=0; else if (S>0) F=1; return F;}

int Ir=Irany(P,Q);

Függvények(irány)

Page 18: Programozási alapismeretek  6. előadás

ELTEELTE

Szlávi-Zsakó: Programozási Szlávi-Zsakó: Programozási alapismeretek 6.alapismeretek 6.

1818/51/5123.04.21.23.04.21.

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ó

Page 19: Programozási alapismeretek  6. előadás

ELTEELTE

Szlávi-Zsakó: Programozási Szlávi-Zsakó: Programozási alapismeretek 6.alapismeretek 6.

1919/51/5123.04.21.23.04.21.

C++ kódolás – egésze:

Függvények(irány)

A lényegi finomítás (=függvény)

Page 20: Programozási alapismeretek  6. előadás

ELTEELTE

Szlávi-Zsakó: Programozási Szlávi-Zsakó: Programozási alapismeretek 6.alapismeretek 6.

2020/51/5123.04.21.23.04.21.

C++ kódolás – egésze:

Függvények(irány)

A bemenet finomításai (=függvény)

Page 21: Programozási alapismeretek  6. előadás

ELTEELTE

Szlávi-Zsakó: Programozási Szlávi-Zsakó: Programozási alapismeretek 6.alapismeretek 6.

2121/51/5123.04.21.23.04.21.

C++ kódolás – egésze:

Függvények(irány)

Kód Kód jegyzet-jegyzet-

kéntként

Kód Kód jegyzet-jegyzet-

kéntként

A kimenet és kilépés

finomításai (=függvény)

Page 22: Programozási alapismeretek  6. előadás

ELTEELTE

Szlávi-Zsakó: Programozási Szlávi-Zsakó: Programozási alapismeretek 6.alapismeretek 6.

2222/51/5123.04.21.23.04.21.

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

Page 23: Programozási alapismeretek  6. előadás

ELTEELTE

Szlávi-Zsakó: Programozási Szlávi-Zsakó: Programozási alapismeretek 6.alapismeretek 6.

2323/51/5123.04.21.23.04.21.

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örzsreturn fvÉrték

}void esetén fvÉrték nélküli return!

Függvények

Page 24: Programozási alapismeretek  6. előadás

ELTEELTE

Szlávi-Zsakó: Programozási Szlávi-Zsakó: Programozási alapismeretek 6.alapismeretek 6.

2424/51/5123.04.21.23.04.21.

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étero bemeneti akár konstans, akár

változóo kimeneti csak változó

lehet.

Függvények

Pontosabban: nem tömb

Pontosabban: nem tömb

Page 25: Programozási alapismeretek  6. előadás

ELTEELTE

Szlávi-Zsakó: Programozási Szlávi-Zsakó: Programozási alapismeretek 6.alapismeretek 6.

2525/51/5123.04.21.23.04.21.

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-Input-paraméterek.paraméterek.

Input-Input-paraméterek.paraméterek.

In-/Output-In-/Output-paraméter.paraméter.

Page 26: Programozási alapismeretek  6. előadás

ELTEELTE

Szlávi-Zsakó: Programozási Szlávi-Zsakó: Programozási alapismeretek 6.alapismeretek 6.

2626/51/5123.04.21.23.04.21.

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étero bemeneti akár konstans, akár

változóo kimeneti csak változó

lehet.

Függvények

Page 27: Programozási alapismeretek  6. előadás

ELTEELTE

Szlávi-Zsakó: Programozási Szlávi-Zsakó: Programozási alapismeretek 6.alapismeretek 6.

2727/51/5123.04.21.23.04.21.

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-Input-paraméterek.paraméterek.

In-/In-/Output-Output-

paraméterek.paraméterek.

Ellenőrzési Ellenőrzési céllalcéllal

Ellenőrzési Ellenőrzési céllalcéllal

Ellenőrzési Ellenőrzési céllalcéllal

Ellenőrzési Ellenőrzési céllalcéllal

Page 28: Programozási alapismeretek  6. előadás

ELTEELTE

Szlávi-Zsakó: Programozási Szlávi-Zsakó: Programozási alapismeretek 6.alapismeretek 6.

2828/51/5123.04.21.23.04.21.

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-Input-paraméterek.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-/In-/Output-Output-

paraméterek.paraméterek.

Ellenőrzési Ellenőrzési céllalcéllal

Ellenőrzési Ellenőrzési céllalcéllal

Ellenőrzési Ellenőrzési céllalcéllal

Ellenőrzési Ellenőrzési céllalcéllal

Page 29: Programozási alapismeretek  6. előadás

ELTEELTE

Szlávi-Zsakó: Programozási Szlávi-Zsakó: Programozási alapismeretek 6.alapismeretek 6.

2929/51/5123.04.21.23.04.21.

Finomítások a C++ kódban

C++ tudnivalók – összefoglalás:

A program makró-szerkezete1…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);kiiró_függvény(kimeneti_adatok);return 0;

}…függvény-defíníciók…

ProgramparaméterProgramparaméterekek,,

a specifikáció a specifikáció Bemenet és Kimenet Bemenet és Kimenet

része alapján.része alapján.

A legfőbb A legfőbb transzformáció a transzformáció a

specifikáció specifikáció Utófeltétel része Utófeltétel része

alapján.alapján.

Aktuális Aktuális paramétereparamétere

kk..

Page 30: Programozási alapismeretek  6. előadás

ELTEELTE

Szlávi-Zsakó: Programozási Szlávi-Zsakó: Programozási alapismeretek 6.alapismeretek 6.

3030/51/5123.04.21.23.04.21.

Finomítások a C++ kódban

C++ tudnivalók – összefoglalás:

A program makró-szerkezete2//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);kiiró_függvény(kimeneti_adatok);return 0;

}…függvény-defíníciók…

ProgramparaméterProgramparaméterekek,,

a specifikáció a specifikáció Bemenet és Kimenet Bemenet és Kimenet

része alapján.része alapján.

A A paraméterezparaméterez

ésés elhagyható.elhagyható.

A program A program GLOBÁLISGLOBÁLIS

adatai.adatai.

Page 31: Programozási alapismeretek  6. előadás

ELTEELTE

Szlávi-Zsakó: Programozási Szlávi-Zsakó: Programozási alapismeretek 6.alapismeretek 6.

3131/51/5123.04.21.23.04.21.

Finomítások a C++ kódban

C++ tudnivalók – összefoglalás:

A program makró-szerkezete2//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éterProgramparaméterekek,,

a specifikáció a specifikáció Bemenet és Kimenet Bemenet és Kimenet

része alapján.része alapján.

A program A program GLOBÁLISGLOBÁLIS

adatai.adatai.

Page 32: Programozási alapismeretek  6. előadás

ELTEELTE

Szlávi-Zsakó: Programozási Szlávi-Zsakó: Programozási alapismeretek 6.alapismeretek 6.

3232/51/5123.04.21.23.04.21.

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!

Page 33: Programozási alapismeretek  6. előadás

ELTEELTE

Szlávi-Zsakó: Programozási Szlávi-Zsakó: Programozási alapismeretek 6.alapismeretek 6.

3333/51/5123.04.21.23.04.21.

Finomítások a C++ kódban

C++ tudnivalók – összefoglalás:

Egy teljesebb kódpélda:

Függvényfej-Függvényfej-definíciók.definíciók.

Page 34: Programozási alapismeretek  6. előadás

ELTEELTE

Szlávi-Zsakó: Programozási Szlávi-Zsakó: Programozási alapismeretek 6.alapismeretek 6.

3434/51/5123.04.21.23.04.21.

Finomítások a C++ kódban

C++ tudnivalók – összefoglalás:

Egy teljesebb kódpélda:

AdatbeolvasásoAdatbeolvasások, és a k, és a

főprogram.főprogram.

Page 35: Programozási alapismeretek  6. előadás

ELTEELTE

Szlávi-Zsakó: Programozási Szlávi-Zsakó: Programozási alapismeretek 6.alapismeretek 6.

3535/51/5123.04.21.23.04.21.

Finomítások a C++ kódban

C++ tudnivalók – összefoglalás:

Egy teljesebb kódpélda:

ParaméterbeolParaméterbeolvasó eljárás vasó eljárás definíciója.definíciója.

Page 36: Programozási alapismeretek  6. előadás

ELTEELTE

Szlávi-Zsakó: Programozási Szlávi-Zsakó: Programozási alapismeretek 6.alapismeretek 6.

3636/51/5123.04.21.23.04.21.

Finomítások a C++ kódban

C++ tudnivalók – összefoglalás:

Egy teljesebb kódpélda:

A lényegi A lényegi eljárás eljárás

definíciója.definíciója.(Keresés tétel!)(Keresés tétel!)

Page 37: Programozási alapismeretek  6. előadás

ELTEELTE

Szlávi-Zsakó: Programozási Szlávi-Zsakó: Programozási alapismeretek 6.alapismeretek 6.

3737/51/5123.04.21.23.04.21.

Finomítások a C++ kódban

C++ tudnivalók – összefoglalás:

Egy teljesebb kódpélda:

A keresés A keresés eredményét eredményét kiíró eljárás kiíró eljárás definíciója.definíciója.

Page 38: Programozási alapismeretek  6. előadás

ELTEELTE

Szlávi-Zsakó: Programozási Szlávi-Zsakó: Programozási alapismeretek 6.alapismeretek 6.

3838/51/5123.04.21.23.04.21.

Finomítások a C++ kódban

C++ tudnivalók – összefoglalás:

Egy teljesebb kódpélda:

További További eljárások eljárások definíciói.definíciói.

Kód Kód jegyzet-jegyzet-

kéntként

Kód Kód jegyzet-jegyzet-

kéntként

Kiválasztás + Kiválasztás + sorozatszámítsorozatszámít

ás tétel ás tétel „fúziója”.„fúziója”.

Page 39: Programozási alapismeretek  6. előadás

ELTEELTE

Szlávi-Zsakó: Programozási Szlávi-Zsakó: Programozási alapismeretek 6.alapismeretek 6.

3939/51/5123.04.21.23.04.21.

Feladat:Egy s (AB) sza-kaszhoz képest egy t (BC) szakasz mi-lyen irányban fordul?

BA

C

s

t

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)

Függvények(fordul)

Page 40: Programozási alapismeretek  6. előadás

ELTEELTE

Szlávi-Zsakó: Programozási Szlávi-Zsakó: Programozási alapismeretek 6.alapismeretek 6.

4040/51/5123.04.21.23.04.21.

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)

Page 41: Programozási alapismeretek  6. előadás

ELTEELTE

Szlávi-Zsakó: Programozási Szlávi-Zsakó: Programozási alapismeretek 6.alapismeretek 6.

4141/51/5123.04.21.23.04.21.

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)

Page 42: Programozási alapismeretek  6. előadás

ELTEELTE

Szlávi-Zsakó: Programozási Szlávi-Zsakó: Programozási alapismeretek 6.alapismeretek 6.

4242/51/5123.04.21.23.04.21.

Feladat:Döntsük el, hogy egy C pont rajta van-e egy (A,B) szakaszon!

Specifikáció: Bemenet: A,B,C:TPont Kimenet: Rajt:Logikai Előfeltétel: – Utófeltétel: Rajt=Rajta(A,B,C) Definíció: Rajta(a,b,c,):=…

BA

C

Függvények(rajta?)

Page 43: Programozási alapismeretek  6. előadás

ELTEELTE

Szlávi-Zsakó: Programozási Szlávi-Zsakó: Programozási alapismeretek 6.alapismeretek 6.

4343/51/5123.04.21.23.04.21.

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

BA

CFüggvények

(rajta?)

Page 44: Programozási alapismeretek  6. előadás

ELTEELTE

Szlávi-Zsakó: Programozási Szlávi-Zsakó: Programozási alapismeretek 6.alapismeretek 6.

4444/51/5123.04.21.23.04.21.

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?)

Page 45: Programozási alapismeretek  6. előadás

ELTEELTE

Szlávi-Zsakó: Programozási Szlávi-Zsakó: Programozási alapismeretek 6.alapismeretek 6.

4545/51/5123.04.21.23.04.21.

Függvények(metszi?)

Feladat:Döntsük el, hogy az (A,B) szakasz metszi-e a (C,D) szakaszt!Lehetséges esetek: B

A

C

DB

AC

D

BA

C

D

B

A

C

D

BA

C

D

Page 46: Programozási alapismeretek  6. előadás

ELTEELTE

Szlávi-Zsakó: Programozási Szlávi-Zsakó: Programozási alapismeretek 6.alapismeretek 6.

4646/51/5123.04.21.23.04.21.

Specifikáció: Bemenet: A,B,C,D:TPont Kimenet: Metsz:Logikai Előfeltétel: – Utófeltétel: Metsz=

( 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) )

Függvények(metszi?)

BA

C

D

BA

C

D

BA

C

D

B

A

C

DBA

C

D

Page 47: Programozási alapismeretek  6. előadás

ELTEELTE

Szlávi-Zsakó: Programozási Szlávi-Zsakó: Programozási alapismeretek 6.alapismeretek 6.

4747/51/5123.04.21.23.04.21.

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)Metsz:=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?)

Page 48: Programozási alapismeretek  6. előadás

ELTEELTE

Szlávi-Zsakó: Programozási Szlávi-Zsakó: Programozási alapismeretek 6.alapismeretek 6.

4848/51/5123.04.21.23.04.21.

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 ABCA sorrendben körbejárva a D pont vagy min-dig balra, vagy mindig jobbra van.

B

A

CD

Függvények(háromszögben?)

Page 49: Programozási alapismeretek  6. előadás

ELTEELTE

Szlávi-Zsakó: Programozási Szlávi-Zsakó: Programozási alapismeretek 6.alapismeretek 6.

4949/51/5123.04.21.23.04.21.

Specifikáció: Bemenet: A,B,C,D:TPont Kimenet: Bel:Logikai Előfeltétel: – Utófeltétel: Bel=(Fordul(A,B,D)=

=Fordul(B,C,D)=Fordul(C,A,D))

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)

Függvények(háromszögben?)

Kissé Kissé „szabadon” „szabadon”

értelmezve a értelmezve a „lánc-„lánc-

azonosságot”!azonosságot”!

Page 50: Programozási alapismeretek  6. előadás

ELTEELTE

Szlávi-Zsakó: Programozási Szlávi-Zsakó: Programozási alapismeretek 6.alapismeretek 6.

5050/51/5123.04.21.23.04.21.

Függvények

Háromszögben

Fordul

Irány

Metszi

Fordul

Irány

Rajta

Fordul Közte

Irány

A (lényegi) függvények egymásra épü-lése – a programok makró-struktúrája:

Page 51: Programozási alapismeretek  6. előadás

Programozási alapismeretek

6. előadás vége