• Nie Znaleziono Wyników

Algorytmy i struktury danych, USM, zaoczne. Ćwiczenie 6.

N/A
N/A
Protected

Academic year: 2021

Share "Algorytmy i struktury danych, USM, zaoczne. Ćwiczenie 6."

Copied!
1
0
0

Pełen tekst

(1)

Algorytmy i struktury danych, USM, zaoczne. Ćwiczenie 6.

Wskaźniki i zmienne dynamiczne

Cel ćwiczenia: Tworzenie zmiennych dynamicznych. Dostęp do pamięci z wykorzystaniem wskaźników. Operacje z wykorzystaniem tablic dynamicznych i tablic wskaźników.

1. Utworzyć zmienne dynamiczne typu int, double, struct tosoba { char nazwisko[20];

unsigned r, m, d; long id; } za pomocą:

a) funkcji alokacji pamięci malloc, b) operatora new,

Adresy zmiennych zapamiętać w odpowiednich wskaźnikach. Wczytać z klawiatury dane do utworzonych zmiennych dynamicznych. Wyprowadzić wartości wskaźników oraz zawartości zmiennych wskazywanych. Wykorzystując funkcję free dla a) i operator delete dla b) zwolnić pamięć przydzieloną zmiennym.

2. Opracować program, który utworzy dynamicznie tablicę typu char o rozmiarze n wczyty- wanym z klawiatury.

a) Utworzyć tablicę t1 za pomocą operatora new.

b) Utworzyć tablicę t2 za pomocą funkcji malloc.

Jeżeli operacja przydziału pamięci dla t1 i t2 zakończyła się pomyślnie (wskaźniki t1 i t2 są różne od NULL), to zainicjować tablicę t1 losowymi znakami o kodach należących do przedziału [65,90]. Wyprowadzić zawartość tablicy t1 na ekran. Przekopiować tablicę t1 do t2 wykorzystując standardową funkcję memmove lub memcpy. Wyprowadzić zawar- tość tablicy t2 na ekran. Przed zakończeniem programu zwolnić pamięć przydzieloną dla tablic t1 i t2.

3. W programie głównym utworzyć dynamiczną tablicę złożoną z N elementów typu double.

Zainicjować tablicę losowymi liczbami rzeczywistymi należącymi do przedziału [-10.2, 15.3). Wykorzystując standardową funkcję języka C qsort opracować program, która sortuje elementy tablicy rosnąco. Wyprowadzić zawartość tablicy na ekran.

4. Zdefiniować dwuwymiarową tablicę łańcuchów char t[][20] zainicjowaną dowolnymi tekstami, np. char t[][20]={”jeden”, ”dwa”, ”trzy”, ”cztery”}. Opracować funkcje:

a) wyprowadzającą zawartość tablicy na ekran;

b) sortującą elementy tablicy według kodów ASCII za pomocą standardowej funkcji qsort; po sortowaniu tablica powinna zawierać następującą sekwencję danych:

”cztery”, ”dwa”, ”jeden”, ”trzy”.

5. 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;

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ć (posortować) tablicę indeksów w taki sposób, aby kolejne pozycje w tablicy ind określały położenie struktur posortowanych według nazwisk (np. wykorzystać funkcję qsort).

6. 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.

(2)

Zdefiniować zmienną unsigned ile=0, która ma służyć do przechowywania liczby wskaźników wprowadzonych do tablicy. Opracować następujące funkcje:

a) tworzącą zmienną dynamiczną typu tosoba oraz inicjującą zmienną 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, 1000), np. ”naz21”, ”naz300”, itd.; do pozostałych pól wstawiane są losowe liczby należące, odpowiednio, do przedziałów [1900, 1981), [1, 13), [1, 32), [1, 10000); wstawiającą adres utworzonej zmiennej na pierwszej wolnej pozycji w tablicy (pozycja końca tablicy o indeksie ile <

N).

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

c) znajdującą w tablicy 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);

d) usuwającą z tablicy pierwszą daną o podanych wartościach wszystkich pól; funkcja znajduje element, zwalnia pamięć przydzieloną elementowi i dokonuje kompresji tablicy (przesunięcia elementów i zmniejszenia wartości ile);

e) sortującą elementy tablicy wskaźników w taki sposób, aby wskazywane struktury tworzyły ciąg uporządkowany według nazwisk (należy zamieniać wskaźniki bez modyfikacji położenia struktur w pamięci);

f) usuwającą wszystkie dane z pamięci i zerującą tablicę wskaźników.

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

Przetestować działanie opracowanych funkcji. Przed zakończeniem programu zwolnić przydzieloną pamięć.

Cytaty

Powiązane dokumenty

Kiedy napięcie na bazie tranzystora będzie niższe od wartości na emiterze o graniczną wartość przewodzenia diody, prąd zacznie płynąć przez to złącze i tranzystor zacznie

Układ wspólnego kolektora charakteryzuje się wzmocnieniem napięciowym równym 1 (w rzeczywistości nieco poniżej jedności) i dużą impedancją wejściową, dzięki czemu dobrze

Na stronie Narodowego Funduszu Ochro- ny Œrodowiska (który popiera i wspiera budowê Ÿróde³ energii odnawialnej i budowê bloków w wielu elek- trowniach) —

b) Opracować funkcję wyprowadzającą zawartość struktury typu tosoba na ekran (parametrem funkcji jest zmienna typu tosoba). Zainicjować zmienną stud wartościami

Wyznaczyć czasy działania algorytmów w przypadku sortowania tablicy liczb całkowitych (wykorzystać funkcję pomiaru czasu). Wyprowadzić na ekran czasy

Zdefiniować drzewo poszukiwań binarnych za pomocą typedef struct ndbin* pw; struct ndbin {int klucz; pw lewy, prawy; }; pw pocz; (korzeń drzewa). Przyjąć, że mniejszy lub

poj.rol MOPiMR BA Eks.masz.rol MOPiMR BA

Students who miss either one of the mid-term exams for legitimate reasons will have the value of that examination transferred to the final examination thereby increasing the value