SlideShare a Scribd company logo
1 of 49
Programozási alapismeretek 
3. előadás
ELTE 
Tartalom 
Ciklusok – 
specifikáció+„algoritmika”+kódolás 
Egy bevezető példa a tömbhöz 
A tömb 
Elágazás helyett tömb 
Konstans tömbök 
2014.10.06. 2/49 
Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás
ELTE 
Ciklusok 
Feladat: 
Határozzuk meg egy természetes szám 
(N>1) 1-től különböző legkisebb osztóját! 
Specifikáció: 
Bemenet: NN 
Kimenet: ON 
 Előfeltétel: N>1 
Utófeltétel: 1<ON és O|N és 
i (2i<O): i ł N 
2014.10.06. 3/49 
Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás
ELTE 
Ciklusok 
A megoldás reprezentálása: 
Változó 
N:Egész 
O:Egész 
Reprezentációs „szabály” a 
specifikációreprezentáció áttéréskor: 
N  Egész 
2014.10.06. 4/49 
Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás 
Programváltozók 
deklarálása
ELTE 
Ciklusok 
A megoldás ötlete: 
Próbáljuk ki a 2-t; ha nem jó, akkor a 
3-at, ha az sem, akkor a 4-et, …; 
legkésőbb az N jó lesz! 
Az ezt kifejező lényegi algoritmus: 
i:=2 
i ł N 
i:=i+1 
O:=i 
Változó 
i:Egész 
2014.10.06. 5/49 
Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás 
Lokális változó 
deklarálása
ELTE 
Ciklusok 
Feladat: 
Határozzuk meg egy természetes szám 
(N>1) 1-től különböző legkisebb és önma-gától 
különböző legnagyobb osztóját! 
Specifikáció: 
Bemenet: NN 
 Kimenet: Lko,LnoN 
 Előfeltétel: N>1 
 Utófeltétel: 1<LkoN és 1Lno<N és 
Lko|N és 
i (1<2i<Lko): i ł N és 
és 
Lno|N és 
i (Lno<i<N): i ł N 
2014.10.06. 6/49 
Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás
ELTE 
Ciklusok 
Megjegyzés: 
A specifikációból az algoritmus megkapható, 
de az Lno az utófeltételben az Lko ismere-tében 
másképp is megfogalmazható: 
Lko*Lno=N! 
Az erre építő algoritmus: 
i:=2 
i ł N 
i:=i+1 
Lko:=i 
Lno:=N Div Lko 
2014.10.06. 7/49 
Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás 
Változó 
i:Egész 
Lko*Lno=N
ELTE 
Ciklusok 
Feladat: 
Határozzuk meg egy természetes szám 
(N>1) 1-től és önmagától különböző leg-kisebb 
osztóját (ha van)! 
Specifikáció: 
Bemenet: NN 
Kimenet: ON, VanL 
 Előfeltétel: N>1 
Utófeltétel: Van=i (2i<N): i|N és 
Van2O<N és O|N és 
i (2i<O): i ł N 
2014.10.06. 8/49 
Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás
ELTE 
Ciklusok 
Algoritmus: 
i:=2 
i<N és i ł N 
i:=i+1 
Van:=i<N 
Van 
Változó 
i:Egész 
I N 2  i  N Div i  N Div 2 
O:=i  
i  N 
azaz 
i*i  N 
azaz 
i N 
Megjegyzés: 
Ha i osztója N-nek, akkor (N Div i) is 
osztója, azaz elég az osztókat a szám 
gyökéig keresni! 
2014.10.06. 9/49 
Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás
ELTE 
Ciklusok 
Feladat: 
Határozzuk meg egy természetes szám 
(N>1) osztói összegét! 
Specifikáció: 
Bemenet: NN 
Kimenet: SN 
Előfeltétel: N>1 
N 
Utófeltétel:  
S  
i 
i 1 
i N 
A feltételes szumma értelmezéséhez 
egy példa: 
N=15  
i=1 : (1|15)  S=1 
i=2 : (2 ł15)  S=1+0 
i=3 : (3|15)  S=1+3 
i=4 : (4 ł 15)  S=1+3+0 
… 
i=15: (15|15)S=1+3+…+15 
2014.10.06. 10/49 
Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás
ELTE 
Ciklusok 
Algoritmus: 
S:=0 
i=1..N 
i|N 
I N 
S:=S+i  
2014.10.06. 11/49 
Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás 
Változó 
i:Egész
ELTE 
Ciklusok 
Feladat: 
Határozzuk meg egy természetes szám 
(N>1) páratlan osztói összegét! 
Specifikáció: 
Bemenet: NN 
Kimenet: SN 
Előfeltétel: N>1 
Utófeltétel: S= 
páratlan(i)=??? 
N 
 
i 1 
 
i 
i N és páratlan(i) 
2014.10.06. 12/49 
Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás
ELTE 
Ciklusok 
Algoritmus1: 
S:=0 
i|N és páratlan(i) 
I N 
S:=S+i  
Algoritmus2: 
i=1..N 
S:=0 
i=1..N; 2-esével 
i|N 
I N 
S:=S+i  
2014.10.06. 13/49 
Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás 
Változó 
i:Egész 
Változó 
i:Egész
ELTE 
Ciklusok 
Feladat: 
Határozzuk meg egy természetes szám 
(N>1) prímosztói összegét! 
Specifikáció: 
Bemenet: NN 
 Kimenet: SN 
 Előfeltétel: N>1 
Utófeltétel: S= 
prím(i)=??? 
N 
 
 
i 2 
i 
i N és prím(i) 
2014.10.06. 14/49 
Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás
ELTE 
Ciklusok 
Algoritmus: 
a legkisebb osztó biztosan prím; ha N-t oszt-juk 
vele ahányszor csak tudjuk, a következő 
osztója (a redukált N-nek) megint prím lesz. 
S:=0 
i:=2 
iN 
i|N 
I N 
S:=S+i 
i|N  
N:=N Div i 
i:=i+1 
2014.10.06. 15/49 
Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás 
Változó 
i:Egész
ELTE 
2014.10.06. 
Ciklusok 
Feladat: 
Határozzuk meg azon i,j (i,j>1) termé-szetes 
számok számát, amelyekre i*j<N 
(N>1)! 
Specifikáció: 
Bemenet: NN 
 Kimenet: SN 
 Előfeltétel: N>1 
 Utófeltétel: S=   
 
 
