Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Programozás I. 1.4, 1.5, 1.6, 1.7 Rendszer és Szoftvertechnológia Tanszék.

Hasonló előadás


Az előadások a következő témára: "Programozás I. 1.4, 1.5, 1.6, 1.7 Rendszer és Szoftvertechnológia Tanszék."— Előadás másolata:

1 Programozás I. 1.4, 1.5, 1.6, 1.7 Rendszer és Szoftvertechnológia Tanszék

2 Formázott adatbevitel és kivitel Áttekintés: A változók kezdeti értékadással, értékadással, és/vagy adatbeviteli művelet során kaphatnak értéket. A printf függvényt üzenetek, illetve változókban tárolt értékek képernyőn való formázott megjelenítéséhez használjuk. A C++ lehetővé teszi különleges karakterek használatát a printf függvénnyel, hogy tabulátor vagy új sor karaktert állítsunk elő, vagy akár hangot adjunk ki a számítógép beépített hangszórójából. A scanf függvény a szabványos beviteli eszközről olvas be adatokat. printf és scanf: könyvtári függvények, prototípus az STDIO.H állományban.

3 3 A printf és a scanf függvények segítségével megadott formátum szerint lehet kiírni ill. beolvasni alap típusú adatokat és sztringeket mintaprogram #include void main (void) { //kedvenc számom clrscr (); //képernyő törlés int szam; //az egész típusú, szam nevű változó deklarálása printf ("Add meg a kedvenc számodat (1-999) !"); //Tájékoztató szöveg kiírása a képernyőre scanf ("%d", &szam); //egy szám beolvasása a billentyűzetről, //a kapott érték a szam nevű változóba kerül printf ("A kedvenc számod: %d", szam); //a kedvenc szám kiírása a képernyőre getch (); //billentyű leütésére vár }

4 4 A printf függvény printf (formátumstring, változólista); A formátumstring: általában string konstans: normál karaktersorozatok speciális konverziókat előíró karakterek:  az argumentumok értelmezésének módja,  a megjelenítés formája. A konverziós előírás teljes formája hat részre osztható, ebből egyes részek elhagyhatók: % l f % jel _____________| jelző _ ______________| minimális mezőszélesség__| pontosság _______________| méretmódosító _____________| konverziós betű ______________|

5 mintaprogram -részlet: egész számok formázott kiírása int i=1342, j=-8769; printf ("\n%d%d",i,j); printf("\ni=%5d j=%8d",i,j); –8769 i= 1342 j= -8769

6 mintaprogram -részlet: lebegőpontos számok formázott kiírása float a= ,b= ; printf("\n1. a=%10.2f",a); printf("\n2. a=%15.8f",a); printf("\n3. a=%10.2e",a); printf("\n4. b=%10.5f",b); printf("\n5. b=%15.7f",b); printf("\n6. b=%10.2e",b); a= a= a= 1.21e b= b= b= 3.46e-04

7 7 Különleges kimeneti karakterek használata táblázat: Escape szekvenciák Escape szekvencia Decimális kód jelentés \a7hangjelzés \b8BckSpace \n10LinrFeed ………….. (nemgrafikus karakterek)

8 8 A scanf függvény A scanf függvény formázott adatbevitelt valósít meg: a szabványos beviteli eszközről olvas be adatokat, és az esetek többségében a printf konverziók fordítottját hajtja végre. Hívásának általános formája: scanf (formátumstring, változó_címlista); Az argumentumlista memóriacímeket tartalmaz, ahová a beolvasott elemeket el kell helyezni. Mint az mintaprogramban láthatjuk, egy változónak megfelelő memóriacímet a & operátorral jelölünk ki. scanf ("%d",&szam);

9 9 Túlcsordulási hibák adat bevitelnél Futtassuk például az mintaprogramot. Gépeljük be az számot: - túlcsordulási hiba keletkezik. Típuseltérési hibák adat bevitelnél Ha a program egy adott típusú (pl. int) értéket vár, a felhasználó pedig más típusú (pl. char) értékeket visz be: hiba keletkezik.

10 10 Ellenőrző kérdések Mire szolgál a formátumstring a printf és a scanf függvényeknél ? Az argumentumlistában szerepelhetnek-e konstansok ? Mi a hatása a printf függvény formátum-stringjében elhelyezett \n escape szekvenciának ? Adjon meg három escape szekvenciát, melyet a printf utasítás formátumstringjében gyakran használhatunk. A printf függvény hívásának általános formája. A printf függvény formátum-stringje milyen karaktercsoportokból áll ? Mit határoz meg a printf függvény formátum-stringjében megadható konverziós előírás? Írjon fel néhány példát. A printf függvény formátum-stringjében megadható konverziós előírás hat részre osztható. Melyek ezek és mi a szerpük ? Mi történik, ha a scanf utasításban az argumentumlista elemeinél a változónevek elé nem tesszük ki a & operátort ? Mely esetekben lép fel túlcsordulási hiba adat bevitelnél ?

