OPERACJE WEJŚCIA-WYJŚCIA W JĘZYKU C++. STEROWANIE
Transkrypt
OPERACJE WEJŚCIA-WYJŚCIA W JĘZYKU C++. STEROWANIE
Politechnika Białostocka Wydział Elektryczny Katedra Elektrotechniki Teoretycznej i Metrologii Spis treści 1. Opis stanowiska ............................................................................................. 3 1.1. Stosowana aparatura ............................................................................... 3 Instrukcja do pracowni specjalistycznej z przedmiotu 1.2. Oprogramowanie ...................................................................................... 3 2. Wiadomości teoretyczne................................................................................ 3 Informatyka 2 2.1. Operacje wejścia-wyjścia w języku C++ ................................................... 3 Kod przedmiotu: EZ1C300 014 2.2. Struktura programu w języku C++ ............................................................ 7 (studia niestacjonarne) 2.3. Formatowanie wyjścia .............................................................................. 8 3. Przebieg ćwiczenia ....................................................................................... 13 4. Literatura ....................................................................................................... 15 5. Zagadnienia na zaliczenie ............................................................................ 15 OPERACJE WEJŚCIA-WYJŚCIA W JĘZYKU C++. STEROWANIE FORMATEM, MANIPULATORY 6. Wymagania BHP ........................................................................................... 15 Numer ćwiczenia INF24Z _____________ Materiały dydaktyczne przeznaczone dla studentów Wydziału Elektrycznego PB. Autor: dr inż. Jarosław Forenc Białystok 2016 © Wydział Elektryczny, Politechnika Białostocka, 2016 (wersja 3.1) Wszelkie prawa zastrzeżone. Żadna część tej publikacji nie może być kopiowana i odtwarzana w jakiejkolwiek formie i przy użyciu jakichkolwiek środków bez zgody posiadacza praw autorskich. Informatyka 2 2 z 16 Instrukcja INF24Z - clog - związany ze standardowym urządzeniem, na które chce się wypisywać komunikaty o błędach (standardowo ekran) - strumień buforowany. 1. Opis stanowiska Za wysyłanie i odbieranie informacji ze strumienia odpowiadają operatory << i >>: 1.1. Stosowana aparatura Podczas zajęć wykorzystywany jest komputer klasy PC z systemem operacyjnym Microsoft Windows (XP/Vista/7). 1.2. Oprogramowanie Na komputerach zainstalowane jest środowisko programistyczne Microsoft Visual Studio 2008 Standard Edition lub Microsoft Visual Studio 2008 Express Edition zawierające kompilator Microsoft Visual C++ 2008. - << - operator odpowiadający za wysyłanie informacji do strumienia, nazywany jest często operatorem wstawiania (ang. insert lub put to); - >> - operator odpowiadający za wczytywanie informacji, nazywany jest operatorem ekstrakcji (ang. extract operator lub get from). Zakładamy, że w programie znajdują się następujące deklaracje zmiennych (wraz z inicjalizacją): int int float float char 2. Wiadomości teoretyczne 2.1. Operacje wejścia-wyjścia w języku C++ Operacje wejścia-wyjścia nie są częścią języka C++. Ich wykonywanie umożliwiają biblioteki standardowo dołączane przez producenta kompilatora. Wprowadzanie i wyprowadzanie informacji w języku C++ zostało zrealizowane za pomocą strumieni. Wszystkie strumienie są obiektami odpowiednich klas. Wykorzystanie w programie strumieni wymaga dołączenia pliku nagłówkowego iostream: x = 10 y = 25; z1 = 1.1234567; z2 = 11.1234567; txt[10] = "Napis"; - wyświetlenie wartości zmiennej x typu int (pomiędzy nazwą strumienia cout i operatorem << oraz pomiędzy operatorem << i nazwą zmiennej x może nie być spacji lub może znajdować się tam ich dowolna liczba): cout << x; 10 #include <iostream> - wyświetlenie wartości zmiennej x typu int poprzedzonej tekstem "x = ": W języku C++ dostępne są cztery predefiniowane strumienie: - cout - związany ze standardowym urządzeniem wyjścia (ekran), nazwa strumienia pochodzi od ang. C-onsole OUT-put; cout << "x = " << x; - cin - związany ze standardowym urządzeniem wejścia (klawiatura), nazwa strumienia pochodzi od ang. C-onsole IN-put; x = 10 - cerr - związany ze standardowym urządzeniem, na które chce się wypisywać komunikaty o błędach (standardowo ekran) - strumień niebuforowany; Informatyka 2 3 z 16 Instrukcja INF24Z - wyświetlenie wartości dwóch zmiennych, x i y, typu int (pomiędzy liczbami nie będzie żadnego odstępu, gdyż nie został on wstawiony do strumienia): Informatyka 2 4 z 16 Instrukcja INF24Z Ogólne zasady dotyczące wyświetlania danych przy zastosowaniu strumienia cout i operatora << są następujące: cout << x << y; - liczby całkowite wyświetlane są w systemie dziesiętnym; 1025 - zmienne typów char, unsigned char wyświetlane są jako pojedyncze znaki; - wyświetlenie wartości dwóch zmiennych, x i y, typu int oddzielonych znakiem spacji: - liczby zmiennoprzecinkowe (float, double) wyświetlane są z dokładnością do 6 cyfr (część całkowita i ułamkowa, bez zbędnych zer); - wskaźniki wyświetlane są w systemie szesnastkowym; cout << x << " " << y; - zmienne typów char *, unsigned char * wyświetlane są jako łańcuchy znaków. 10 25 Zakładamy, że w programie znajdują się następujące deklaracje zmiennych: - wyświetlenie wartości dwóch zmiennych, z1 i z2, typu float (domyślnie wyświetlanych jest sześć pierwszych znaczących cyfr): int x; float z; cout << z1 << " " << z2; - wczytanie zmiennej x typu int: 1.12346 11.2346 cin >> x; - wyświetlenie łańcucha znaków: - wczytanie zmiennej x typu int i zmiennej z typu float (przy wprowadzaniu wartości zmiennych, użytkownik może oddzielić je od siebie dowolną liczbą białych znaków, do których należą: spacja, tabulacja i enter): cout << txt; Napis cin >> x >> z; - wyświetlenie wartości zmiennych x, y i txt w oddzielnych wierszach (za pierwszym razem do przejścia do nowego wiersza zastosowano sekwencję \n, zaś za drugim - manipulator endl): Ogólne zasady dotyczące wczytywania danych przy zastosowaniu strumienia cin i operatora >> są następujące: - białe znaki (spacja, tabulacja, enter) są ignorowane; cout << x << "\n" << y << endl << txt; - wczytywanie tekstów jest kończone po napotkaniu pierwszego białego znaku; 10 25 Napis Informatyka 2 - liczby wczytywane są w systemie dziesiętnym; - nie można umieszczać spacji pomiędzy znakiem liczby a jej wartością; 5 z 16 Instrukcja INF24Z Informatyka 2 6 z 16 Instrukcja INF24Z - wczytywanie liczby całkowitej jest kończone, gdy kolejny znak nie jest cyfrą; - w liczbach zmiennoprzecinkowych nie może występować spacja w środku. 2.2. Struktura programu w języku C++ Program w języku C++ ma taką samą strukturę jak w języku C. W programie można stosować wszystkie funkcje znane z języka C (także te, które dotyczącą operacji wejścia-wyjścia). Pliki nagłówkowe mają swoje zoptymalizowane wersje, np. zamiast math.h, można dołączyć plik cmath, zamiast time.h - ctime, zamiast string.h - cstring. 2.3. Formatowanie wyjścia Domyślny sposób wyświetlania wartości zmiennych można zmodyfikować stosując: Najprostszy program w języku C++. #include <iostream> - funkcje setf i unsetf z klasy ios ustawiające odpowiednie flagi; int main() { std::cout << "Witaj swiecie!" << std::endl; } - funkcje z klasy ios zmieniające towarzyszące im parametry, np. szerokość, precyzję; - manipulatory (modyfikatory). Wykonanie programu rozpoczyna się od funkcji main(). W funkcji tej znajduje się instrukcja wyświetlająca na ekranie tekst "Witaj swiecie". Tekst ten jest wstawiany do strumienia cout. Na koniec do strumienia wstawiane jest przejście do nowego wiersza (endl). W języku C++ nie jest wymagane umieszczanie na końcu programu instrukcji return 0;. Przed nazwami identyfikatorów cout i endl umieszczony jest tekst std::. Oznacza on, że identyfikatory te pochodzą z biblioteki standardowej (dokładniej z tzw. przestrzeni nazw std). W celu uniknięcia ciągłego pisania std:: przed nazwami identyfikatorów, umieszcza się w programie dyrektywę using namespace std;. Powyższy program przyjmie zatem postać: Manipulatory są to specjalne wartości, które można wstawić do strumienia. Powodują one zmianę sposobu formatowania wyświetlanych danych. Większość manipulatorów działa ciągle, tzn. na wszystkich kolejnych danych wstawianych do strumienia. Poniżej opisano najważniejsze manipulatory oraz podano przykłady ich zastosowania. hex, dec, oct - określają system liczbowy, w którym są wyświetlane / wczytywane liczby: hex - szesnastkowy, dec - dziesiętny, oct - ósemkowy; - działają tylko dla liczb całkowitych, - domyślnie działa manipulator dec; Najprostszy program w języku C++. int x = 100; #include <iostream> using namespace std; cout << x << " " << hex << x << " "; cout << oct << x << endl; cout << x << endl; int main() { cout << "Witaj swiecie!" << endl; } Informatyka 2 7 z 16 100 64 144 144 Instrukcja INF24Z Informatyka 2 8 z 16 Instrukcja INF24Z showpoint, noshowpoint int x = 10; - manipulator showpoint włącza, zaś noshowpoint wyłącza pokazywanie nieznaczących zer i kropki dziesiętnej przy wyświetlaniu liczb zmiennoprzecinkowych; - domyślnie działa manipulator showpoint; cout << dec << x << " " << showbase << x << noshowbase; cout << hex << x << " " << showbase << x << noshowbase; cout << oct << x << " " << showbase << x; 10 10 a 0xa 12 012 float x = 10; cout << showpoint << x << " " << noshowpoint << x; fixed, scientific 10.0000 10 - fixed włącza notację dziesiętną zapisu liczb zmiennoprzecinkowych, zaś scientific - notację wykładniczą (naukową); showpos, noshowpos - manipulator showpos włącza, zaś noshowpos wyłącza pokazywanie znaku liczby dodatniej; - domyślnie działa manipulator noshowpos; int x = 10; float y = 12.34567; - domyślnie liczby zmiennoprzecinkowe wyświetlane są z dokładnością do 6 cyfr (część całkowita i ułamkowa); włączenie manipulatora fixed powoduje, że wartość 6 dotyczy liczby cyfr tylko części ułamkowej; włączenie manipulatora scientific powoduje, że wartość 6 dotyczy tylko liczby cyfr części ułamkowej mantysy; do zmiany dokładności służy manipulator setprecision() opisany w dalszej części instrukcji; float x = 100.123456; cout << showpos << x << " " << noshowpos << x << endl; cout << showpos << y << " " << noshowpos << y << endl; +10 10 +12.3457 12.3457 cout << x << endl; cout << fixed << x << endl; cout << scientific << x << endl; 100.123 100.123459 1.001235e+002 showbase, noshowbase - manipulator showbase włącza, zaś noshowbase wyłącza wyświetlanie 0x na początku liczby w systemie szesnastkowym i 0 na początku liczby w systemie ósemkowym; 9 z 16 - wstawia do strumienia znak przejścia do nowego wiersza; - endl jest równoważne wstawieniu do strumienia \n oraz flush; - domyślnie działa manipulator noshowbase; Informatyka 2 endl Instrukcja INF24Z Informatyka 2 10 z 16 Instrukcja INF24Z flush setprecision(int n) - opróżnia bufor wyjściowy; - manipulator setprecision() ustawia na n dokładność wyświetlania liczb zmiennoprzecinkowych; - dla „trybu krótkiego” (domyślnego) jest to łączna ilość cyfr przed i po kropce dziesiętnej; setw(int n) - manipulator setw() ustawia na n szerokość wyświetlania liczb lub wczytywania tekstów; - dla trybu fixed jest to ilość cyfr po kropce dziesiętnej; - ustawiona wartość dotyczy tylko najbliższej operacji wejścia-wyjścia; - użycie manipulatora wymaga dołączenia pliku nagłówkowego iomanip; - manipulator setprecision() działa ciągle, jego użycie wymaga dołączenia pliku nagłówkowego iomanip; int x = 12345; float x = 12.123456; cout << x << endl; cout << setw(10) << x << endl << x << endl; cout << setprecision(5) << x << endl; cout << fixed << x << endl; cout << scientific << x << endl; 12345 - dla trybu scientific jest to dokładność mantysy (ale nie wykładnika); 12.123 12.12346 1.21235e+001 12345 12345 setfill(char n) - manipulator setfill() ustawia znak będący wypełnieniem (domyślnie - spacja); - manipulator setfill() działa ciągle, jego użycie wymaga dołączenia pliku nagłówkowego iomanip; W poniższym programie zapisywane są do macierzy wygenerowane pseudolosowo liczby zmiennoprzecinkowe typu float z zakresu (-50, 50). Następnie elementy macierzy wyświetlane są z podziałem na wiersze i kolumny oraz z dokładnością do trzech cyfr po kropce dziesiętnej. Zapisanie liczb zmiennoprzecinkowych do macierzy i wyświetlenie jej elementów z podziałem na wiersze i kolumny. int x = 12345; cout << setfill('*'); cout << setw(10) << x << endl; cout << setw(10) << x << endl; #include <iostream> #include <iomanip> #include <ctime> using namespace std; *****12345 *****12345 Informatyka 2 #define N 4 #define M 5 11 z 16 Instrukcja INF24Z Informatyka 2 12 z 16 Instrukcja INF24Z ******************************** * Jan Kowalski * * e-mail: [email protected] * * tel. 123-456-789 * ******************************** int main() { float T[N][M]; int i, j; srand((unsigned int)time(NULL)); for (i=0; i<N; i++) for (j=0; j<M; j++) T[i][j] = 100*(float)rand()/RAND_MAX - 50; cout << fixed << setprecision(3); for (i=0; i<N; i++) { for (j=0; j<M; j++) cout << setw(10) << T[i][j]; cout << endl; } Przykładowy wynik działania programu: Podaj kwote w PLN: 100 } Manipulatory fixed i seprecision() działają ciągle, więc wystarczy tylko jednokrotne ich użycie przed pętlą wyświetlającą elementy macierzy. Natomiast manipulator setw() dotyczy tylko najbliższej operacji wejścia-wyjścia, zatem musi znajdować się w pętli for. Przykładowy wynik działania powyższego programu: 6.618 32.482 49.017 -24.276 -27.541 -45.065 46.915 6.545 -35.147 29.177 36.261 1.527 11.235 -42.822 13.588 45.004 2. Napisz program, w którym użytkownik wczytuje z klawiatury kwotę w złotych (PLN). Następnie program wyświetla informację, ile za tę kwotę można kupić innych walut (EUR, USD, GBP, CHF, CAD, DKK, JPY). Poszukaj w Internecie kursów kantorowych. Wyniki przedstaw w postaci tabeli. Przyjmij, że część całkowita wyświetlanych liczb nie będzie zawierać więcej niż 7 cyfr. Zadbaj o odpowiednie wyrównanie wyświetlanych liczb. Zastosuj odpowiednie strumienie i manipulatory. -28.539 44.375 12.038 6.990 |-------------|----------|------------| | Kraj | Waluta | Kwota | |-------------|----------|------------| | EUGiW | EUR | x.xx | | USA | USD | x.xx | | W. Brytania | GBP | x.xx | | Szwajcaria | CHF | x.xx | | Kanada | CAD | x.xx | | Dania | DKK | x.xx | | Japonia | JPY | x.xx | |-------------|----------|------------| 3. Dana jest następująca deklaracja i inicjalizacja zmiennych: int a = 11, b = -22, c = +33; Wyświetl wartości zmiennych zgodnie z poniższym wzorem: 3. Przebieg ćwiczenia @@+33@@-22@@@11 Na pracowni specjalistycznej należy wykonać zadania wskazane przez prowadzącego zajęcia. W różnych grupach mogą być wykonywane inne zadania. Zastosuj odpowiednie manipulatory. Nie wyświetlaj żadnych znaków ani łańcuchów znaków. 1. Napisz program wyświetlający na ekranie wizytówkę o podanej formie. Wpisz w wizytówce swoje dane. Zastosuj odpowiednie strumienie i operatory. 4. Napisz program wyświetlający na ekranie tabliczkę mnożenia dla liczb od 1 do wartości wprowadzonej przez użytkownika z klawiatury. Zastosuj odpowiednie strumienie i manipulatory. Informatyka 2 Informatyka 2 13 z 16 Instrukcja INF24Z 14 z 16 Instrukcja INF24Z W trakcie zajęć laboratoryjnych należy przestrzegać następujących zasad. 4. Literatura [1] Grębosz J.: Symfonia C++ standard: programowanie w języku C++ orientowane obiektowo. Tom 1 i 2. Wydawnictwo „Edition 2000”, Kraków, 2008. - Sprawdzić, czy urządzenia dostępne na stanowisku laboratoryjnym są w stanie kompletnym, nie wskazującym na fizyczne uszkodzenie. [2] Stroustrup B.: Programowanie. Teoria i praktyka z wykorzystaniem C++. Wydanie II poprawione. Helion, Gliwice, 2013. - Jeżeli istnieje taka możliwość, należy dostosować warunki stanowiska do własnych potrzeb, ze względu na ergonomię. Monitor komputera ustawić w sposób zapewniający stałą i wygodną obserwację dla wszystkich członków zespołu. [3] Eckel B.: Thinking in C++. Edycja polska. Helion, Gliwice, 2002. - Sprawdzić prawidłowość połączeń urządzeń. [4] Prata S.: Język C++. Szkoła programowania. Wydanie VI. Helion, Gliwice, 2012. - Załączenie komputera może nastąpić po wyrażeniu zgody przez prowadzącego. [5] Stroustrup B.: Język C++. Kompendium wiedzy. Helion, Gliwice, 2014. - W trakcie pracy z komputerem zabronione jest spożywanie posiłków i picie napojów. [6] Wileczek R.: Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows. Helion, Gliwice, 2009. [7] http://www.cplusplus.com/reference/ - C++ Reference - Zabronione jest dokonywanie jakichkolwiek przełączeń oraz wymiana elementów składowych stanowiska. 5. Zagadnienia na zaliczenie 1. Opisz predefiniowane strumienie w języku C++. 2. Podaj ogólne zasady dotyczące wyświetlania danych przy zastosowaniu strumienia cout i operatora << oraz wczytywania danych przy wykorzystaniu strumienia cin i operatora >>. 3. Scharakteryzuj manipulatory stosowane do zmiany sposobu formatowania wyświetlanych danych. - Zabroniona jest zmiana konfiguracji komputera, w tym systemu operacyjnego i programów użytkowych, która nie wynika z programu zajęć i nie jest wykonywana w porozumieniu z prowadzącym zajęcia. - W przypadku zaniku napięcia zasilającego należy niezwłocznie wyłączyć wszystkie urządzenia. - Stwierdzone wszelkie braki w wyposażeniu stanowiska oraz nieprawidłowości w funkcjonowaniu sprzętu należy przekazywać prowadzącemu zajęcia. - Zabrania się samodzielnego włączania, manipulowania i korzystania z urządzeń nie należących do danego ćwiczenia. 6. Wymagania BHP Warunkiem przystąpienia do praktycznej realizacji ćwiczenia jest zapoznanie się z instrukcją BHP i instrukcją przeciw pożarową oraz przestrzeganie zasad w nich zawartych. Informatyka 2 - W przypadku zakończenia pracy należy zakończyć sesję przez wydanie polecenia wylogowania. Zamknięcie systemu operacyjnego może się odbywać tylko na wyraźne polecenie prowadzącego. 15 z 16 Instrukcja INF24Z - W przypadku wystąpienia porażenia prądem elektrycznym należy niezwłocznie wyłączyć zasilanie stanowiska. Przed odłączeniem napięcia nie dotykać porażonego. Informatyka 2 16 z 16 Instrukcja INF24Z