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
[email protected]
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
[ ] 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
majd.
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 v 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
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