11 11 Mi a hiba az alábbi printf függvényhívásban ? float a=12.33, b=0.22; printf (”\na:%d”, a, ”b:”, b);

12 12 Egyszerű műveletek elsajátítása Áttekintés: Matematikai műveletek végzésére a programjainkban aritmetikai műveleti jeleket használunk. A megfelelő sorrendben történő műveletvégzéshez a fordító precedenciát (elsőbbségi osztályt) rendel hozzá az egyes műveleti jelekhez. Zárójelek használatával a kifejezésekben irányíthatjuk azt a sorrendet, mellyel a program végrehajtja az egyes műveleteket. C++ programokban az inkrementálás (++) és a dekrementálás (--) műveleti jelet használhatjuk az egyes értékek változókhoz való hozzáadására, illetve kivonására.

13 13 Matematikai alapműveletek táblázat: a C++ matematikai alapműveletei Műveleti jel (operátor)Példa * fizetendo = egysegar * db; /atlag = bevetel / db; % maradékos osztás !!!maradek = egesz / oszto; +bevetel = nettoar + afaertek; -profit = bevetel - koltseg

14 mintapélda: egyszerű aritmetikai alapműveletek #include void main (void) { //Egyszerű aritmetikai műveletek clrscr; printf ("\n4+3=%d",4+3); printf ("\n15-6=%d",15-6); printf ("\n1.1234*2=%f",1.1234*2); printf ("\n16/5=%d",16/5); getch (); }

15 mintapélda: aritmetikai alapműveletek szemléltetése #include void main (void) { // ÁFA-s számla egy tételének kezelése // a változók deklarációja: float nettoertek = 560; //egy tétel nettó értéke float forgalmi_ado = 0.25; // ÁFA szorzó float fizetett_osszeg = 1000; //a vevo altal fizetett osszeg float ado, visszajar, osszesen; //ado, vevonek visszajar //szamla osszesen értéke clrscr; //számítások: ado = nettoertek * forgalmi_ado; osszesen = nettoertek + ado; visszajar = fizetett_osszeg - osszesen; //az eredmények megjelenítése printf("\nA fizetendő összeg:%10.2f Ft",osszesen); printf("\nVisszajár: %10.2f Ft",visszajar); printf("\nA számla érték %10.2f Ft ÁFA-t tartalmaz",ado); getch (); }

16 16 Változó értékének növelése 1-gyel darab = darab + 1; A C++ biztosít egy inkrementálási műveleti jelet, a dupla plusz jelet (++): db++; A dekrementálás műveleti jele a C++-ban A dupla mínusz jel (--) a dekrementálás műveleti jele, ami 1-gyel csökkenti a változó értékét. darab = darab -1; darab--;

17 17 A prefix (előtag) és a postfix (utótag) inkrementálás műveleti jelek ++valtozo;valtozo++; A C++ ezt a két műveleti jelet különbözőképpen kezeli ! Példa: kovetkezo_sor = sor++; //postfix inkr. Az előző utasítással megegyező eredményt ad a következő két utasítássor végrehajtása: kovetkezo_sor = sor; sor = sor + 1; Most vizsgáljuk meg a következő utasítást: kovetkezo_sor = ++sor;//prefix inkr. Az előző utasítással megegyező eredményt ad a következő két utasítássor végrehajtása: sor = sor + 1; kovetkezo_sor = sor;

18 18 Feladat ! Mi jelenik meg a képernyőn az alábbi kis program-rész lefutása után ? Mennyi lesz db változóban letárolt érték az alábbi program-részlet lefutása után: int db = 0; db++; printf ("\ndb: %d",db--); //kerülendő !!!

19 19 Az aritmetikai műveletek precedenciaszabálya Példa: eredmeny = * 3;eredmeny = * 3; = 3 * 3; = 1 + 6; = 9; = 7; A fordító minden műveleti jelhez precedencia (elsőbbségi) osztályt rendel hozzá, mely meghatározza, hogy milyen sorrendben kell a műveleteket elvégezni. A rendszer a magasabb precedenciájú műveleteket végzi el előbb, mint az alacsonyabb precedenciájú műveleteket.

20 20 Precedencia-táblázat, balról-jobbra szabály 1. precedencia-osztály: precedencia-osztály: * / % 3. precedencia-osztály: + - Az azonos precedencia-osztályba tartozó aritmetikai műveletek között a sorrendet a balról-jobbra szabály határozza meg. Példa: eredmeny = 12 / 3 * 4; A műveletek sorrendjének irányítása zárójelekkel Példa: koltseg = (darab1 + darab2) * egysegar;

