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

Rendszer és Szoftvertechnológia Tanszék

Hasonló előadás


Az előadások a következő témára: "Rendszer és Szoftvertechnológia Tanszék"— Előadás másolata:

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

2 1.4. 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 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 <stdio.h> #include <conio.h> 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 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 1.4.2. 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); 1342 –8769 i= 1342 j=

6 1.4.3. 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); 1. a= 2. a= 3. a= 1.21e+01 4. b= 5. b= 6. b= 3.46e-04

7 Különleges kimeneti karakterek használata
táblázat: Escape szekvenciák Escape szekvencia Decimális kód jelentés \a hangjelzés \b BckSpace \n LinrFeed ………….. (nemgrafikus karakterek)

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 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 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 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 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 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 1.5.1 mintapélda: egyszerű aritmetikai alapműveletek
#include <stdio.h> #include <conio.h> 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 1.5.2. mintapélda: aritmetikai alapműveletek szemléltetése
#include <stdio.h> #include <conio.h> 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 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 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.

18 Feladat ! int db = 0; db++; printf ("\ndb: %d",db--); //kerülendő !!!
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 Az aritmetikai műveletek precedenciaszabálya
Példa: eredmeny = * 3; eredmeny = * 3; eredmeny = * 3; = * 3; = ; = 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 Precedencia-táblázat, balról-jobbra szabály
1. precedencia-osztály: 2. 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 koltseg = (darab1 + darab2) * egysegar;

21 Aritmetikai műveletek túlcsordulása
mintapélda, aritmetikai művelet túlcsordulása #include <stdio.h> #include <conio.h> 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 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 1.6. 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 1.7. 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 <stdio.h> 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 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 <stdio.h> #include <math.h> void main(void) { int number = -1234; printf("number: %d absolute value: %d\n", number, abs(number)); }

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 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 <stdio.h> #include <math.h> void main(void) { int number = -1234; printf("number: %d absolute value: %d\n", number, abs(number)); }

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 Adatfolyam - kezelő függvények és makrók : prototípus az stdio
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 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 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 Példa a getche használatára a Help-ből
/* getche example */ #include <stdio.h> #include <conio.h> void main(void) { char ch; printf("Input a character:"); ch = getche(); printf("\nYou input a '%c'\n", ch); getch (); }

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 Véletlen szám generálás
/* random example */ #include <stdlib.h> #include <stdio.h> #include <conio.h> /* 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


Letölteni ppt "Rendszer és Szoftvertechnológia Tanszék"

Hasonló előadás


Google Hirdetések