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



Hasonló dokumentumok
6. A Pascal nyelv utasításai

Felvételi tematika INFORMATIKA

Webprogramozás szakkör

Programozás alapjai 3.Gy: C elágazások, ciklusok P R O

Oszthatósági problémák

6. fejezet: Ciklusok

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

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

Vezérlési szerkezetek

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

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

Algoritmusok tervezése

Programozás alapjai 1.Gy: Algoritmizálás P R O

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

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,...

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

<... < s n. Írjuk le a megoldási módszert, és adjunk meg egy megjegyzésekkel ellátott Pascal-programot. A bemeneti adatokat helyesnek tekintjük.

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.

Bevezetés a programozásba I.

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

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

Gyakorló feladatok Gyakorló feladatok

Programozás alapjai 5. gyakorlat Vezérlési szerkezetek egymásba ágyazása

2018, Diszkre t matematika. 10. elo ada s

INFORMATIKA javítókulcs 2016

Vezérlési szerkezetek. Szelekció Ciklusok

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

Számelmélet Megoldások

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:

SzA XIII. gyakorlat, december. 3/5.

Adatbázis rendszerek Gy: Algoritmusok C-ben

INFORMATIKA tétel 2019

Kongruenciák. Waldhauser Tamás

2018, Diszkre t matematika. 8. elo ada s

Számelmélet (2017. február 8.) Bogya Norbert, Kátai-Urbán Kamilla

Tartalomjegyzék Algoritmusok - pszeudókód

Minden egész szám osztója önmagának, azaz a a minden egész a-ra.

Programozás alapjai 8.Gy: Program struktúra

1. numere.txt n (1 n 10000) n növekvő kilenc a) Pascal/C++ Például: NUMERE.TXT

Szoftvertervezés és -fejlesztés I.

Nagy Gábor compalg.inf.elte.hu/ nagy ősz

MATEMATIKA ÉRETTSÉGI TÍPUSFELADATOK MEGOLDÁSAI KÖZÉP SZINT Számelmélet

A PROGRAMOZÁS ALAPJAI 3. Készítette: Vénné Meskó Katalin

11. gyakorlat Sturktúrák használata. 1. Definiáljon dátum típust. Olvasson be két dátumot, és határozza meg melyik a régebbi.

Gyakorló feladatok az 1. nagy zárthelyire

C programozás. { Márton Gyöngyvér, 2009 } { Sapientia, Erdélyi Magyar Tudományegyetem }

TERMÉSZETES SZÁMOK OSZTHATÓSÁGA

Matematika 7. osztály

2016, Diszkrét matematika

Oszthatóság. Oszthatóság definíciója (az egészek illetve a természetes számok halmazán):

Bevezetés a programozásba I.

PASzSz. Dr. Kotsis Domokos

BABEŞ-BOLYAI TUDOMÁNYEGYETEM MATEMATIKA-INFORMATIKA KAR Felvételi verseny - minta Informatika írásbeli

Objektumorientált Programozás III.

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

Algoritmusok pszeudókód... 1

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.

Megoldott programozási feladatok standard C-ben

end function Az A vektorban elõforduló legnagyobb és legkisebb értékek indexeinek különbségét.. (1.5 pont) Ha üres a vektor, akkor 0-t..

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

Algoritmusok pszeudókód... 1

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?

Bevezetés a programozásba I.

I. Egydimenziós tömb elemeinek rendezése

2. Milyen értéket határoz meg az alábbi algoritmus, ha A egy vektor?. (2 pont)

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

MATEMATIKAI KOMPETENCIATERÜLET A

2017, Diszkrét matematika

Szakács Lili Kata megoldása

HALMAZOK TULAJDONSÁGAI,

Diszkrét matematika I.

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

Tömbök kezelése. Példa: Vonalkód ellenőrzőjegyének kiszámítása

MATEMATIKA ÉRETTSÉGI TÍPUSFELADATOK MEGOLDÁSAI KÖZÉPSZINT Számelmélet

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

