• Nie Znaleziono Wyników

Pracownia programowania (C/C++). Zaoczne inżynierskie (INK). Ćwiczenie 5.

N/A
N/A
Protected

Academic year: 2021

Share "Pracownia programowania (C/C++). Zaoczne inżynierskie (INK). Ćwiczenie 5."

Copied!
1
0
0

Pełen tekst

(1)

Pracownia programowania (C/C++). Zaoczne inżynierskie (INK). Ćwiczenie 5.

Zagadnienia: Deklarowanie i definiowanie struktur. Inicjowanie struktur. Projektowanie algorytmów z wykorzystaniem tablicy struktur. Sortowanie tablicy struktur według ustalonego pola. Obsługa statycznej i dynamicznej tablicy wskaźników na struktury.

1. Opracować funkcje umożliwiające zainicjowanie zmiennej strukturalnej typu tosoba (typedef struct tosoba { char naz[20]; unsigned rok, mies, dzien; long id; }. Dane są następujące prototypy:

a) tosoba w1(void) – wczytywanie z klawiatury, struktura zwracana przez return;

b) void w2(tosoba *s) – wczytywanie z klawiatury, struktura zwracana przez wskaźnik;

c) void w3(tosoba& s) – wczytywanie z klawiatury, struktura zwracana przez referencję;

d) void losuj(tosoba *s) – wstawianie losowych danych do struktury wskazywanej przez s;

do pola naz[20] wstawiany jest łańcuch ‘naz’ zakończony losową liczbą należącą do przedziału [1, 100), np. ‘naz21’, ‘naz3’, itd.; do pozostałych pól wstawiane są losowe liczby należące, odpowiednio, do przedziałów [1900, 1981), [1, 13), [1, 32), [1, 100).

W programie głównym zainicjować zmienną typu tosoba za pomocą każdej z funkcji.

2. Zdefiniować zainicjowaną wartościami początkowymi (na stałe w programie) tablicę struktur typu tosoba o rozmiarze N, gdzie N – stała. Opracować funkcje:

a) wyprowadzającą zawartość tablicy na ekran począwszy od pozycji k, gdzie 0 <= k < N;

b) wyprowadzającą na ekran wszystkie elementy tablicy o podanej wartości pola naz;

c) wyprowadzającą na ekran wszystkie elementy tablicy, dla których data (rok, mies, dzien) jest w przedziale [a, b], gdzie a jest datą początkową, natomiast b – datą końcową;

d) opracować funkcję, która sortuje elementy tablicy uwzględniając kolejno nazwiska, następnie daty (jeżeli nazwiska są identyczne), a na końcu identyfikatory (jeżeli poprzednie pola były identyczne).

3. Zdefiniować tablicę struktur typu tosoba, o rozmiarze N, oraz tablicę indeksów unsigned ind[N], gdzie N – stała. W programie głównym:

a) zainicjować tablicę struktur losowymi danymi wykorzystując funkcję losuj przedstawioną w zadaniu 2;

b) zainicjować tablicę indeksów kolejnymi liczbami od 0 do N-1, zgodnie z regułą ind[i] = i, dla i=0, ... , N-1.

Nie zmieniając zawartości tablicy struktur i nie kopiując jej do innej tablicy zmodyfikować tablicę indeksów w taki sposób, aby kolejne pozycje w tablicy ind określały położenie struktur posortowanych według nazwisk.

4. Zdefiniować tablicę struktur typu struct twsp { int x, y; } o rozmiarze N, gdzie N - stała w programie, służącą do przechowywania współrzędnych punktów. Zainicjować tablicę danymi w taki sposób, aby kolejne struktury zawierały współrzędne losowych punktów (x,y), gdzie x należy do przedziału [0,640), natomiast y należy do przedziału [0,350). Wczytać z klawiatury współrzędne badanego punktu (a,b) i wyprowadzić ich zawartość na ekran.

Wyznaczyć punkty najbliższe punktowi (a,b) w sensie odległości kartezjańskiej (odległość pomiędzy punktami (x,y) i (a,b) jest obliczana ze wzoru d = sqrt[(x-a)^2 + (y-b)^2]).

Wyprowadzić współrzędne znalezionych punktów na ekran w trybie graficznym.

(2)