j 2 
  
N Div 2 
i 2 
N Div 2 
1   
i j N 
 
j  
2 
  
N Div 2 
i 2 
(N-1) Div i 
1 
i j N 
Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás 16/49
ELTE 
Ciklusok 
Algoritmus1: 
S:=0 
i=2..N Div 2 
j=2..N Div 2 
i*j<N 
I N 
S:=S+1  
(N-1) Div i 
S:=S+1 
2014.10.06. 17/49 
Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás 
Változó 
i,j:Egész
ELTE 
Ciklusok 
Algoritmus2: 
S:=0 
i=2..N Div 2 
j:=2 
i*j<N 
S:=S+1 
j:=j+1 
Algoritmus3: 
S:=0 
i=2..N Div 2 
S:=S+((N-1) Div i)-1 
Változó 
i,j:Egész 
2014.10.06. 18/49 
Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás 
Változó 
i:Egész
ELTE 
Ciklusok 
Tanulságok: 
 Ha az utófeltételben , , vagy  jel van, 
akkor a megoldás mindig ciklus! 
 Ha az utófeltételben  vagy  jel van, ak-kor 
a megoldás sokszor feltételes ciklus! 
 Ha az utófeltételben  jel van, akkor a 
megoldás sokszor számlálós ciklus! ( is…) 
 Két egymásba ágyazott  jel esetén két cik-lus 
lesz egymás belsejében, általában. 
 Feltételes  esetén a ciklusban elágazás lesz. 
2014.10.06. 19/49 
Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás
Tipikus előfordulás: a 
beolvasás ellenőrzésénél 
ELTE 
Ciklusok 
algoritmus – kód 
Feltételes ciklus: 
feltétel 
utasítások 
utasítások 
feltétel 
Számlálós ciklus: 
while (feltétel){ 
utasítások 
} 
i=1..N 
utasítások 
do{ 
utasítások 
}while (feltétel); 
for (int i=1;i<=N;++i){ 
utasítások 
} 
i=1..N; x-esével 
utasítások 
for (int i=1;i<=N;i+=x){ 
utasítások 
} 
(l. 2.ea.-ban) 
2014.10.06. 20/49 
Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás
ELTE 
Feladat elágazásra, 
vagy más megoldás kell? 
Feladat: 
A japán naptár 60 éves ciklusokat tartalmaz, az 
éveket párosítják, s mindegyik párhoz valami-lyen 
színt rendelnek (zöld, piros, sárga, fehér, 
fekete). 
o 1,2,11,12, …,51,52: zöld évek 
o 3,4,13,14,…,53,54: piros évek 
o 5,6,15,16,…55,56: sárga évek 
o 7,8,17,18,…57,58: fehér évek 
o 9,10,19,20,…,59,60: fekete évek 
Tudjuk, hogy 1984-ben indult az utolsó ciklus, 
amely 2043-ban fog véget érni. 
Írjunk programot, amely megadja egy M évről 
(1984≤M≤2043), hogy milyen színű! 
2014.10.06. 21/49 
Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás
ELTE 
Feladat elágazásra, 
vagy más megoldás kell? 
Specifikáció1: 
 Bemenet: évN 
 Kimenet: sSzín 
 Előfeltétel: 1984≤év és év≤2043 
Egy még 
„ismeretlen” 
halmaz 
 Utófeltétel: ((év-1984) Mod 10) Div 2=0 és 
s="zöld" vagy 
((év-1984) Mod 10) Div 2=1 és 
s="piros" vagy … 
 Definíció: 
Szín:={"zöld","piros","sárga","fehér", 
"fekete"}S 
A Szín halmaz 
definiálása, 
visszavezetés a 
Szöveg 
halmazra Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás 
2014.10.06. 22/49
ELTE 
Feladat elágazásra, 
vagy más megoldás kell? 
Specifikáció2: 
 Bemenet: évN 
 Kimenet: sSzín 
A Szín halmaz 
definiálása itt is 
Szín={"zöld","piros","sárga", 
"fehér","fekete"}S 
 Előfeltétel: 1984≤év és év≤2043 
lehetséges 
 Utófeltétel: ((év-1984) Mod 10) Div 2=0 és 
s="zöld" vagy 
((év-1984) Mod 10) Div 2=1 és 
s="piros" vagy … 
2014.10.06. 23/49 
Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás
ELTE 
Feladat elágazásra, 
vagy más megoldás kell? 
Specifikáció2: 
 Bemenet: évN 
 Kimenet: sSzín 
A Szín halmaz 
definiálása itt is 
Szín={"zöld","piros","sárga", 
"fehér","fekete"}S 
 Előfeltétel: 1984≤év és év≤2043 
lehetséges 
 Utófeltétel: (((év-1984) Mod 10) Div 2=0  
s="zöld") és 
(((év-1984) Mod 10) Div 2=1  
s="piros") és … 
2014.10.06. 24/49 
Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás
ELTE 
Feladat elágazásra, 
vagy más megoldás kell? 
Algoritmus: 
Lokális változó 
deklarálása 
y:=((év-1984) Mod 10) Div 2 
y=0 y=1 y=2 y=3 y=4 
s:= 
"zöld" 
s:= 
"piros" 
s:= 
"sárga" 
s:= 
"fehér" 
s:= 
"fekete" 
Kérdés: 
Akkor is ezt tennénk, ha 5 helyett 90 ágat kellene 
írnunk? 
A válasz előtt egy új adatszerkezet: a tömb. 
2014.10.06. 25/49 
Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás 
Változó 
y:Egész
ELTE 
Sorozatok 
Specifikációbeli fogalmak: 
 Sorozat: azonos típusú elemek egymásutánja, 
