Vezérlési szerkezetek

Hasonló dokumentumok
Vezérlési szerkezetek. Szelekció Ciklusok

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

A C# programozási nyelv alapjai

Webprogramozás szakkör

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

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

Óbudai Egyetem. C programozási nyelv

Programozás I. gyakorlat

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

Nézzük tovább a lexikai egységeket!

3 A C programozási nyelv szintaktikai egységei

Java programozási nyelv

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

6. fejezet: Ciklusok

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.

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

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

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

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

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

A programozás alapjai

ALGORITMIKUS SZERKEZETEK ELÁGAZÁSOK, CIKLUSOK, FÜGGVÉNYEK

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

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

Matlab alapok. Baran Ágnes. Baran Ágnes Matlab alapok Elágazások, függvények 1 / 15

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

1. Egyszerű (primitív) típusok. 2. Referencia típusok

Vezérlési szerkezetek

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

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

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

Programozás alapjai gyakorlat. 2. gyakorlat C alapok

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

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)

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

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

1. Alapok. #!/bin/bash

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

Bevezetés a programozásba I.

Objektumorientált Programozás III.

Komputeralgebra Rendszerek

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

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

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

Informatika terméktervezőknek

6. A Pascal nyelv utasításai

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

Készítette: Nagy Tibor István

C programozás. 1 óra Bevezetés

Szelekció. Döntéshozatal

Bevezetés a C++ programozási nyelvbe

Smalltalk 2. Készítette: Szabó Éva

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

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

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

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

INFORMATIKA tétel 2019

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

Adatbázis rendszerek Gy: Algoritmusok C-ben

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

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

Apple Swift kurzus 3. gyakorlat

2.3. A C nyelv utasításai

Programozás I gyakorlat. 10. Stringek, mutatók

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

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

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

Függvény pointer. Feladat: Egy tömbben soroljunk fel függvényeket, és hívjuk meg valahányszor.

C programozási nyelv

Szkriptnyelvek. 1. UNIX shell

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

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

A C# PROGRAMOZÁSI NYELV

Pénzügyi algoritmusok

értékel függvény: rátermettségi függvény (tness function)

C programozási nyelv Pointerek, tömbök, pointer aritmetika

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

Programozás II. 2. Dr. Iványi Péter

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

Problémaosztályok algoritmusok. Ciklusok

5. gyakorlat. Konstansok Tömbök Stringek

Java II. I A Java programozási nyelv alapelemei

Java II. I A Java programozási nyelv alapelemei

Programozási nyelvek JAVA EA+GY 1. gyakolat

Gyakorló feladatok Gyakorló feladatok

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.

Bevezetés a programozásba I.

PHP. Telepítése: Indítás/újraindítás/leállítás: Beállítások: A PHP nyelv

Programozás 6. Dr. Iványi Péter

Vezérlési szerkezetek

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

Programozási nyelvek I. 5. előadás (Gregorics Tibor anyagának felhasználásával)

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

Programozási segédlet

Szövegek C++ -ban, a string osztály

Bevezetés a programozásba I 3. gyakorlat. PLanG: Programozási tételek. Programozási tételek Algoritmusok

Imperatív programozás

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

Átírás:

