6. fejezet: Ciklusok

Hasonló dokumentumok
Vezérlési szerkezetek

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

A C# programozási nyelv alapjai

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

Szoftvertervezés és -fejlesztés I.

Óbudai Egyetem. C programozási nyelv

Bevezetés a programozásba I.

Java programozási nyelv

Webprogramozás szakkör

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

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

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

Vezérlési szerkezetek. Szelekció Ciklusok

7. fejezet: Mutatók és tömbök

Programozási segédlet

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

Informatika terméktervezőknek

9.fejezet: Függvények és külső eljárások

INFORMATIKA tétel 2019

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

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

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

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

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

Objektumorientált Programozás III.

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

Imperatív programozás

Maximum kiválasztás tömbben

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

Gyakorló feladatok Gyakorló feladatok

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

Pénzügyi algoritmusok

Programozási nyelvek JAVA EA+GY 1. gyakolat

1. Alapok. #!/bin/bash

A C# PROGRAMOZÁSI NYELV

1. Alapok. Programozás II

Bevezetés a C++ programozásba

5. Gyakorlat. struct diak {

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

Elıírt lépésszámú ciklusok

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

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

Szerző. Varga Péter ETR azonosító: VAPQAAI.ELTE cím: Név: Kurzuskód:

A programozás alapjai

Tartalomjegyzék. Általános Információ! 2. Felhasználói dokumentáció! 3. Feladat! 3. Környezet! 3. Használat! 3. Bemenet! 3. Példa!

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

Bevezetés a programozásba II. 5. Előadás: Másoló konstruktor, túlterhelés, operátorok

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

Apple Swift kurzus 3. gyakorlat

OAF Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1.

Szoftvertechnológia alapjai Java előadások

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

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

INFORMATIKA tétel 2018

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

Kezdő programozók hibái

#include <iostream> using namespace std; // struct macska is lehetne class macska { public: int kor; int suly; }; void main() { macska cirmi;

Tervminták a valósidejű gyakorlatban

Bevezetés a programozásba I.

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

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

ISA szimulátor objektum-orientált modell (C++)

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

Java II. I A Java programozási nyelv alapelemei

BATCH Programozás. Tartalomjegyzék

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

/* 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 C++ -ban

A JavaScript főbb tulajdonságai

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

hiányzott szeptemberben vagy A tanuló nem hiányzott szeptemberben szöveget

Amit a törtekről tudni kell 5. osztály végéig Minimum követelményszint

BME MOGI Gépészeti informatika 4.

2018, Diszkrét matematika

1. Írjunk programot mely beolvas két egész számot és kinyomtatja az összegüket.

Programozás C és C++ -ban

2016, Diszkrét matematika

GAZDASÁGMATEMATIKA KÖZÉPHALADÓ SZINTEN

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

A kódgenerálás helye a fordítási folyamatban. Kódgenerálás I. (kifejezések és vezérlési szerkezetek) A kódgenerálás feladata. Ebben az előadásban...

C# gyorstalpaló. Készítette: Major Péter

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

Vezérlési szerkezetek

Kezdő programozók hibái Azok a buktatók, amikről ha nem tudsz, napokat töprenghetsz hiába programozás-tanulás közben

INFORMATIKAI ALAPISMERETEK

3. Határozza meg és írja ki a minta szerint, hogy a forrásállományban hány kémiai elem felfedezési adatai

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

Bevezetés a programozásba I 10. gyakorlat. C++: alprogramok deklarációja és paraméterátadása

Alkalmazott modul: Programozás. Programozási tételek, rendezések Giachetta Roberto

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

Delphi programozás I.

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

Pénzügyi algoritmusok

Alkalmazott modul: Programozás. Programozási tételek, rendezések. Programozási tételek Algoritmusok és programozási tételek

Amit a törtekről tudni kell Minimum követelményszint

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

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

3. Osztályok II. Programozás II

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

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

Átírás:

6. fejezet: Ciklusok Mint a nyelvekben általában, itt is léteznek ciklusok. Az alapvető három ciklus-típus: elöltesztelő, hátultesztelő és számláló. Lássuk ezeket sorban! Elöltesztelő = while. A while utasítás addig hajtódik végre, amíg a feltétele hamis nem lesz. Ugye arról sem szabad megfeledkezni, hogy az elöltesztelő ciklus akkor nem fut le egyetlen egyszer sem, ha a feltétel hamis! A ciklusokat egy igen egyszerű programmal szeretném bemutatni. Alapötlet: adjuk össze a pozitív egész számokat 10-ig (a 10-et is). Az összeg: 55. Ezt először egy elöltesztelő ciklussal oldjuk meg! //Elöltesztelő ciklus cout <<"Ez egy elo:ltesztelo: ciklus!n "; int szam = 1; while (szam<11) osszeg = osszeg + szam; // növeljük az összeget a számmal szam++; // A számot növeljük eggyel cout <<"O:sszeg: " <<osszeg <<endl; return 0; 1 / 10

Látható, hogy elöl (menet közben) deklaráltuk az összeg-változót (osszeg) és a ciklusváltozót (szam). Természetesen mindkettőt egészként (int). A ciklusmagban mindössze annyi szerepel, hogy az összeget növeljük az aktuális számmal, majd a ciklusváltozót is növeljük 1-gyel. Mivel ez még elég kevésnek tűnik, ezért próbáljuk meg egy kicsit kidíszíteni. Feladat: Adjuk össze a számokat 1-től 20-ig, de ezúttal úgy, hogy írja ki az összeadást is, pl.: 1+2+3+... = eredmény. Ezt már kicsit összetettebben kell megoldanunk, mivel minden egyes összeadás után ki kell írni a számot és a "+" jelet is. Így a ciklusmag a következőképpen néz ki: osszeg = osszeg + szam; // növeljük az összeget a számmal cout <<szam <<"+"; szam++; // A számot növeljük eggyel Ez rendben is lenne, de az utolsó szám után már ne jó, hogy kiírja a "+" jelet, így ott meg kell vizsgálnunk, hogy mit is írassunk ki. Ezt természetesen egy feltétellel lehet legegyszerűbben megtennünk. Tehát a ciklusmag ezen verziója a következőképpen néz ki: osszeg = osszeg + szam; // növeljük az összeget a számmal if (szam<10) cout <<"+"; else cout <<"="; szam++; // A számot növeljük eggyel Ez már majdnem jó lenne, de arról volt szó, hogy ne 10-ig, hanem 20-ig adja össze a számokat. Ezt simán is ki lehet cserélni, de szeretnék mutatni egy lehetséges technikát. Az egész programban lehet egy új névvel helyettesíteni pár fontosabb értéket. Ezek lesznek az állandók, azaz konstans ok. Itt például három állandót is definiálok: eddig, pluszjel, egyenlo. 2 / 10

Fontos, hogy ezeket lehetőség szerint még az előtt kell definiálni. Érdekes, hogy egy-egy ilyen definíciós sor után nem kell pontosvessző! Tehát immár a teljes program: //Elöltesztelő ciklus - újabb verzió #define eddig 20 // Itt definiálok egy állandót. #define pluszjel "+" // Ez egy újabb #define egyenlo "=" // Ez pedig az utolsó cout <<"Ez egy elo:ltesztelo: ciklus!n "; int szam = 1; while (szam<eddig+1) osszeg = osszeg + szam; // növeljük az összeget a számmal if (szam<eddig) cout <<pluszjel; else cout <<egyenlo; szam++; // A számot növeljük eggyel return 0; Második ciklusunk a hátultesztelő. Alapesete: do ciklusmag while feltétel. A ciklusmag itt egyszer mindenképpen lefut. A ciklus addig fut, amíg a záró feltétel teljesül. Magyarul kilép, ha hamis lesz. Az előző programot kicsit át kell gyúrni. Íme: 3 / 10

//Hátultesztelő ciklus #define eddig 10 // Itt definiálok egy állandót. #define pluszjel "+" // Ez egy újabb #define egyenlo "=" // Ez pedig az utolsó cout <<"Ez egy hatultesztelo: ciklus!n "; int szam = 0; do szam++; osszeg = osszeg + szam; if (szam<10) cout <<pluszjel; else cout <<egyenlo; while (szam <10); A harmadik típusú ciklus a számláló. Mielőtt erre sor kerülne, érdemes kicsit megállni gyakorolni. Tapasztalatom szerint a diákok többsége ilyenkorra kezd kimerülni és érdemes velük még egyszer átrágni ezt a kiemelt fontosságú anyagot. Sajnos sokan nem hiszik el, hogy a matematika a legegyszerűbben gyakorolható ciklusos példa, de ilyen kevés programozói tudással mást nem nagyon találunk. Ha a társaság elég fáradt vagy agyilag elég elhasznált, akkor ilyenkor jön még két matematikai példa: 4 / 10

1.) Kérjen be a billentyűzetről egy pozitív egész számot és 1-től a bekért számig adja össze a számok négyzetét! Használjon elöltesztelő ciklust! 2.) Kérjen be egy számot, szorozza meg kettővel és adjon hozzá egyet és az így kapott páratlan számig adja össze a pozitív páratlan számokat! Használjon hátultesztelő ciklust! Persze a két ciklus típusa keverhető! Lássuk most az elsőnek a megoldását! Javaslom a tisztelt olvasónak, hogy ezt először magától próbálja megoldani és csak utána nézze meg az én megoldásomat! //Kérjen be a billentyűzetről egy pozitív egész számot és 1-től a bekért számig adja össze a számok négyzetét! #define pluszjel "+" // Állandó definiálása #define egyenlo "=" // Még egy #define szorzas "*" // Még egy int eddig; cout <<"Ez egy elo:ltesztelo: ciklus!n Kérek egy pozitiv egesz szamot!"; cin >>eddig; int szam = 1; while (szam<eddig+1) osszeg = osszeg + szam*szam; // növeljük az összeget a szám négyzetével cout <<szam <<szorzas <<szam; if (szam<eddig) cout <<pluszjel; else cout <<egyenlo; szam++; // A számot növeljük eggyel return 0; 5 / 10

Most pedig jöjjön a második feladat megoldása! //Kérjen be egy számot, szorozza meg kettővel és adjon hozzá egyet és az így kapott páratlan számig adja össze a pozitív páratlan számokat! #define pluszjel "+" // Állandó definiálása #define egyenlo "=" // Újabb int x, eddig; cout <<"Ez egy hatultesztelo: ciklus!n Kerek egy pozitív egesz szamot!"; cin >>x; eddig = 2*x+1; //Így biztos, hogy pozitív páratlan lesz a szám! int szam = 1; do osszeg = osszeg + szam; szam = szam + 2; if (szam<eddig) cout <<pluszjel; else cout <<egyenlo; while (szam < eddig); 6 / 10

Harmadik típusunk a számláló ciklus. Alapesete: for (inicializáció; feltétel; növekmény) ciklusmag; Még mindig az alapesetet oldjuk meg, tehát adjuk össze a számokat 1-től 10-ig! //Számláló ciklus #define eddig 10 // Itt definiálok egy állandót. #define pluszjel "+" // Ez egy újabb #define egyenlo "=" // Ez pedig az utolsó cout <<"Ez egy szamlalo ciklus!n "; for (int szam = 1; szam <eddig+1; szam++) osszeg = osszeg + szam; if (szam<eddig) cout <<pluszjel; else cout <<egyenlo; A diákjaim általában kezdő programozók, így tapasztalatom szerint ezt szeretik a legjobban. Ne felejtsük el, hogy ez a ciklus pontosan annyiszor fut le, ahányszor megszabtuk a feltételben! De kérem, hogy senki ne bajmolódjon, ha mégis a másikakat kell választania! Kicsit bonyolítsuk a feladatot! Kérjünk be a billentyűzetről egy számot, ameddig a gép adja össze az összes pozitív egészet! Itt a ciklusmaghoz nem kell nyúlni, csak a program legelejét kell kicsit átszerkeszteni. Íme: 7 / 10

int eddig; cout <<"Ez egy szamlalo ciklus!n "; cout <<"Kerek egy pozitiv egesz szamot!"; cin >> eddig; Ez szépen le is fut, feltéve, ha pozitív egészet (megfelelő nagyságrendig) írunk be. De mi van, ha nem? Nos, az ilyen balesetek kiküszöbölésére érdemes az elejére egy feltételt írni, melyben megvizsgáljuk a beírt számot. Érdemes egy beírható legnagyobb számot definiálni (maxximum), mivel ezt a legkönnyebb átírni. //Számláló ciklus - bonyolítva #define pluszjel "+" #define egyenlo "=" #define maxximum 10000 // A beírható legnagyobb egész szám! int eddig; cout <<"Ez egy szamlalo ciklus!n "; cout <<"Kerek egy pozitiv egesz szamot!"; bool ujrafut = false; do if (ujrafut) cout << "Rossz szamot adott meg! Probalja ujra!"; ujrafut = true; cin >> eddig; while ((eddig < 0) or (eddig > maxximum)); for (int szam = 1; szam <eddig+1; szam++) osszeg = osszeg + szam; if (szam<eddig) cout <<pluszjel; else cout <<egyenlo; 8 / 10

További lehetőségek: Hirtelen kilépés a ciklusból: break; Adott ciklusmag kihagyása: continue; // continue-break példa int main () for (int n=10; n>0; n--) if (n==5) continue; //Itt maradt ki az 5 cout << n << ", "; cout << "Kilepes!n"; return 0; Van egy olyan lehetőség is, amit én őszintén szólva nem ajánlok, mert használata meggondolatlan címkézés esetén veszélyes lehet; ez a goto. Fontos kiemelni, hogy ez 9 / 10

látszólag igen kényelmes és jó lehetőség, de gyakorlatlan kezekben komoly gondokat és sok-sok kellemetlen program-összeomlás eredményezhet. // goto-loop példa int main () int n=10; loop: //címke cout << n << ", "; n--; //n 1-gyel csökkentése if (n>0) goto loop; //ugrás a címkére cout << "FIRE!n"; return 0; Kérdés: itt hol van a ciklus? Sehol! Mert a ciklust a goto-loop helyettesíti. Az exit függvény a cstdib könyvtár része. Lényege: a program bizonyos hibakódú kilépését vezérli. Minta: void exit (int exitcode); Az exitcode függvényt nem használja minden operációs rendszer és alkalmazói program, de egyre gyakoribb a használata. Még valami: a 0-ás kilépési kód azt jelenti, hogy minden rendben folyt le. Folytatás itt! 10 / 10