1 / 35

Programozás I. 1.4, 1.5, 1.6, 1.7

Programozás I. 1.4, 1.5, 1.6, 1.7. Rendszer és Szoftvertechnológia Tanszék. 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.

orsen
Download Presentation

Programozás I. 1.4, 1.5, 1.6, 1.7

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Programozás I. 1.4, 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. 1.4.1. 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: %- 1 2 . 4 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= -8769

  6. 1.4.3. mintaprogram -részlet: lebegőpontos számok formázott kiírása float a=12.1234567,b=0.00034567; 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= 12.12 2. a= 12.12345670 3. a= 1.21e+01 4. b= 0.00035 5. b= 0.0003457 6. b= 3.46e-04

  7. Különleges kimeneti karakterek használata 1.4.1. táblázat: Escape szekvenciák Escape szekvencia Decimális kód jelentés \a 7 hangjelzés \b 8 BckSpace \n 10 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 1.4.1. 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 1.4.1. mintaprogramot. Gépeljük be az 50000 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 1.5.1. 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. 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. 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. Az aritmetikai műveletek precedenciaszabálya Példa: eredmeny = 1 + 2 * 3; eredmeny = 1 + 2 * 3; eredmeny = 1 + 2 * 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. 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 Példa: koltseg = (darab1 + darab2) * egysegar;

  21. Aritmetikai műveletek túlcsordulása 1.5.4. 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.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 1..43 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 (); }

More Related