Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Programozási alapismeretek 4. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 4.2/472014. 07. 14.2014. 07. 14.2014. 07. 14.  A szöveg A szöveg.

Hasonló előadás


Az előadások a következő témára: "Programozási alapismeretek 4. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 4.2/472014. 07. 14.2014. 07. 14.2014. 07. 14.  A szöveg A szöveg."— Előadás másolata:

1 Programozási alapismeretek 4. előadás

2 ELTE Szlávi-Zsakó: Programozási alapismeretek 4.2/  A szöveg A szöveg  Feladattípus: tömb bemenet, tömb kimenet tömb bemenet, tömb kimenet  Feladattípus: szöveg bemenet, szöveg kimenet szöveg bemenet, szöveg kimenet  Feladattípus: tömb bemenet, érték kimenet tömb bemenet, érték kimenet  Feladattípus: érték bemenet, tömb kimenet érték bemenet, tömb kimenet  Példák Példák Tartalom

3 ELTE Szlávi-Zsakó: Programozási alapismeretek 4.3/ Szöveg A szöveg és a tömb  hasonlóak: o egyféle típusú elemekből állnak, o indexelhetők;  különbözőek: o a tömb elem- (és index-) típussal paramétere- zendő (típuskonstrukciós eszköz), a szöveg ka- rakter típusú elemekből áll, o algoritmikusan (!) a szöveg 1-től indexelhető, a tömb deklarációtól függően, o a tömb hossza konstans, a szövegé változtat- ható; szövegeken értelmezve van a hossz() függvény és a + művelet, o problémás az elemmódosítás a szöveg típusnál!

4 ELTE Szlávi-Zsakó: Programozási alapismeretek 4.4/ Szöveg (C++)  Fontosabb string-műveletek ( tegyük föl, hogy: string a; ) o …""… //üres szöveg; pl.: a="" o cin >> a;//olvasás szóközig v. sorvégig o getline(cin,a,’\n’); //olvasás ’\n’-ig o getline(cin,a,’x’); //olvasás ’x’ jelig o …a.length()… //a karakterei száma o …a.size()… //=a.length() o …+… //hozzáírás (konkatenáció) o …a[i]… //a szöveg i. jele, 0  i

5 ELTE Szlávi-Zsakó: Programozási alapismeretek 4.5/ Szöveg (C++)  Fontosabb string-műveletek ( string a; ) o …a.find(mit)… //a mit szöveg helye a-ban o …a.substr(tól,ig)… //=a[tól..ig] o a.replace(tól,db,mivel); //tól db jelet //helyettesít mivel o Kapcsolódó char-műveletek ( string a; ) o …isalpha(a[i])… //a[i] ’a’..’z’, // ’A’..’Z’? o …isdigit(a[i])… //a[i] ’0’..’9’? o …isupper(a[i])… //a[i] ’A’..’Z’? o …islower(a[i])… //a[i] ’a’..’z’? o …tolower(a[i])… //a[i]-t kisbetűssé //alakítja o …toupper(a[i])… //a[i]-t nagybetűssé //alakítja

6 ELTE Szlávi-Zsakó: Programozási alapismeretek 4.6/ Szöveg Feladat: Fordítsuk meg egy szó (szöveg) betűsor- rendjét! Specifikáció:  Bemenet: S:Szöveg  Kimenet: T:Szöveg  Előfeltétel: – hosszhossz hosszhossz  Utófeltétel: hossz(T)=hossz(S) és  i (1  i  hossz(S)): T[i]=S[hossz(S)–i+1] Előre definiált függvény: hossz hossz hossz: Szöveg  Egész hossz(s):=s karaktereinek a száma

7 ELTE Szlávi-Zsakó: Programozási alapismeretek 4.7/ Algoritmus: A szöveg i-edik karaktere nem módosítható, ha még nincs. Szükséges a + művelet! vagy Szöveg T:= "" i=hossz(S)..1; –1-esével T:=T+S[i] T:= "" i=1..hossz(S) T:=S[i]+T

8 ELTE Szlávi-Zsakó: Programozási alapismeretek 4.8/ Szöveg Feladat: Adjuk meg egy egyszerű angol névhez a monogramját (pl. James Black  JB)! Specifikáció:  Bemenet: Név:Szöveg  Kimenet: Mon:Szöveg  Előfeltétel: SzabályosE(Név) Megjegyzés: a név szabályos, ha csak a szó- kezdőbetűk nagyok, de azok biztosan… feltesszük, hogy létezik a „SzabályosE: Szöveg  Logikai” függvény.

