120 likes | 231 Views
Streams. Dátové Prúdy konzola. Čo je prúd (stream). Mnoho periférií v počítači pracuje na princípe sériového toku dát. Klávesnica – stlačené klávesy (znaky) postupujú v poradí stlačenia do počítača (programu) Obrazovka – z obrazuje postupne prijaté znaky (text)
E N D
Streams Dátové Prúdykonzola
Čo je prúd (stream) • Mnoho periférií v počítači pracuje na princípe sériového toku dát. • Klávesnica – stlačené klávesy (znaky) postupujú v poradí stlačenia do počítača (programu) • Obrazovka – zobrazuje postupne prijaté znaky (text) • Pevný disk – ukladá prijaté dáta na úložné médium, resp. číta uložené dáta a v pôvodnom poradí ich posiela do počítača • ....
Čo je prúd (stream) • Stream – „zapúzdrenie“ toku dát • Zapúzdrenie = ovládanie toku dát v programe je v podstate rovnaké nezávisle na jeho zdroji • Jednotnosť = toky dát sa ovládajú rovnakými príkazmi + niekoľkými špecifickými príkazmi
Vstup z klávesnice (zo zdroja dát) • cin – objekt pre obsluhu toku dát z klávesnice • Je súčasťou knižnice <iostream> • cin >> premenná – extrahuje z toku dát jednu časť (číslo, text) a uloží ju do premennej. • Výraz (cin >> premenná)je true, ak sa operácia podarila, inak je false • Separátorom hodnoty je ľubovoľný prázdny znak (medzera, tabulátor ‘\t’, nový riadok) • Extrahovanie možno reťaziť:cin >> a >> b >> c;
Vstup z klávesnice (zo zdroja dát) • Ak sú čísla oddelené iným znakom (napríklad čiarkou) môžeme tento znak načítať do pomocnej premennej typu char, a tým ho ignorovať • Príklad: na klávesnici napíšeme 1.5,2.7,3.1 floata,b,c; char x; cin >> a >> x >> b >> x >> c;
Vstup z klávesnice (zo zdroja dát) • cin.peek() – vráti prvý znak (ktorý práve čaká na načítanie), ale nenačíta ho • cin.putback(znak) – vráti znak späť do toku dát, budeme ho môcť neskôr načítať • cin.ignore()- načíta (a ignoruje) všetky znaky, ktoré boli pripravené v toku dát. Používa sa, ak chceme ignorovať všetko, čo užívateľ medzičasom nastláčal na klávesnici
Vstup z klávesnice (zo zdroja dát) • cin.get() – načíta iba jeden znak • cin.eof()– vráti true, ak prišiel znak konca toku dát (Windows: CTRL+Z, iné systémy aj CTRL+D) • Správanie sa pri týchto metódach závisí čiastočne od zdroja dát a aj od operačného systému while(!cin.eof()) { a=cin.get(); cout << a << " "; }
Výstup na obrazovku (do úložiska dát) • cout – objekt pre obsluhu toku dát smerujúceho na obrazovku • Je súčasťou knižnice <iostream> • cout << premenná – vypíše obsah premennej na obrazovku • Výpis možno reťaziť:cout << a << b << c; • Premenná sa vypíše v prirodzenom tvare (číslo ako jeho hodnota, char[] ako text, char ako písmeno, &x ako adresa v pamäti
Výstup na obrazovku (do úložiska dát) • Formátovanie výpisu • Ak chceme obsah premennej interpretovať ako premennú iného typu – tzv. cast-operátor: char znak = ‘A’; cout << znak << “ “ << (int)znak ; Premenná znak je typu char, vypíše sa preto písmeno A Pre potreby tejto operácie (výpisu) sa premenná znak prerobí na typ int, vypíše sa teda číslo 65
Výstup na obrazovku (do úložiska dát) • Cast-operátor môžeme použiť hocikde v programe, kde to potrebujeme • Typická situácia – podiel dvoch celých čísel: int i=1, j=2; float podiel; podiel = i/j; podiel = (float)i/(float)j; V algebraickom výraze sú obe premenné typu int, aj výsledok bude int, čiže 0 !!!!! Pre potreby tejto operácie (podielu) sa obe premenné prerobia na typ float, výsledok bude tiež float, čiže 0.5
Výstup na obrazovku (do úložiska dát) • Úprava formátu vypisovaných čísel • Knižnica <iomanip> • Do toku dát „primiešame“ povely pre zmenu formátovania • Povel platí, kým ho nezmeníme (teda aj pre ďalšie výpisy) float a=314.15926535; cout << setprecision(6)<< a; cout << setprecision(2) << a; Zobrazia sa iba dve platné číslice. U čísla 310 je nejasný počet platných číslic, preto výpis je automaticky vo vedeckej notácii: 3.1e+002 Odteraz sa čísla vypisujú na 6 platných číslic, vypíše sa: 314.159
Výstup na obrazovku (do úložiska dát) cout << fixed << a; cout << scientific<< a; Odteraz sa čísla vypisujú ako štandardné desatinné čísla s pevným počtom desatinných miest, vypíše sa: 314.16 (stále platí setprecision(2)) Odteraz sa čísla vypisujú vo vedeckej notácii na pevný počet desatinných miest. Stále platí setprecision(2), teda sa vypíše: 3.14e+002