az elemei sorszámozhatók. 
 Elem: a sorozat i-edik elemére szokásos mó-don 
–alulindexeléssel– hivatkozhatunk. 
 Index: 1..SorozatHossz. 
 Például: 
 HónapokN12 – a Hónapok 12 elemű 
természetes számokból álló sorozat  
 (Hónapok1, Hónapok2, … , Hónapok12) 
 ÉvszakokS4 – az Évszakok 4 elemű szövegeket 
tartalmazó sorozat  
 (Évszakok1, Évszakok2, Évszakok3, Évszakok4) 
2014.10.06. 26/49 
Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás
ELTE 
Tömbök 
Algoritmikus fogalmak: 
 Tömb: véges hosszúságú sorozat, a sorozat i-edik 
tagjával végezhetünk műveleteket (adott 
a legkisebb és a legnagyobb index, vagy az 
elemszám). 
 Index: sokszor 1..N, időnként 0..N–1, ahol N 
az elemek számát jelöli. 
 Tömbelem-műveletek: elemérték-hivatkozás, 
elemérték-módosítás (az elem-indexeléssel 
kiválasztva). 
2014.10.06. 27/49 
Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás
ELTE 
Sorozatok  Tömbök 
Példa1: 
Specifikációban: 
X,Y,ZRN – deklarációs példa 
Z1=X1+Y1 – hivatkozási példa 
Algoritmusban: 
X,Y,Z:Tömb[1..N:Valós] – deklarációs 
példa 
Z[1]:=X[1]+Y[1] – hivatkozási példa 
2014.10.06. 28/49 
Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás
ELTE 
Sorozatok  Tömbök 
Példa2: 
Specifikációban: 
SzkS5 – deklarációs példa 
Szk1="első szó" – hivatkozási példa 
Algoritmusban: 
Szk:Tömb[0..4:Szöveg] – deklarációs példa 
Szk[0]:="első szó" – hivatkozási példa 
2014.10.06. 29/49 
Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás
ELTE 
Sorozatok  Tömbök 
Példa3: 
Az előbbi feladat-példa Szín halmaza a spe-cifikációban 
egy szöveg konstansokból álló 
sorozat: 
SzínekS5= 
("zöld","piros","sárga","fehér","fekete") 
Az algoritmusban reprezentálhatjuk így: 
Konstans Színek:Tömb[0..4:Szöveg]= 
("zöld","piros","sárga","fehér","fekete") 
A lényeg az azonos elemszám! 
Ügyelni kell az „indexek” konverziójára! Itt: 
Színeki  Színek[i–1] 
2014.10.06. 30/49 
Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás
ELTE 
Tömbök 
(Algoritmuskód) 
Tömb-elemszám  
indexelés 0..???  
Tömb-indexelés elemszám 
0..N 
C++ 0-val kezdi a tömbindexelést! 
De szabad nem használni a 0-dikat.  
Deklarációs példák – 
X:Tömb[1..N:Valós] 
Y:Tömb[0..4:Szöveg] 
a C++ kódjukkal: 
float X[N+1] 
string Y[5] 
Az előbbi Szín halmazos példa: 
Konstans Színek:Tömb[0..4:Szöveg]= 
("zöld","piros","sárga","fehér","fekete") 
const string Szinek[5]={"zöld","piros", 
"sárga","fehér","fekete"}; 
2014.10.06. 31/49 
Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás
ELTE 
Tömbök 
(C++ kódban – áttekintés) 
Statikus tömbök: 
 Deklaráció: 
const int MaxN=???;//tömb max.elemszáma 
típ tömb[MaxN]; //tömbdeklaráció, 
//0..MaxN-1 közötti indexekkel 
… 
 Hivatkozások: 
Eltérés a specifikációban 
szokásostól! 
… tömb[ind] … //tömbérték-hivatkozás 
… 
tömb[ind]=kif;//tömbérték-módosítás 
… 
2014.10.06. 32/49 
Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás 
Fordításkor kiderülő méret esete.
ELTE 
Tömbök 
(C++ kódban – áttekintés) 
Statikus tömb konstansok: 
 Deklaráció: 
const int N=???;//tömb elemszáma 
const típ tömb[N]={t1,t2,…,tN}; 
vagy 
//konstans tömb deklarációja, 
//0..N-1 közötti indexekkel 
const típ tömb[]={t1,t2,…,tN}; 
//konstans tömb deklarációja 
const int N=sizeof tömb/sizeof(típ); 
//tömb elemszáma, 
//indexek: 0..N-1 közötti 
Figyeljünk a sizeof szintaxisára: 
más adatra, és más típusra! 
2014.10.06. 33/49 
Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás 
Fordításkor kiderülő méret esete.
ELTE 
Tömbök 
(C++ kódban – áttekintés) 
Dinamikus tömbök: 
 Deklaráció: 
Csak futáskor kiderülő méret esete. 
int N; //tömb aktuális elemszám 
… 
 Létrehozás: 
N=???;//N meghatározása, pl. beolvasása 
típ tömb[N];//tömbhelyfoglalás N db 
//típ típusú elem számára 
 Hivatkozások (nincs változás): 
… tömb[ind] … //tömbérték-hivatkozás 
… 
tömb[ind]=kif;//tömbérték-módosítás 
… 
2014.10.06. 34/49 
Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás
A HelyesN-be beleért-jük 
ELTE 
Tömbök 
(C++ kódban – áttekintés) 
Tömb beolvasása (ellenőrzéssel): 
Algoritmikusan: 
Be: N [HelyesN(N))] 
bool hiba; //van-e hiba? 
… 
do{ 
cout << "Elemszám:"; cin >> N; 
hiba=!HelyesN(N); 
if (hiba) 
{ 
cout << "hibaüzet" << endl; 
} 
}while (hiba); 
a szintaktikus és 
szemantikus ellenőr-zést 
is. 
L. még 
korábban! 
2014.10.06. 35/49 
Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás
A Helyes-be beleértjük 
a szintaktikus és 
ELTE 
Tömbök 
(C++ kódban – áttekintés) 
Tömb beolvasása (ellenőrzéssel): 
Algoritmikusan: 
Be: v(1..N) [Helyes(v(1..N))] 
bool hiba; //van-e hiba? 
… 
do{ 
for (int i=1;i<=N;++i) 
{ 
do{ 
cout << "Elemszám:"; cin >> N; 
hiba=!HelyesN(N); 
if (hiba) 
{ 
cout << i << ".:"; cin >> v[i-1]; 
hiba=!Helyes(v[i-1]); 
if (hiba) 
{ 
cout << "hibaüzet" << endl; 
} 
cout << "hibaüzenet" << endl; 
} 
}while (hiba); 
}while (hiba); 
} 
Térjünk vissza a kérdésre… 
szemantikus ellenőr-zést 
is. 
L. még 
korábban! 
2014.10.06. 36/49 
Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás
ELTE 
Elágazás helyett tömb 
Specifikáció: 
 Bemenet: évN 
 Kimenet: sSzín 