Algoritmusok helyességének bizonyítása. A Floyd-módszer

Diszkrét matematika 1. estis képzés. Komputeralgebra Tanszék ősz

Nagy Gábor compalg.inf.elte.hu/ nagy ősz

Algoritmusok - pszeudókód... 1

illetve a n 3 illetve a 2n 5

Számelmélet. Oszthatóság

Tartalomjegyzék Algoritmusok - pszeudókód

Programozás I. Sergyán Szabolcs Óbudai Egyetem Neumann János Informatikai Kar szeptember 10.

Egyszerű programozási tételek

Megoldott programozási feladatok standard C-ben

START. Billentyűzár ki. Üss be egy számot. Beütöttem az összes számot. Hívás. Várakozás. felveszik. Beszélek. Befejezem a beszélgetést.

Programozás I. 1. előadás: Algoritmusok alapjai. Sergyán Szabolcs

Permutáció n = 3 esetében: Eredmény: permutációk száma: P n = n! romámul: permutări, angolul: permutation

S z á m í t ó g é p e s a l a p i s m e r e t e k

A rész (30 pont) A.1. Vajon mit csinál? (5 pont) A generál(n) algoritmus egy n természetes számot dolgoz fel (0 < n < 100).

BASH SCRIPT SHELL JEGYZETEK

Algoritmusok, adatszerkezetek, objektumok

Egyszerű programok készítése Kifejezések Bitszintű műveletek Relációs műveletek... 58

Nagy Gábor compalg.inf.elte.hu/ nagy ősz

A C# programozási nyelv alapjai

2018, Funkcionális programozás

Pótvizsga matematika 7. osztály (Iskola honlapján is megtalálható!) Tételek

Programozási alapismeretek 3. előadás

Brósch Zoltán (Debreceni Egyetem Kossuth Lajos Gyakorló Gimnáziuma) Megoldások. 21 és 5 7 = 15

/* Az iter függvény meghívása és a visszatérő érték átadása a gyok változóba */ gyok = iter( n, a, e ) ;

Átírás:

I. ALAPALGORITMUSOK 1. Prímszámvizsgálat Adott egy n természetes szám. Írjunk algoritmust, amely eldönti, hogy prímszám-e vagy sem! Egy számról úgy fogjuk eldönteni, hogy prímszám-e, hogy megvizsgáljuk, hogy van-e osztója a 2 és a szám négyzetgyöke által meghatározott zárt intervallumban. prim igaz minden i 2,gyök(n) végezd el ha n % i = 0 akkor prim hamis ha n <2 akkor prim hamis ha prim=igaz akkor kiír prímszám különben kiír nem prímszám var n,i:word; prim:boolean; prim:=true; for i:=2 to trunc(sqrt(n)) do if n mod i=0 then prim:=false; if n<2 then prim:=false; if prim then write( Prímszám! ) else write( Nem prímszám! ); #include <math.h> int n,i,prim=1; for (i=2;i<=sqrt(float(n));i++) if (n%i==0) prim=0; if (n<2) prim=0; if (prim) cout<< Prímszám! ; else cout<< Nem prímszám! ; Észrevehetjük, hogy abban a pillanatban, ahogy találunk egy osztót, már tudjuk, hogy nem prímszámról van szó, ezért nincs értelme folytatni a ciklust. Azt is tudjuk, hogy a páros számok közül csak a 2-es prímszám, ezért ezt is külön vizsgálhatjuk, és azt is tudjuk, hogy páratlan számoknak nincs páros osztójuk. Ha ezeket mind figyelembe vesszük, akkor megírhatjuk az algoritmus hatékony alakját: prim igaz ha (n<2) vagy (n%2=0) akkor prim hamis különben i 3 amíg (i<=gyök(n)) és (prím=igaz) végezd el ha n % i = 0 akkor prim hamis i i+2 ha prim=igaz akkor kiír prímszám különben kiír nem prímszám

