Programozás I. Egymásba ágyazott szelekciók, többágú szelekció

Slides:



Advertisements
Hasonló előadás
Szerver oldali programozás
Advertisements

Vezérlő utasítások.
Természetes számok 0, 1, 2, 3, ..., 24, 25, ..., 1231, 1232, ..., n, ...  = {0, 1, 2, 3, ..., n,...} a természetes számok halmaza Műveletek: összeadás.
Programozási feladatok
Programozás I. Szelekciók: egy- és kétágú szelekció
Definíciók: Algoritmus: bármely véges sok lépéssel leírható tevékenység. Olyan pontos előírás, amely megmondja, hogy egy adott típushoz tartozó feladat.
Algoritmusok.
Matematika és Tánc Felkészítő tanár: Komáromi Annamária
Determinisztikus programok. Szintaxis: X : Pvalt program változók E : Kifkifejezések B : Lkiflogikai kifejezések C : Utsutasítások.
Halmazok, műveletek halmazokkal
3. előadás (2005. március 1.) Utasítások, tömbök
Számhalmazok.
4. előadás (2005. március 8.) Pointerek Pointer aritmetika
C A C nyelv utasításai.
Mutatók, tömbök, függvények
C A C nyelv utasításai. Ismétlés Utasítások csoportosítása.
Borland C/C++ mintapéldák függvényekre. 1. példa Írjunk olyan függvényt amely egy számot kiirat.
Programozás I. Horváth Ernő.
Java programozási nyelv 2. rész – Vezérlő szerkezetek
Miskolci Egyetem Informatikai Intézet Általános Informatikai Tanszé k Pance Miklós Adatstruktúrák, algoritmusok előadásvázlat Miskolc, 2004 Technikai közreműködő:
LDinamikus tömbök, kétdimenziós tömbök Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 21./0. lVektorok létrehozása futásidőben, dinamikusan.
Utasítások, elágazás- és ciklusszervezés C nyelvi utasítások
PHP Webprogramozás alapjai
A TERMÉSZETTUDOMÁNYOK ALAPJAI 1. Matematika
Differenciál számítás
C++ Alapok, első óra Elemi típusok Vezérlési szerkezetek
Operációs rendszerek gyakorlat sed, awk parancsok.
Programozás I. Ciklusok
Vizuális és web programozás II.
Egy egyszerű gép vázlata
Halmazok Összefoglalás.
Vezérlési szerkezetek: elágazások, ciklusok
PHP I. Alapok. Mi a PHP? PHP Hypertext Preprocessor Szkriptnyelv –Egyszerű, gyors fejlesztés –Nincs fordítás (csak értelmező) Alkalmazási lehetőségek:
Programozás C# -ban Elágazások.
C nyelv utasításai.
Alapszint 2.  Készíts makrót, ami a kijelölt cellákat egybenyitja, a tartalmat vízszintesen és függőlegesen középre igazítja és 12 pontos betűméretűre.
A Pascal programozási nyelv alapjai
Ismétlés.
Kifejezések. Algoritmus számol; Adott összeg; összeg:=0; Minden i:=1-től 5-ig végezd el Ha 2 | i akkor összeg:=összeg+2*i Ha vége Minden vége Algoritmus.
A Pascal programozási nyelv alapjai
Készítette: Csíki Gyula
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
Hernyák Zoltán Programozási Nyelvek II.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
Java programozási nyelv Vezérlési szerkezetek
Objektum orientált programozás
Az ábrán az inicializáló blokk lefutása utáni állapotot láthatjuk. A KÉSZ halmazhoz való tartozást színezéssel valósítjuk meg. A nem KÉSZ csúcsok fehérek,
Objektum orientált programozás
Logikai műveletek és áramkörök
Egyágú elágazás Szintaxis: if (feltétel)
Operátorok Vezérlési szerkezetek Gyakorlás
Török Katalin és Marosi Nóra 11/c. Pascal: Az es években megjelent magas szintű programozási nyelv, közel áll az emberi gondolkodáshoz. Nevét.
C Programozási alapok.
Programozás III KIVÉTEL. KIVÉTELKEZELÉS Hibátlan program nincs!!! eddig hiba esetén leállt a program. Példa ilyen hibákra: ─ ArrayBoundsOfException (tömb.
Alapműveletek (Természetes számok, Egész számok)
Algoritmizálás, adatmodellezés
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás I. 3. gyakorlat.
Adatszerkezetek és algoritmusok 2008/ Algoritmus Az algoritmus szó eredete a középkori arab matematikáig nyúlik vissza, egy a i.sz. IX. században.
TÁMOP /1-2F JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam Utasítás és blokk. Elágazás típusai, alkalmazása Kovács.
Kifejezések C#-ban.
Programozási alapismeretek
Gépészeti informatika (BMEGEMIBXGI)
Programozás C# -ban Elágazások.
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Nulladrendű formulák átalakításai
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Informatikai gyakorlatok 11. évfolyam
Algoritmus készítés.
Előadás másolata:

Programozás I. Egymásba ágyazott szelekciók, többágú szelekció Számítástechnika Tanszék

Szelekciók, 2.3.2.4. feladat Készítsen programot, amely bekéri egy felnőtt férfi testmagasság (cm-ben) és testsúly (kg-ban) adatait. Ha a magasság 100 cm fölötti, akkor megvizsgálja, hogy túlsúlyos-e: ha a kg-ban mért súlya nagyobb, mint a cm-ben mért magasság 100 fölötti része, akkor kiírja: "Túlsúlyos, fogynia kell!". Ha a magasság 100 alatti érték, akkor írja ki a program, hogy "Gyerekekkel nem foglalkozom !" Pontosítsuk a feladatot: Ha 100 cm fölött van a magasság és nem túlsúlyos, akkor mit tegyünk ? *

Szelekciók, 2.3.2.4. feladat megoldása: C program void main (void) { int magassag, suly; printf("\nKérem a testmagasságot cm-ben:"); scanf("%d",&magassag); printf("\nKérem a testsúlyt kg-ban:"); scanf("%d",&suly); if (magassag > 100) //1. if if (suly > magassag - 100) //2. if printf ("\nÖn túlsúlyos, fogynia kell !"); } //1. if-hez tartozó utasításblokk vége else //első if-hez tartozó else printf ("\nGyerekekkel nem foglalkozom !"); printf ("\n\nKöszönöm az együttműködést !"); } // program vége

Egymásba ágyazott szelekciók A szelekció IGAZ és HAMIS ágán is állhat újabb szelekció. Ezeket egymásba ágyazott szelekcióknak nevezzük. Próbáljuk ki, jól működik-e a fenti program, ha elhagyjuk az első if-et követő {} zárójelezést: if (magassag > 100) //1. if if (suly > magassag - 100) //2. if printf ("\nÖn túlsúlyos, fogynia kell !"); else printf ("\nGyerekekkel nem foglalkozom !"); A fordító az else ágat minden esetben a hozzá legközelebb eső, azt megelőző, else ággal még nem párosított if utasításhoz rendeli !

Egymásba ágyazott szelekciók Egymásba ágyazott if utasítások esetén kétféle módon érhetjük el, hogy a fordító is úgy értelmezze az utasításokat, ahogyan mi elgondoltuk: 1. Minden if utasításhoz csatolunk else ágat, akkor is, ha az else ágon nincs semmi teendő, a fenti példa tehát az alábbi formában működik jól: if (magassag > 100) //1. if if (suly > magassag - 100) //2. if printf ("\nÖn túlsúlyos, fogynia kell !"); else ; //az else utáni ; egy üres utasítást jelent ! else printf ("\nGyerekekkel nem foglalkozom !"); 2. A "belső" if utasítást {} zárójelek közé tesszük, így az egy külön utasításblokkot alkot. A 2.3.2.4. mintapéldában ezt a megoldást választottuk.

2.3.2.5. feladat Készítsen programot, amely bekér egy életkor adatot, majd kiírja, hogy az illető gyerek (0-14. év), kamasz (15-23. év), felnőtt (24-62.év), vagy idősebb (63- )... Pontosítsuk a feladatot: Negatív életkort is megadhat a felhasználó ?

2.3.5.2. feladat megoldása: pszeudokód Program Változók: eletkor, (pozitív egész) Be: eletkor Ha (eletkor < 0) akkor Ki: "Hibás adat !" Egyébként ha (eletkor < 15) akkor Ki: "Gyerek vagy még !" Egyébként ha (eletkor < 24) akkor Ki: "Kamaszkorban a legnehezebb !" Egyébként ha (eletkor < 63) akkor Ki: "A felnőtteknek sem könnyű ..." Egyébként Ki: "Idősebbek hamarabb abbahagyhatják…” Elágazás vége Program vége Hogyan kódoljuk az Egyébként ha szerkezetet ?

2.3.5.2. feladat megoldása: C program - részlet int eletkor; printf ("\nKérem az életkorát (év):"); scanf ("%d",&eletkor); if (eletkor < 0) printf ("\nHibás adat !"); else if (eletkor < 15) // eletkor: 0...14 printf ("\nGyerek vagy még !"); else if (eletkor < 24) // eletkor: 15...23 printf ("\nKamaszkorban a legnehezebb!"); else if (eletkor < 63) // eletkor: 24...62 printf ("\nA felnőtteknek sem könnyű ..."); else //eletkor: 62 fölött printf ("\nIdősebbek hamarabb abbahagyhatják... !");

A program többirányú elágaztatása Az egymásba ágyazott if utasítások gyakran használt formája, amikor az else ágakban szerepel újabb if utasítás: if (kifejezés1) utasítás-blokk 1 else if (kifejezés2) utasítás-blokk 2 else if (kifejezés3) utasítás-blokk 3 else utasítás-blokk 4 Ha bármelyik kifejezés igaz, akkor a hozzákapcsolt utasítás-blokk utasításai kerülnek végrehajtásra. Ha egyik feltétel sem teljesül, akkor a program az utolsó else utasítást követő utasítás-blokk utasításait hajtja végre. Az else if szerkezetből akárhány lehet.

2.3.2.6. feladat: többirányú elágazás Készítsen programot, amely megvalósítja a legegyszerűbb kalkulátor funkciókat (összeadás, kivonás szorzás, osztás) Megoldás: Pontosítsuk a feladatot: Ha nem műveleti jelet kaptunk … Mi történjen, ha nullával való osztás a kijelölt művelet ?.

2.3.2.6. feladat megoldása: pszeudokód Program Változók: x, y, eredmeny op: a műveleti jel tárolására siker: egész t. segédv., értéke: 1: a művelet elvégezhető 0: a művelet nem végezhető el -1: hibás műveleti jel siker = 1 Be: x, op, y [szóközök nélkül !] Ha (op == '+') akkor eredmeny = x + y Egyébként ha (op == '-') akkor eredmeny = x - y Egyébként ha (op == '*') akkor eredmeny = x * y Egyébként ha (op == '/') akkor Ha (y <>0) akkor eredmeny = x / y Egyébként siker = 0 siker = -1 Elágazás vége Ha (siker == 1) akkor Ki: x, op, y, eredmeny Egyébként ha (siker == 0) akkor Ki: "A művelet nem végezhető el" Egyébként Ki: "Hibás műveleti jel ” Elágazás vége Program vége Kódolás: else if szerkezettel… Az else if szerkezet egy speciális esete, amikor a használt kifejezések egyenlőség vizsgálatokat (==) tartalmaznak. Az ilyen esetekben, amikor konstans értékek egyenlősége alapján ágaztatjuk el a programot …

2.3.2.6. feladat megoldása: pszeudokód Elágazás (op) szerint '+' esetén : eredmeny = x + y kiugrás '-' esetén : eredmeny = x - y kiugrás '*' esetén : eredmeny = x * y kiugrás '/' esetén : Ha (y <>0) akkor eredmeny = x / y Egyébként siker = 0 //az osztás nem végezhető el Más esetben: siker = -1 //hibás műveleti jel érkezett Elágazás vége Elágazás (siker) szerint 1 esetén : Ki : x, op, y, eredmeny Kiugrás 0 esetén : Ki: "A művelet nem végezhető el" Kiugrás -1 esetén : Ki: "Hibás műveleti jel "

Többágú szelekció Elágazás kifejezés szerint értékcsoport1 esetén Utasítás(ok)1 értékcsoport2 esetén Utasítás(ok)2 .......... értékcsoportn esetén Utasítás(ok)2 Más esetben Utasítás(ok)n+1 Elágazás vége Jelentése: Ha a kifejezés értékeaz i-dik (i=1, 2, ...n) értékcsoportba esik, akkor a neki megfelelő utasítás(oka)t kell végrehajtani, majd a feladat megoldása az Elágazás vége után folytatódik. Az egyes értékcsoportok véges, diszkrét halmazokat alkotnak. FONTOS: az elágaztatás nem logikai feltétel szerint történik !

Többágú szelekció PÉLDA: Elágazás a lámpa színe szerint Piros lámpa esetén Megállok : Kézifék beh. Sárga lámpa esetén Megállok : Kézifék beh Zöld lámpa esetén Továbbhaladok Más esetben: az elsőbbségi szabályoknak megfelően járok el ... Elágazás vége

Többágú elágazás kódolása: a switch utasítás A switch utasítás 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ítanunk. Az utasítás általános alakja: switch (kifejezés) { case konstans kifejezés: utasítások; <break;> ........ default: utasítások; } A switch utasítás először kiértékeli a kifejezést, majd a vezérlést átadja arra a case cimkére (esetre), amelyben a konstans kifejezés értéke megegyezik a kiértékelt kifejezés értékével. A program futása ettől a ponttól folytatódik. Amennyiben egyik case utáni konstans sem egyezik meg a kifejezés értékével, akkor a program futása a default cimkével megjelölt utasítástól folytatódik. Ha nem használunk default cimkét, akkor a vezérlés a switch utasítás blokkját záró } jel utáni utasításra adódik. A default cimke bárhol elhelyezkedhet a switch blokkjában, tehát nem feltétlenül az utolsó cimke.

2.3.2.6. feladat megoldásának kódolása switch-el switch (op) { case '+': eredmeny = x + y; break; case '-': eredmeny = x - y; break; case '*': eredmeny = x * y; break; case '/': if (y) eredmeny = x / y; else siker = 0; break; default : siker = -1; } //switch op vége

2.3.2.6. feladat megoldásának kódolása switch-el switch (siker) { case 1 : printf("%.2lf %c %.2lf = %.2lf", x,op,y,eredmeny); break; case 0 : printf ("\nA művelet nem végezhető el."); break; case -1: printf ("Hibás műveleti jel !"); } //switch siker vége

… ………….