Adott egy lista, és szeretnénk emelkedő számsorrendebe rendezni a lista elemeit. A legegyszerűbb cserés rendezést fogjuk alkalmazni. Sokféle módszer létezik, van még a minimum kiválasztásos rendezés, a buborékrendezés, a javított buborékos rendezés, a beillesztéses rendezés, a javított beillesztéses rendezés, a szétosztó rendezés, a számlálva szétosztó rendezés, a számláló rendezés, a gyorsrendezés stb.
A range()függvény visszatér egy számsorozathoz, alapértelmezés szerint 0-tól kezdődően, 1-gyel növekszik (alapértelmezés szerint), és egy megadott szám előtt leáll.
Házi feladat megoldása
lista = [5, 3, 9, 1, 7]
for i in range(len(lista)-1):
for j in range(i+1, len(lista)):
print(i, j, lista, end='')
if lista[i] > lista [j]:
lista[i], lista[j] = lista[j], lista[i]
print('!', lista[i], lista[j])
print(' ', lista)
else:
print('')
Nézzük a folyamatot és a sor alján a megoldást.
0 1 [5, 3, 9, 1, 7]! 3 5
[3, 5, 9, 1, 7]
0 2 [3, 5, 9, 1, 7]
0 3 [3, 5, 9, 1, 7]! 1 3
[1, 5, 9, 3, 7]
0 4 [1, 5, 9, 3, 7]
1 2 [1, 5, 9, 3, 7]
1 3 [1, 5, 9, 3, 7]! 3 5
[1, 3, 9, 5, 7]
1 4 [1, 3, 9, 5, 7]
2 3 [1, 3, 9, 5, 7]! 5 9
[1, 3, 5, 9, 7]
2 4 [1, 3, 5, 9, 7]
3 4 [1, 3, 5, 9, 7]! 7 9
[1, 3, 5, 7, 9] # Megoldás!
>
https://infopy.eet.bme.hu/qsort/
Numerikus rendezés
thislist = [100, 50, 65, 82, 23]
thislist.sort()
print(thislist)
Fordítva
thislist = [100, 50, 65, 82, 23]
thislist.sort(reverse = True)
print(thislist)
Előző házi feladat
----------------------
Írassuk ki a számokat 1-től 100-ig
Megoldás:
i = 1
while i <= 100:
print(i)
i += 1
--------------------------------
Régi Házi Feladat: kérjünk be egy egész számot és döntsük el, hogy páros vagy páratlan!
A program: a = int(input('Kérem az egész számot! '))
if a % 2 == 1: print('A szám páratlan.')
else: print('A szám páros.')
------------------
Feladat: adjuk össze a pozitív egész számokat 1-től 50-ig!
A program:
s = 0
for i in range(1, 51):
s = s + i
print('A számok összege: ', s)
--------------------------------------------
Írassuk ki a 100-nál kisebb, 3-mal osztva 1 maradékot adó pozitív egész számokat!
A program (megszámlálásos):
for i in range(100):
if i % 3 == 1:
print(i)
---------------------------
Ugyanennek a feladatnak a megoldása elöl tesztelő ciklussal:
i = 1
while i < 100:
if i % 3 == 1:
print(i)
i += 1
---------------------------
Írjunk programot, ami beolvassa egy háromszög 3 oldalát és azokból kiszámolja a háromszög területét (Héron-képlettel).
A program:
import math
a = float(input('a= '))
b = float(input('b= '))
c = float(input('c= '))
if a>0 and b>0 and c>0 and (a+b>c) and (a+c>b) and (b+c>a):
s = (a+b+c)/2
t = math.sqrt(s*(s-a)*(s-b)*(s-c))
print('A háromszög területe: ', round(t, 2))
else:
print('Nem létezik a háromszög!')
-----------------------
Olvassunk be egy egész számot a billentyűzetről és döntsük el, hogy a szám prím-e!
A program:
n = int(input('Kérem az egész számot! '))
i = 2
while n % i != 0:
i = i + 1
if i == n:
print('A szám prím.')
else:
print('A szám nem prím.')
----------------------------
egy 10 elemű, egész számokat tartalmazó lista elemeit adjuk össze és írjuk ki az összeget! (Összegzés tétele)
megoldás:
lista = [3, 1, 7, 11, 2, 3, -1, -7, -11, -2]
s = 0
for x in lista:
s += x
print('A lista elemeinek összege: ', s)
-----------------------------
Algoritmus értelmezése Maximum-kiválasztás tétele is. Miről is van itt szó?
Adva van például egy számokból álló sorozat. Az a feladat, hogy mondjuk meg, melyik ezek közül a legnagyobb? Előfordulhat, hogy a sorozatban több legnagyobb elem van. Ilyenkor általában elég egyet megadni eredményként. Azt is megkérdezhetjük, hogy hányadik tagja a sorozatnak a legnagyobb elem? Nézzük az algoritmus mondatszerű leírását:
Eljárás: Be: N, a()
max = a(1)
ciklus i = 2-től n-ig
Ha a(i) > max, akkor max = a(i) (*)
ciklus vége
Ki: max
Most értelmezzük az algoritmust sorról-sorra.
Az első lépésben egy max nevű változónak értéket adunk: legyen egyenlő a sorozat első elemével.
Ezután elindítunk egy megszámlálásos ciklust, ami i=2-tól indul, hiszen az első elem lett a max értéke. A ciklusmagban egy feltételvizsgálat van: megvizsgáljuk, hogy a sorozat i-edik eleme nagyobb-e a max értékénél. Ha igen, akkor ez azt jelenti, hogy az addigi legnagyobb elemnél találtunk nagyobbat, tehát erre az értékre kell beállítani a max értékét. Ha nem, akkor vesszük a sorozat következő elemét. Amikor vége a ciklusnak, a max nevű változóban lesz a sorozat legnagyobb eleme. Megjegyzés: ennek a tételnek a párja a minimum-kiválasztás tétele. Ennek az algoritmusában max helyett min van, továbbá a (*)-gal jelölt sorban a következő szerepel: Ha a(i) < min, akkor min = a(i)
-----------------------
Írjunk programot, amely egy N elemet tartalmazó tömbről megmondja, hogy a szomszédos elemek között mekkora a legnagyobb különbség abszolút értékben!
A Python program:
tomb = [2, 1, 5, 4, 11, 6, 8, 20, 14, 7]
n1 = len(tomb)
max = abs(tomb[1] - tomb[0])
for i in range(1, n1-1):
if abs(tomb[i+1] - tomb[i]) > max:
max = abs(tomb[i+1] - tomb[i])
print('A legnagyobb különbség abszolut értékben: ', max)
Még néhány alapalgoritmus
Összegzés
Függvény Összegzés( A: Sorozat ): ElemTip
Változó
i: egész;
S: elemtip;
FKEZD
S ← 0
Ciklus (i ← 1 . . . A.elemsz´am)
S ← S + A[i]
CVége
Összegzés ← S
FVÉGE
Megszámlálás
Függvény Megszámlálás( A: sorozat ): Egész
Változó
i, DB: egész;
FKEZD
DB ← 0
Ciklus (i ← 1 . . . A.elemsz´am)
HA T(A[i])
DB ← DB + 1
HVége
CVége
Megszámlálás ← DB
FVÉGE
Maximum és minimum
Maximum
Függvény MaxElem( A: sorozat ): elemtip
Változó
i: egész;
Max: elemtip;
FKEZD
Max ← A[1]
Ciklus (i ← 2 . . . A.elemsz´am)
HA A[i]> Max
Max ← A[i]
HVége
CVége
MaxElem ← Max
FVÉGE
Függvény MaxHelyE( A: sorozat ): egésztip
Változó
i: egész;
MaxH: egész;
FKEZD
MaxH ← 1
Ciklus (i ← 2 . . . A.elemsz´am)
HA A[i] > A[MaxH]
MaxH ← i
HVége
CVége
MaxHelyE ← MaxH
FVÉGE
156
Függvény MaxHelyU( A: sorozat ): egésztip
Változó
i: egész;
MaxH: egész;
FKEZD
MaxH ← 1
Ciklus (i ← 2 . . . A.elemsz´am)
HA A[i] > A[MaxH]
MaxH ← i
HVége
CVége
MaxHelyU ← MaxH
FVÉGE
Eldöntés
Függvény Eldöntés( A: sorozat ): Logikai
Változó
i: egész;
FKEZD
i ← 1
Ciklus Míg (i 6 n) És (Nem T(A[i]))
i ← i + 1
CVége
Eldöntés ← (i 6 n)
FVÉGE
Lineáris keresés
Függvény LineárisKeresés(
A: sorozat;
Adat: elemtip;
Hely: egész ): Logikai
Változó
i: egész;
FKEZD
i ← 1
Ciklus Míg (i 6 n) És (Nem A[i] =Adat))
i ← i + 1
CVége
Hely ← i
LineárisKeresés ← (i 6 n)
FVÉGE
Kiválasztás
Eljárás Kiválasztás(
A: sorozat;
Adat: elemtip;
Hely: egész )
Változó
i: egész;
FKEZD
i ← 1
Ciklus Míg (Nem A[i] =Adat)
i ← i + 1
CVége
Hely ← i
EVÉGE
Strázsás keresés
Függvény StrázsásKeresés(
A: sorozat;
Adat: elemtip;
Hely: egész ): Logikai
Változó
i: egész;
FKEZD
i ← 1
A[n + 1] ← Adat
Ciklus Míg (Nem A[i] =Adat)
i ← i + 1
CVége
Hely ← i
StrázsásKeresés ← (i 6 n)
FVÉGE
Lineáris keresés rendezett sorozaton
Függvény RendLinKeres(
A: sorozat;
Adat: elemtip;
Hely: egész ): Logikai
Változó
i: egész;
FKEZD
i ← 1
Ciklus Míg (i 6 n) ÉS (Nem A[i] <Adat)
i ← i + 1
CVége
Hely ← i
RendLinKeres ← (i 6 n) ÉS (A[i] <Adat)
FVÉGE
Bináris keresés
Függvény BinárisKeresés(A: sorozat;
Adat: elemtip;
Hely: egész ): Logikai Változó
E, U, K: egész;
FKEZD
E ← 1
U ← n
K ← (E+U) DIV 2
Ciklus Míg (E 6 U) ÉS (A[K] ̸=Adat)
Elágazás
Amikor (Adat <A[K]):
U ← K−1
Amikor (Adat >A[K]):
E ← K+1
EVége
K ← (E+U) DIV 2
CVége
Hely ←K
BinárisKeresés ← (E 6 U)
FVÉGE
160
Függvény RekBinKer(
A: sorozat;
Adat: elemtip;
Hely, E, U: egész ): Logikai
Változó
K: egész;
FKEZD
Ha (E>U)
RekBinKer ← Hamis
különben
K ← (E+U) DIV 2
Elágazás
Amikor (Adat <A[K]):
RekBinKer ← RekBinKer(A, Adat, Hely, E, K−1)
Amikor (Adat >A[K]):
RekBinKer ← RekBinKer(A, Adat, Hely, K+1, U)
Különben
Hely ← K
RekBinKer ← Igaz
EVége
HVége
FVÉGE
Nincsenek megjegyzések:
Megjegyzés küldése