21 21 Aritmetikai műveletek túlcsordulása mintapélda, aritmetikai művelet túlcsordulása #include void main (void) { //Túlcsordulási hiba két egész szám szorzásakor int eredmeny; clrscr (); eredmeny = 200 * 300; printf ("\n200*300=%d",eredmeny); getch (); } 200*300=-5536

22 22 Idézet … Lehet, hogy a kemény munka nem azonos a tehetséggel, de az biztos, hogy a legjobb helyettesítője. James A. Garfield

23 Operátorok és kifejezések A feladatok megoldásához szükséges, elméleti zh-n is számonkérésre kerül.

24 Könyvtári függvények A függvény a C program olyan névvel ellátott egysége, amely a program más részeiből hívható, amikor a függvényben definiált, paraméterezhető tevékenységsorozatra szükség van. Példa: #include void main (void) { int n = 2; printf ("\nn=%d, a hatványérték: %lf", ++n, pow (2, n)); } A fordító az alábbi hibajelzést adja: Function pow should have a prototype.

25 25 Matematikai rutinok: prototípus a math.h vagy a float.h fileban. int abs(int x); double fabs(double x); long double fabsl(long double (x)); long int labs(long int x); /* abs example */ #include void main(void) { int number = -1234; printf("number: %d absolute value: %d\n", number, abs(number)); }

26 26 A függvények visszatérési típusa A visszatérési típus meghatározza a függvényérték típusát, amely tetszőleges skalár (char, short, int, long, float, double, signed, unsigned, felsorolási vagy mutató) vagy strukturált (struct, union) lehet. Alapértelmezés szerint: int típusú lesz a függvényérték. A void típus felhasználásával olyan függvények készíthetők, amelyek nem adnak vissza értéket.

27 27 Matematikai rutinok: ( prototípus a math.h fileban. ) int abs(int x); double fabs(double x); long double fabsl(long double (x)); long int labs(long int x); /* abs example */ #include void main(void) { int number = -1234; printf("number: %d absolute value: %d\n", number, abs(number)); }

28 28 Matematikai rutinok: ( prototípus a math.h fileban. ) int abs(int x); double pow(double x, double y); double sqrt(double x); Szögfüggvények: x értékét radiánban kell megadni ! double cos(double x); double sin(double x); double tan(double x); Miért fontos ismerni a visszatérési érték típusát ?

29 29 Adatfolyam - kezelő függvények és makrók : prototípus az stdio.h fileban. int printf (const char *format [, argument,...]); int scanf (const char *format [, address,...]); int fflush(FILE *stream); Az fflush függvény kiűríti a puffert, ha pufferelt adatátvitel történt. Példa: scanf ("%d", &darabszam); fflush (stdin);

30 30 Konzol és port input/output: void clrscr(void); void clreol (void); void gotoxy (int x, int y); int wherex (void); int wherey (void); Szöveges ablak törlése Sor törlése szöveges ablakban a cursor pozíciótól a sor végéig a cursor mozgatása nélkül. A gotoxy a megadott x,y pozícióba mozgatja a kurzort az aktuális szöveges ablakban. Ha a koordináták nem valósak, a függvényhívás hatástalan marad. (pl. gotoxy (40,30)) wherex a kurzor vízszintes pozícióját adja vissza (1...80) az aktuális szöveges ablakban, wherey pedig a függőleges pozíciót (1..25 vagy vagy 1..50).

31 31 Konzol és port input/output: int getch(void); int getche(void); int putch(int ch); Mindkét függvény egyetlen karaktert olvas közvetlenül a billentyűzetről. Getch nem írja a képernyőre a kapott karaktert, getche viszont a szöveges ablakba írja azt vissza a direkt videot vagy a BIOS-t használva.Visszatérési érték: mindkét függvénynél a billentyűzetről beolvasott karakter kódja. A putch függvény az aktuális szöveges ablakba küldi a ch karaktert.Visszatérési érték: siker esetén a kiírt karakter, egyébként EOF.

32 32 Példa a getche használatára a Help-ből /* getche example */ #include void main(void) { char ch; printf("Input a character:"); ch = getche(); printf("\nYou input a '%c'\n", ch); getch (); }

33 33 Véletlen szám generálás int random(int num); void randomize(void); random visszatérési értéke egy véletlenszám 0 és (num-1) között. randomize véletlenszerűen inicializálja a véletlenszám generátort. A random meghívását megelőzően kell aktivizálni egyszer a programban, így minden program futtatáskor véletlen szám keletkezik.

34 34 Véletlen szám generálás /* random example */ #include /* prints a random number in the range 0 to 99 */ void main(void) { randomize(); printf("Random number in the 0-99 range: %d\n", random (100)); getch (); }

35 35 …


Letölteni ppt "Programozás I. 1.4, 1.5, 1.6, 1.7 Rendszer és Szoftvertechnológia Tanszék."

Hasonló előadás


Google Hirdetések