2. Számjegyrebontás Adott egy n természetes szám. Írjunk algoritmust, amely meghatározza: a. a számjegyek számát b. a számjegyek összegét c. a szám fordítottját Ennél a feladat típusnál mindig a szám utolsó számjegyével (n%10) dolgozunk, mivel ezt meg tudjuk határozni függetlenül attól, hogy hány számjegyű számról van szó. Miután az utolsó számjegyet feldolgoztuk, levágjuk és folytatjuk tovább addig, ameddig a szám számjegyei elfogynak. Ezt általánosan a következőképpen írhatjuk fel: kezdeti értékadások feldolgozzuk n%10-et n [n/10] eredmények kiírása a. db 0 db db+1 n [n/10] kiír db var n:longint; db:byte; db:=0; while n<>0 do db:=db+1; write( Számjegyek száma:,db); b. osszeg 0 osszeg osszeg+n%10 n [n/10] kiír osszeg int n,db=0; while (n!=0) db++; cout<< Számjegyek száma: <<db;

var n:longint; osszeg:byte; osszeg:=0; while n<>0 do osszeg:=osszeg+n mod 10; write( Számjegyek összege:,osszeg); int n,osszeg=0; while (n!=0) osszeg=osszeg+n%10; cout<< Számjegyek összege: <<osszeg; c. ford 0 ford ford*10+n%10 n [n/10] kiír ford var n:longint; ford:byte; ford:=0; while n<>0 do ford:=ford*10+n mod 10; write( Fordított:,ford); int n,ford=0; while (n!=0) ford=ford*10+n%10; cout<< Fordított: <<ford; Más gyakori feladatok: 1. Döntsük el egy természetes számról, hogy tükörszám-e! 2. Töröljük egy szám páros számjegyeit! 1. ford 0; x n ford ford*10+n%10 n [n/10] ha x=ford akkor kiír Tükörszám! különben kiír Nem tükörszám!

2. I. megfordítjuk a számot kihagyva a páros számjegyeket, majd visszafordítjuk ford 0 ha n%2<>0 akkor ford ford*10+n%10 n [n/10] amíg ford<>0 végezd el n n*10+ford%10 ford [ford/10] kiír n 2. II. minden páratlan számjegyét, 10 megfelelő hatványával szorozzuk meg, így kapjuk meg az új számot f 0 h 1 ha n%2<>0 akkor f f+h*(n%10) h h*10 n [n/10] kiír f 3. Legnagyobb közös osztó, legkisebb közös többszörös Adott két természetes szám: a ás b. Határozzuk meg a két szám lnko-ját és lkkt-jét. A legnagyobb közös osztó meghatározására Euklidesz algoritmusát használjuk. A legkisebb közös többszöröst pedig az lnko segítségével kapjuk meg: lkkt(a,b)=(a*b)/lnko(a,b) beolvas a,b x a; y b ismételd m a%b a b b m ameddig m=0 kiír lnko=,a kiír lkkt=,x*y/a var a,b,x,y,m:word; write( a= ); readln(a); write( b= ); readln(b); x:=a; y:=b; repeat m:=a mod b; a:=b; b:=m; until m=0; writeln( Lnko=,a); writeln( Lkkt=,x*y div a); int a,b,x,y,m; cout<< a= ; cin>>a; x=a; cout<< b= ; cin>>b; y=b; do m=a%b; a=b; b=m; while (m!=0); cout<< Lnko= <<a; cout<< Lkkt= <<x*y / a;

