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

Podobne dokumenty