Vezérlési szerkezetek Szelekciós ok: if, else, switch If Segítségével valamely ok végrehajtását valamely feltétel teljesülése esetén végezzük el. Az if segítségével valamely tevékenység () végrehajtását egy kifejezés (feltétel) értékétől tehetjük függővé. Az if alábbi formájában az csak akkor hajtódik végre, ha a kifejezés értéke nem nulla (igaz): if(kifejezés){ else Az if-else szerkezet használatával arra az esetre is megadhatunk egy tevékenységet, amikor a kifejezés (feltétel) értéke zérus (hamis): if (kifejezés){ 1 else { 2 else if Ez az szerkezet egymásba ágyazott if ok egy gyakran használt formája, amikor az else ágakban szerepel az újabb if : if (kifejezés){ else if (kifejezés){ else if (kifejezés){ else { A zárójelben lévő kifejezés egy logikai kifejezést takar. Ezt a program a szelekciós vezérlőszerkezet végrehajtásakor kiértékeli, és a kiértékelés eredménye vagy igaz vagy hamis érték. Egy logikai kifejezés logikai változókból/értékekből és logikai operátorokból állhat. A C nyelvben nincs külön

logikai típus, egész típusokban (int, char) tárolhatunk logikai értékeket: a 0 jelenti a hamisat, a nem nulla pedig az igazat (ez gyakran 1, DE fordítója válogatja). Logikai értékek keletkezhetnek relációs operátorok használatával, ezek két érték összehasonlítására használhatók. Relációs operátorok: a és b értékek: változók, konstansok, valamilyen művelet vagy függvény eredményei, vagy literálok (literálnak nevezzük a helyben definiált adatot, pl. 5, vagy 'A') Matematikai alak C kifejezés Jelentés a>b a>b a nagyobb mint b a>=b a>=b a nagyobb vagy egyenlő mint b a<b a<b a kisebb mint b a<=b a<=b a kisebb vagy egyenlő mint b a=b a==b a egyenlő b-vel a b a!=b a nem egyenlő b-vel Logikai operátorok: a és b logikai értékek: változók, konstansok, valamilyen művelet vagy függvény eredményei, vagy literálok.!a - a kifejezés értéke NEM a, tehát akkor lesz igaz, ha a hamis volt a && b - a kifejezés értéke a ÉS b, tehát akkor lesz igaz, ha a és b is igaz volt a b - a kifejezés értéke a VAGY b, tehát akkor lesz igaz, ha a és b közül legalább az egyik igaz volt Feladat: Írj programot, mely egy megadott egész számról eldönti, hogy az páros, vagy páratlan! #include <stdio.h> int x; printf("kérek egy egész számot:"); scanf("%d", &x); if (x%2 == 0) printf("a megadott szám páros.\n"); else printf("a megadott szám páratlan.\n"); return 0; Feladat: Módosítsuk most a programot úgy, hogy két egész számot kérjen be a program majd írja ki, hogy az első szám osztható -e a másodikkal.

Feladat: Próbáljuk ki, mi történik, ha a második szám 0! Javítsuk a programot! Feladat: Használjunk többszörös szelekciót! Feladat: Írjuk meg if nélkül a fenti programot. Feltételes kifejezések Az if-else helyett feltételes kifejezések is használhatók. Ezzel tömörebb formában fogalmazható meg ugyanaz, sőt, egy adott helyre behelyettesítendő érték kiválasztására is használható. feltétel? művelet ha igaz : művelet ha hamis; pl.: (a>b)? a : b; Feladat: Írjuk ki egyetlen printf segítségével, hogy egy szám páros vagy páratlan - e! #include <stdio.h> int x; printf("kérek egy egész számot: "); scanf("%d", &x); printf("a szám %s.\n", (x%2 == 0)? "páros" : "páratlan"); return 0; Feladat: Írjuk ki egyetlen printf használatával, hogy egy szám osztója -e egy másiknak. A feltételes kifejezéseket egymásba is ágyazhatjuk!

#include <stdio.h> int main () { int x; printf("kérek egy egész számot: "); scanf("%d", &x); printf("kérek egy másik számot: "); scanf("%d", &y); printf("osztoja-e %d-nek %d?. %s\n", x, y, (y==0)? "A kerdes ertelmetlen!" : ((x%y==0)? "Igen, osztója." : "Nem, nem osztója.") ); Esetkiválasztásos szelekciós vezérlés A switch többirányú programelágaztatást tesz lehetővé olyan esetekben, amikor egy egész kifejezés értékét több konstans értékkel kell összehasonlítanuk. Az álatlános alakja: switch ( kifejezés ) { case címke : muveletek; case címke : muveletek;... case címke : muveletek; default : muveletek; A switch először kiértékeli a kifejezést, majd átadja a vezértlést arra a case címkére (esetre), amelyben a címke értéke megegyezik a kiértékelt kifejezés értékével - a futás ettől a ponttól folytatódik. Amennyiben egyik case sem egyezik meg a kifejezés értékével, a program futása a default címkével megjelölt sal folytatódik. Ha nem használunk default címkét, akkor a vezérlés a switch blokkját záró utáni ra adódik. A break kiugrasztja a switchből a vezérlést, ha kihagyjuk, az a következő címkére kerül. Ez használható pl. olyankor, ha több címkéhez ugyanazokat a műveleteket kell végrehajtani. Feladat: írjunk egy függvényt, ami egy "x" egész számot kap paraméterként és kiírja, hogy a hét x. napja milyen nap.

void hetnapja_if (short int x) { if (x==1) { printf("hétfo\n"); else if (x==2) { printf("kedd\n"); else if (x==3) { printf("szerda\n"); else if (x==4) { printf("csütörtök\n"); else if (x==5) { printf("péntek\n"); else if (x==6) { printf("szombat\n"); else if (x==7) { printf("vasárnap\n"); else printf("hiba! x értéke legalább 1 és legfeljebb 7 lehet!\n"); Feladat: Írjuk meg ugyanezt az fgv-t switch használatával. void hetnapja_switch (short int x) { switch (x) { case 1: printf("hétfo\n"); case 2: printf("kedd\n"); case 3: printf("szerda\n"); case 4: printf("csütörtök\n"); case 5: printf("péntek\n"); case 6: printf("szombat\n"); case 7: printf("vasárnap\n"); default: printf("hiba! x értéke legalább 1 és legfeljebb 7 lehet!\n");

Kérdés: Hogyan kéne módosítani a függvényt akkor, ha számok helyett a napok kezdőbetűit szeretnénk használni? Kezdőfeltételes ismétléses vezérlés Más néven előltesztelős ciklus, vagy while-ciklus. A while ciklus mindaddig ismétli a hozzá tartozó t (a ciklus törzsét), amíg a vizsgált kifejezés (vezérlőfeltétel) értéke igaz (nem nulla). A vizsgálat mindig megelőzi az végrehajtását. Általános alakja: while (kifejezés){ A switch-nél látott break ciklusokból való "kitörésre" is alkalmazható. Így írhatunk olyan (esetleg egyébként végtelen) ciklust, amelyben egy, vagy több helyen egy if segítségével megvizsgálunk egy feltételt, majd az alapján (esetleg néhány művelet végrehajtása után) kilépünk a ciklusból. Ezt hívjuk hurok ismétléses vezérlésnek. Feladat: írjunk egy programot, ami kiírja 1-től 10-ig számokat. #include <stdio.h> int i; i=1; while (i<=10) { printf("%d\n", i++); return 0; Feladat: Írjunk olyan programot, ami addig kér be számokat a billentyűzetről, amíg a beírt szám nem 0! (0 az adott végjel) Feladat: Módosítsuk a programot úgy, hogy végeredményként írja ki a beírt számok összegét!

Végfeltételes ismétléses vezérlés Más néven hátultesztelős ciklus, vagy do-while-ciklus. A do-while ban a ciklus törzsét képező végrehajtása után kerül sor a tesztelésre. Így a ciklus törzse legalább egyszer mindig végrehajtódik. Általános alakja: do { while (kifejezés); A do-while ciklus futása során mindig először végrehajtódik az és ezt követően értékelődik ki a kifejezés. Amennyiben a kifejezés értéke igaz (nem nulla), akkor új iteráció kezdődik (azaz újra lefut a ciklus), míg hamis (0) érték esetén a ciklus befejezi működését. Feladat: Írjunk egy olyan programot 'do-while' ciklus segítségével, ami 0 végjelig kér be számokat, majd kírja azok összegét. A ciklusban ne szerepeljen a 'break'. int x; int osszeg=0; do { printf("kérek egy számot (kilépéshez: 0):"); scanf("%d", &x); osszeg+=x; while (x!=0); printf("a számok összege: %d\n", osszeg); Miért tehetjük meg, hogy a végjelet is feldolgozzuk? Számlálásos ismétléses vezérlés Más nevén for ciklus. A for t általában akkor használjuk, ha a ciklusmagban megadott t adott számszor kívánjuk végrehajtani. Általános alakja:

for (kezdoérték_kifejezés ; feltétel_kifejezés ; lépteto_kifejezés){ A ciklusban van egy változó (a ciklusváltozó, vagy számláló), amit egy kezdőértékből kiindulva, folyamatosan növelünk vagy csökkentünk egy végértékig, és minden ilyen körben végrehajtunk néhány műveletet. A műveletekben a ciklusváltozó aktuális értéke is felhasználható. A kezdőérték_kifejezés-sel állítjuk be a ciklusváltozó kezdőértékét. A léptető_kifejezés-sel növeljük vagy csökkentjük a ciklusváltozó értékét tetszés szerint. A feltétel_kifejezés-t pedig minden egyes iterációban ellenőrizzük. A ciklus addig fut amíg ez a feltétel teljesül. Mivel a feltételünk akkor nem fog már teljesülni, amikor a ciklusváltozó elér egy bizonyos értéket, ezért jól befolyásolható, hogy a ciklus hányszor fusson le. A++; => A = A + 1; (avagy A += 1;) A--; => A = A - 1; (avagy A -= 1;) Postfix és prefix alakban is használhatóak, jelentésük kicsit különböző: B = A++; => 1. B = A; 2. A = A + 1; Tehát B A korábbi értékét kapja. B = ++A; => 1. A = A + 1; 2. B = A; Tehát B A megnövelt értékét kapja meg. Ugyanez érvényes a -- operátorra is. Feladat: Írjunk egy programot, ami összeszorozza 1-10-ig a számokat. int i; int szorzat; for (i=1, szorzat=1; i<=10; ++i) { szorzat*=i; printf("a számok szorzata: %d\n", szorzat); Feladat: Hogyan nézne ki ugyanez a program while ciklussal?

Feladat: Módosítsuk a for ciklust úgy, hogy csak minden 3 -mal osztható számot szorozzon össze! Feladat: Próbáljuk ki mit csinál az alábbi for ciklus: int i,j,out; for (i=1, j=100, out=0; i<=10; i++, j--) out+=i*j; Feladat: Módosítsuk a ciklusmagot úgy, hogy egy printf segítségével kiírjuk az i,j és out aktuális értékét.