1 / 41

Podstawy informatyki 2013/2014

Podstawy informatyki 2013/2014. Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła Jerzego Matuszyka. Strumień i flaga.

ghita
Download Presentation

Podstawy informatyki 2013/2014

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. Podstawy informatyki2013/2014 Łukasz SztangretKatedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiałyDanuty Szeligi i Pawła Jerzego Matuszyka

  2. Strumień i flaga Strumień – wprowadzanie i wyprowadzanie danych można potraktować jako strumień bajtów płynący od źródła do ujścia. Flaga – przechowuje informacje typu tak/nie.

  3. Strumienie • Wyprowadzanie i wprowadzanie informacji ze standardowych urządzeń we/wy (klawiatura/ekran) Biblioteka iostream • Wyprowadzanie i wprowadzanie informacji z plików Biblioteka fstream • Wyprowadzanie i wprowadzanie informacji z obiektów klasy string Biblioteka sstream

  4. Operacje we/wy Przepływ informacji może odbywać się na dwa sposoby: • Operacje we/wy bitowe Polega na tym, że określone bajty przesyłane są od źródła do ujścia, a strumień nie interesuje się znaczeniem tych bajtów. Stosujemy, gdy program ma komunikować się nie z człowiekiem, ale z innym programem albo urządzeniem.

  5. Operacje we/wy • Operacje we/wy tekstowe Polega na tym, że określone bajty przesyłane są od źródła do ujścia oraz ma jeszcze je interpretować (formatować). Stosujemy, gdy program ma komunikować się z człowiekiem. Wszystkie operacje we/wy wykonywane do tej pory były typu tekstowego.

  6. Posługiwanie się strumieniem • Definiujemy w pamięci obiekt sterowania strumieniem. • Wskazujemy jakim urządzeniem ma się zajmować. • Przeprowadzamy wczytania (wypisania) informacji. • Likwidujemy strumień.

  7. Strumienie zdefiniowane standardowo • cout – standardowe urządzenie wyjścia • cin – standardowe urządzenie wejścia • cerr – standardowe urządzenie wyjścia, na które wypisujemy komunikaty o błędach (strumień niebuforowany) • clog – standardowe urządzenie wyjścia, na które wypisujemy komunikaty o błędach (strumień buforowany) • wcout • wcin • wcerr • wclog

  8. Operatory przesunięcia bitowego Operatory << oraz >> zostały przeładowane w ten sposób, że odpowiadają za wstawianie i wyjmowanie ze strumienia. PRIORYTETY!!! bool a = true, b = false; cout << a && b;

  9. Domniemania (cout) • Typy przechowujące liczby całkowite są wypisywane w systemie dziesiętnym. • Typy alfanumeryczne są wypisywane jako pojedyncze znaki ASCII • Typy przechowujące liczby zmiennoprzecinkowe są wypisywane w postaci 6 cyfr. • Wskaźniki (z wyjątkiem char*) są wypisywane w systemie heksadecymalnym.

  10. Domniemania (cout) • Wypisanie wskaźnika char* powoduje wypisanie C-stringu na który pokazuje, czyli: char *a="Hello"; cout << a << endl; cout << reinterpret_cast<void*>(a) << endl; Hello Adres w pamięci

  11. Domniemania (cin) • Wszystkie wczytywane typy mogą poprzedzać białe znaki, które są ignorowane. • Przy wczytywaniu liczb całkowitych są traktowane jako wprowadzane w systemie dziesiętnym (nie można wprowadzać liczb pisząc np. 011, 0x11). • Przy wczytywaniu liczb całkowitych po podaniu pierwszego znaku nie będącego cyfrą wprowadzanie zostaje zakończone. • Wprowadzając liczby ujemne, pomiędzy znakiem minus a liczbą nie może być spacji.

  12. Domniemania (cin) • Wprowadzając liczbą zmiennoprzecinkową obowiązują zasady dotyczące liczb całkowitych, jednak w przypadku notacji wykładniczej (naukowej) może wystąpić drugi znak + lub – oraz litera oznaczająca wykładnik. Wewnątrz nie może być spacji. • Przy wczytywaniu C-stringów oraz stringów wczytywanie rozpoczyna się po zignorowaniu białych znaków poprzedzających tekst i kończy się z napotkaniem pierwszego białego znaku.

  13. Format state flags Zasady formatowania są zapisane w tak zwanych flagach stanu formatowania i znajdują się w klasie ios_base

  14. Hierarchia klas

  15. Flagi i maski Flagi: • skipws ignoruj białe znaki • left lewe justowanie • right prawe justowanie • internal „wewnętrzne” justowanie • boolalpha używaj słów true/false • dec konwersja decymalna • oct konwersja oktalna • hex konwersja heksadecymalna • showbase pokaż podstawę konwersji • showpoint pokaż kropkę dziesiętną

  16. Flagi i maski • uppercase wielkie litery (w liczbach) • showpos pokaż znak + w liczbach R+ • scientific notacja wykładnicza • fixed notacja zwykła • unitbuf nie buforuj strumienia Maski: • adjustfield maska dla typu justowania • basefield maska dla typu konwersji • floatfield maska dla typu notacji

  17. skipws Ustawienie tej flagi powoduję że strumień będzie ignorował białe znaki (spacje, tabulatory, znaki nowej linii), które poprzedzają znaki właściwe. string a; cin >> a; cout << a.length() << endl; //skasuj flagę skipws cin >> a; cout << a.length() << endl; ___aaa 3 ___aaa 0

  18. leftrightinternal Wyjustowanie do lewej, prawej lub rozciągnięcie. int a=-12; //ustaw flagę left oraz ustal szerokość cout << a << endl; //ustaw flagę right oraz ustal szerokość cout << a << endl; //ustaw flagę internal oraz ustal szerokość cout << a << endl;

  19. boolalpha Wartości zmiennych bool są wypisywane jako true / false. boola=true,b=false; cout << a << endl; cout << b << endl; //ustaw flagę boolalpha cout << a << endl; cout << b << endl; 1 0 true false

  20. dechexoct Wypisywanie i wprowadzanie liczb w innych systemach liczbowych. int a=20; cout << a << endl; //ustaw flagę hex i skasuj oct i dec cout << a << endl; //ustaw flagę oct i skasuj hex i dec cout << a << endl; 20 14 24

  21. showbase Decyduje czy wypisywać podstawę konwersji. int a=20; //ustwa flagę showbase cout << a << endl; //staw flagę hex i skasuj oct i dec cout << a << endl; //staw flagę oct i skasuj hex i dec cout << a << endl; 20 0x14 024

  22. showpos Decyduje czy wypisywać znak + przed liczbami dodatnimi. int a=20; cout << a << endl; //ustaw flagę showpos cout << a << endl; 20 +20

  23. uppercase Decyduje czy wypisywać duże litery zawarte w liczbach. double a=1e10; cout << a << endl; //ustaw flagę uppercase cout << a << endl; 1e+010 1E+010

  24. showpoint Decyduje czy wypisywać kropkę dziesiętną. double a=1.23,b=4; cout << a << endl; cout << b << endl; //ustaw flagę showpoint cout << a << endl; cout << b << endl; 1.23 4 1.23000 4.00000

  25. scientific, fixed Decyduje w jakiej notacji wypisywać liczby. double a=123.456; cout << a << endl; //ustaw flagę fixed cout << a << endl; //ustaw flagę scientific i skasuj flagę fixed cout << a << endl; 123.456 123.456000 1.234560e+002

  26. Sposoby zmiany formatowania Flagi można zmieniać za pomocą: • elementarnych funkcji składowych klasy ios, • funkcji składowych klasy ios, które nie zmieniają flag, ale zmieniają towarzyszące im parametry, • manipulatorów

  27. Elementarne funkcje składowe klasy ios Do zmian flag służą funkcje: fmtflagsflags() const; fmtflagsflags(fmtflags); fmtflagssetf(fmtflags); fmtflagssetf(fmtflags, fmtflags); fmtflagsunsetf(fmtflags); Typ fmtflags to inna nazwa typu int.

  28. Przykład 1 int a=20; cout << a << endl; cout.setf(ios::showpos); cout << a << endl; cout.unsetf(ios::showpos); cout << a << endl; 20 +20 20

  29. Przykład 2 double a=123; cout << a << endl; cout.setf(ios::showpoint | ios::fixed); cout << a << endl; 123 123.000000

  30. Przykład 3 int a=20; cout << a << endl; cout.setf(ios::hex,ios::basefield); cout << a << endl; 20 14

  31. Przykład 4 int a=20; cout << a << endl; ios::fmtflagsstare=cout.flags(); cout.setf(ios::hex,ios::basefield); cout << a << endl; cout.flags(stare); cout << a << endl; 20 14 20

  32. Funkcje składowe klasy ios, które nie zmieniają flag streamsizewidth() const; streamsizewidth(streamsize); streamsize precision() const; streamsize precision(streamsize); char fill() const; char fill(char); Typ streamsize to inna nazwa typu int.

  33. Przykład 1 double a=1.0/3.0; cout << a << endl; cout.precision(10); cout << a << endl;

  34. Przykład 2 int a=-12; cout.setf(ios::left,ios::adjustfield); cout.width(10); cout << a << endl; cout.setf(ios::right,ios::adjustfield); cout.width(10); cout << a << endl; cout.setf(ios::internal,ios::adjustfield); cout.width(10); cout << a << endl;

  35. Przykład 3 int a=-12; cout.fill('.'); cout.setf(ios::left,ios::adjustfield); cout.width(10); cout << a << endl;

  36. Manipulatory bezargumentowe • boolalpha – noboolalpha • hex – dec – oct • flush • endl • skipws – noskipws • showpoint – noshowpoint • showpos – noshowpos • showbase – noshowbase • uppercase – nouppercase • fixed – scientific • left – right - internal

  37. Przykład 14 int a=12; cout << oct << a << endl << showbase << a << endl << uppercase << hex << a << endl; 014 0XC

  38. Manipulatory parametryzowane • setw(int) • setfill(char) • setprecision(int) • setbase(int) • setiosflags(fmtflags) • resetiosflags(fmtflags)

  39. Przykład #include<iomanip> … double a=1.0/3.0; cout << a << endl << setprecision(10) << a << endl << setprecision(2) << a << endl;

  40. Przykład 20 int a=20; cout << a << endl << setiosflags(ios::showpos) << a << endl << setbase(8) << a << endl; +20 24

  41. Prezentacja udostępniona na licencji CreativeCommons: Uznanie autorstwa, Na tych samych warunkach 3.0. Pewne prawa zastrzeżone na rzecz autorów. Zezwala się na dowolne wykorzystywanie treści pod warunkiem wskazania autorów jako właścicieli praw do prezentacji oraz zachowania niniejszej informacji licencyjnej tak długo, jak tylko na utwory zależne będzie udzielana taka sama licencja. Tekst licencji dostępny jest na stronie: http://creativecommons.org/licenses/by-sa/3.0/deed.pl

More Related