• Nie Znaleziono Wyników

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

N/A
N/A
Protected

Academic year: 2021

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

Copied!
1
0
0

Pełen tekst

(1)

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

Zagadnienia: Projektowanie algorytmów wykorzystujących dynamiczne struktury informacyjne.

Obsługa listy jednokierunkowej i dwukierunkowej. Implementacja kolejki typu FIFO oraz LIFO (stosu) za pomocą listy. Definiowanie złożonych typów danych. Tworzenie projektów.

1. Zaprojektować funkcje obsługujące listę jednokierunkową określoną za pomocą następują- cych definicji:

typedef int tdana; // typ danej klucza

typedef struct node *pnode; // wskaźnik na element listy

typedef struct node { tdana klucz; pnode nast; }; // element listy

pnode pocz; // wskaźnik początku listy - program główny

Deklaracje wykorzystywanych typów danych (typedef) oraz prototypy funkcji umieścić

w pliku nagłówkowym prot.h, definicje funkcji umieścić w pliku defs.cpp, program główny nazwać lista.cpp. Utworzyć projekt lista.prj (tylko pliki *.cpp) i skompilować.

Opracować funkcje umożliwiające:

a) wyznaczenie adresu fizycznego wskazywanego przez wskaźnik void far *x;

adres wskazywany przez x = (seg, off) jest obliczany ze wzoru

adres = 16L*seg + off; prototyp funkcji: unsigned long adres(void far *x);

b) dodanie na końcu listy elementu o podanej wartości klucza; funkcja przydziela dynamicznie pamięć dla elementu i dołącza go do listy; prototyp funkcji:

void DodajElement(pnode& pocz, tdana klucz);

c) dodanie elementu z zachowaniem porządku klucza; funkcja powinna umieścić element w takim miejscu listy, aby klucze tworzyły ciąg rosnący; prototyp funkcji:

void DodajUporz(pnode& pocz, tdana klucz);

d) usunięcie elementu z końca listy; funkcja powinna zwolnić pamięć przydzieloną elementowi;

prototyp funkcji: void UsunKoniec(pnode& pocz);

e) odnalezienie elementu o podanej wartości klucza; funkcja zwraca wskaźnik do odnalezio- nego elementu; prototyp funkcji: pnode ZnajdzElement(pnode pocz, tdana klucz);

f) usunięcie elementu o podanej wartości klucza; funkcja powinna odnaleźć element, zmienić powiązania w liście, a następnie zwolnić pamięć przydzieloną elementowi; prototyp funkcji:

void UsunElement(pnode &pocz, tdana klucz);

g) wyprowadzenie na ekran zawartości listy oraz adresów jej poszczególnych elementów;

prototyp funkcji: void PiszLista(pnode pocz).

Przetestować opracowane funkcje w programie głównym. Przed zakończeniem programu zwolnić pamięć. Wyświetlić stan pamięci na początku i na końcu programu (coreleft).

(2)

2. Zaprojektować funkcje obsługi kolejki typu FIFO oraz kolejki typu LIFO (stosu) zrealizowa- nych za pomocą listy dwukierunkowej określonej następująco:

typedef int tdana; // typ danej klucza

typedef struct node *pnode; // wskaźnik na element listy

typedef struct node { tdana klucz; pnode nast; pnode pop; }; // element listy pnode pocz; // wskaźnik początku listy - program główny

Deklaracje wykorzystywanych typów danych (typedef) oraz prototypy funkcji umieścić

w pliku nagłówkowym prot.h, definicje funkcji umieścić w pliku defs.cpp, program główny nazwać lista.cpp. Utworzyć projekt lista.prj (tylko pliki *.cpp) i skompilować.

Przyjąć pnode pocz, kon za wskaźniki, odpowiednio, początku i końca listy (kolejki, stosu).

Opracować funkcje umożliwiające:

a) dodanie elementu o podanej wartości klucza na końcu kolejki (umieszczenie elementu na stosie); przydzielić pamięć, zmodyfikować wskaźnik końca kolejki (wierzchołek stosu);

prototyp funkcji: void Wstaw(pnode &pocz, pnode &kon, tdana klucz);

b) usunięcie elementu z początku kolejki (wierzchołka stosu); zwolnić pamięć, zmodyfikować wskaźnik początku kolejki (stosu); prototyp funkcji void Usun(pnode &pocz, pnode &kon);

c) wyprowadzenie na ekran zawartości kolejki (stosu) oraz adresów jej poszczególnych elementów; prototyp funkcji: void Pisz(pnode pocz).

Przetestować opracowane funkcje w programie głównym. Przed zakończeniem programu zwolnić pamięć. Wyświetlić stan pamięci na początku i na końcu programu (coreleft).

Cytaty

Powiązane dokumenty

W artykule omówiono zasadê dzia³ania ogniwa paliwowego typu PEMFC (ang. Proton Exchange Membrane Fuel Cell).. Scharakteryzowano ró¿ne typy

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

[-10.2, 15.3). Wykorzystując standardową funkcję qsort opracować funkcję, która sortuje elementy tablicy rosnąco. Wyprowadzić zawartość tablicy na ekran. Zainicjować tablicę

Wyprowadzić współrzędne znalezionych punktów na ekran w trybie graficznym... Zdefiniować N - elementową tablicę wskaźników na struktury typu struct tosoba { char naz[20];

c) usunięcie elementu o podanej wartości klucza (zadanie dla chętnych); funkcja powinna odnaleźć element, zmodyfikować strukturę drzewa, a następnie zwolnić

e) wstawiającą, pomiędzy istniejące dane, nową daną na zadanej pozycji w pliku o podanej nazwie; prototyp: void Fwstaw (FILE *f, char *nazwa, long poz, const tosoba *r);. f)

a) dodającą element o podanej wartości klucza na koniec kolejki; przydzielić pamięć, wpisać daną x do klucza, zmodyfikować wskaźniki kolejki (pocz, kon);

W programie głównym umieścić plik nagłówkowy oraz wywołania trzech funkcji oblicza- jących sumę liczb. Utworzyć projekt umożliwiający kompilację programu wielomoduło- wego.