Professional Documents
Culture Documents
Programozási Alapismeretek 3. Előadás
Programozási Alapismeretek 3. Előadás
3. előadás
Tartalom
➢ Ciklusok
specifikáció+„algoritmika”+kódolás
➢ Tömbök
ELTE
➢ Egy bevezető példa a tömbhöz
➢ Sorozatok –tömbök
➢ Elágazás helyett tömb
➢ Konstans tömbök
Feladat:
Határozd meg egy természetes szám
(N>1) 1-től különböző legkisebb osztóját!
ELTE Specifikáció:
➢ Bemenet: NN
➢ Kimenet: ON
➢ Előfeltétel: N>1
➢ Utófeltétel: 1<ON és O|N és
i (2i<O): i ł N
A megoldás reprezentálása:
Programváltozók
Változó deklarálása
N:Egész
ELTE
O:Egész
Reprezentációs „szabály” a
specifikáció→reprezentáció áttéréskor:
N → Egész
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, …;
ELTE
legkésőbb az N jó lesz!
Az ezt kifejező lényegi algoritmus:
Változó Lokális változó
i:Egész
deklarálása
i:=2
Ciklus amíg i ł N
i:=i+1
Ciklus vége
O:=i
2020. 02. 18. 15:16 Horváth-Papné-Szlávi-Zsakó: Programozás(i alapismeretek) 3. előadás 5/41
Ciklusok
Feladat:
Határozd 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!
ELTE Specifikáció:
➢ Bemenet: NN
➢ Kimenet: Lko,LnoN
➢ Előfeltétel: N>1
➢ Utófeltétel: 1<LkoN és 1Lno<N és
Lko|N és
i (1<i<Lko):
(2i<Lko): i ł N
N és
és
Lno|N és
i (Lno<i<N): i ł N
2020. 02. 18. 15:16 Horváth-Papné-Szlávi-Zsakó: Programozás(i alapismeretek) 3. előadás 6/41
Ciklusok
Megjegyzés:
A specifikációból az algoritmus megkapható,
de az Lno az utófeltételben az Lko ismeretében
másképp is megfogalmazható: Lko*Lno=N!
ELTE
Feladat:
Határozd meg egy természetes szám
(N>1) 1-től és önmagától különböző leg-
ELTE
kisebb osztóját (ha van)!
Specifikáció:
➢ Bemenet: NN
➢ Kimenet: ON, VanL
➢ Előfeltétel: N>1
➢ Utófeltétel: Van=i (2i<N): i|N és
Van→2O<N és O|N és
i (2i<O): i ł N
2020. 02. 18. 15:16 Horváth-Papné-Szlávi-Zsakó: Programozás(i alapismeretek) 3. előadás 8/41
Ciklusok
Algoritmus:
Változó i:Egész
i:=2
Ciklus amíg i<N és ił N
ELTE
i:=i+1 i N
Ciklus vége
Van:=i<N 2 → i N Div i N Div 2
Ha Van akkor O:=i 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!
2020. 02. 18. 15:16 Horváth-Papné-Szlávi-Zsakó: Programozás(i alapismeretek) 3. előadás 9/41
Ciklusok
Feladat:
Határozd meg egy természetes szám
(N>1) osztói összegét!
ELTE Specifikáció:
➢ Bemenet: NN
➢ Kimenet: SN A feltételes szumma értelmezéséhez
egy példa:
➢ Előfeltétel: N>1 N
N=15 → =
i=1 : (1|15) → 1
➢ Utófeltétel: S = i i =1
i=2 : (2 ł 15) → 1
i=3 : (3|15) → 1+3
i=4 : (4 ł 15) → 1+3
…
iN i=15: (15|15)→1+3+…+15
Algoritmus:
Változó
i:Egész
ELTE
S:=0
Ciklus i=1-től N-ig
Ha i|N akkor S:=S+i
Ciklus vége
Kérdés: Elég lenne itt is gyök(N)-ig menni az
S:=S+i+(N Div i) értékadással?
Feladat:
Határozd meg egy természetes szám
(N>1) páratlan osztói összegét!
ELTE Specifikáció:
➢ Bemenet: NN
➢ Kimenet: SN
➢ Előfeltétel: N>1 N
➢ Utófeltétel: S= i i =1
i N és páratlan(i)
➢ Definíció: páratlan függvény definiálása
2020. 02. 18. 15:16 Horváth-Papné-Szlávi-Zsakó: Programozás(i alapismeretek) 3. előadás 12/41
Ciklusok
Algoritmus1:
Változó i:Egész
S:=0
Ciklus i=1-től N-ig
ELTE
Ha i|N és páratlan(i) akkor S:=S+i
Ciklus vége
Algoritmus2:
Változó i:Egész
S:=0
Ciklus i=1-től N-ig 2-esével
Ha i|N akkor S:=S+i
Ciklus vége
Feladat:
Határozd meg egy természetes szám
(N>1) prímosztói összegét!
ELTE Specifikáció:
➢ Bemenet: NN
➢ Kimenet: SN
➢ Előfeltétel: N>1 N
➢ Utófeltétel: S= i
i =2
i N és prím(i)
prím(i)=???
2020. 02. 18. 15:16 Horváth-Papné-Szlávi-Zsakó: Programozás(i alapismeretek) 3. előadás 14/41
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.
ELTE Változó i:Egész
S:=0
i:=2
Ciklus amíg i≤N
Ha i|N akkor S:=S+i
Ciklus amíg i|N
N:=N Div i
Ciklus vége
Elágazás vége
i:=i+1
Ciklus vége
2020. 02. 18. 15:16 Horváth-Papné-Szlávi-Zsakó: Programozás(i alapismeretek) 3. előadás 15/41
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-
ELTE
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!
➢ Feltételes esetén a ciklusban elágazás lesz.
Számlálós ciklus:
Ciklus i=1-től N-ig for (int i=1;i<=N;++i){
utasítások utasítások
Ciklus vége }
Ciklus i=1-től N-ig
x-esével for (int i=1;i<=N;i+=x){
utasítások utasítások
Ciklus vége }
Algoritmikus fogalmak:
➢ Tömb: véges hosszúságú sorozat algoritmi-
kus párja, amelynek i-edik tagjával végezhe-
tünk műveleteket (adott a legkisebb és a
ELTE
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. Máskor a..b. (A
sorozatokhoz hasonlóan.)
➢ Tömbelem-műveletek: elemérték-hivatkozás,
elemérték-módosítás (az elem-indexeléssel
kiválasztva).
Példa1:
Specifikációban:
X1..N,Y1..N,Z1..NRN – deklarációs példa
ELTE 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
Példa2:
Specifikációban:
Ek-1..10S12 – deklarációs példa
ELTE Ek-1="Pince" – hivatkozási példa
Algoritmusban:
Ek:Tömb[-1..10:Szöveg] – deklarációs
példa
Ek[-1]:="Pince" – hivatkozási példa
Példa3:
Az előbbi feladatpélda Szín halmaza a spe-
cifikációban egy szöveg konstansokból álló
sorozat:
ELTE
Színek0..4S5=
("zöld","piros","sárga","fehér","fekete")
Az algoritmusban így reprezentáljuk:
Konstans Színek:Tömb[0..4:Szöveg]=
("zöld","piros","sárga","fehér","fekete")
Találja ki: miért jó döntés 0-tól indexelni!
2020. 02. 18. 15:16 Horváth-Papné-Szlávi-Zsakó: Programozás(i alapismeretek) 3. előadás 26/41
Elágazás helyett tömb
A japán naptáras feladat
Specifikáció:
➢ Bemenet: évN
➢ Kimenet: sSzín
ELTE
Szín={"zöld","piros","sárga",
"fehér","fekete"}S
Színek0..4Szín5=
("zöld","piros","sárga","fehér","fekete")
➢ Előfeltétel: 1984≤év és év≤2043
➢ Ciklusok
specifikáció+„algoritmika”+kódolás
➢ Tömbök
ELTE
➢ Egy bevezető példa a tömbhöz
➢ Sorozatok –tömbök
➢ Elágazás helyett tömb
➢ Konstans tömbök