z5, Politechnika Wrocławska, PWR - W10- Automatyka i Robotyka, Sem4, Infa 3 C++
[ Pobierz całość w formacie PDF ]
Informatyka 3 – Laboratorium 5.
Strumienie / Operacje na plikach
Informatyka 3 / Projektowanie Obiektowe
Politechnika Wrocławska MVLAB
Autorzy: mgr inż. Mariusz Mrzygłód
mgr inż. Wojciech Cieszyński
Informacje ogólne
Programowanie obiektowe, język:
C++;
Åšrodowisko pracy:
Microsoft Visual Studio 2005;
Środowisko na potrzeby pracy poza zajęciami można pobrać:
·
z kont studenckich MSDN AA dla Wydz. Mechanicznego PWr,
·
w darmowej wersji udostępnianej przez producenta: Visual Studio 2005 Express.
Literatura:
J. Liberty, "C++ dla każdego", Helion 2002,
·
B. Stroustrup, "Język C++", WNT 2002,
·
·
J.Grębosz, "Symfonia C++", Editions 2000 rok 2006,
B. Eckel, "Thinking in C++ Edycja polska", Helion 2002,
·
·
1
 Informatyka 3 – Laboratorium 5.
Strumień wejściowe/wyjściowe.
Strumienie można sobie wyobrazić jako dane płynące od źródła do celu. Zarówno cele, jak i źródła
strumienia mogą być różne - może to być ekran, klawiatura, plik lub jakieś inne zewnętrzne
urządzenie. W bibliotece standardowej języka C++ wyróżniamy trzy typy strumieni: strumienie
wejściowe (wczytują dane), strumienie wyjściowe (wypisują dane) oraz strumienie uniwersalne,
umożliwiające zarówno wczytywanie, jak i wypisywanie danych.
Strumienie są obiektami, tak więc posiadają pewne metody za pomocą których możemy zmieniać
stan strumienia. Dla każdych typów prostych zdefiniowane są operatory >> oraz <<, które służą do
odczytu i zapisu danych.
Strumieniami posługujemy się wówczas, gdy chcemy przeprowadzić jakiekolwiek operacje
wejścia/wyjścia. Aby ich użyć musimy dołączyć bibliotekę
<iostream>
.
Strumienie w języku C++ są ogromnym ułatwieniem. Tak naprawdę wszystkie dane, które strumień
wypisuje na ekran muszą zostać sformatowane . Jeśli wypisujemy liczbę
float
, to liczba zostaje
wypisana jako liczba
float
. Taka sama sytuacja jest przy pobieraniu danych.
Wypisywanie i pobieranie danych w języku C wiąże się z określaniem, w jaki sposób ma zostać
wypisana lub pobrana dana zmienna - czy mamy wypisać zmienną jako liczbę całkowitą, znak czy
może napis. Sprawia to, że to programista musi dbać o to, czy dane zostaną wypisane poprawnie –
korzystając z biblioteki standardowej języka C++ przy zwykłym wypisywaniu nie musimy się tym
martwić.
Dla przykładu, aby wypisać liczbę typu
float
, w C++ piszemy:
cout << zmienna;
Z kolei w języku C musieliśmy dołączyć bibliotekę
stdio.h
i zrobić to w następujący sposób:
printf(
"%f"
,zmienna);
Obsługa strumienia wyjściowego.
Przykładem strumienia wyjściowego jest strumień
COUT
, który pozwala na drukowanie informacji na
konsoli (strumień ten w przypadku załączenia biblioteki standardowej do programu zostaje
automatycznie otwarty). Strumienie możemy formatować na różne sposoby, co daje nam możliwość
np. wyświetlenia informacji w pożądany sposób. Są one obiektami, tak więc posiadają pewne
metody, które możemy zmieniać.
2
 Informatyka 3 – Laboratorium 5.