Szín={"zöld","piros","sárga", 
"fehér","fekete"}S 
SzínekSzín5= 
("zöld","piros","sárga","fehér","fekete") 
 Előfeltétel: 1984≤év és év≤2043 
 Utófeltétel: s=Színek(((év–1984) Mod 10) Div 2)+1 
2014.10.06. 37/49 
Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás
ELTE 
Elágazás helyett tömb 
Specifikáció (egyszerűsítve): 
 Bemenet: évN 
 Kimenet: sS 
SzínekS5= 
("zöld","piros","sárga","fehér","fekete") 
 Előfeltétel: 1984≤év és év≤2043 
 Utófeltétel: s=Színek(((év–1984) Mod 10) Div 2)+1 
2014.10.06. 38/49 
Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás
ELTE 
Elágazás helyett tömb 
Algoritmus: 
 Adatreprezentálás: 
Változó 
év:Egész 
s:Szöveg 
Konstans 
Színek:Tömb[0..4:Szöveg]= 
("zöld","piros","sárga", 
"fehér","fekete") 
2014.10.06. 39/49 
Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás 
Programparaméterek 
deklarálása
ELTE 
Elágazás helyett tömb 
Algoritmus: 
 Tevékenység: 
y:=(((év–1984) Mod 10) Div 2)+1 
s:=Színek[y–1] 
észrevéve az egyszerűsítési lehetőséget: 
2014.10.06. 40/49 
Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás 
Változó 
y:Egész 
y:=((év–1984) Mod 10) Div 2 
s:=Színek[y] 
Változó 
y:Egész
ELTE 
Konstans tömbök 
alkalmazása 
Feladat: 
Írjunk programot, amely egy 1 és 99 közötti 
számot betűkkel ír ki! 
Specifikáció: 
 Bemenet: NN 
egyesS10= 
("","egy",…,"kilenc") 
tizesS10= 
("","tizen",…,"kilencven") 
 Kimenet: SS 
 Előfeltétel: 1N99 
Leglogikusabb 
helyre téve. 
Az algoritmus 
szempontjából 
„adottság”, azaz 
bemenet… 
2014.10.06. 41/49 
Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás
ELTE 
Konstans tömbök 
alkalmazása 
 Utófeltétel: 
N=10  S="tíz" és 
N=20  S="húsz" és 
N{10,20}  S=tizes(N Div 10)+1 + 
egyes(N Mod 10)+1 
2014.10.06. 42/49 
Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás
ELTE 
Konstans tömbök 
alkalmazása 
Algoritmus: 
Programparaméterek 
deklarálása 
Változó N:Egész 
Konstans egyes:Tömb[0..9:Szöveg]= 
("","egy",…,"kilenc") 
Konstans tizes:Tömb[0..9:Szöveg]= 
("","tizen",…,"kilencven") 
Változó S:Szöveg 
Figyelembe véve az index-elcsúszást: 
N=10 N=20 N{10,20} 
S:="tíz" S:="húsz" S:=tizes[N Div 10]+ 
2014.10.06. 43/49 
Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás 
egyes[N Mod 10]
ELTE 
Konstans tömbök 
alkalmazása 
Feladat: 
Írjunk programot, amely egy hónapnévhez a 
sorszámát rendeli! 
Specifikáció: 
 Bemenet: HS 
HóNévS12= 
("január",…,"december") 
 Kimenet: SN 
 Előfeltétel: HHóNév 
 Utófeltétel: 1S12 és HóNévS=H 
2014.10.06. 44/49 
Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás
ELTE 
Konstans tömbök 
alkalmazása 
Algoritmus: 
Változó H:Szöveg, S:Egész 
Konstans HóNév:Tömb[1..12:Szöveg]= 
("január",…,"december") 
S:=1 
HóNév[S]H 
S:=S+1 
Kérdés: mi lenne, ha az ef. nem teljesülne? 
Futási hiba? Végtelen ciklus? 
2014.10.06. 45/49 
Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás 
Programparaméterek 
deklarálása
ELTE 
Konstans tömb – mit 
tárolunk? 
Feladat: 
Egy nap a nem szökőév hányadik napja? 
Specifikáció1: 
 Bemenet: H,NN 
hóN12=(31,28,31,…,31) 
 Kimenet: SN 
 Előfeltétel: 1≤H≤12 és 1≤N≤hóH 
H  
1 
 Utófeltétel:  
i S N hó 
i  
1 
  
2014.10.06. 46/49 
Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás
ELTE 
Konstans tömb – mit 
tárolunk? 
Algoritmus: 
Változó H,N,S:Egész 
Konstans hó:Tömb[1..12:Egész]= 
(31,28,31,…,31) 
S:=N 
i=1..H–1 
S:=S+hó[i] 
Változó 
i:Egész 
Megjegyzés: Szökőév esetén H≥3 esetén S-et 
1-gyel meg kellene növelni! (És az előfel-tétel 
is módosul.) 
2014.10.06. 47/49 
Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás 
Programparaméterek 
deklarálása 
Lokális változó 
deklarálása
ELTE 
Konstans tömb – mit 
tárolunk? 
Egy másik megoldás: 
Tároljuk minden hónapra, hogy az előző 
hónapokban összesen hány nap van! 
Specifikáció2: 
 Bemenet: … 
