Katedra Informatyki Stosowanej
Borland C++
Opracowanie mgr Gra
ż
yna G
ę
bal, WZiMK P
Ś
k
Ćwicz. 5 – Operacje na tablicach, pliki tekstowe
Funkcje operujące na plikach tekstowych (<stdio.h>)
FILE *fopen(const char *nazwa_pliku, const char tryb)
Funkcja otwiera plik o podanej nazwie i zwraca wskaźnik pliku lub NULL, jeśli próba otwarcia się nie
powiedzie. Argument tryb określa rodzaj dostępu do pliku:
“r”
otwiera plik tekstowy tylko do odczytu
“w”
tworzy nowy plik tekstowy do zapisu, jeśli plik już istnieje kasuje jego zawartość
“a”
otwiera istniejący plik tekstowy w trybie dopisywania
C++ i liczne kompilatory ANSI C umożliwiają otwarcie pliku do jednoczesnego odczytu i zapisu, co wskazują
tryby “r+”, “w+”, “a+”.
int fscanf(FILE *wsk_pliku,const char *format, ...)
int fprintf(FILE *wsk_pliku,const char *format, ...)
Działają analogicznie jak scanf i printf. Pierwszy parametr jest wskaźnikiem pliku.
int fclose(FILE *wsk_pliku)
Opróżnia i zwalnia przydzielony bufor, zamyka plik. Zwraca EOF w przypadku błędu, 0 gdy zakończy się
poprawnie.
FILE *in, *out; int x;
in=fopen(”plik_d”,”r”);
out=fopen(”plik_w”,”w”);
fscanf(in,”%d”,&x);
fprintf(out,”x=:%4d\n”,x);
fclose(in);
fclose(out);
Zad. 5.1
Otworzyć program zawierający rozwiązanie Zad. 3.1.
Zmodyfikować program, tak aby dane wczytywane były z pliku tekstowego znajdującego się w katalogu
dydaktycznym (plik można założyć w edytorze tekstowym lub skopiować z katalogu znajdującym się dysku
wspólnym). Program powinien sprawdzać czy operacja otwierania pliku zakończyła się powodzeniem. W
przypadku błędu należy wyświetlić komunikat Nie odnaleziono pliku z danymi i zakończyć działanie programu.
Zmienną plikową zadeklarować jako zmienną zewnętrzną.
Opracować brakujące w programie funkcje:
•
wyznaczyć sumę elementów dodatnich parzystych,
•
wyznaczyć iloczyn niezerowych elementów ciągu,
•
wyznaczyć element minimalny w ciągu oraz pozycję jego ostatniego wystąpienia,
•
przenieść element minimalny (jeśli się powtarza, to jego ostatnie wystąpienie) na początek ciągu , np.
2 56 8 0 -1 10 -1 90
-1 56 8 0 -1 10 2 90
wykorzystując funkcję zamien oraz funkcję min.
•
policzyć ile razy w ciągu występuje zadana liczba b oraz ile razy występuje liczba –b,
Pamiętać o wywołaniu opracowanych funkcji i wyprowadzeniu wyników na ekran.
Zad. 5.2
Zmodyfikować program, tak aby wszystkie wyniki były wyprowadzane do pliku. Zmienną plikową
zadeklarować jako zmienną zewnętrzną. Plik wynikowy umieścić w swoim katalogu roboczym.
Zad. 5.3.
Napisać program, który pobiera z pliku kolejne znaki do znaku końca pliku. Znaki są przepisywane do drugiego
pliku tak, że kolejne linie tekstu są w nowym pliku oddzielane pustym wierszem.
Katedra Informatyki Stosowanej
Borland C++
Opracowanie mgr Gra
ż
yna G
ę
bal, WZiMK P
Ś
k
Biblioteka iostream, obsługa wejścia/wyjścia
Język C++ oferuje obiektowo zorientowaną bibliotekę do obsługi operacji wejścia/wyjścia. Do programu należy
dołączyć plik nagłówkowy iostream.h, który udostępnia dwa obiekty:
cin - predefiniowany strumie
ń
wej
ś
cia
cout - predefiniowany strumie
ń
wyj
ś
cia
oraz dwa operatory:
>> - operator wyjmowania (ekstrakcji) informacji ze strumienia
<< - operator wstawiania (insercji) informacji do strumienia
Operator >> realizuje pobranie informacji wraz z jej interpretacją właściwą dla typu zmiennej. Analogicznie
operator << powoduje, że informacja wyświetlana na ekranie będzie sformatowana stosownie do typu zmiennej.
Istnieje możliwość formatowania wydruku:
int width(int) -
określa minimalną szerokość pola dla wyniku kolejnego(jednego)
wywołania cout,
int precision(int) -
określa dokładność wypisywania liczb zmiennoprzecinkowych; obowiązuje
do kolejnego wywołania tej funkcji.
Zad. 5.3
Uruchomić i przeanalizować poniższy program:
#include <iostream.h>
void main()
{ float a2,a1,a0,x;
cout <<"Podaj wspolczynniki wielomianu a2,a1,a0:\n" ;
cin >>a2 >>a1 >>a0;
cout <<"x=";
cin >>x;
cout <<"x=" <<x <<endl;
cout.precision(3);
cout <<"w(x)=" << a2*x*x+a1*x+a0;
return;
}
Zmodyfikować ten program, tak aby obliczał wartość wielomianu w przedziale <A,B> z krokiem H. Wydruk
powinien mieć postać:
w(tu wartość liczbowa x)=tu wyliczona wartość wielomianu
w(tu kolejna wartość liczbowa x)=tu kolejna wyliczona wartość wielomianu