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

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

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

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

A C programozási nyelv I. Bevezetés

A C programozási nyelv I. Bevezetés

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

Vezérlési szerkezetek

Készítette: Nagy Tibor István

Vezérlési szerkezetek. Szelekció Ciklusok

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)

Szoftvertervezés és -fejlesztés I.

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

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

Java programozási nyelv

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

A C# programozási nyelv alapjai

Kifejezések. A programozás alapjai előadás. Operátorok. Kifejezések. Operátorok precedenciája. Operátorok precedenciája

Informatika terméktervezőknek

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

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

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

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

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

Programozás I. gyakorlat

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

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

Programozás I gyakorlat

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 I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

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

C programozás. 1 óra Bevezetés

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

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

Mintavételes szabályozás mikrovezérlő segítségével

Információs Technológia

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

Pénzügyi algoritmusok

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

Függvények. Programozás I. Hatwágner F. Miklós november 16. Széchenyi István Egyetem, Gy r

Szoftvertechnológia alapjai Java előadások

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

Operátorok, házi feladat adatszerkezetek

Imperatív és procedurális programozás a Javában

Stack Vezérlés szerkezet Adat 2.

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

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

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

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

3 A C programozási nyelv szintaktikai egységei

Java II. I A Java programozási nyelv alapelemei

Megoldott programozási feladatok standard C-ben

Óbudai Egyetem. C programozási nyelv

2.3. A C nyelv utasításai

Programozás alapjai gyakorlat. 2. gyakorlat C alapok

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

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

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

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

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

Java II. I A Java programozási nyelv alapelemei

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

M veletek és kifejezések

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

Bevezetés a C programozási nyelvbe. Az Általános Informatikai Tanszék C nyelvi kódolási szabványa

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

Előző óra összefoglalása. Programozás alapjai C nyelv 3. gyakorlat. Karakter típus (char) Karakter konstansok. Karaktersorozatot lezáró nulla

Programozási nyelvek JAVA EA+GY 1. gyakolat

Webprogramozás szakkör

A TANTÁRGY ADATLAPJA

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

Programozás alapjai II. (2. ea) C++

Programozás alapjai II. (2. ea) C++

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

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

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

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Komputeralgebra Rendszerek

Objektumorientált Programozás III.

C programozási nyelv. Dr. Schuster György szeptember 18.

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.

Aritmetikai kifejezések lengyelformára hozása

Objektumorientált Programozás II.

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

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

1. Bevezetés szeptember 9. BME Fizika Intézet. Szám. szim. labor ea. Tőke Csaba. Tudnivalók. feladat. Tematika. Moodle Házi feladatok

Objektum elvű alkalmazások fejlesztése Kifejezés lengyel formára hozása és kiértékelése

GYAKORLATIAS JAVA MINTA

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

Szelekció. Döntéshozatal

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

Bevezetés a programozásba I.

Programozás alapjai II. (1. ea) C++

Programozás alapjai II. (1. ea) C++

1.1. A forrásprogramok felépítése Nevek és kulcsszavak Alapvető típusok. C programozás 3

Programozás I gyakorlat

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 }

Feladat: Hogyan tudunk létrehozni egy olyan vector nevű tömb típust, amely egy háromdimenziós térbeli vektort reprezentál?

Programozás I gyakorlat

Átírás:

Programozás alapjai C nyelv 4. gyakorlat Szeberényi Imre BME IIT <szebi@iit.bme.hu> Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.10.10.. -1- Mit tudunk már? Típus fogalma char, int, float, double változók deklarációja operátorok (aritmetikai, relációs, logikai, bitenkénti, léptető, értékadó, feltételes) kifejezés, utasítás, összetett utasítás vezérlési szerkezetek, ciklusok (if, while, do-while, for) Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.10.10.. -2- Feltételes operátor (?:) kifejezés1? kifejezés2 : kifejezés3 Sorrend!! i kifejezés2 kifejezés1 n kifejezés3 Példák: a = a > b? a : b y = x == 3? x - 2 : z - 8 Olyan if, aminek értéke van. Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.10.10.. -3-