5. Zdefiniować N - elementową tablicę wskaźników na struktury typu struct tosoba { char naz[20]; unsigned rok, mies, dzien; long id; }, gdzie N jest stałą w programie. Zdefiniować zmienną unsigned ile = 0, która ma służyć do przechowywania liczby struktur wprowadzo- nych do tablicy. Opracować następujące funkcje:

a) inicjującą strukturę typu tosoba losowymi wartościami w sposób następujący:

do pola naz[20] wstawiany jest łańcuch ‘naz’ zakończony losową liczbą należącą do przedziału [1, 100), np. ‘naz21’, ‘naz3’, itd.; do pozostałych pól wstawiane są losowe liczby należące, odpowiednio, do przedziałów [1900, 1981), [1, 13), [1, 32), [1, 1000);

b) wyprowadzającą zawartość struktury typu tosoba na ekran;

c) wstawiającą do tablicy adres nowej danej typu tosoba na pozycji o numerze k (0<=k<ile) oraz usuwającą z pamięci poprzednią daną;

d) wyszukującą, począwszy od pozycji k (0<=k<ile), pierwszą daną o podanych wartościach pól (jeśli podano nazwisko, to wyszukiwanie według nazwisk; jeśli podano nazwisko i datę (rok, mies, dzien), to wyszukiwanie według nazwisk i dat; jeżeli podano nazwisko, datę oraz identyfikator, to wyszukiwanie według trzech pól równocześnie);

e) usuwającą znalezioną daną z pamięci i dokonującą kompresji tablicy (przesunięcia elementów);

f) sortującą dane według nazwisk za pomocą funkcji qsort;

g) usuwającą wszystkie dane z pamięci.

W programie głównym utworzyć dynamicznie i<N struktur typu tosoba (po utworzeniu ile=i), zainicjować struktury losowymi wartościami i zapamiętać ich adresy w tablicy.

Przetestować działanie opracowanych funkcji. Przed zakończeniem programu zwolnić przydzieloną pamięć. Wyświetlić stan pamięci na początku i na końcu programu.

6. Utworzyć dynamicznie tablicę złożoną z N wskaźników na struktury typu tosoba, gdzie N jest wczytywane z klawiatury, i zapamiętać adres jej początku w zmiennej tosoba **t.

Zdefiniować zmienną unsigned ile = 0, która ma służyć do przechowywania liczby struktur wprowadzonych do tablicy. Utworzyć i<N losowych struktur i zapamiętać ich adresy w tablicy. Opracować funkcje przedstawione w zadaniu 2. W przypadku funkcji f) posortować elementy według dat (rok, mies, dzien). Przetestować działanie opracowanych funkcji. Przed zakończeniem programu zwolnić przydzieloną pamięć. Wyświetlić stan pamięci na początku i na końcu programu.

Cytaty

Powiązane dokumenty

Algorytm wyszukania liczb pierwszych metodą sita Eratostenesa. Należy wyznaczyć wszystkie liczby pierwsze w podzbiorze liczb naturalnych {1..N} za pomocą algorytmu

Obiekty, elementy, pojęcia ze świata zewnętrznego muszą zostać odwzorowane danymi w programie. Dane występujące w programie stanowią uproszczony, komputerowy

Rezultatem funkcji jest wartość różna od zera, jeżeli strumień jest w pozycji końcowej, zero w przeciwnym wypadku.. Strumień jest w pozycji końcowej, jeżeli w wyniku

W przypadku wystąpienia końca pliku lub błędu, rezultatem funkcji jest liczba, potencjalnie zerowa, bezbłędnie zapisanych bloków.. size_t fwrite( void * ptr, size_t size, size_t

\a (jak w alarmie) jest reliktem przeszłości, gdy do komunikowania się z komputerami często używano telegrafów (czy wiesz, czym jest teletekst?); wysłanie tego znaku do

Wyprowadzić na ekran za pomocą funkcji printf liczbę double x = 2.3456 wierszami z rosnącą precyzją, tzn.. Opracować funkcję, która zamienia liczbę naturalną x na liczbę

Zagadnienia: Przekazywanie parametrów do funkcji. Inicjacja tablic losowymi danymi. Opracować trzy funkcje obliczające sumę dwóch liczb typu double. Dane są

a) kopiującą n bajtów pamięci ekranu, zaczynając od adresu określonego przez wskaźnik 0xB800:ofs, do bufora o początku określonym przez wskaźnik void far *buf_dest