You are on page 1of 32

Programozási

tételek
Definíció, algoritmus, Python példa, kapcsolódó
feladatok

2021.02.16
.
Tételek
 Eldöntés
 (Kiválasztás)
 Keresés
 (Bináris/Logaritmikus keresés)
 Megszámlálás
 Összegzés
 Maximum/minimum kiválasztás
 Rendezés (minimum kiválasztásos)
 Kiválogatás
 Szétválogatás
Eldöntés tétele
 Adott N elemű A lista és egy T tulajdonság (T logikai
kifejezés vagy függvény)
 Döntsük el, hogy van-e az A listának T tulajdonságú
eleme
i := 1
Ciklus amig (i <= N) és nem T(A(i))
i := i + 1
Ciklus vége
Ki: (i <= N)
 Magyarázat:
Az elemek vizsgálatát az első elemtől kezdjük (i := 1), és
lépegetünk sorba az elemeken (i := i + 1), amíg el nem
érjük a lista végét (i ⇐ N), vagy nem találunk T
tulajdonságú elemet (nem T(A(i))). A visszatérési érték
akkor lesz igaz, ha nem értük el lista végét (i ⇐ N).
Eldöntés tétele (Python)

i=0 van=False
while i<N and not T(A[i]): for i in range(N):
i+=1 if T(A[i]):
print(i<N) van=True
print(van)

# csak érték, művelettel


Print( érték in A )
# csak érték, lista-függvénnyel
print( A.count(érték)>0 )
# egysoros for + if és T tulajdonság
print( len([v for v in A if T(v)])>0 )
Eldöntés tétele (feladatok)

 Hőmérséklet
 Ismerjük egy hét napjainak napi átlaghőmérsékleteit
(fokok.txt, első sorában a darabszámmal). Igaz-e,
hogy folyamatosan emelkedett a hőmérséklet?
 Eszperente
 Állapítsuk meg egy szövegről (eszperente.txt), hogy
eszperente szöveg-e (eszperente szöveg az, amelyben
csak e és é magánhangzók szerepelnek)
 Több mondat
 Adott szövegről (eszperente.txt) döntsük el, hogy több
mondatból áll-e! (Mondathatár: mondatvégi írásjel,
szóköz, majd nagybetű)
Kiválasztás tétele
 Adott N elemű A lista és egy T tulajdonság (T logikai kifejezés
vagy függvény) Tudjuk, hogy a listának van T tulajdonságú
eleme.
 Adjunk meg egy T tulajdonságú elemet, vagy annak indexét
i := 1
Ciklus amig nem T(A(i))
i := i + 1
Ciklus vége
Ki: i, A(i)
 Magyarázat:
Azért nem kell figyelni a ciklusban a végét, mert biztosan tudjuk,
hogy van ilyen elem. Kiírtuk mind az indexet és az értéket is.
Kiválasztás tétele (Python)