9 ELTE Szlávi-Zsakó: Programozási alapismeretek 4.9/ Szöveg  Utófeltétel:és  i (1  i  hossz(Mon)): NagybetűE(Mon[i]) és Mon  Név  Feltesszük, hogy létezik a 1. „NagybetűE:Karakter  Logikai” függvény, 2. „  ” művelet, az ún. részsorozata-e műve- let (x  y akkor igaz, ha x legfeljebb y ele- meinek elhagyásával képezhető).

10 ELTE Szlávi-Zsakó: Programozási alapismeretek 4.10/ Szöveg Algoritmus: Mon:= "" i=1..hossz(Név) NagybetűE(Név[i]) Mon:=Mon+Név[i]─ I N

11 ELTE Szlávi-Zsakó: Programozási alapismeretek 4.11/ Szöveg Feladat: Adjuk meg egy magyar névhez a monogram- ját (pl. Szabó Éva  SzÉ)! Specifikáció:  Bemenet: Név:Szöveg  Kimenet: Mon:Szöveg  Előfeltétel: SzabályosE(Név)  Utófeltétel: … hf … Problémák: a monogramban nagybetűk szerepel- nek, valamint a kettős mássalhangzókból a nagybe- tűt követő kisbetűk.

12 ELTE Szlávi-Zsakó: Programozási alapismeretek 4.12/ Szöveg Megoldási ötlet: Konstans Többes:Tömb[1..8:Szöveg]= (”Cs”,”Dz”,”Gy”,”Ly”,”Ny”, ”Sz”,”Ty”,”Zs”) Közbevető kérdés: ”Dzs” hova való és miként bonyolítja a megoldást? A megoldás vázlata: képezzük a Név kétbetűs részeit, és megnézzük, hogy bent van-e a Többesben, vagy a betűpár első jele nagybetűs-e, ha igen, akkor monogram- hoz írjuk…

13 ELTE Szlávi-Zsakó: Programozási alapismeretek 4.13/ Szöveg Algoritmus: Hívhatnak-e valakit „Nagy A”-nak? Fölcse- rélhetők-e a feltételek? Optimális? Mon:= "" i=1..hossz(Név)–1 K:=Név[i]+Név[i+1] K  Többes Mon:=Mon+KNagybetűE(Név[i]) Mon:=Mon+ Név[i]  I N I N

14 ELTE Szlávi-Zsakó: Programozási alapismeretek 4.14/ Karakterhasonlítás Feladat: Döntsük el, hogy az A vagy a B betű van-e a magyar ábécében előbb! Specifikáció:  Bemenet: A,B:Karakter  Kimenet: Előbb:Logikai  Előfeltétel: BetűE(A) és BetűE(B)  Utófeltétel: Előbb=A  M B  Definíció: x  M y akkor és csak akkor, ha ???  Feltételezés:  BetűE:Karakter  Logikai függvény

15 ELTE Szlávi-Zsakó: Programozási alapismeretek 4.15/ Karakterhasonlítás Megoldásötlet: Tároljuk a helyes sorrendben a betűket, és amelyi- ket előbb lehet megtalálni, az az előbbi.  Definíció: Konstans Betűk:Tömb[1..2*35:Karakter]= (”a”,”A”,”á”,”Á”,”b”,”B”,…,”z”,”Z”) x  M y akkor és csak akkor, ha i  j : x=Betűk[i] és y=Betűk[j] Egy másik megoldás alapulhat egy szövegen is: Konstans Betűk:Szöveg=”aAáÁbB…zZ”Szöveg Melyik a jobb?

16 ELTE Szlávi-Zsakó: Programozási alapismeretek 4.16/ Karakterhasonlítás Algoritmus: Kérdés: mi lenne, ha az ef. nem teljesülne? Lehetne-e ”a”=”A”? (i-1) div 2≤(j-1) div 2? i:=1 Betűk[i]≠A i:=i+1 j:=1 Betűk[j]≠B j:=j+1 Előbb:=i≤j

17 ELTE Szlávi-Zsakó: Programozási alapismeretek 4.17/ Szóhasonlítás Feladat: Döntsük el, hogy az ábécében az A vagy a B szó van-e előbb! Specifikáció:  Bemenet: A,B:Szöveg  Kimenet: Előbb:Logikai  Előfeltétel: SzóE(A) és SzóE(B)  Utófeltétel: Előbb=A  B  Feltételezés:  SzóE:Szöveg  Logikai függvény

