INFORMATYKA, ZAJĘCIA WYRÓWNAWCZE C/C++ (Zajęcia 10)
Autor: dr inż. Dorota Duda
1. Zadanie powtórzeniowe – zapis / odczyt pliku tekstowego / binarnego, przetwarzanie tablicy struktur
Zadnie 1
W pliku tekstowym in.txt znajdują się napisy (nie więcej niż X linii), postaci:
Imię Nazwisko RokUrodzenia
Imię oraz nazwisko to ciągi o maksymalnej długości MAX. Utworzyć tablicę struktur, zawierających informacje
odczytane z pliku in.txt. Jeden element tablicy odpowiada informacji zapisanej w jednej linii pliku.
Do pliku tekstowego out.txt zapisać listę najstarszych osób (postać zapisu taka sama jak w pliku in.txt).
Program główny ma wyglądać następująco:
#include <stdio.h>
#include <string.h>
#define X 10
#define MAX 20
...
int main(void)
{
int licznik, min_rok;
Osoba tab[X];
/* przepisanie zawartosci pliku do tablicy */
licznik = OdczytPliku("in.txt", tab);
if (licznik==0)
return 1;
/* znalezienie minimalnego roku */
min_rok = MinRok(tab, licznik);
/* zapis do pliku wynikowego informacji o najmlodszych osobach */
TworzPlikWynikowy("out.txt", tab, licznik, min_rok);
return 0;
}
2. Typ strukturalny, pliki, przetwarzanie tablicy struktur – zadanie z egzaminu
Zadanie 5
Napisz funkcję, która dostaje w argumentach dwie dodatnie liczby n1, n2 oraz n1-elementową tablice K1 i n2elementową tablicę K2, w których zapamiętane są produkty zakupione przez dwóch klientów sklepu. Każdy element
tablicy jest postaci struct produkt{char nazwa[MAX]; int ilosc;};. Funkcja ma za zadanie znalezienie
zakupionych takich samych produktów (takich samych z nazwy) zarówno przez jednego jak i drugiego klienta,
niezależnie od ilości. Znalezione produkty umieszczamy w nowej tablicy S, której rozmiar powinien być równy liczbie
zapamiętanej faktycznie w niej produktów. W polu ilosc powinna znaleźć się suma ilości produktów zakupionych
przez dwóch klientów. Jako wartość funkcja powinna zwrócić wskaźnik na pierwszy element tablicy S.
1
INFORMATYKA, ZAJĘCIA WYRÓWNAWCZE C/C++ (Zajęcia 10)
Autor: dr inż. Dorota Duda
3. Typ strukturalny, pliki, przetwarzanie tablicy struktur – zadanie z kolokwium
Zadanie 6
Dany jest plik tekstowy uczestnicy.txt opisujący uczestników pewnych zawodów sportowych. W pierwszej linii
pliku znajdują się dwie liczby całkowite: L1 i L2. Kolejne linie pliku zawierają następujące dane o uczestnikach (każda
linia pliku to dane o pojedynczym uczestniku):
- id (identyfikator, dodatnia liczba całkowita),
- dyscyplina (ciąg maksymalnie 50 znaków, bez spacji),
- wiek (dodatnia liczba całkowita),
- medale (liczba dotychczas zdobytych medali, dodatnia liczba całkowita).
(a) Zdefiniuj typ danych Uczestnik służący do przechowywania danych o pojedynczym uczestniku, następnie
zadeklaruj dwuwymiarową tablicę struktur typu Uczestnik. Tablica powinna mieć wymiary WxK, (W, K to
zdefiniowane stałe dodatnie).
(b) Napisz fragment programu, który przepisze dane z pliku uczestnicy.txt do dwuwymiarowej tablicy struktur. W
tablicy należy zapełnić L1 wierszy oraz L2 kolumn danymi przeczytanymi z pliku (jeden element tablicy to dane z jednej
linii pliku; elementy tablicy zapełniane są kolejno wierszami). Załóż, że na pewno 0≤L1<W oraz 0≤L2<K oraz, że plik
ma co najmniej W*K poprawnie wypełnionych linii. Program ma też zareagować odpowiednio w przypadku błędu
otwarcia pliku.
(c) Napisz kod, który wypisze na ekranie informacje (id, dyscyplina, wiek, medale) o tych uczestnikach, którzy
posiadają więcej medali niż wynosi średnia liczba medali zawodników, o których dane zostały przepisane do tablicy.
(d) Napisz kod, który utworzy jednowymiarową tablicę dynamiczną liczb całkowitych, następnie przepisze do niej
identyfikatory tylko tych uczestników, których wiek wynosi poniżej 16. Uwaga: rozmiar utworzonej tablicy
dynamicznej powinien być dokładnie taki, jak liczba uczestników, dla których wiek wynosi poniżej 16.
2