i=0 i = 0;
while not T(A[i]: for i in range(N):
i+=1 if T(A[i]):
print(i) break
print(A[i]) print(i)
print(A[i])

# egysoros for + if és első elem


print( [v for v in A if T(v)][0] )
Kiválasztás tétele (feladatok)

 Egy repülőgép útvonalon mérik föld


vagy tenger tengerszinthez viszonyított
magasságot időnként és feljegyezték a
magassagok.txt-ben
 Írjuk ki az első sziget kezdő partjának
magasságát
 Írjuk ki, hogy hányadik mérésnél végződik az
1. sziget
 Írjuk ki, hogy hányadik mérésnél kezdődik a 2.
sziget
Keresés tétele
 Adott N elemű A lista és egy T tulajdonság (T logikai kifejezés
vagy függvény)
 Döntsük el, hogy van-e az A listának T tulajdonságú eleme,
ha van adjuk meg az elemet, vagy az elem listabeli indexét
i := 1
Ciklus amig (i <= N) és nem T(A(i))
i := i + 1
Ciklus vége
Ha (i <= N) akkor
Ki: i, A(i)
különben
Ki: hamis
Elágazás vége
Keresés tétele (Python)

i=0 i = 0
while i<N and not T(A[i]): for i in range(N):
i+=1 if T(A[i]):
if i<N: break
print(i,":",A[i]) if i<N:
else: print(i,":",A[i])
print("Nincs") else:
print("Nincs")

# egysoros for+if és első elem


print( [v for v in A if T(v)][0] )
Keresés tétele (feladatok)

 Egy repülőgép útvonalon mérik a tengerszinthez


viszonyított magasságot időnként és feljegyezték a
magassagok.txt-ben
 Adjuk meg az első 1000 méternél magasabb mérés
pontos értékét, ha létezik
 Ha szárazföldről kezdődik a mérés, akkor az első tengeri
mérés helyét adjuk meg (miért nem az értékét?),
egyébként az első szárazföldét
 Adjuk meg az első olyan mérést, amely az előzőnél
legalább kétszer több
Bináris/logaritmikus keresés
tétele
 Adott N elemű rendezett A lista és X egy érték
 Döntsük el, hogy van-e az A listában X elem, ha igen, írjuk ki
a helyével együtt, egyébként, hogy nincs.
E := 1 // eleje
V := N // vége
Ciklus
K := int((E+V) / 2) // közepe
Ha A(K) > X akkor V := K - 1
Ha A(K) < X akkor E := K + 1
Amíg A(K) <> X és E <= V
Ha E > V akkor Ki: nincs
különben Ki: K
Bináris/logaritmikus keresés
tétele (Python)
E = 0
V = N-1
K = (E + V) / 2;
while A[K]!=X and E<=V:
if A[K] > X V = K - 1
if A[K] < X E = K + 1
K = (E + V) / 2
if E > V:
print("Nincs")
else:
print(X, " " , K)
Bináris/logaritmikus keresés
tétele (feladatok)
 1. Olvassuk be a rendezett.txt tartalmát a számítógép
memóriájába.
 Az első sorban az elemszámot tartalmazza, utána a
rendezett adatokat.
 Írjuk ki, hogy lineáris kereséssel mennyi idő (lépés) megtalálni
az utolsó előtti elem értékét.
 Írjuk ki, hogy bináris kereséssel mennyi idő (lépés) megtalálni
az utolsó előtti elem értékét.
 2. Hozzunk létre a memóriában egy 1000 és 2000 közötti
egész számokat tartalmazó 100 elemű listaöt.
 Használjuk a random osztályt.
 A lista csak nem csökkenő sorrendben tartalmazzon
elemeket!
 Írjuk ki bináris kereséssel, hogy az 1500 érték mely indexű
elem, ha létezik.
Megszámlálás tétele
 Adott N elemű A lista és egy T tulajdonság (T logikai
kifejezés vagy függvény)
 Számoljuk meg, hogy hány T tulajdonságú eleme van
az A listának.
db := 0
Ciklus i := 1-től N-ig
Ha T(A(i)) akkor db := db + 1
Ciklus vége
Ki: db
 Magyarázat:
Megszámlálható ciklus esetén a ciklusváltozó megy a
kezdőértéktől a végértékig. A db változó értéke kiíráskor
0 és N közé esik majd. Mikor melyik?
Megszámlálás tétele
(Python)
db=0 db=0
for i in range(N): for v in A:
if T(A[i]): if T(v):
db+=1 db+=1
print(db) print(db)

# lista-függvénnyel, csak érték, nem tulajdonság


print( A.count(érték) )
# egysoros for + if és T tulajdonság
print( len([v for v in A if T(v)]) )
Megszámlálás tétele
(feladatok)
 Hőmérséklet
 Ismerjük két hét napjainak napi
átlaghőmérsékleteit (fokok.txt, első sorában
a darabszámmal). Adjuk meg, hány olyan nap
volt, amikor fagyott?
 Eszperente
 Állapítsuk meg egy szövegről (eszperente.txt),
hogy hány e és é betű van benne együttesen.
 Egy repülőgép útvonalon mérik a tengerszinthez
viszonyított magasságot időnként és feljegyezték
a magassagok.txt-ben
 Adjuk meg hányszor mértek tengerszint felett.
Összegzés tétele
 Adott N elemű A lista
 Határozzuk meg az A lista elemeinek az összegét.
összeg:= 0
Ciklus i := 1-től N-ig
összeg := összeg + A(i)
Ciklus vége
Ki: összeg
 Magyarázat:
Összeg változó az eddigi összeget tartalmazza a ciklus
során.
Összegzés tétele (Python)

osszeg=0 osszeg=0
for i in range(N): for v in A:
osszeg += A[i] osszeg += v

print(osszeg) print(osszeg)

// lista-függvénnyel
print( sum(A) )
Összegzés tétele (feladatok)
 Hőmérséklet. Ismerjük két hét napjainak napi
átlaghőmérsékleteit (fokok.txt, első sorában a
darabszámmal).
 Adjuk meg, mennyi volt a kétheti
átlaghőmérséklet.
 Olvassuk be a rendezett.txt tartalmát a számítógép
memóriájába.
 Az első sorban az elemszámot tartalmazza, utána
a rendezett adatokat.
 Adjuk meg az elemek összegét
 Egy repülőgép útvonalon mérik a tengerszinthez
viszonyított magasságot időnként és feljegyezték a
magassagok.txt-ben
 Adjuk meg a mérések átlag magasságát.
Maximum/minimum
kiválasztás tétele
 Adott N elemű A lista. Adjunk meg a legnagyobb
(vagy legkisebb) elemét és helyét
MaxIndex := 1
MinIndex := 1
Ciklus i: = 2-től N-ig
Ha A(i)>A(MaxIndex) akkor MaxIndex := i
Ha A(i)<A(MinIndex) akkor MinIndex := i
Ciklus vége
Ki: MaxIndex, A(MaxIndex)
Ki: MinIndex, A(MinIndex)
 Megjegyzés:
Lehet, de felesleges az 1. elemet vizsgálni. Egyezőség
esetén az első legnagyobb/legkisebb értéket adja.
Miért?
Maximum/minimum
kiválasztás tétele (Python)
MaxHely = MinHely = 0
for i in range(1,N):
if A[i]>A[MaxHely]:
MaxHely=i
if A[i]<A[MinHely]):
MinHely=i
print("Max ",MaxHely,":",A[MaxHely])
print("Min ",MinHely,":",A[MinHely])