hóN12=(0,31,59,90,…,334) 
 Utófeltétel: S=N+hóH 
Kérdés: Ez jobb megoldás? Mi lesz az előfel-tétellel? 
2014.10.06. 48/49 
Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás
Programozási alapismeretek 
3. előadás vége

More Related Content

Viewers also liked

Programozás alapismeretek EA
Programozás alapismeretek EAProgramozás alapismeretek EA
Programozás alapismeretek EAegyetem
 
Web Components With Rails
Web Components With RailsWeb Components With Rails
Web Components With RailsBoris Nadion
 
Whats app Sniffer - How To Hack Whatsapp Messages
Whats app Sniffer - How To Hack Whatsapp Messages Whats app Sniffer - How To Hack Whatsapp Messages
Whats app Sniffer - How To Hack Whatsapp Messages besthacktoolz
 
земля в солнечной системе
земля в солнечной системеземля в солнечной системе
земля в солнечной системеyarkovaleksandr
 
Strength training as we age
Strength training as we ageStrength training as we age
Strength training as we agebesthacktoolz
 
組織の成長を "見える化" する「Ocapi」とは?(What's Ocapi?)
組織の成長を "見える化" する「Ocapi」とは?(What's Ocapi?)組織の成長を "見える化" する「Ocapi」とは?(What's Ocapi?)
組織の成長を "見える化" する「Ocapi」とは?(What's Ocapi?)株式会社ヒューマンバリュー
 

Viewers also liked (7)

Programozás alapismeretek EA
Programozás alapismeretek EAProgramozás alapismeretek EA
Programozás alapismeretek EA
 
Web Components With Rails
Web Components With RailsWeb Components With Rails
Web Components With Rails
 
Whats app Sniffer - How To Hack Whatsapp Messages
Whats app Sniffer - How To Hack Whatsapp Messages Whats app Sniffer - How To Hack Whatsapp Messages
Whats app Sniffer - How To Hack Whatsapp Messages
 
земля в солнечной системе
земля в солнечной системеземля в солнечной системе
земля в солнечной системе
 
Strength training as we age
Strength training as we ageStrength training as we age
Strength training as we age
 
Prosody
ProsodyProsody
Prosody
 
組織の成長を "見える化" する「Ocapi」とは?(What's Ocapi?)
組織の成長を "見える化" する「Ocapi」とは?(What's Ocapi?)組織の成長を "見える化" する「Ocapi」とは?(What's Ocapi?)
組織の成長を "見える化" する「Ocapi」とは?(What's Ocapi?)
 

Előadás3

  • 2. ELTE Tartalom Ciklusok – specifikáció+„algoritmika”+kódolás Egy bevezető példa a tömbhöz A tömb Elágazás helyett tömb Konstans tömbök 2014.10.06. 2/49 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás
  • 3. ELTE Ciklusok Feladat: Határozzuk meg egy természetes szám (N>1) 1-től különböző legkisebb osztóját! Specifikáció: Bemenet: NN Kimenet: ON  Előfeltétel: N>1 Utófeltétel: 1<ON és O|N és i (2i<O): i ł N 2014.10.06. 3/49 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás
  • 4. ELTE Ciklusok A megoldás reprezentálása: Változó N:Egész O:Egész Reprezentációs „szabály” a specifikációreprezentáció áttéréskor: N  Egész 2014.10.06. 4/49 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás Programváltozók deklarálása
  • 5. ELTE Ciklusok A megoldás ötlete: Próbáljuk ki a 2-t; ha nem jó, akkor a 3-at, ha az sem, akkor a 4-et, …; legkésőbb az N jó lesz! Az ezt kifejező lényegi algoritmus: i:=2 i ł N i:=i+1 O:=i Változó i:Egész 2014.10.06. 5/49 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás Lokális változó deklarálása
  • 6. ELTE Ciklusok Feladat: Határozzuk meg egy természetes szám (N>1) 1-től különböző legkisebb és önma-gától különböző legnagyobb osztóját! Specifikáció: Bemenet: NN  Kimenet: Lko,LnoN  Előfeltétel: N>1  Utófeltétel: 1<LkoN és 1Lno<N és Lko|N és i (1<2i<Lko): i ł N és és Lno|N és i (Lno<i<N): i ł N 2014.10.06. 6/49 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás
  • 7. ELTE Ciklusok Megjegyzés: A specifikációból az algoritmus megkapható, de az Lno az utófeltételben az Lko ismere-tében másképp is megfogalmazható: Lko*Lno=N! Az erre építő algoritmus: i:=2 i ł N i:=i+1 Lko:=i Lno:=N Div Lko 2014.10.06. 7/49 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás Változó i:Egész Lko*Lno=N
  • 8. ELTE Ciklusok Feladat: Határozzuk meg egy természetes szám (N>1) 1-től és önmagától különböző leg-kisebb osztóját (ha van)! Specifikáció: Bemenet: NN Kimenet: ON, VanL  Előfeltétel: N>1 Utófeltétel: Van=i (2i<N): i|N és Van2O<N és O|N és i (2i<O): i ł N 2014.10.06. 8/49 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás
  • 9. ELTE Ciklusok Algoritmus: i:=2 i<N és i ł N i:=i+1 Van:=i<N Van Változó i:Egész I N 2  i  N Div i  N Div 2 O:=i  i  N azaz i*i  N azaz i N Megjegyzés: Ha i osztója N-nek, akkor (N Div i) is osztója, azaz elég az osztókat a szám gyökéig keresni! 2014.10.06. 9/49 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás
  • 10. ELTE Ciklusok Feladat: Határozzuk meg egy természetes szám (N>1) osztói összegét! Specifikáció: Bemenet: NN Kimenet: SN Előfeltétel: N>1 N Utófeltétel:  S  i i 1 i N A feltételes szumma értelmezéséhez egy példa: N=15  i=1 : (1|15)  S=1 i=2 : (2 ł15)  S=1+0 i=3 : (3|15)  S=1+3 i=4 : (4 ł 15)  S=1+3+0 … i=15: (15|15)S=1+3+…+15 2014.10.06. 10/49 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás
  • 11. ELTE Ciklusok Algoritmus: S:=0 i=1..N i|N I N S:=S+i  2014.10.06. 11/49 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás Változó i:Egész
  • 12. ELTE Ciklusok Feladat: Határozzuk meg egy természetes szám (N>1) páratlan osztói összegét! Specifikáció: Bemenet: NN Kimenet: SN Előfeltétel: N>1 Utófeltétel: S= páratlan(i)=??? N  i 1  i i N és páratlan(i) 2014.10.06. 12/49 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás
  • 13. ELTE Ciklusok Algoritmus1: S:=0 i|N és páratlan(i) I N S:=S+i  Algoritmus2: i=1..N S:=0 i=1..N; 2-esével i|N I N S:=S+i  2014.10.06. 13/49 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás Változó i:Egész Változó i:Egész
  • 14. ELTE Ciklusok Feladat: Határozzuk meg egy természetes szám (N>1) prímosztói összegét! Specifikáció: Bemenet: NN  Kimenet: SN  Előfeltétel: N>1 Utófeltétel: S= prím(i)=??? N   i 2 i i N és prím(i) 2014.10.06. 14/49 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás
  • 15. ELTE Ciklusok Algoritmus: a legkisebb osztó biztosan prím; ha N-t oszt-juk vele ahányszor csak tudjuk, a következő osztója (a redukált N-nek) megint prím lesz. S:=0 i:=2 iN i|N I N S:=S+i i|N  N:=N Div i i:=i+1 2014.10.06. 15/49 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás Változó i:Egész
  • 16. ELTE 2014.10.06. Ciklusok Feladat: Határozzuk meg azon i,j (i,j>1) termé-szetes számok számát, amelyekre i*j<N (N>1)! Specifikáció: Bemenet: NN  Kimenet: SN  Előfeltétel: N>1  Utófeltétel: S=     j 2   N Div 2 i 2 N Div 2 1   i j N  j  2   N Div 2 i 2 (N-1) Div i 1 i j N Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás 16/49
  • 17. ELTE Ciklusok Algoritmus1: S:=0 i=2..N Div 2 j=2..N Div 2 i*j<N I N S:=S+1  (N-1) Div i S:=S+1 2014.10.06. 17/49 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás Változó i,j:Egész
  • 18. ELTE Ciklusok Algoritmus2: S:=0 i=2..N Div 2 j:=2 i*j<N S:=S+1 j:=j+1 Algoritmus3: S:=0 i=2..N Div 2 S:=S+((N-1) Div i)-1 Változó i,j:Egész 2014.10.06. 18/49 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás Változó i:Egész
  • 19. ELTE Ciklusok Tanulságok:  Ha az utófeltételben , , vagy  jel van, akkor a megoldás mindig ciklus!  Ha az utófeltételben  vagy  jel van, ak-kor a megoldás sokszor feltételes ciklus!  Ha az utófeltételben  jel van, akkor a megoldás sokszor számlálós ciklus! ( is…)  Két egymásba ágyazott  jel esetén két cik-lus lesz egymás belsejében, általában.  Feltételes  esetén a ciklusban elágazás lesz. 2014.10.06. 19/49 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás
  • 20. Tipikus előfordulás: a beolvasás ellenőrzésénél ELTE Ciklusok algoritmus – kód Feltételes ciklus: feltétel utasítások utasítások feltétel Számlálós ciklus: while (feltétel){ utasítások } i=1..N utasítások do{ utasítások }while (feltétel); for (int i=1;i<=N;++i){ utasítások } i=1..N; x-esével utasítások for (int i=1;i<=N;i+=x){ utasítások } (l. 2.ea.-ban) 2014.10.06. 20/49 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás
  • 21. ELTE Feladat elágazásra, vagy más megoldás kell? Feladat: A japán naptár 60 éves ciklusokat tartalmaz, az éveket párosítják, s mindegyik párhoz valami-lyen színt rendelnek (zöld, piros, sárga, fehér, fekete). o 1,2,11,12, …,51,52: zöld évek o 3,4,13,14,…,53,54: piros évek o 5,6,15,16,…55,56: sárga évek o 7,8,17,18,…57,58: fehér évek o 9,10,19,20,…,59,60: fekete évek Tudjuk, hogy 1984-ben indult az utolsó ciklus, amely 2043-ban fog véget érni. Írjunk programot, amely megadja egy M évről (1984≤M≤2043), hogy milyen színű! 2014.10.06. 21/49 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás
  • 22. ELTE Feladat elágazásra, vagy más megoldás kell? Specifikáció1:  Bemenet: évN  Kimenet: sSzín  Előfeltétel: 1984≤év és év≤2043 Egy még „ismeretlen” halmaz  Utófeltétel: ((év-1984) Mod 10) Div 2=0 és s="zöld" vagy ((év-1984) Mod 10) Div 2=1 és s="piros" vagy …  Definíció: Szín:={"zöld","piros","sárga","fehér", "fekete"}S A Szín halmaz definiálása, visszavezetés a Szöveg halmazra Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás 2014.10.06. 22/49
  • 23. ELTE Feladat elágazásra, vagy más megoldás kell? Specifikáció2:  Bemenet: évN  Kimenet: sSzín A Szín halmaz definiálása itt is Szín={"zöld","piros","sárga", "fehér","fekete"}S  Előfeltétel: 1984≤év és év≤2043 lehetséges  Utófeltétel: ((év-1984) Mod 10) Div 2=0 és s="zöld" vagy ((év-1984) Mod 10) Div 2=1 és s="piros" vagy … 2014.10.06. 23/49 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás
  • 24. ELTE Feladat elágazásra, vagy más megoldás kell? Specifikáció2:  Bemenet: évN  Kimenet: sSzín A Szín halmaz definiálása itt is Szín={"zöld","piros","sárga", "fehér","fekete"}S  Előfeltétel: 1984≤év és év≤2043 lehetséges  Utófeltétel: (((év-1984) Mod 10) Div 2=0  s="zöld") és (((év-1984) Mod 10) Div 2=1  s="piros") és … 2014.10.06. 24/49 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás
  • 25. ELTE Feladat elágazásra, vagy más megoldás kell? Algoritmus: Lokális változó deklarálása y:=((év-1984) Mod 10) Div 2 y=0 y=1 y=2 y=3 y=4 s:= "zöld" s:= "piros" s:= "sárga" s:= "fehér" s:= "fekete" Kérdés: Akkor is ezt tennénk, ha 5 helyett 90 ágat kellene írnunk? A válasz előtt egy új adatszerkezet: a tömb. 2014.10.06. 25/49 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás Változó y:Egész
  • 26. ELTE Sorozatok Specifikációbeli fogalmak:  Sorozat: azonos típusú elemek egymásutánja, az elemei sorszámozhatók.  Elem: a sorozat i-edik elemére szokásos mó-don –alulindexeléssel– hivatkozhatunk.  Index: 1..SorozatHossz.  Például:  HónapokN12 – a Hónapok 12 elemű természetes számokból álló sorozat   (Hónapok1, Hónapok2, … , Hónapok12)  ÉvszakokS4 – az Évszakok 4 elemű szövegeket tartalmazó sorozat   (Évszakok1, Évszakok2, Évszakok3, Évszakok4) 2014.10.06. 26/49 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás
  • 27. ELTE Tömbök Algoritmikus fogalmak:  Tömb: véges hosszúságú sorozat, a sorozat i-edik tagjával végezhetünk műveleteket (adott a legkisebb és a legnagyobb index, vagy az elemszám).  Index: sokszor 1..N, időnként 0..N–1, ahol N az elemek számát jelöli.  Tömbelem-műveletek: elemérték-hivatkozás, elemérték-módosítás (az elem-indexeléssel kiválasztva). 2014.10.06. 27/49 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás
  • 28. ELTE Sorozatok  Tömbök Példa1: Specifikációban: X,Y,ZRN – deklarációs példa Z1=X1+Y1 – hivatkozási példa Algoritmusban: X,Y,Z:Tömb[1..N:Valós] – deklarációs példa Z[1]:=X[1]+Y[1] – hivatkozási példa 2014.10.06. 28/49 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás
  • 29. ELTE Sorozatok  Tömbök Példa2: Specifikációban: SzkS5 – deklarációs példa Szk1="első szó" – hivatkozási példa Algoritmusban: Szk:Tömb[0..4:Szöveg] – deklarációs példa Szk[0]:="első szó" – hivatkozási példa 2014.10.06. 29/49 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás
  • 30. ELTE Sorozatok  Tömbök Példa3: Az előbbi feladat-példa Szín halmaza a spe-cifikációban egy szöveg konstansokból álló sorozat: SzínekS5= ("zöld","piros","sárga","fehér","fekete") Az algoritmusban reprezentálhatjuk így: Konstans Színek:Tömb[0..4:Szöveg]= ("zöld","piros","sárga","fehér","fekete") A lényeg az azonos elemszám! Ügyelni kell az „indexek” konverziójára! Itt: Színeki  Színek[i–1] 2014.10.06. 30/49 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás
  • 31. ELTE Tömbök (Algoritmuskód) Tömb-elemszám  indexelés 0..???  Tömb-indexelés elemszám 0..N C++ 0-val kezdi a tömbindexelést! De szabad nem használni a 0-dikat.  Deklarációs példák – X:Tömb[1..N:Valós] Y:Tömb[0..4:Szöveg] a C++ kódjukkal: float X[N+1] string Y[5] Az előbbi Szín halmazos példa: Konstans Színek:Tömb[0..4:Szöveg]= ("zöld","piros","sárga","fehér","fekete") const string Szinek[5]={"zöld","piros", "sárga","fehér","fekete"}; 2014.10.06. 31/49 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás
  • 32. ELTE Tömbök (C++ kódban – áttekintés) Statikus tömbök:  Deklaráció: const int MaxN=???;//tömb max.elemszáma típ tömb[MaxN]; //tömbdeklaráció, //0..MaxN-1 közötti indexekkel …  Hivatkozások: Eltérés a specifikációban szokásostól! … tömb[ind] … //tömbérték-hivatkozás … tömb[ind]=kif;//tömbérték-módosítás … 2014.10.06. 32/49 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás Fordításkor kiderülő méret esete.
  • 33. ELTE Tömbök (C++ kódban – áttekintés) Statikus tömb konstansok:  Deklaráció: const int N=???;//tömb elemszáma const típ tömb[N]={t1,t2,…,tN}; vagy //konstans tömb deklarációja, //0..N-1 közötti indexekkel const típ tömb[]={t1,t2,…,tN}; //konstans tömb deklarációja const int N=sizeof tömb/sizeof(típ); //tömb elemszáma, //indexek: 0..N-1 közötti Figyeljünk a sizeof szintaxisára: más adatra, és más típusra! 2014.10.06. 33/49 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás Fordításkor kiderülő méret esete.
  • 34. ELTE Tömbök (C++ kódban – áttekintés) Dinamikus tömbök:  Deklaráció: Csak futáskor kiderülő méret esete. int N; //tömb aktuális elemszám …  Létrehozás: N=???;//N meghatározása, pl. beolvasása típ tömb[N];//tömbhelyfoglalás N db //típ típusú elem számára  Hivatkozások (nincs változás): … tömb[ind] … //tömbérték-hivatkozás … tömb[ind]=kif;//tömbérték-módosítás … 2014.10.06. 34/49 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás
  • 35. A HelyesN-be beleért-jük ELTE Tömbök (C++ kódban – áttekintés) Tömb beolvasása (ellenőrzéssel): Algoritmikusan: Be: N [HelyesN(N))] bool hiba; //van-e hiba? … do{ cout << "Elemszám:"; cin >> N; hiba=!HelyesN(N); if (hiba) { cout << "hibaüzet" << endl; } }while (hiba); a szintaktikus és szemantikus ellenőr-zést is. L. még korábban! 2014.10.06. 35/49 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás
  • 36. A Helyes-be beleértjük a szintaktikus és ELTE Tömbök (C++ kódban – áttekintés) Tömb beolvasása (ellenőrzéssel): Algoritmikusan: Be: v(1..N) [Helyes(v(1..N))] bool hiba; //van-e hiba? … do{ for (int i=1;i<=N;++i) { do{ cout << "Elemszám:"; cin >> N; hiba=!HelyesN(N); if (hiba) { cout << i << ".:"; cin >> v[i-1]; hiba=!Helyes(v[i-1]); if (hiba) { cout << "hibaüzet" << endl; } cout << "hibaüzenet" << endl; } }while (hiba); }while (hiba); } Térjünk vissza a kérdésre… szemantikus ellenőr-zést is. L. még korábban! 2014.10.06. 36/49 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás
  • 37. ELTE Elágazás helyett tömb Specifikáció:  Bemenet: évN  Kimenet: sSzín Szín={"zöld","piros","sárga", "fehér","fekete"}S SzínekSzín5= ("zöld","piros","sárga","fehér","fekete")  Előfeltétel: 1984≤év és év≤2043  Utófeltétel: s=Színek(((év–1984) Mod 10) Div 2)+1 2014.10.06. 37/49 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás
  • 38. ELTE Elágazás helyett tömb Specifikáció (egyszerűsítve):  Bemenet: évN  Kimenet: sS SzínekS5= ("zöld","piros","sárga","fehér","fekete")  Előfeltétel: 1984≤év és év≤2043  Utófeltétel: s=Színek(((év–1984) Mod 10) Div 2)+1 2014.10.06. 38/49 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás
  • 39. ELTE Elágazás helyett tömb Algoritmus:  Adatreprezentálás: Változó év:Egész s:Szöveg Konstans Színek:Tömb[0..4:Szöveg]= ("zöld","piros","sárga", "fehér","fekete") 2014.10.06. 39/49 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás Programparaméterek deklarálása
  • 40. ELTE Elágazás helyett tömb Algoritmus:  Tevékenység: y:=(((év–1984) Mod 10) Div 2)+1 s:=Színek[y–1] észrevéve az egyszerűsítési lehetőséget: 2014.10.06. 40/49 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás Változó y:Egész y:=((év–1984) Mod 10) Div 2 s:=Színek[y] Változó y:Egész
  • 41. ELTE Konstans tömbök alkalmazása Feladat: Írjunk programot, amely egy 1 és 99 közötti számot betűkkel ír ki! Specifikáció:  Bemenet: NN egyesS10= ("","egy",…,"kilenc") tizesS10= ("","tizen",…,"kilencven")  Kimenet: SS  Előfeltétel: 1N99 Leglogikusabb helyre téve. Az algoritmus szempontjából „adottság”, azaz bemenet… 2014.10.06. 41/49 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás
  • 42. ELTE Konstans tömbök alkalmazása  Utófeltétel: N=10  S="tíz" és N=20  S="húsz" és N{10,20}  S=tizes(N Div 10)+1 + egyes(N Mod 10)+1 2014.10.06. 42/49 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás
  • 43. ELTE Konstans tömbök alkalmazása Algoritmus: Programparaméterek deklarálása Változó N:Egész Konstans egyes:Tömb[0..9:Szöveg]= ("","egy",…,"kilenc") Konstans tizes:Tömb[0..9:Szöveg]= ("","tizen",…,"kilencven") Változó S:Szöveg Figyelembe véve az index-elcsúszást: N=10 N=20 N{10,20} S:="tíz" S:="húsz" S:=tizes[N Div 10]+ 2014.10.06. 43/49 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás egyes[N Mod 10]
  • 44. ELTE Konstans tömbök alkalmazása Feladat: Írjunk programot, amely egy hónapnévhez a sorszámát rendeli! Specifikáció:  Bemenet: HS HóNévS12= ("január",…,"december")  Kimenet: SN  Előfeltétel: HHóNév  Utófeltétel: 1S12 és HóNévS=H 2014.10.06. 44/49 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás
  • 45. ELTE Konstans tömbök alkalmazása Algoritmus: Változó H:Szöveg, S:Egész Konstans HóNév:Tömb[1..12:Szöveg]= ("január",…,"december") S:=1 HóNév[S]H S:=S+1 Kérdés: mi lenne, ha az ef. nem teljesülne? Futási hiba? Végtelen ciklus? 2014.10.06. 45/49 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás Programparaméterek deklarálása
  • 46. ELTE Konstans tömb – mit tárolunk? Feladat: Egy nap a nem szökőév hányadik napja? Specifikáció1:  Bemenet: H,NN hóN12=(31,28,31,…,31)  Kimenet: SN  Előfeltétel: 1≤H≤12 és 1≤N≤hóH H  1  Utófeltétel:  i S N hó i  1   2014.10.06. 46/49 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás
  • 47. ELTE Konstans tömb – mit tárolunk? Algoritmus: Változó H,N,S:Egész Konstans hó:Tömb[1..12:Egész]= (31,28,31,…,31) S:=N i=1..H–1 S:=S+hó[i] Változó i:Egész Megjegyzés: Szökőév esetén H≥3 esetén S-et 1-gyel meg kellene növelni! (És az előfel-tétel is módosul.) 2014.10.06. 47/49 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás Programparaméterek deklarálása Lokális változó deklarálása
  • 48. ELTE Konstans tömb – mit tárolunk? Egy másik megoldás: Tároljuk minden hónapra, hogy az előző hónapokban összesen hány nap van! Specifikáció2:  Bemenet: … hóN12=(0,31,59,90,…,334)  Utófeltétel: S=N+hóH Kérdés: Ez jobb megoldás? Mi lesz az előfel-tétellel? 2014.10.06. 48/49 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 3. előadás