18 ELTE Szlávi-Zsakó: Programozási alapismeretek 4.18/ Szóhasonlítás  Definíció (alfabetikus rendezés): (1) Az a szó van ábécében előbb, amelyik első különböző betűje előbb van; (2) az  üres szó minden szónál előbb van.  Példák: ”alfa” ”al”  ”f…”> M  ”alma”≤”alma”   ≤ M  (1) (2)

19 ELTE Szlávi-Zsakó: Programozási alapismeretek 4.19/ Algoritmus: A karakterhasonlításra használjuk az elő- ző feladat megoldását (úgy, hogy A helyébe A[i], B helyébe B[i] kerüljön) ! Szóhasonlítás i:=1 i≤hossz(A) és i≤hossz(B) és A[i]=B[i] i:=i+1 Előbb:=(i>hossz(A)) vagy (i≤hossz(B) és A[i]  M B[i])

20 ELTE Szlávi-Zsakó: Programozási alapismeretek 4.20/ Tömb bemenet, tömb kimenet Feladat: Ismerjük az elmúlt N napon délben mért hő- mérsékletet. Add meg, hogy mely napokon volt pozitív vagy 0 (+), illetve negatív (–) a hő- mérséklet! Specifikáció:  Bemenet: N:Egész; H:Tömb[1..N:Egész]  Kimenet: E:Tömb[1..N:Karakter]  Előfeltétel: N  0  Utófeltétel:  i(1  i  N): ( H[i]  0  E[i]="+" és H[i]<0  E[i]="–" )

21 ELTE Tömb bemenet, tömb kimenet Algoritmus: Kódoláshoz: A kimeneti tömb (már) akkor deklarál- ható, amikor a bemeneti tömb mérete ismertté válik. (Hiszen a bemeneti tömb- bel azonos elemszámú.)deklarál- ható I N Szlávi-Zsakó: Programozási alapismeretek 4. 21/ i=1..N H[i]  0 E[i]:=”+”E[i]:=”–”

22 ELTE Tömb bemenet, tömb kimenet Feladat: Ismerjük az elmúlt N napon délben mért hőmérsékletet. Add meg minden 7-napos időszakra az átlaghőmérsékletet! Specifikáció:  Bemenet: N:Egész; H:Tömb[1..N:Egész]  Kimenet: A:Tömb[1..N–6:Valós]  Előfeltétel: N  7  Utófeltétel:  i(1  i  N–6): Megjegyzés: 7 egymás utáni szám összegéből a következő összeg egyszerűbben is számolható: A[i]:=(7*A[i–1]–H[i–1]+H[i+6])/7 Szlávi-Zsakó: Programozási alapismeretek 4. 22/

23 ELTE Tömb bemenet, tömb kimenet S:=0 i=1..7 S:=S+H[i] A[1]:=S/7 i=2..N –6 S:=S–H[i–1]+H[i+6] A[i]:=S/7 Algoritmus: Szlávi-Zsakó: Programozási alapismeretek 4. 23/

24 ELTE Szöveg bemenet, szöveg kimenet Feladat: Írj programot egy szó magas- (=), illetve mély (–) hangrendű szótagjai megadására! Specifikáció:  Bemenet: S:Szöveg  Kimenet: H:Szöveg  Előfeltétel: SzóE(S)  Utófeltétel: hossz(X)=hossz(S) és  i(1  i  hossz(S)): S[i]  {"a","á","o","ó","u","ú"}  X[i]="–" és S[i]  {"e","é","i","í","ö","ő","ü","ű"}  X[i]="=" és S[i]  Mássalhangzók  X[i]=" " és H  X és SzóközNélküliE(H) és hossz(H)=  Szlávi-Zsakó: Programozási alapismeretek 4. 24/

25 ELTE Szöveg bemenet, szöveg kimenet H:=”” i=1..hossz(S) S[i]  {”a”,”á”,”o”, ”ó”,”u”, ”ú”} S[i]  {”e”,”é”, ”i”,”í”,”ö”, ”ő”,”ü”,”ű”} H:=H+” – ”H:=H+”=” Algoritmus: Megspórolható a segéd X szöveg, ha mind- járt átlépjük a szóközzé konvertálandókat, amiket aztán ki kellene hagynunk. Szlávi-Zsakó: Programozási alapismeretek 4. 25/