4. Pszeudokódos feladatok Ezen feladatok egyik alpontjában általában át kell írjunk egy adott ciklust egy másikra úgy, hogy a kapott pszeudokód algoritmus ekvivalens legyen az eredetivel. Átírások: I. amíg ciklus ismételd ciklusra Amikor átírjuk az előltesztelő ciklust hátultesztelő ciklusra, akkor a ciklusban szereplő feltételt tagadjuk. Arra kell vigyáznunk, hogy csak akkor lépjen be a ciklusba, ha a feltétel teljesül, ezért a hátultesztelő ciklust egy feltételes struktúrába írjuk. A feltételes struktúra elhagyható, ha a két algoritmus ugyanazt az eredményt adja minden bemeneti értékre! ha feltétel akkor amíg feltétel végezd el ismételd ciklusmag ciklusmag ameddig nem feltétel II. ismételd ciklus amíg ciklusra Amikor átírjuk a hátultesztelő ciklust előltesztelő ciklusra, akkor a ciklusban szereplő feltételt tagadjuk. ismételd amíg nem feltétel végezd el ciklusmag ciklusmag ameddig feltétel III. minden ciklus amíg ciklusra Amikor átírjuk a számlálós ciklust előltesztelő ciklusra, akkor a következőképpen járunk el: i a minden i a,b végezd el amíg i<=b végezd el ciklusmag ciklusmag i i+1 Figyeljünk arra, hogy ne felejtsük a ciklusváltozó értékét növelni!! IV. minden ciklus ismételd ciklusra Amikor átírjuk a számlálós ciklust hátultesztelő ciklusra, akkor a következőképpen járunk el: i a minden i a,b végezd el ismételd ciklusmag ciklusmag i i+1 ameddig i>b Figyeljünk arra, hogy ne felejtsük a ciklusváltozó értékét növelni és arra is, hogy az utolsó értékre is elvégezze a ciklust!! Feladatok 1. Adott a mellékelt algoritmus pszeudokódban. Az x%y jelöli az x egész szám y nem nulla egész számmal való osztási maradékát és [a] az a valós szám egész részét. a) Írjátok le mit ír ki, ha a beolvasott szám n=103456. (6p.) b) Határozzátok meg az összes különböző, pontosan kétjegyű páratlan természetes számot, amelyeket ha beolvasunk az n változóba, a kiírt érték 3 lesz. (4p.) c) Írjátok meg azt az eredetivel egyenértékű algoritmust pszeudokódban, amelyikben az amíg...végezd el struktúrát egy másik ismétlő utasításra cserélitek le. (6p.) d) Írjátok meg a megadott algoritmusnak megfelelő Pascal programot. (10p.) (természetes szám) z 0 p 1 amíg n>0 végezd el c n%10 n [n/10] ha c%3=0 akkor z z+p*(9-c) p p*10

a) Ezt a feladatot értéktáblázat segítségével oldjuk meg: kiír z Tehát a kiírt érték: 963 b) Észrevesszük, hogy az algoritmus a beolvasott szám 3-mal osztható számjegyeinek 9-esre való kiegészítéséből képez új számot a számjegyek fordított sorrendjében. Ahhoz, hogy 3 jöjjön ki eredménynek, a kétjegyű szám egyik számjegye 6-os kell legyen, a másik pedig nem lehet 3-mal osztható, mert akkor már nem egyjegyű számot kapnánk eredményül. A 3-mal nem osztható számjegyek: 1, 2, 4, 5, 7, 8. Tehát a pontosan kétjegyű számok, amelyekre az eredmény 3: 16, 26, 46, 56, 76, 86, 61, 62, 64, 65, 67, 68. c) Ennél az alpontnál vigyázzunk arra, hogy a teljes algoritmust le kell írni!! A feltétel tagadása: n<=0. Mivel tudjuk, hogy az n értéke nem lesz negatív, elegendő ha n=0 át írunk. (természetes szám) z 0 p 1 ha n>0 akkor ismételd c n%10 n [n/10] ha c%3=0 akkor z z+p*(9-c) p p*10 ameddig n=0 kiír z d) Figyeljünk arra, hogy a teljes programot le kell írni! I. Pascalban var n,z,p:longint; c:byte; readln(n); z:=0; p:=1; while n>0 do c:=n mod 10; if c mod 3=0 then z:=z+p*(9-c); p:=p*10; writeln(z); II. C++-ban int n,z=0,p=1,c; cin>>n; while (n>0) c=n%10; if (c%3==0) z=z+p*(9-c); p=p*10; cout<<z; Return 0;