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

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

10. gyakorlat Tömb, mint függvény argumentum

Programozás I. gyakorlat

Programozás alapjai 9.Gy: Struktúra 2.

6. gyakorlat Egydimenziós numerikus tömbök kezelése, tömbi algoritmusok

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.

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

7/8. gyakorlat Karaktertömbök és sztringkezelés

Programozás alapjai 2.Gy: A C nyelv alapjai P R O

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

/* 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 ) ;

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

Vezérlési szerkezetek

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

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

Vezérlési szerkezetek. Szelekció Ciklusok

Bevezetés a programozásba I.

Megoldott programozási feladatok standard C-ben

Objektumorientált Programozás III.

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

Programozás C nyelven 5. ELŐADÁS. Sapientia EMTE

Programozás alapjai C nyelv 5. gyakorlat. Írjunk ki fordítva! Írjunk ki fordítva! (3)

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

Gyakorló feladatok az 1. nagy zárthelyire

Adminisztrációs feladatok Strukturált programok A C programnyelv elemei

C változók. Feladat: Deklaralj egy valos, egy karakter es ket egesz tipusu valtozot! int main() {

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

1. Írjunk programot mely beolvas két számot és ellenőrzi hogy mindkét szám zérus-e:

B I T M A N B I v: T M A N

Adatbázis rendszerek Gy: Algoritmusok C-ben

Programozás I. gyakorlat

Bevezetés a programozásba I.

Megoldott programozási feladatok standard C-ben

Informatika E FAKT , = ±

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

Szoftvertervezés és -fejlesztés I.

2.3. A C nyelv utasításai

main int main(int argc, char* argv[]) { return 0; } main return 0; (int argc, char* argv[]) main int int int main main main

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

Webprogramozás szakkör

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 tétel 2018

Bevezetés a programozásba I.

Internet programozása. 3. előadás

Egyszerű példaprogramok gyakorláshoz

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.

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.

A C programozási nyelv II. Utasítások. A függvény.

Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3)

Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2)

Programozás alapjai C nyelv 10. gyakorlat. Standard függvények. Union

6. A Pascal nyelv utasításai

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

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

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

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

int tokeletes(int szam) { int i,oszto=0; for(i=1; i<szam; i++) { if(szam %i == 0) { oszto+=i; }

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

Algoritmusok és adatszerkezetek gyakorlat 03 Oszd meg és uralkodj. Nagy

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

Óbudai Egyetem. C programozási nyelv

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

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

Algoritmizálás + kódolás C++ nyelven és Pascalban

7. Laboratóriumi gyakorlat: Vezérlési szerkezetek II.

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

OOP: Java 1.Gy: Java alapok

Programozás alapjai gyakorlat. 2. gyakorlat C alapok

PROGRAMOZÁS ALAPJAI (ANSI C NYELVEN)

Szelekció. Döntéshozatal

Mutatók és címek (ism.) Programozás alapjai C nyelv 8. gyakorlat. Indirekció (ism) Néhány dolog érthetőbb (ism.) Változók a memóriában

Programozás alapjai C nyelv 8. gyakorlat. Mutatók és címek (ism.) Indirekció (ism)

Maximum kiválasztás tömbben

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

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.

Felvételi tematika INFORMATIKA

Járműfedélzeti rendszerek II. 2. előadás Dr. Bécsi Tamás

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

2018, Funkcionális programozás

Szerző Lővei Péter LOPSAAI.ELTE IP-08PAEG/25 Daiki Tennó

Programozási nyelvek JAVA EA+GY 1. gyakolat

Java programozási nyelv

2018, Diszkrét matematika

2016, Diszkrét matematika

9. előadás. Programozás-elmélet. Programozási tételek Elemi prog. Sorozatszámítás Eldöntés Kiválasztás Lin. keresés Megszámolás Maximum.

Stack Vezérlés szerkezet Adat 2.

INFORMATIKA tétel 2019

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

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

A programozás alapjai

A C# programozási nyelv alapjai

A MATLAB PROGRAMOZÁSA

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

INFORMATIKA javítókulcs 2016

3 A C programozási nyelv szintaktikai egységei

Programozás C nyelven FELÜLNÉZETBŐL elhullatott MORZSÁK. Sapientia EMTE

PHP alapjai, bevezetés. Vincze Dávid Miskolci Egyetem, IIT

Bevezetés a programozásba II 1. gyakorlat. A grafikus könyvtár használata, alakzatok rajzolása

Apple Swift kurzus 3. gyakorlat

Hatékonyság 1. előadás

Átírás:

Programozás alapjai 5. gyakorlat Vezérlési szerkezetek egymásba ágyazása 1. feladat: Eldönteni egy számról, hogy pozitív, negatív vagy 0. Próbálja megoldani a feladatot switch szerkezettel is. Mikor használható a switch szerkezet? if (a==0) printf("nulla.\n"); else if (a>0) printf("pozitív.\n"); else printf("negatív.\n"); switch(a>0) { case 1: printf("pozitív.\n"); break; case 0: switch(a) { case 0: printf("nulla.\n"); break; default: printf("negatív.\n"); break; 2. feladat: Eldönteni egy megadott számról, hogy prímszám-e. Megfigyelni a continue használatát for és while ciklus esetén. Melyik alapalgoritmus a gyorsabb? a) Osztók megszámolása (oszthatóság vizsgálat else ág nélkül). int szam, i=2, db=0; printf("kérek egy számot: "); scanf("%d", &szam); for (i=2; i<=szam/2; i++) if (szam%i==0) db += 1; //db=db+1; if (db) printf("a megadott szám nem prím."); else printf("a megadott szám prím."); b) Eldöntés tétel kódolása (while ciklus continue utasítással). int szam, i=2, talalt=0; printf("kérek egy számot: "); scanf("%d", &szam); while (i<szam/2 &&!talalt) { if (szam%i) {i++; continue; else talalt=1; if (talalt) printf("a megadott szám nem prím."); else printf("a megadott szám prím."); //Utasítások sorrendje fontos! c) Ciklus megszakítással. int szam, i=2, talalt=0; printf("kérek egy számot: "); scanf("%d", &szam); for (i=2; i<szam/2; i++) {

if (szam%i) continue; else {talalt=1; break; if (talalt) printf("a megadott szám nem prím."); else printf("a megadott szám prím."); 3. feladat: Írjunk kalkulátor programot, amely képes a 4 alapművelet végrehajtására. Legyen a program folyamatos működésű. Amíg a felhasználó ki nem lép a programból, fogadja az inputot és számol. Ügyeljen a karakter beolvasásra! PROGRAM: folyamatos kalkulátor DO INPUT: a op b CASE op + : OUTPUT : a+b - : OUTPUT : a-b * : OUTPUT : a*b / : OUTPUT : a/b INPUT: valasz IF valasz = i THEN tovabb 1 ELSE tovabb 0 WHILE tovabb = 1 PROGRAM vége int main() { double a, b, eredmeny; char op, ch; do { printf("kalkulátor program\n"); scanf("%lf %c %lf", &a, &op, &b); switch(op) { case '+': eredmeny=a+b; break; case '-': eredmeny=a-b; break; case '*': eredmeny=a*b; break; case '/': if (b) { eredmeny=a/b; else printf("nullával osztás nem engedélyezett"); break; default: printf("nem definiált művelet"); printf("\núj számítás? (i/n) "); scanf(" %c", &ch); //white space karaktereket kihagyja if (ch!='i' && ch!='n' && ch!='i' && ch!='n'){ printf("hibás input, program leáll."); return 1; //sikertelen programfutás while (ch=='i' ch=='i');

4. feladat: Olvasson be ellenőrzött módon egy intervallumot. Ebben az intervallumban állítson elő automatikusan számpárokat ismétlődés nélkül (azaz (2,3) és (3,2) ugyanaz a pár). Számolja meg és írja ki az intervallumba eső ikerprímeket. Ikerprímek: olyan prímek, melyek különbsége 2. Ennél a feladatnál próbálja ki a CodeBlocks változók nyomonkövetése és hibakeresés (debug) funkcióját. int lower, upper; char ch; // intervallum ellenőrzött beolvasása // az alsó határ >= 1 legyen do { printf("add meg az intervallum alsó határát: "); if(scanf("%d", &lower)!=1) { printf("hibás input\n"); while ((ch=getchar()!='\n') lower<1); do { printf("add meg az intervallum felső határát: "); if(scanf("%d", &upper)!=1) { printf("hibás input\n"); while ((ch=getchar()!='\n') upper<lower); // számpárok automatikus előállítása ismétlődés nélkül // ikerprím vizsgálat int i, j; int div, found; for(i=lower; i<=upper; i++) { for (j=i+1; j<=upper; j++) { div = 2; found = 0; while (div<i/2 div<j/2) { if (i%div==0 j%div==0) { found = 1; break; div++; if (!found && abs(i-j)==2) printf("(%d, %d) ", i, j); // nem prímek // prímek és különbségük 2; stdlib.h abs()

5. feladat: N oldalú négyzet egyik átlója és az alatta/felette lévő terület rajzolása. int main( ) { int oldal, sor, oszlop; printf("\nadja meg a negyzet oldalat: "); scanf("%d", &oldal); /* oszlop==sor átló alatti terület */ for (oszlop=1; oszlop<=sor; oszlop++) printf(" * "); /* oszlop==sor átló feletti terület */ for (oszlop=1; oszlop<sor; oszlop++) printf(" "); for (oszlop=sor; oszlop<=oldal; oszlop++) printf(" * "); /* oszlop==sor átló feletti terület (2. verzió) */ for(sor=1; sor<=n; sor++) { for(oszlop=1; oszlop<=n; oszlop++) { if (oszlop<sor) printf(" "); else printf(" * "); /* oszlop==oldal-sor+1 átló feletti terület */ for (oszlop=1; oszlop<=oldal-sor+1; oszlop++) printf(" * "); /* oszlop==oldal-sor+1 átló alatti terület */ for (oszlop=1; oszlop<oldal-sor+1; oszlop++) printf(" "); for (oszlop=oldal-sor+1; oszlop<=oldal; oszlop++) printf(" * "); Példa többirányú elágazásra Írjon telefonhasználati díjak számlázására alkalmas programot. Összesítse a telefonhasználati díjakat hívás típusonként (1-külföldi, 2-hálózaton kívüli, 3-hálózaton belüli). A hívási időt percben adja meg a felhasználó. Díjszabás: külföldi hívás 100 Ft/perc, hálózaton kívüli hívás 60 Ft/perc, hálózaton belüli hívás 40 Ft/perc. Készítsen a feladathoz folyamatábrát! #include <stdio.h> int main () {

int N, i, tipus; double ido, sum_kf, sum_hk, sum_hb; sum_kf = sum_hk = sum_hb = 0; printf("hány adat lesz? "); scanf("%d", &N); i = 1; while (i<=n) { printf("%d. hivas adatai: \n", i); printf("tipus [1-kulfoldi, 2-halozaton kivuli, 3-halozaton beluli]: "); scanf("%d", &tipus); printf("beszelgetes ideje (percben): "); scanf("%lf", &ido); /*Többirányú elágazás: egymásba ágyazott if utasítások */ if (tipus == 1) sum_kf = sum_kf + (ido*100); //100 Ft/perc else { if (tipus == 2) sum_hk = sum_hk + (ido*60); //60 Ft/perc else { if (tipus == 3) sum_hb = sum_hb + (ido*40); //40 Ft/perc else printf("nem definiált tipus!"); i++; printf("\na számla végösszege: %.2f (1) + %.2f (2) + %.2f (3) = %.2f Ft\n", sum_kf, sum_hk, sum_hb, sum_kf+sum_hk+sum_hb); /*Többirányú elágazás: if...else if szerkezet */ if (tipus == 1) sum_kf = sum_kf + (ido*100); else if (tipus == 2) sum_hk = sum_hk + (ido*60); else if (tipus == 3) sum_hb = sum_hb + (ido*40); else printf("nem definiált tipus!"); /*Többirányú elágazás: switch utasítás */ switch (tipus) { case 1: sum_kf = sum_kf + (ido*100); break; case 2: sum_hk = sum_hk + (ido*60); break; case 3: sum_hb = sum_hb + (ido*40); break; default: printf("nem definiált tipus!"); /*Enum (felsorolt típusú) konstans használatával*/ enum tip {KULFOLDI=1, HALOZATONK, HALOZATONB; switch (tipus) { case KULFOLDI: sum_kf = sum_kf + (ido*100); break; case HALOZATONK: sum_hk = sum_hk + (ido*60); break; case HALOZATONB: sum_hb = sum_hb + (ido*40); break; default: printf("nem definiált tipus!"); Melyik szerkezet biztosít gyorsabb végrehajtást? Miért? Házi feladat: Egészítse ki a feladatot az adatbeolvasás ellenőrzésével.

Haladó szintű feladatok: 1. Számítsa ki egy adott szám faktoriálisát iteratív módszerrel és a switch szerkezet használatával is. 2. Írja ki az első N db négyzetszámot. N értékét a felhasználó adja meg. 3. Készítse el a Gondoltam egy számot játék folyamatos működésű programját. Algoritmus: CIKLUSBAN 1. A számítógép sorsol egy 1-100 közötti számot. CIKLUSBAN 2. A felhasználó mond egy tippet. 3. A program kiírja, hogy a gondolt szám egyenlő-e, ill. kisebb vagy nagyobb-e mint a felhasználó tippje. AMÍG a felhasználó tippje!= a gondolt számmal 4. A felhasználó megmondja, akarja-e folytatni a játékot. AMÍG tovább == igen Véletlenszám előállítása: 1) Véletlenszám generátor inicializálása a program elején: srand(time(0)); (time.h) 2) Véletlenszám előállítása megadott intervallumban: rand()%(felsőhatár-alsóhatár)+alsóhatár; (stdlib.h) Az előállított intervallum felülről nyitott. Házi feladat: 1. Rajzoljon ki a képernyőre csillagokból egy E betűt és készítse el az algoritmus folyamatábráját! A betű magasságát kérje be és ellenőrizze, hogy a megadott s zám pozitív páratlan szám legyen. 2. Az E betű tükrözésével rajzoljon ki 3-ast a képernyőre. 3. Rajzoljon ki # karakterekből egy paralelogrammát. A magasságát és a szélességét olvassa be. 4. Egyenlőszárú, N magasságú háromszög kirajzolása. Készítse el az algoritmus folyamatábráját is. Változók: sor, i, magasság BE: magasság sor := 1 AMÍG sor <= magasság ADDIG AMÍG i <= magasság-sor ADDIG KI: üres karakter i := i + 1 AMÍG i <= ((sor*2)-1) ADDIG KI: * i := i+1 KI: sortörés sor := sor+1 5. Módosítsa az előző algoritmust: csak háztetőt, illetve csak a háromszög keretét rajzolja ki.

6. Csúcsára állított egyenlőszárú, N magasságú háromszög kirajzolása. Változók: sor, i, magasság BE: magasság sor := 1 AMÍG sor <= magasság ADDIG AMÍG i <= sor-1 ADDIG KI: üres karakter i := i + 1 AMÍG i <= (magasság*2)-(sor*2)+1 ADDIG KI: * i := i+1 KI: sortörés sor := sor+1 7. Keresse meg és irassa ki az első N db prímszámot. N értékének beolvasása ellenőrzéssel történjen. Először készítsen folyamatábrát és ezt kódolja! 8. Keresse meg 1 és 100 között az összes négyzetszámot. Először készítsen folyamatábrát és ezt kódolja! 9. Ellenőrzött adatbeolvasással adjon meg egy intervallumot (alsóhatár < felsőhatár). Majd olvasson be N darab számot és számolja meg, hogy a megadott számok közül hány darab esik az intervallumba. Készítsen algoritmustervet folyamatábrával! 10. Két számról döntsük el, hogy relatív prímek-e. Két szám relatív prím, ha a legnagyobb közös osztójuk 1. A legnagyobb közös osztó meghatározásához használjuk az Euklidészi algoritmust. PROGRAM: relatív prímek-e INPUT: a, b WHILE b> 0 DO /* Euklidészi algoritmus: a ciklus végén LNKO(a,b) = a */ seged b b a modulo b a seged IF a = 1 OUTPUT: "relatív prímek" ELSE OUTPUT: "nem relatív prímek PROGRAM vége A feladatot ellenőrzött adatbeolvasással valósítjuk meg. A megadott két számra teljesüljön az alábbi feltétel: a, b > 0.