// lista-függvénnyel a hely és az érték


print("Max" , A.index(max(A)), ":" , max(A) )
print("Min" , A.index(min(A)), ":" , min(A) )
);
Maximum/minimum
kiválasztás tétele (feladatok)
 Hőmérséklet. Ismerjük két hét napjainak napi
átlaghőmérsékleteit (fokok.txt, első sorában a
darabszámmal).
 Adjuk meg a legnagyobb mért hőmérsékletet és
azt, hányadik mérésnél kaptuk
 Egy repülőgép útvonalon mérik a tengerszinthez
viszonyított magasságot időnként és feljegyezték a
magassagok.txt-ben
 Adjuk meg a legnagyobb tengerszint feletti
magasságot és az indexét
 Adjuk meg a legkisebb szárazföldi mérés helyét és
értékét
 Adjuk meg az első sziget csúcsát
Minimum-kiválasztásos
rendezés tétele
 Adott N elemű A lista. Rendezzük a lista elemeit
növekvő (emelkedő, nagyság szerinti) sorrendbe!
Ciklus i: = 1-től N-1-ig
MinIndex := i
Ciklus j: = i+1-től N-ig
Ha A(j)<A(MinIndex) akkor MinIndex := i
Ciklus vége

Csere ( A(i), A(MinIndex) )


Ciklus vége
Minimum-kiválasztásos
rendezés tétele(Python)

for i in range(N-1):
MinHely = i
for j in range(i+1,N):
if A[j]<A[MinHely]:
MinHely=j
A[i],A[MinHely] = A[MinHely], A[i]

