Gyakorló feladatok Gyakorló feladatok

Hasonló dokumentumok
Változók és adattípusok Változók és adattípusok

Python bevezető foglalkozás Python bevezető foglalkozás

Vezérlési szerkezetek Vezérlési szerkezetek: feltételes elágazás és ciklusok

Python tanfolyam Python bevezető I. rész

A C# programozási nyelv alapjai

Szoftvertervezés és -fejlesztés I.

// keressük meg a legnagyobb faktoriális értéket, ami kisebb, // mint százmillió

Webprogramozás szakkör

2018, Diszkre t matematika. 8. elo ada s

2016, Diszkrét matematika

Függvények Függvények

Programozási alapismeretek 3. előadás

Felvételi vizsga mintatételsor Informatika írásbeli vizsga

I. ALAPALGORITMUSOK. I. Pszeudokódban beolvas n prim igaz minden i 2,gyök(n) végezd el ha n % i = 0 akkor prim hamis

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

1. Egészítsük ki az alábbi Python függvényt úgy, hogy a függvény meghatározza, egy listába, az első n szám faktoriális értékét:

1. Alapok. #!/bin/bash

2016, Diszkrét matematika

7. Számelmélet. 1. Lehet-e négyzetszám az a pozitív egész szám, amelynek tízes számrendszerbeli alakjában 510 darab 1-es és valahány 0 szerepel?

Alapok. tisztán funkcionális nyelv, minden függvény (a konstansok is) nincsenek hagyományos változók, az első értékadás után nem módosíthatók

HORVÁTH ZSÓFIA 1. Beadandó feladat (HOZSAAI.ELTE) ápr 7. 8-as csoport

Adattípusok, vezérlési szerkezetek. Informatika Szabó Adrienn szeptember 14.

Programozás BMEKOKAA146. Dr. Bécsi Tamás 2. előadás

Bánsághi Anna 2014 Bánsághi Anna 1 of 68

2018, Diszkrét matematika

Felvételi tematika INFORMATIKA

6. fejezet: Ciklusok

BABEŞ BOLYAI TUDOMÁNYEGYETEM MATEMATIKA ÉS INFORMATIKA KAR BBTE Matek-Infó verseny 1. tételsor INFORMATIKA írásbeli. A versenyzők figyelmébe:

Információk. Ismétlés II. Ismétlés. Ismétlés III. A PROGRAMOZÁS ALAPJAI 2. Készítette: Vénné Meskó Katalin. Algoritmus. Algoritmus ábrázolása

INFORMATIKA javítókulcs 2016

Szkriptnyelvek. 1. UNIX shell

Hatványozás. A hatványozás azonosságai

I. Specifikáció készítés. II. Algoritmus készítés

Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek

INFORMATIKA tétel 2019

Számelmélet, műveletek, egyenletek, algebrai kifejezések, egyéb

Alkalmazott modul: Programozás 4. előadás. Procedurális programozás: iteratív és rekurzív alprogramok. Alprogramok. Alprogramok.

Informatika terméktervezőknek

Vezérlési szerkezetek

Imperatív programozás