Legnagyobb elem keresése Feladat: Fájl végéig, vagy amíg tudunk, olvassunk be számokat, határozzuk meg a legnagyobbat és írjuk ki, hogy hányadikként olvastuk be. Algoritmus emlékeztető: Mérleg Mindig a vizsgált elemekből válasszunk a hasonlításhoz elsőt! Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.10.10.. -4- Legnagyobb elem keresése(2) Vázlat: kezdeti beállítások /db = 0/ while olvas(x) db = db + 1 if db == 1 OR max < x max = x; dbmax = db kiír(max, dbmax) Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.10.10.. -5- Legnagyobb elem keresése (3) #include <stdio.h> int main() { int x, max, dbmax, db = 0; while (scanf( %d,&x) == 1){ db++; if (db == 1 max < x){ max = x; dbmax = db; Kezdeti érték printf( Max.e. sorsz.: %d\n, dbmax); return 0; Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.10.10.. -6- ++ db = db + 1; vagy db += 1;

++ és -- operátor ++ inkrementáló (növelés eggyel) -- dekrementáló (csökkentés eggyel) Prefix ++i --i és postfix i++ i-- forma kifejezés (i = 5) kif. értéke i++ 5 6 i-- 5 4 ++i 6 6 --i 4 4 i értéke A különbség oka: a fő hatás és a mellékhatás bekövetkezésének különböző sorrendje. Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.10.10.. -7- Prefix forma: ++ és -- operátor (2) int j, i = 2; j = ++i; 1. Mellékhatás: i értékét 1-gyel megnöveljük 2. Fő hatás: kiértékeljük az operandust: i-t, ami most 3, ez lesz a ++i kifejezés értéke 3. j-be a kiértékelt jobbérték kifejezés értékét, a 3-at másoljuk (értékadó operátor mellékhatása) Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.10.10.. -8- Postfix forma: ++ és -- operátor (3) int j, i = 2; j = i++; 1. Fő hatás: kiértékeljük az operandust: i-t, ami most 2, ez lesz az i++ kifejezés értéke 2. Mellékhatás: i értékét 1-gyel megnöveljük 3. j-be a kiértékelt jobbérték kifejezés értékét, a 2-t másoljuk (értékadó operátor mellékhatása) Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.10.10.. -9-

++ és -- operátor (4) Mikor melyik formát használjuk? A leggyakrabban csak az inkrementálás vagy dekrementálás miatt használjuk, a kiértékelés eredményét el is dobjuk - lásd a példát: db++; Itt tehát írhattuk volna azt is, hogy ++db; Ha összetett kifejezés része, nem mindegy! Ez egyébként illetlenség, mert nem átlátható a programkód működése. Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.10.10.. -10- ++ és -- operátor (5) Gyakori fordulat a for ciklusban: Pl. a számjegyek kiíratása: char ch; for (ch = 0 ; /* inicializálás */ ch <= 9 ; /* feltétel vizsg.*/ printf( %c,ch++)) /* léptetés */ ; /* üres a ciklusmag, mert mindent elvégeztünk */ Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.10.10.. -11- Percedencia és asszociativitás Operátor Asszociativitás Sorrend () [] ->. balról jobbra! ~ ++ -- - (típus) * & sizeof jobbról balra * / balról jobbra + - balról jobbra << >> balról jobbra < < = > >= balról jobbra ==!= balról jobbra & balról jobbra ^ balról jobbra balról jobbra && balról jobbra balról jobbra?: jobbról balra = += -= *= /= &= = ^= stb. jobbról balra, balról jobbra Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.10.10.. -12-

Kiértékelés sorrendje sorrend!= asszociativitás A legtöbb magas szintű nyelv, így a C sem határozza meg a kiértékelés sorrendjét. Kivételek: && b értéke nem meghatározható!?:, Példa: a = b + b + (b = c); Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.10.10.. -13- Operátorok - összefoglalás (1) Amit az operátorokról tudni kell: Operandusok száma egy, pl.: + - sizeof & kettő, pl.: % / && & három? : Operandusok típusa - lásd a / műveletet Az eredmény típusa és értéke lásd a / műveletet lásd a logikai operátorokat Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.10.10.. -14- Operátorok - összefoglalás (2) Amit az operátorokról tudni kell: Precedencia Asszociativitás Kiértékelési sorrend Fő hatás, mellékhatás és ezek bekövetkezésének sorrendje lásd a ++ -- operátorkat Egyéb: pl. a kiértékelés leáll, ha triviális az eredmény Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.10.10.. -15-