width() / fill() / precision()
Standardowe metody strumieni pozwalają nam określić formatowanie kodu za pomocą parametrów,
gdyż niektóre formatowania wymagają ich określenia przez użytkownika.
Metoda
width()
określa na ilu polach wypisać liczbę, przydatne przy tworzeniu tabel, kolumn itp.
Ustawienie szerokości nie odbywa się raz na zawsze. Dotyczy tylko najbliższej operacji we/wy. Potem
automatycznie zaczyna obowiązywać domniemanie, czyli 0.
Utwórz tablicę czterech liczb typu
long
, a następnie wypisz je w postaci tabeli.
long
kwota[]={120, 1650000, 5200, 190000123};
for
(
int
i=0;i<4;i++)
{
cout<<
"Rachunek nr "
;
cout.width(2);
cout<<i<<
" opiewa na sume :"
;
cout.width(10);
cout<<kwota[i]<<
" DM\n"
;
}
Fill()
czyli wypełnianie. Jeśli chcemy liczbę 2 cyfrową zapisać na 7 miejscach automatycznie zostanie
ona uzupełniona spacjami, dzięki metodzie
fill()
możemy zmienić wypełnianie na
*
lub inny symbol.
W przeciwieństwie do
width()
,
fill()
daje efekt trwały, to znaczy, że dane wypełnienie będzie
obowiązywać do momentu aż go nie zmienimy.
Na podstawie utworzonej wcześniej tabeli wyświetl liczby z wypełnieniem ‘_’.
long
kwota[]={120, 1650000, 5200, 190000123};
for
(
int
i=0;i<4;i++)
{
cout<<
"Rachunek nr "
;
cout.width(2);
cout.fill(
'*'
);
cout<<i<<
" opiewa na sume :"
;
cout.width(10);
cout.fill(
'_'
);
cout<<kwota[i]<<
" DM\n"
;
}
Metoda
precision()
pozwala określić dokładność wypisywanych liczb zmiennoprzecinkowych.
Domniemanie liczby są wypisywane z dokładnością do 6 miejsc po przecinku, chyba że są to
nieznaczÄ…ce zera.
3
 Informatyka 3 – Laboratorium 5.
Na podstawie utworzonej wcześniej tabeli wyświetl liczby z precyzją 15 miejsc po przecinku.
double
kwota2[]={1.123456789123, 2.12345, 3.1};
cout<<kwota2[0]<<
" DM\n"
;
//bez formatowania polazuje tylko 6 miejsc
cout.precision(15);
for
(
int
i=0;i<3;i++)
{
cout<<
"Rachunek nr "
;
cout<<i<<
" opiewa na sume :"
;
cout<<kwota2[i]<<
" DM\n"
;
}
Aby sprawdzić jakie wartości parametrów są ustawione trzeba postąpić następująco:
cout<<(cout.width());
Zadanie.
Sprawdź aktualne wartości precyzji i wypełnienia.
ShowPos / UpperCase / ShowPoint / Scientific / Fixed
Strumienie posiadają również specyficzne metody wywoływane przez tzw. flagi, które nie posiadają
argumentów. Załączenie lub wyłączenie flagi definiuje czy dana metoda strumienia ma być
wykonana. Domyślnie flagi te są wyłączone.
Do załączenia flagi używamy metody:
cout.setf(ios:: showpos);
Do wyłączenia flagi używamy metody:
cout.unsetf(ios:: showpos);
ios
jest klasą, która przechowuje flagi obiektu
cout
.
Wypisanie na ekranie zmiennej typu
integer
wraz ze znakiem realizujemy w implementacji:
int
a=59;
cout.setf(ios::showpos);
//ustawienie flagi
cout<<a<<endl;
Zadanie.
Wyświetl na ekranie liczby i znaki korzystając z flag UpperCase / ShowPoint / Scientific / Fixed.
4
 Informatyka 3 – Laboratorium 5.
Manipulatory strumieni.
Manipulatory to specjalne wartości, które można wstawić do strumienia albo z niego wyjąć, po to aby
wywołać zamierzony efekt, polegający na zmianie sposobu formatowania.
Manipulatory bezargumentowe.
Przykładem często używanego manipulatora jest
endl
. Powoduje on przejście do nowej linii.
cout<<i<<endl;
Wypisz na ekranie liczbę 35 w zapisie szesnastkowym, ósemkowym i dziesiętnym. Wykorzystaj
manipulatory
hex
,
oct
i
dec
.
int
i=35;
cout<<dec<<i<<endl;
cout<<hex<<i<<endl;
cout<<oct<<i<<endl;
Right / Left / Internal
Utwórz nowy projekt i wypisz na ekranie zmienną typu
integer
za pomocą strumieni z różnymi
rodzajami justowania.
int
l=-3;
cout<<l<<endl;
cout.width(10);
//ustalenie szeroko
Åš
ci pola drukowania
cout<<left<<l<<endl;
//wyrównanie do lewej
cout.width(10);
cout<<right<<l<<endl;
//wyrównanie do prawej
cout.width(10);
cout<<
internal
<<l<<endl;
//wyrównanie do szeroko
Åš
ci pola drukowania
Manipulatory parametryczne.
Aby móc skorzystać z manipulatorów parametrycznych należy umieścić w programie dyrektywę
#include
<iomanip>
Wypisz dowolne liczby z użyciem manipulatorów
setw()
,
setfill()
,
setprecision()
,
setiosflag()
i
resetiosflag()
.
setw(int)
– działa analogicznie jak metoda
width()
.
int
m =437;
cout<<setw(3)<<m<<setw(6)<<m<<setw(11)<<m<<endl;
5
Â
[ Pobierz całość w formacie PDF ]