RSA algoritmus. P(M) = M e mod n. S(C) = C d mod n. A helyesség igazoláshoz szükséges számelméleti háttér. a φ(n) = 1 mod n, a (a 1,a 2,...

Bevezetés a programozásba I.

OSZTHATÓSÁG. Osztók és többszörösök : a 3 többszörösei : a 4 többszörösei Ahol mindkét jel megtalálható a 12 többszöröseit találjuk.

Java Programozás 1. Gy: Java alapok. Ismétlés ++

Számítástechnika I. BMEKOKAA152 BMEKOKAA119 Infokommunikáció I. BMEKOKAA606. Dr. Bécsi Tamás 2. előadás

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós február 18. Széchenyi István Egyetem, Gy r

BASH SCRIPT SHELL JEGYZETEK

BASH script programozás II. Vezérlési szerkezetek

Gyakorló feladatok az 1. nagy zárthelyire

AWK programozás, minták, vezérlési szerkezetek

Occam 1. Készítette: Szabó Éva

Operációs rendszerek. 11. gyakorlat. AWK - szintaxis, vezérlési szerkezetek UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Bevezetés a programozásba I.

1. Jelölje meg az összes igaz állítást a következők közül!

Vezérlési szerkezetek. Szelekció Ciklusok

1. Olvassuk be két pont koordinátáit: (x1, y1) és (x2, y2). Határozzuk meg a két pont távolságát és nyomtassuk ki.

AWK programozás, minták, vezérlési szerkezetek

6. A Pascal nyelv utasításai

Brósch Zoltán (Debreceni Egyetem Kossuth Lajos Gyakorló Gimnáziuma) Számelmélet I.

3 A C programozási nyelv szintaktikai egységei

Forráskód formázási szabályok

Megjegyzés: A programnak tartalmaznia kell legalább egy felhasználói alprogramot. Példa:

352 Nevezetes egyenlôtlenségek. , az átfogó hossza 81 cm

Programozás alapjai C nyelv 4. gyakorlat. Mit tudunk már? Feltételes operátor (?:) Típus fogalma char, int, float, double

Racionális számok: Azok a számok, amelyek felírhatók két egész szám hányadosaként ( p q

Imperatív programozás

Programozási nyelvek Python

Arany Dániel Matematikai Tanulóverseny 2010/2011-es tanév 1. forduló haladók III. kategória

Interaktív alkalmazások készítése Scratch-ben

1. Feladat: beolvas két számot úgy, hogy a-ba kerüljön a nagyobb

Bevezetés az informatikába

PROGRAMOZÁS ALAPFELADATOK

2005_01/1 Leírtunk egymás mellé hét racionális számot úgy, hogy a két szélső kivételével mindegyik eggyel nagyobb a két szomszédja szorzatánál.

2018, Diszkre t matematika. 10. elo ada s

Mit tudunk már? Programozás alapjai C nyelv 4. gyakorlat. Legnagyobb elem keresése. Feltételes operátor (?:) Legnagyobb elem keresése (3)

Ismerkedés a Python programnyelvvel. és annak micropython változatával

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós augusztus 29. Széchenyi István Egyetem, Gy r

Programozás C- és Matlab nyelven C programozás kurzus BMEKOKAM603 Előfeldolgozó rendszer Tömbök. Dr. Bécsi Tamás 4. Előadás

Programozás C nyelven (3. ELŐADÁS) Sapientia EMTE

Szakács Lili Kata megoldása

BBTE Matek-Infó verseny mintatételsor Informatika írásbeli vizsga

Bevezetés a programozásba I.

Készítette: Nagy Tibor István Felhasznált irodalom: Kotsis Domokos: OOP diasor Zsakó L., Szlávi P.: Mikrológia 19.

Listák, szótárak, fájlok Listák, szótárak, fájlok

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós szeptember 27. Széchenyi István Egyetem, Gy r

Számelméleti alapfogalmak

Java programozási nyelv

Java II. I A Java programozási nyelv alapelemei

Számelmélet. 4. Igazolja, hogy ha hat egész szám összege páratlan, akkor e számok szorzata páros!

Programozás I. Matematikai lehetőségek Műveletek tömbökkel Egyszerű programozási tételek & gyakorlás V 1.0 OE-NIK,

2019, Funkcionális programozás. 2. el adás. MÁRTON Gyöngyvér

Objektumorientált Programozás III.

Készítette: Nagy Tibor István

Intergrált Intenzív Matematika Érettségi

Mintavételes szabályozás mikrovezérlő segítségével

2018, Diszkrét matematika

1. Mit nevezünk egész számok-nak? Válaszd ki a következő számok közül az egész számokat: 3 ; 3,1 ; 1,2 ; -2 ; -0,7 ; 0 ; 1500

Kifejezések. Kozsik Tamás. December 11, 2016

Programozási segédlet

NULLADIK MATEMATIKA ZÁRTHELYI

Átírás:

Gyakorló feladatok előző foglalkozás összefoglalása, gyakorlató feladatok a feltételes elágazásra, a while ciklusra, és sokminden másra amit eddig tanultunk

Változók elnevezése a változók nevét a programozó választja egy változónév nem lehet foglalt Python kulcsszó, mint pl. if, else, while, def, and,... a változónevek betűket és számokat is tartalmazhatnak, de... nem kezdődhetnek számmal nem lehet bennük szóköz vagy olyan speciális karakter, mint #, &, $,... a változó nevek tartalmazhatnak _ (aláhúzás) karaktert 2

Változók elnevezése válasszunk rövid, de kifejező neveket! pl. egy háromszög magassága lehet magassag vagy néha egyszerűen csak m pl. egy bekért név és életkor lehet nev és kor ha mégis hosszabb nevet kell választani, akkor kövessünk egységes elnevezési mintát bármilyen mintát használhatnánk, de a Python programozók az alábbi mintát követik: haromszog_magassag, kor_sugar,... 3

Értékadás az értékadás az = jellel történik az első értékadással hozzuk létre a változót további értékadással változtathatjuk a változóban tárolt értéket az értékadás meghatározza a változó típusát is létezik többszörös értékeadás, amivel egyszerre több változó értékét lehet állítani 4

Műveletek egész és tört számokkal alapműveletek: +, -, *, / további hasznos műveletek: ** (hatványoszás), // (egész osztás), % (maradék) műveletek precedenciája: 1. ** 2. *, /, //, % 3. +, - beépített függvények: min(), max(), round() 5

Karakterláncok (string-ek) a karakterláncokat jelölhetjük a "..." vagy a '...' jelekkel string műveletek (s stringen): szöveg hosszának megállapítása: len(s) átalakítás kis- vagy nagybetűssé: s.lower(), s.upper() keresés szövegben: s.find('...') előfordulás számlálása: s.count('...') 6

Típusátalakítás sokszor szükség van egy változóban tárolt érték típusának átalkítására str(): egész és tört számokból csinál string-et int() és float(): egészet és törtet csinál string-ből ha a float() bemenete egy egész törtté alakítja ha az int() bemenete egy tört egész részét veszi 7

Logikai műveletek Boolean típusú (logikai) változók csak True (igaz) vagy False (hamis) értéket vehetnek fel ilyen változókkal logikai műveleteket végezhetünk: 1. not (negáció) 2. and (és) 3. or (vagy) 8

Logikai műveletek A B A and B F F F F T F T F F T T T A B A or B F F F F T T T F T T T T A F T not A T F 9

Feltételes elágazás egy programrész végrehajtását feltételhez kötheted az if utasítással (az if jelentése magyarul ha) az if párja az else (jelentése egyébként); az else utáni programrész akkor hajtódik végre, ha az if feltétele nem teljesül Figyeld meg a behúzásokat! szam = int(input("írj be egy számot! ")) if (szam > 100): print("ez egy nagy szám.") else: print("ez egy kicsi szám.") Ügyelj a kettőspontra! 10

Feltételes elágazás Az azonos méretű behúzással rendelkező, egymás utáni sorok egy összetartozó blokkot alkotnak if <feltétel>: else: A <feltétel> egy kifejezés, melynek értéke igaz (True) vagy hamis (False) lehet Ez az utasításblokk hajtódik végre ha a <feltétel> igaz Ez az utasításblokk hajtódik végre ha a <feltétel> hamis 11

Feltételes elágazás if <feltétel>: igen <feltétel> igaz? nem else: 12

Ismétlés while ciklussal sokszor előfordul, hogy egy programrész végrehajtását addig kell ismételni, amíg valamilyen feltétel fennáll ezt a célt szolgálja a while ciklus (a while jelentése amíg): szam = 0 while (szam <= 100): szam = int(input("írj be egy 100-nál nagyobb számot! ")) print("köszönöm!") 13

Ismétlés while ciklussal while <feltétel>: A <feltétel> egy kifejezés, melynek értéke igaz (True) vagy hamis (False) lehet Itt is a behúzás jelzi a while-hoz tartozó, ismételendő utasításblokkot Ez az utasításblokk mindaddig újra és újra végrehajtódik amíg a <feltétel> igaz 14

Ismétlés while ciklussal while <feltétel>: igen <feltétel> igaz? nem 15

Egy szám osztói Feladat Írj programot, mely bekér egy pozitív egész számot, majd kiszámolja és kiírja annak osztóit! Az osztók egy sorban, pontosvesszővel elválasztva jelenjenek meg! A program várt működése pl. a következő: Írj be egy pozitív egész számot: 15 15 osztói: 1; 3; 5; 15 16

Egy szám osztói Megoldási terv Kérd be a számot, és azonnal alakítsd át egész számmá! Hozz létre egy változót, amiben a kiírandó osztókat gyűjtöd majd! Mivel az 1 minden számnak osztója, ezért a változó kezdő értéke lehet 1. Ehhez fűzöd majd a további osztókat. Minden n számra 2-től a megadott szám feléig, vizsgáld meg, hogy n osztója-e a számnak! Ha igen, akkor n-et fűzd hozzá az osztókat tároló változó értékéhez! Végül fűzd hozzá az osztókhoz magát a számot, és írd ki az osztókat tároló változó értékét! 17

Egy szám osztói Ötletek n osztója egy X számnak, ha X-et n-nel elosztva 0 maradékot kapunk. Ezt így tesztelheted a programodban: if (X%n == 0): Meg kell vizsgálnod minden n számra 2-től a megadott szám feléig, hogy n osztója-e a számnak. Ezt egy while ciklussal lehet megoldani. A ciklus belsejében ne felejtsd el n aktuális értékének vizsgálata után n értékét megnövelni eggyel. Különben a programod végtelen ciklusba kerül, és soha nem áll le. 18

Egy szám osztói szam = int(input("írj be egy pozitív egész számot: ")) osztok = "1" n = 2 while (n <= szam//2): if (szam%n == 0): osztok = osztok + "; " + str(n) n = n+1 osztok = osztok + "; " + str(szam) print(str(szam) + " osztói:") print(osztok) 19

Tökéletes számok Feladat Egy pozitív egész számot tökéletesnek nevezünk, ha a szám megegyezik az önmagánál kisebb osztóinak összegével. Pl. a 6 tökéletes szám, mert az önmagánál kisebb osztói az 1, 2, 3, és ezek összege pont 6. Az előző feladat mintájára, írj programot, mely bekér egy pozitív egész számot, majd megállapítja, hogy az tökéletes szám-e vagy nem! A program várt működése pl. a következő: Írj be egy pozitív egész számot: 6 Tökéletes szám! Írj be egy pozitív egész számot: 12 Nem tökéletes szám. 20

Tökéletes számok Megoldási terv Kérd be a számot, és azonnal alakítsd át egész számmá! Hozz létre egy változót, amiben az osztók összegét tárolod majd! Mivel az 1 minden számnak osztója, ezért a változó kezdő értéke lehet 1. Ehhez adod majd hozzá a további osztókat. Minden n számra 2-től a megadott szám feléig, vizsgáld meg, hogy n osztója-e a számnak! Ha igen, akkor n-et add hozzá az osztók összegét tároló változó értékéhez! Végül ellenőrizd, hogy az osztók összege megegyezik-e a számmal, és az ellenőrzés eredményétől függően írd ki a megfelelő üzenetet a képernyőre! 21

Tökéletes számok szam = int(input("írj be egy pozitív egész számot: ")) osztok_osszege = 1 n = 2 while (n <= szam//2): if (szam%n == 0): osztok_osszege = osztok_osszege + n n = n+1 if (osztok_osszege == szam): print("tökéletes szám!") else: print("nem tökéletes szám.") 22

Tökéletes számok keresése Feladat Az előző feladatban készített programmal megpróbálhatsz tökéletes számokat keresni, de hamar rájössz majd, hogy ez kézzel elég hosszadalmas. Írj programot, mely egy megadott felső határig az összes számot megvizsgálja, és kiírja a tökéletes számokat! A program várt működése pl. a következő: Tökéletes szám keresésének felső határa: 100 Ezeket a tökéletes számokat találtam: 6 28 23

Tökéletes számok keresése Megoldási ötlet Lényegében az előző programodat kell beletenni egy while ciklus belsejébe, mely az összes számon végigmegy 6-tól (tudjuk, hogy 6-nál nincs kisebb tökéletes szám) a bekért felső határig. 24

Tökéletes számok keresése H = int(input("tökéletes szám keresésének felső határa: ")) print("ezeket a tökéletes számokat találtam:") N = 6 while (N <= H): osztok_osszege = 1 n = 2 while (n <= N//2): if (N%n == 0): osztok_osszege = osztok_osszege + n n = n+1 if (osztok_osszege == N): print(n) N = N+1 25

Tökéletes számok keresése a tökéletes számok nagyon ritkák, eddig 49-et ismerünk 6, 28, 496, 8128, 33550336,... https://en.wikipedia.org/wiki/list_of_perfect_numbers a páros tökéletes számok 2 p 1 (2 p 1) alakúak, ahol 2 p 1 prím (és p-nek is annak kell lennie) 6 = 2 2 1 (2 2 1) = 2 3 28 = 2 3 1 (2 3 1) = 4 7 nem tudjuk, hogy végtelen sok tökéletes szám van-e vagy csak véges sok? van-e páratlan tökéletes szám? 26

Prímszámok Feladat Egy pozitív egész számot prímszámnak nevezünk, ha a számnak csak 1 és önmaga az osztója. Az 1 definíció szerint nem prím. A legkisebb prímszám így a 2, hiszen csak 1-gyel és önmagával osztható. Írj programot, mely bekér egy pozitív egész számot, majd megállapítja, hogy az prímszám-e vagy sem! A program várt működése pl. a következő: Írj be egy pozitív egész számot: 6 Nem prím. Írj be egy pozitív egész számot: 13 Prím. 27

Prímszámok Megoldási terv Kérd be a számot, és azonnal alakítsd át egész számmá! Ha a szám 1, akkor írd ki, hogy nem prím, egyébként (és csak akkor) csináld a következőket... Hozz létre egy Boolean típusú változót, amiben azt tárolod majd, hogy a szám prím-e vagy sem! Ennek kezdeti értéke legyen True! Írj egy while ciklust, amiben ellenőrzöd minden számra 2 és a vizsgált szám gyöke között, hogy osztja-e a vizsgált számot! Ha találsz osztót, akkor a Boolean változót állítsd False-ra (hiszen a szám ekkor nem lehet prím)! A while ciklus után, a Boolean változó értékétől függően írd ki, hogy a szám prím vagy nem prím! Teszteld a programod! Helyesen működik? 28

Prímszámok Ötletek Egy szám gyökét a math modulban található sqrt() függvénnyel lehet kiszámolni. Ehhez a program elején importálni kell ezt a függvényt: from math import sqrt Ezután egy X szám gyökét az sqrt(x) leírásával kapod meg, pl: while (n <= sqrt(szam)):... 29

Prímszámok from math import sqrt szam = int(input("írj be egy pozitív egész számot: ")) if (szam == 1): print("definíció szerint nem prím.") else: prim = True n = 2 while (n <= sqrt(szam)): if (szam%n == 0): # a szám osztható n-nel prim = False n = n + 1 if (prim): print("prím.") else: print("nem prím.") 30

Prímszámok keresése Feladat Az előző feladatban készített programmal megpróbálhatsz prímszámokat keresni, de hamar rájössz majd, hogy ez így elég kényelmetlen. Írj programot, mely egy megadott felső határig az összes számot megvizsgálja, és kiírja a prímszámokat! A program várt működése pl. a következő: Prímszám keresésének felső határa: 100 Ezeket a prímszámokat találtam: 2; 3; 5; 7; 11; 13; 17; 19; 23; 29; 31; 37; 41; 43; 47; 53; 59; 61; 67; 71; 73; 79; 83; 89; 97; 31

Prímszámok keresése Megoldási ötlet Lényegében az előző programodat kell beletenni egy while ciklus belsejébe, mely az összes számon végigmegy 2-tól (tudjuk, hogy 2-nél nincs kisebb prímszám) a bekért felső határig. 32

Prímszámok keresése from math import sqrt M = int(input(" Prímszám keresésének felső határa: ")) szam = 2 while (szam <= M): prim = True n = 2 while (n <= sqrt(szam)): if (szam%n == 0): # a szám osztható n-nel prim = False n += 1 if (prim): print(szam, end="; ") szam += 1 33

Pitagoraszi számhármasok Feladat A Pitagorasz-tétel azt mondja ki, hogy bármely derékszögű háromszög leghosszabb oldalának (átfogójának) négyzete megegyezik a másik két oldal (a befogók) négyzetének összegével. Röviden: a 2 + b 2 = c 2 Írj programot, mely bekéri egy háromszög három oldalának hosszát, majd megállapítja, hogy a háromszög derékszögű-e! A program várt működése pl. a következő: 1. oldal: 5 1. oldal: 3 2. oldal: 4 2. oldal: 6 3. oldal: 3 3. oldal: 7 Derékszögű háromszög. Nem derékszögű háromszög. 34

Pitagoraszi számhármasok Megoldási terv Kérd be a három oldal hosszát, és azonnal alakítsd át őket tört számmá! Nevezd a három változót amiben az oldalhosszakat tárolod pl. a-nak, b- nek, és c-nek! Lehet, hogy nem c-ben van a leghosszabb oldal hossza. Ha valóban így van, akkor a, b, és c értékeinek megfelelő cseréivel, próbáld meg elérni, hogy c-ben legyen a legnagyobb szám! Ha ez megvan, akkor ellenőrizd, hogy a**2 + b**2 megegyezik-e c**2- tel! Az ellenőrzés eredményétől függően, írd ki a megfelelő választ! Ellenőrizd a programod! Jól működik akkor is, ha nem az utoljára megadott oldal a legnagyobb? 35

Pitagoraszi számhármasok a = float(input("1. oldal: ")) b = float(input("2. oldal: ")) c = float(input("3. oldal: ")) M = max(a, b, c) if (c!= M): c, a = a, c if (c!= M): c, b = b, c if (a*a + b*b == c*c): print("derékszögű háromszög.") else: print("nem derékszögű háromszög.") 36

Pitagorszi hármasok keresése Feladat Az előző feladatban készített programmal megpróbálhatsz pitagoraszi számhármasokat keresni, de hamar rájössz majd, hogy ez így elég lassú és kényelmetlen. Írj programot, mely egy megadott felső határig az összes pozitív egész számot behelyettesíti a és b helyére, kiszámolja a hozzájuk tartozó megfelelő c értéket, leellenőrzi, hogy a, b, és c kielégítik-e Pitagorasz tételét, és ha igen, kiírja őket a képernyőre! A program várt működése pl. a következő: Befogó max hossza: 10 3 4 5; 4 3 5; 6 8 10; 8 6 10; 37

Pitagorszi hármasok keresése Megoldási ötlet Két egymásba ágyazott while ciklust kell csinálnod, ahol az egyikben az a értékét, a másikban pedig b értékét futtatod végig 1-től a megadott max értékig. A belső while cikluson belül, ki kell számolnod c értékét. Ehhez először c 2 = a 2 + b 2 -et kell kiszámolni, majd c 2 -ből gyököt kell vonni, ennek az eredménye lesz c. Ha c megvan, akkor azt kell ellenőrizni, hogy egész számot kaptál-e. Hogyan csinálnád ezt? Ha c egész, akkor (és csak akkor) a három számot írd ki! Ne felejtsd el a while ciklusokon belül (a végén) a és b értékét eggyel növelni! Különben végtelen ciklusba kerülsz... 38

Pitagoraszi hármasok keresése from math import sqrt M = int(input("befogó max hossza: ")) a = 1 while (a <= M): b = 1 while (b <= M): c2 = a**2 + b**2 c = sqrt(c2) if (c%1 == 0.0): print(a, b, int(c), end="; ") b += 1 a += 1 39

Készítette: Buttyán Levente Levente.Buttyan@gmail.com CoderDojo Szentendre 2017 40