Típuskonverziók egészek konverziója int = char vagy long = int értékadás - mindig OK char = int short = int int = long -OK, ha belefér signed = unsigned vagy unsigned = signed VIGYÁZNI! - előjelbit egész lebegőpontos konverziók int = double - OK, ha belefér, csonkolás double = int - mindig megy Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.10.10.. -16- Típuskonverziók (2) lebegőpontos konverzió double = float - mindig OK float = double - OK, ha belefér aritmetikai konverziók egészeknél: a legnagyobb ábrázolású egészre kiterjesztjük az operandusokat, az eredmény a legnagyobb értelmezésű operandus típusával fog megegyezni valósaknál: a műveleteket mindig double-ban végezzük Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.10.10.. -17- Típuskonverziók (3) Használjuk az explicit típusmódosító operátort; ez a C++ esetén majd igen hasznos lesz. Pl.: int a = 1, b = 2; double x; x = (double)(a); /* 1.0 lesz */ x = (double)(a)/(double)(b) /* 0.5 */ Általában: (új_típus)(régi_típusú_kifejezés) Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.10.10.. -18-

Kalkulátor Feladat: Készítsünk egy egyszerű számológépet, ami beolvas 2 valós számot és egy műveleti jelet (+ - * /), és elvégzi a megfelelő műveletet. Vázlat (adatok): op1, op2 - valós operandusok muv - karakter e - valós eredmény Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.10.10.. -19- Kalkulátor (2) Vázlat (algoritmus): beolvas(op1, muv, op2) if muv == + e = op1 + op2 else if muv == -.... Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.10.10.. -20- Kalkulátor (3) #include <stdio.h> int main() { float op1, op2, e; muv char; Szóközök jelentősége scanf( %f %c %f, &op1, &muv, &op2); if (muv == + ) e = op1 + op2; else (if muv == - ) e = op1 - op2; else (if muv == * ) e = op1 * op2; else (if muv == / ) e = op1 / op2; else printf( mit_akarsz?\n ); printf( %f %c %f = %e\n ), op1, op2, e); return(0); Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.10.10.. -21-

if (kifejezés) utasítás else if (kifejezés) utasítás else utasítás Többszörös döntés Az else... if szerkezet gyakori, melynek egy speciális esete, amikor az elágazások konstans feltétel alapján történnek. Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.10.10.. -22- A switch utasítás: A switch utasítás switch (kifejezés) { case konstans_kifejezés1: utasítások1 case konstans_kifejezés2: utasítások2... ut1 default: utasítások_n a kifejezés értékétől függően lép be, majd továbbfolyik ut2 ut3 ut4 Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.10.10.. -23- Kalkulátor switch utasítással #include <stdio.h> int main() { float op1, op2, e; muv char; hogy ne folyjon tovább scanf( %f %c %f, &op1, &muv, &op2); switch (muv){ case + : e = op1 + op2; break; case - : e = op1 - op2; break; case * : e = op1 * op2; break; case / : e = op1 / op2; break; default: printf( mit_akarsz?\n ); printf( %f %c %f = %e\n ), op1, op2, e); return 0; Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.10.10.. -24-

A break és a continue break - azonnal kilép a ciklusból ill. switch-ből. continue - a következő iterációs lépéstől folytatja. Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.10.10.. -25- int i; A break és a continue (2) for (i = 0; i++ < 10;){ if ((i & 1) = = 0) continue; printf( %d\n, i); ++ precedencia miatt Mit csinál ez a kódrészlet? Miért ilyen furcsa a for feje? Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.10.10.. -26- A break és a continue (2) Alakítsuk át continue-mentesre! int i; for (i = 0; i++ < 10;) if ((i & 1)!= 0) printf( %d\n, i); vagy for (i = 0; i++ < 10;) if (i%2) printf( %d\n ), i); Van, akinek continue nélkül követhetőbb a kód! Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.10.10.. -27-

Kötetlen formátum (WhereAmI) main(l,a,n,d)char**a;{ for(d=atoi(a[1])/10*80- atoi(a[2])/5-596;n="@nka\ CLCCGZAAQBEAADAFaISADJABBA^\ SNLGAQABDAXIMBAACTBATAHDBAN\ ZcEMMCCCCAAhEIJFAEAAABAfHJE\ TBdFLDAANEfDNBPHdBcBBBEA_AL\ H E L L O, W O R L D! " [l++-3];)for(;n-->64;) putchar(!d+++33^ l&1); Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.10.10.. -28- WhereAmI 47 19!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.10.10.. -29-