// lista-függvénnyel
A.sort()
Minimum-kiválasztásos
rendezés tétele (feladatok)
 Hőmérséklet. Ismerjük két hét napjainak napi
átlaghőmérsékleteit (fokok.txt, első sorában a
darabszámmal).
 Írjuk ki csökkenő sorrendben a hőmérsékleteket
 Egy repülőgép útvonalon mérik a tengerszinthez
viszonyított magasságot időnként és feljegyezték a
magassagok.txt-ben
 Írjuk ki növekvő sorrendben a nem tengerszinti
feletti mérések eredményeit
 Eszperente. Adott egy szöveg (eszperente.txt)
 A szóközök mentén bontsunk szavakra és
rendezetten írjuk ki a képernyőre
 Plusz ismétlődések nélkül
 Megszámolva a szavakból hány darab szerepel
Kiválogatás tétele
 Adott N elemű A lista és egy T tulajdonság (T logikai
kifejezés vagy függvény)
 Válogassuk ki egy B listába az A lista T tulajdonságú
elemeit
db := 0
Ciklus i:=1-től N-ig
Ha T(A(i)) akkor
db := db + 1
B(db) := A(i)
Elágazás vége
Ciklus vége
 Kérdések
Mi a szerepe db-nek? Mekkora elemszámú B-t
deklaráljunk?
Kiválogatás tétele (Python)

db=0 B=[]
B=[0]*N for v in A:
for i in range(N):
if T(v):
if T(A[i]):
B.append(v)
db+=1
B[db]=A[i]

# egysoros for+if és T tulajdonság


B = [v for v in A if T(v)]
Kiválogatás tétele
(feladatok)
 Hőmérséklet. Ismerjük két hét napjainak napi
átlaghőmérsékleteit (fokok.txt, első sorában a
darabszámmal).
 Válogassuk ki a páros és kétjegyű hőmérséklet
értékeket egy új listába és írjuk ki
 Egy repülőgép útvonalon mérik a tengerszinthez
viszonyított magasságot időnként és feljegyezték a
magassagok.txt-ben
 Válogassuk ki egy új listába az értékeket úgy,
mintha mindig csak egy darab tenger feletti
mérésünk lett volna
 Eszperente. Adott egy szöveg (eszperente.txt)
 A szóközök mentén bontsunk szavakra és
válogassuk ki a legalább 3 ” e” betűs szavakat
Szétválogatás tétele
 Adott N elemű A lista és egy T tulajdonság (T logikai
kifejezés vagy függvény)
 Válogassuk ki az A lista T tulajdonságú elemeit B
listába, nem T tulajdonságú elemeit C listába
db := 0
Ciklus i:=1-től N-ig
Ha T(A(i)) akkor
db := db + 1
B(db) := A(i)
Különben
C(i-db) := A(i)
Elágazás vége
Ciklus vége
Szétválogatás tétele
(Python)
db=0 B=[]
B=[0]*N
C=[]
C=[0]*N
for i in range(N):
for v in A:
if T(A[i]): if T(v):
db+=1 B.append(v)
B[db]=A[i]
else:
else:
C[i-db]=A[i]
C.append(v)

# egysoros for + if és T tulajdonság


B = [v for v in A if T(v)]
C = [v for v in A if not T(v)]
Szétválogatás tétele
(feladatok)
 Hőmérséklet. Ismerjük két hét napjainak napi
átlaghőmérsékleteit (fokok.txt, első sorában a
darabszámmal).
 Válogassuk szét a páros és páratlan hőmérséklet
értékeket
 Egy repülőgép útvonalon mérik a tengerszinthez
viszonyított magasságot időnként és feljegyezték a
magassagok.txt-ben
 Válogassuk ki a tenger feletti helyek és a nem
tenger feletti helyek indexeit listaökbe
 Eszperente. Adott egy szöveg (eszperente.txt)
 A szóközök mentén bontsunk szavakra és a
kis/nagybetűvel kezdődő szavakat külön
válogassuk szét

You might also like