• Nie Znaleziono Wyników

Informatyka II. INF & EIT.

N/A
N/A
Protected

Academic year: 2021

Share "Informatyka II. INF & EIT."

Copied!
2
0
0

Pełen tekst

(1)

Informatyka II. INF & EIT. Ćwiczenie 9.

Pliki tekstowe

Zagadnienia: Standardowe wejście i wyjście w trybie znakowym i binarnym. Zapis i odczyt danych znakowych, łańcuchowych i liczbowych w postaci tekstowej. Operacje na plikach tekstowych.

1. Dana jest tablica char dana[100] = ”To jest linia 1\n To jest linia 2\n To jest linia 3\n”.

Wykorzystując funkcję fputc zapisać zawartość tablicy do pliku:

a) o nazwie dane_tt.dat w trybie otwarcia tekstowego (wt);

b) o nazwie dane_tb.dat w trybie otwarcia binarnego (wb).

Wykorzystując funkcję fgetc wczytać do bufora unsigned char buf[100] dane zapisane w pli- ku dane_tt.dat w trybie otwarcia tekstowego (rt) oraz w trybie otwarcia binarnego (rb).

Dla każdego z trybów wyprowadzić na ekran zawartości buforów oraz liczby wczytanych znaków. Powtórzyć operacje dla pliku dane_tb.dat oraz trybów (rt) i (rb). Wyciągnąć wnioski dotyczące zapisu i odczytu danych w trybie tekstowym i binarnym.

2. Opracować następujące funkcje obsługi plików znakowych:

a) zapisującą znaki wprowadzane z klawiatury do pliku o ustalonej nazwie w trybie otwar- cia binarnego; znaki wprowadzać za pomocą funkcji fputc; wprowadzanie znaków zakończyć po napotkaniu ESC; prototyp: PiszZn(FILE *f, char *nazwa);

b) odczytującą zawartość pliku znak po znaku w trybie otwarcia binarnego i wyprowadzają- cą znaki na ekran; wykorzystać funkcję fgetc; prototyp: CzytajZn(FILE *f, char *nazwa);

c) wyznaczającą długość pliku w bajtach; wykorzystać funkcje fseek i ftell; prototyp:

long IleBP(FILE *f);

d) dopisującą znak na zadanej pozycji w pliku (znak powinien być wstawiony pomiędzy istniejące znaki); prototyp: Dopisz(FILE *f; char *nazwa, long pozycja, int znak).

3. Wykorzystując funkcję fprintf zapisać do pliku dane typu int, char, float oraz daną typu łańcuchowego w wybranym formacie (np. %5d%3c%8.2f%10s; dla danych 23, 'A', 234.57, "Ala_Ola" w pliku fizycznym zapisane zostaną ∇∇∇23∇∇A∇∇234.57∇∇∇

Ala_Ola). Odczytać wprowadzone dane za pomocą funkcji fscanf. Należy pamiętać, że pod- czas odczytu, dla wszystkich formatów oprócz %c, przed zinterpretowaniem są pomijane spacje. W celu pominięcia zbędnych spacji można wykorzystać format %*[∇]%c.

4. Dana jest struktura typu struct tosoba { char naz[20]; unsigned wiek; long id; }. Opracować następujące funkcje:

a) zapisującą do pliku znakowego łańcuch ”-- ... --\n” złożony z 30 znaków ’-’ i jednego znaku ’\n’, a następnie pola zmiennej strukturalnej tosoba w wybranym formacie (np. dla fprintf: nazwisko - %20s\n, wiek - %6u\n, identyfikator - %10ld\n);

b) odczytującą z pliku łańcuch złożony z 30 znaków ’-’ i jednego znaku ’\n’, a następnie po- la struktury typu tosoba rozdzielone znakami przejścia do nowej linii (pominięcie sekwencji ”-- ...--\n” o dowolnej długości można zrealizować za pomocą formatu

%*[-\n], który oznacza, że znaki ’-’ oraz ’\n’ są pomijane; czytanie rozpocznie się jeśli pojawi się znak różny od [-\n]).

W programie głównym zapisać do pliku N struktur (N – stała), a następnie odczytać dane.

(2)

5. W pliku tekstowym p1.txt znajduje się K liczb całkowitych rozdzielonych spacjami i posor- towanych rosnąco. W pliku tekstowym p2.txt znajduje się N liczb całkowitych rozdzielonych spacjami i posortowanych rosnąco. Opracować funkcję, która realizuje algorytm sortowania przez łączenie:

a) otwiera pliki p1.dat i p2.dat;

b) odczytuje pierwszą liczbę z pliku p1 i pliku p2;

c) porównuje odczytane liczby i mniejszą z nich zapisuje do pliku p3.dat;

d) powtarza operacje odczytu i porównywania danych, aż do wyczerpania danych w obu plikach.

Na przykład dla plików p1 i p2, zawierających elementy 2, 4, 5, 7 (plik p1) oraz 3, 6, 9 (plik p2), przedstawiona procedura tworzy plik p3, który zawiera elementy 2, 3, 4, 5, 6, 7, 9.

6. Dany jest plik tekstowy zawierający liczby rzeczywiste typu double zapisane w formacie z dwoma miejscami po przecinku i rozdzielone spacjami. Napisać program, który:

• zliczy liczbę danych w pliku, czytając dane z pliku aż do napotkania końca pliku lub do pierwszego nieudanego odczytu;

• przewinie plik na początek;

• dokona dynamicznej alokacji tablicy typu double, która pomieści wszystkie dane z pliku;

• wczyta dane z pliku do utworzonej tablicy;

• zamknie plik;

• wyprowadzi dane z tablicy na ekran.

Przed zakończeniem programu zwolnić zaalokowaną pamięć.

Cytaty

Powiązane dokumenty

Przyjmując, że zmienna dzien jest selektorem instrukcji wyboru switch wyprowadzić pełną nazwę dnia tygodnia.. Opracować program, który wyprowadza na ekran kod

a) funkcji alokacji pamięci malloc, b) operatora new. Zainicjować tablicę losowymi liczbami całkowitymi należącymi do zbioru {-1, 0, 1}. Wyprowadzić zawartość tablicy na

Opracować funkcję, która wyznacza wszystkie liczby pierwsze z przedziału [2,N] w oparciu o metodę „sita” (opis: wpisać wszystkie liczby z przedziału [2,N] do tablicy t[N+1],

Napisać program, który losuje k cyfr liczby binarnej do tablicy unsigned char dane[N], gdzie 1<= k <= N, a następnie oblicza wartość dziesiętną liczby.. Zadanie zrealizować z

przydzielić dynamicznie pamięć zmiennym typu char, int, long, float, double oraz zapamię- tać ich adresy w odpowiednich wskaźnikach. W przypadku, gdy alokacja pamięci powiedzie

a) tworzącą dynamiczną tablicę 2-wymiarową typu int A[nw][nk] o liczbie wierszy i liczbie kolumn wczytywanych do zmiennych int nw, nk; funkcja typu int** zwraca adres po-

Opracować funkcje umożliwiające wczytanie danych z klawiatury lub wstawienie wartości losowych do zmiennej strukturalnej typu tosoba (deklaracja typu tosoba zobacz zadanie 1). Dane

c) usunięcie elementu o podanej wartości klucza; funkcja powinna odnaleźć element, zmo- dyfikować strukturę drzewa, a następnie zwolnić pamięć przydzieloną elementowi (jeżeli