26 ELTE Érték bemenet, tömb kimenet Feladat: Adjuk meg a K kezdőelemű, L lépésközű számtani sorozat első N tagját! Specifikáció 1 :  Bemenet: K,L,N:Egész  Kimenet: S:Tömb[1..N:Egész]  Előfeltétel: N  0  Utófeltétel:  i (1≤i≤N): S[i]=K+(i – 1)*L Algoritmus 1 : i=1..N S[i]:=K+(i–1)*L Szlávi-Zsakó: Programozási alapismeretek 4. 26/

27 ELTE Érték bemenet, tömb kimenet Az uf. „egyszerűbben” is megfogalmazható (rekurzív módon). Specifikáció 2 :  Bemenet: K,L,N:Egész  Kimenet: S:Tömb[1..N:Egész]  Előfeltétel: N  0  Utófeltétel: S[1]=K és  i (2≤i≤N): S[i]=S[i–1]+L Algoritmus 2 : Szlávi-Zsakó: Programozási alapismeretek 4. 27/ S[1]:=K i=2..N S[i]:=S[i–1]+L

28 ELTE Tömb bemenet, érték kimenet Feladat: Egy repülőgéppel Európából Amerikába re- pültünk. Az út során X kilométerenként mértük a felszín tengerszint feletti magassá- gát (  0). 0 magasságot ott mértünk, ahol tenger van, >0-t pedig ott, ahol szárazföld. Adjuk meg az óceán két partját! Szlávi-Zsakó: Programozási alapismeretek 4. 28/

