Programozás I. - 3. gyakorlat Operátorok, típuskonverziók, matematikai függvények Tar Péter 1 Pannon Egyetem M szaki Informatikai Kar Számítástudomány Alkalmazása Tanszék Utolsó frissítés: September 24, 2007 1 tar@dcs.vein.hu Tar Péter (PE-MIK-DCS) Programozás I. - 3. gyakorlat September 24, 2007 1 / 24
1 Operátorok 2 Típuskonverziók 3 Matematikai függvények 4 Vezérlési szerkezetek alapjai 5 Feladatok Tar Péter (PE-MIK-DCS) Programozás I. - 3. gyakorlat September 24, 2007 2 / 24
Fogalmak Programozás során a feladat megoldása érdekében a program változói és konstansai között m veleteket kell végeznünk. operátor A m veleti jel, vagy a m veletet meghatározó jelek összessége. operendus Az a változó, vagy konstans, amellyel az operátor(ok) által meghatározott m veletet végrehajtjuk. precendencia Az operátorok közötti reláció, amely meghatározza, hogy egy kifejezés m veleteit milyen sorrendben hajtsuk végre. (Pl. A szorzásokat el bb el kell végezni az összeadásoknál) asszociativitás A kiértékelés irányát határozza meg. Két féle lehet: balról jobbra, vagy jobbról balra. Tar Péter (PE-MIK-DCS) Programozás I. - 3. gyakorlat September 24, 2007 3 / 24
Operátor típusok Operandusok száma szerint Egyoperandusú (Unáris) operátorok Pl.: - el jel Kétoperandusú (Bináris) operátorok Pl.: +,-,*,/ matematikai alapm veletek Háromoperandusú (Trináris) operátorok Egyetlen ilyen van a C nyelvben, a feltételes operátor Elhelyezkedés szerint prex Az operátor az operandus el tt helyezkedik el. postx/sux Az operátor az operandus után helyezkedik el. inx Az operátor az operandusok között helyezkedik el. Tar Péter (PE-MIK-DCS) Programozás I. - 3. gyakorlat September 24, 2007 4 / 24
Indexel és hivatkozó operátorok majd. [ ] A tömb indexelésének operátora Pl.: tombnev[elemszam] ( ) A függvényhívás operátora Pl.: fuggvenynev(elsoparameter,masodikparameter);. és -> Struktúra adattagjára való hivatkozás; * Indirekció operátor, az adott memóriacímen lev adatot adja vissza. & Címképz operátor, az adott változó memóriacímét adja vissza. a a Az indirekcióval és a címképzéssel részletesebben a mutatók fejezetben foglalkozunk Tar Péter (PE-MIK-DCS) Programozás I. - 3. gyakorlat September 24, 2007 5 / 24
Inkrementáló és dekrementáló operátorok valtozonev++ Az adott változó értékét a m velet végrehajtása után megnöveli egyel. ++valtozonev Az adott változó értékét egyel megnöveli a m velet végrehajtása el tt. valtozonev-- Az adott változó értékét a m velet végrehajtása után csökkenti egyel. --valtozonev Az adott változó értékét egyel csökkenti a m velet végrehajtása el tt. Tar Péter (PE-MIK-DCS) Programozás I. - 3. gyakorlat September 24, 2007 6 / 24
Aritmetikai operátorok + Egyszer összeadás - Egyszer kivonás * Egyszer szorzás / Egyszer osztás, pozitív számok esetén lefelé, negatív esetben felfelé kell kerekíteni % Osztási maradékképzés Tar Péter (PE-MIK-DCS) Programozás I. - 3. gyakorlat September 24, 2007 7 / 24
Relációs operátorok <= Kisebb egyenl < Kisebb >= Nagyobb egyenl > Nagyobb == Egyenl ség FONTOS, hogy == jelet írjunk egyenl ség vizsgálatakor, mert a = az értékadás operátora!!= Nem egyenl ség Tar Péter (PE-MIK-DCS) Programozás I. - 3. gyakorlat September 24, 2007 8 / 24
Logikai és bitenkénti operátorok! Negáció, Logikai NEM Logikai VAGY && Logikai ÉS Bitenkénti negáció, minden bitet az ellentettjére változtat Bitenkénti VAGY & Bitenkénti ÉS bitekénti XOR, azaz kizáró vagy << Balra eltolás, pl: 1<<2=4 >> Jobbra eltolás, pl: 23>>3=2 Tar Péter (PE-MIK-DCS) Programozás I. - 3. gyakorlat September 24, 2007 9 / 24
Egyéb operátorok =, +=,*=,... Értékadó operátorok (op1 op= op2) == (op1 = op1 op op2), Vessz operátor, m veletek, vagy paraméterek elválasztására használjuk. sizeof() A megadott változó méretét adja vissza byteban.? : Feltételes operátor, az egyetlen három operandusú C operátor. Az if-then-else szerkezet operátora. Tar Péter (PE-MIK-DCS) Programozás I. - 3. gyakorlat September 24, 2007 10 / 24
Tanulságok Minden összetett m velet esetén gondoljuk át, hogy melyik hajtódik végre el bb! Sokszor segíthet, ha elgondolkodunk miért áll fenn az adott precedencia! Ha nem tudjuk az adott operátorcsoport asszociativitását, keressünk példát! Ha valamir l nem tudjuk mire való, próbáljuk meg kitalálni az operátor jelei alapján, vagy nézzünk utána. Kerüljük a kétértelm kifejezéseket, mellékhatásokat okozhatnak. A m veleteink mindig legyenek egyértelm en vérehajthatóak! Ha valami nem m ködik, próbáljuk részm veletekre bontani. Tar Péter (PE-MIK-DCS) Programozás I. - 3. gyakorlat September 24, 2007 11 / 24
Implicit típuskonverzió Az operátorok azonos típusok közt vannak deniálva, amikor két eltér típusba tartozó változó közt szeretnénk m veletet végezni, típuskonverzióra van szükség. Amennyiben nem azonos típusok közt végzünk m veletet, a fordító el ször mindkét operandust azonos típusúvá konvertálja a m velet elvégzése el tt, ez az implicit típuskonverzió. Mindig a kisebb típusok konvertálódnak nagyobb típusúvá. A sorrend: char<short<int<long<oat<double<long double Tar Péter (PE-MIK-DCS) Programozás I. - 3. gyakorlat September 24, 2007 12 / 24
Explicit típuskonverzió Explicit konverzió esetén el re megmondjuk a fordítónak a konverzió típusát. Pl.: double pi=3.14;int x=(int)pi; Tanulságok Mindig nézzük meg, hogy a típusok azonosak-e egy m velet elvégzése el tt! Kerüljük az implicit típuskonverziót, ezáltal átláthatóbb lesz a programunk! Tar Péter (PE-MIK-DCS) Programozás I. - 3. gyakorlat September 24, 2007 13 / 24
Matematikai függvények használata A matematikai függvények használatához a math.h header-t kell betölteni. Ha valamilyen matematikai függvényre van szükségünk érdemes Google-ben utánanézni, hogy miket tartalmaz a math.h, hátha találunk nekünk megfelel t. Tar Péter (PE-MIK-DCS) Programozás I. - 3. gyakorlat September 24, 2007 14 / 24
Fontosabb függvények int abs(int) Abszolút érték függvény double ceil(double) Fels egész rész double oor(double) Alsó egész rész double sqrt(double) Négyzetgyökvonás double pow(double, double) Hatványozás double sin(double) Szinusz függvény double exp(double) e alapú hatványozás double log(double) e alapú logaritmus double modf(double, double*) Egész és törtrészt visszaadó függvény Tar Péter (PE-MIK-DCS) Programozás I. - 3. gyakorlat September 24, 2007 15 / 24
If - else szerkezet Ezzel a szerkezettel készíthetünk elágazást a programban. Ennek segítségével egy feltétel teljesülésének vizsgálatának függvényében hajtunk végre bizonyos kódrészeket. Szintaxis if(feltetel){ utasitas1; //Ha a feltetel igaz... } else{ //Az else ág opcionális egyebkentutasitas1; //Ha a feltetel hamis... } Tar Péter (PE-MIK-DCS) Programozás I. - 3. gyakorlat September 24, 2007 16 / 24
While szerkezet Ezzel a szerkezettel ciklusokat készíthetünk. Ennek hatására a program egy utasításköteget addig fog végrehajtani, míg a ciklus feltétele igaz. Szintaxis while(feltetel){ utasitas1; //Amig a feltetel igaz... } Tar Péter (PE-MIK-DCS) Programozás I. - 3. gyakorlat September 24, 2007 17 / 24
For szerkezet Hasonló a while ciklushoz, annyi különbséggel, hogy megadhatunk egy inicializáló utasítást és egy minden ciklus végén végrehajtandót. Szintaxis for(init,feltetel,ciklusvegenvegrehajtandoutasitas){ utasitas1; //Amig a feltetel igaz... } Tar Péter (PE-MIK-DCS) Programozás I. - 3. gyakorlat September 24, 2007 18 / 24
Tanulságok Mindig ellen rizzük, hogy a megadott feltételek logikai kifejezések legyenek! Ha egy utasítást többször kell vérehajtani, használjunk ciklust, így átláthatóbb lesz a program! A for ciklus egy utasítás n-szeri végrehajtására a legalkalmasabb. Ne zárkózzunk el feltételek és ciklusok egymásba ágyazásától, ha szükséges. Tar Péter (PE-MIK-DCS) Programozás I. - 3. gyakorlat September 24, 2007 19 / 24
1. feladat Készíts programot Kérjünk be két lebeg pontos számot. Írassuk ki a nagyobb abszolút érték szám szinuszát. Írassuk ki a két szám szorzatának kerekített értékét úgy, hogy a kerekítést magunk végezzük. Írassuk ki a két szám által használt memória méretét bitekben! Próbáljuk kiíratni az el z pontban lév értéket a * (szorzás) operátor használata nélkül! Minden feladatot próbáljunk meg egy paranccsal végrehajtani! Tar Péter (PE-MIK-DCS) Programozás I. - 3. gyakorlat September 24, 2007 20 / 24
2. feladat Készíts programot Kérjünk be három lebeg pontos számot Írassuk ki a számokat, a köztük lév relációk (kisebb, nagyobb, egyenl ) ábrázolásával. Rendezzük növekv sorrendbe a számokat. Írassuk ki ismét az eredményt, az el z forma szerint. Írassuk ki, hogy a három számból, mint hosszúságértékb l szerkeszthet -e háromszög? Tar Péter (PE-MIK-DCS) Programozás I. - 3. gyakorlat September 24, 2007 21 / 24
3. feladat Készíts programot Kérjünk be egy számot 0-255 között. Tároljuk a számot a neki legmegfelel bb típusban. Kérjünk be egy sorszámot 1-8 között. Maszkoljuk ki az els szám bekért sorszámú bitjét 0-ra. Írassuk ki az eredményt. Tar Péter (PE-MIK-DCS) Programozás I. - 3. gyakorlat September 24, 2007 22 / 24
4. feladat Módosítsuk az el z programot A program lefutása után kérjük be, hogy akarunk-e még egy bitet maszkolni. (i/n) Ha igen, futtassuk újra a programot. Ha nem, köszönjünk el, majd lépjünk ki. Ha nem "i", vagy "n" bet t ír be a felhasználó tegyük fel újra a kérdést. Tar Péter (PE-MIK-DCS) Programozás I. - 3. gyakorlat September 24, 2007 23 / 24
5. feladat Készíts programot Kérj be három számot. Tekintsd ket egy másodfokú egyenlet együtthatóinak. Oldd meg az egyenletet! Ha van valós gyök, írjuk ki a megoldást. Ha nincs, írjuk ki, hogy az egyenlet a valós számok halmazán nem megoldható. Tar Péter (PE-MIK-DCS) Programozás I. - 3. gyakorlat September 24, 2007 24 / 24