29 ELTE Tömb bemenet, érték kimenet Specifikáció:  Bemenet: N:Egész, Mag:Tömb[1..N:Egész]  Kimenet: E,U:Egész  Előfeltétel: Mag[1]>0 és Mag[N]>0 és  i(1

30 ELTE Tömb bemenet, érték kimenet E:=2 Mag[E]>0 E:=E+1 U:=N–1 Mag[U]>0 U:=U–1 Algoritmus: Ötlet: elölről, illetve hátulról haladva kivá- lasztjuk a megfelelő elemet. Szlávi-Zsakó: Programozási alapismeretek 4. 30/

31 ELTE További példák Feladat: Egy repülőgéppel Európából Amerikába repültünk. Az út során X kilométerenként mértük a felszín tengerszint feletti magas- ságát (  0). 0 magasságot ott mértünk, ahol tenger van, >0-t pedig ott, ahol szárazföld. Adjuk meg a szigeteket! Szlávi-Zsakó: Programozási alapismeretek 4. 31/

32 ELTE További példák Specifikáció:  Bemenet: N:Egész, Mag:Tömb[1..N:Egész]  Kimenet: Db:Egész, K,V:Tömb[1..Db:Egész]  Előfeltétel: Mag[1]>0 és Mag[N]>0 és  i(1

33 ELTE További példák  Definíció: SzigetkezdetE:[2..N]  Logikai SzigetkezdetE(i):=Mag[i]>0 és Mag[i–1]=0 SzigetvégE:[1..N–1]  Logikai SzigetvégE(i):=Mag[i]>0 és Mag[i+1]=0 Kérdés: Mi lesz Európa és Amerika partjával? Megoldás: 2 és N–1 helyett csak az előző feladat szerinti E és U között keresünk szigeteket. Szlávi-Zsakó: Programozási alapismeretek 4. 33/

34 ELTE További példák Specifikáció:  Bemenet: N:Egész, Mag:Tömb[1..N:Egész]  Kimenet: Db:Egész, K,V:Tömb[1..Db:Egész]  Előfeltétel: Mag[1]>0 és Mag[N]>0 és  i(1

35 ELTE További példák … E, U előállítása … Db:=0 i=E..U SzigetkezdetE(i) Db:=Db+1  K[Db]:=i SzigetvégE(i) V[Db]:=i  Algoritmus: Használjuk ki, hogy kezdet és vég csak fel- váltva következhetnek! I N I N Szlávi-Zsakó: Programozási alapismeretek 4. 35/

36 ELTE További példák Kódoláshoz: Probléma: a számítás során jön ki a kimeneti tömb elem- száma, s közben kellene az elemeit is gyűjteni. Megoldás 1 : Előre definiálunk egy maximális kimeneti tömb- méretet (MaxDb), s ekkorára deklaráljuk a K és a V tömböt). (L. a 3. előadásban.)3. előadás Megoldás 2 : Eltérünk az algoritmustól: először meghatároz- zuk a Db-t, majd összegyűjtjük a K-t, V-t. Szlávi-Zsakó: Programozási alapismeretek 4. 36/

37 ELTE További példák Feladat: Egy folyón N helyen mérik a vízállást, amit egy referenciamagassághoz képest centiméterben ad- nak meg. Elsőfokú árvízvédelmi készültséget kell elrendelni, ha a magasság meghaladja a 800 centi- métert, másodfokút, ha meghaladja a 900 centi- métert és harmadfokút, ha meghaladja az 10 métert. Folyószakasznak nevezzük a leghosszabb egymás mellett levő egyforma tulajdonságú méré- sekből álló sorozatokat. Árvíznek nevezzük azt a folyószakaszt, ahol minden hely legalább elsőfo- kú készültségű. Adjuk meg, hogy hány folyószakaszon volt árvíz! Szlávi-Zsakó: Programozási alapismeretek 4. 37/

38 ELTE További példák Specifikáció:  Bemenet: N:Egész, F:Tömb[1..N:Egész]  Kimenet: Db:Egész  Előfeltétel: N  0  Utófeltétel: Db= Szlávi-Zsakó: Programozási alapismeretek 4. 38/

39 ELTE Algoritmus 1 : Annyi szakaszon volt árvíz, ahány helyen árvíz kezdődött (vagy már az elején is árvíz volt). További példák F[1]  800 Db:=0Db:=1 i=1..N–1 F[i]  800 és F[i+1]>800 Db:=Db+1  IN I N Szlávi-Zsakó: Programozási alapismeretek 4. 39/

40 ELTE További példák Algoritmus 2 : Annyi szakaszon volt árvíz, ahány helyen árvíz végződött (vagy az utolsó mérésnél is árvíz volt). F[N]  800 Db:=0Db:=1 i=2..N F[i]  800 és F[i-1]>800 Db:=Db+1  NI N I Szlávi-Zsakó: Programozási alapismeretek 4. 40/

41 ELTE További példák Feladat: Egy folyón N helyen mérik a vízállást, amit egy referenciamagassághoz képest centimé- terben adnak meg. … Adjuk meg az árvizek hosszát! Feltehetjük, hogy az első és az utol- só mérésnél nem volt árvíz.… Szlávi-Zsakó: Programozási alapismeretek 4. 41/

42 ELTE További példák Specifikáció:  Bemenet: N:Egész, F:Tömb[1..N:Egész]  Kimenet: Db:Egész, H:Tömb[1..Db:Egész]  Előfeltétel: N  1 és F[1]  800 és F[N]  800  Utófeltétel: Db= és  i (1≤i≤Db): H[i]=árvízvég[i]–árvízkezdet[i]+1  Definíció: árvízvég:Tömb[1..Db:Egész] … árvízkezdet:Tömb[1..Db:Egész] … Szlávi-Zsakó: Programozási alapismeretek 4. 42/

43 ELTE További példák Db:=0 i=1..N–1 F[i]  800 és F[i+1]>800 Db:=Db+1  H[Db]:=0 F[i]>800 H[Db]:=H[Db]+1  Algoritmus: Ötlet: a megfelelő számlálót árvízkezdetnél nullázzuk, árvíznél pedig növeljük. I N I N Szlávi-Zsakó: Programozási alapismeretek 4. 43/

44 ELTE További példák Feladat: Lóversenyre járunk. N napon át naponta fel- jegyeztük, hogy mennyit nyertünk (  0) vagy vesztettünk (<0). Ha kezdetben X forintunk volt, akkor mely napon kellett először köl- csön kérnünk? Szlávi-Zsakó: Programozási alapismeretek 4. 44/

45 ELTE További példák Specifikáció:  Bemenet: N,X:Egész, P:Tömb[1..N:Egész]  Kimenet: Van:Logikai, Nap:Egész  Előfeltétel: N  0 és X  0  Utófeltétel: Van=  i(1  i  N): és Van  ( 1  Nap  N és és  i(1  i

46 ELTE További példák S:=X i:=1 i  N és S+P[i]>0 S:=S+P[i] i:=i+1 Van:= i  N Van Nap:=i  Algoritmus: I N Szlávi-Zsakó: Programozási alapismeretek 4. 46/

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


Letölteni ppt "Programozási alapismeretek 4. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 4.2/472014. 07. 14.2014. 07. 14.2014. 07. 14.  A szöveg A szöveg."

Hasonló előadás


Google Hirdetések