Strona główna

Zadanie 1 Dany jest plik binarny zawierający rekordy w następującym formacie


Pobieranie 55.2 Kb.
Data19.06.2016
Rozmiar55.2 Kb.

Praca z strukturami

Zadanie 1

Dany jest plik binarny zawierający rekordy w następującym formacie


struct osoba

{

char im[20], nazw[ 20 ];

struct przedmiot oc[10 ];

int n;

};

gdzie pole n struktury osoba zawiera liczbę przedmiotów wpisanych do tablicy oc:


struct przedmiot

{

char nazwa[ 20 ];

float ocena;

};

Napisać program przetwarzający taki plik binarny na plik tekstowy w następującym formacie

IMIE


NAZWISKO

NAZWA_PRZEDMIOTU_1 OCENA_1

NAZWA_PRZEDMIOTU_2 OCENA_2

...


NAZWA_PRZEDMIOTU_N OCENA_N

#

IMIE



NAZWISKO

NAZWA_PRZEDMIOTU_1 OCENA_1

NAZWA_PRZDMIOTU_2 OCENA_2

...


NAZWA_PRZEDMIOTU_N OCENA_N

#

itd.



W pliku wynikowym nazwiska mają być uporządkowane alfabetycznie. Znak # kończy informację o studencie. W pliku wejściowym nazwiska się nie powtarzają. Nazwę pliku wejściowego należy wczytać z klawiatury. Nazwa pliku wyjściowego – wyniki.dat.



Zadanie 2


Narysuj strukturę dynamiczną elementów tworzoną przez poniższy program. Rysunek każdego z elementów struktury dynamicznej powinien zawierać wartość pola dane, a pole nast powinno być połączone strzałką ze wskazywanym elementem.

struct elem

{

char dane;



struct elem *next;

} *p, *q;


main()

{

int i = 0;



p = ( struct elem * )malloc( sizeof( struct elem ) );

p->next = p;

p->dane = i;

for( i = 0; i <= 6; i += 2 )

{

q = ( struct elem * )malloc( sizeof( struct elem ) );



q->dane = i;

q->next = p->next;

p->next = q;

p = q;


}

}




Zadanie 3


DRZEWO
Zapisać treść programu pobierającego od użytkownika liczby całkowite (aż do pobrania liczby o wartości zero) i umieszczającego je w strukturze drzewa binarnego zgodnie z zasadą: jeśli wartość pobranego elementu jest mniejsza lub równa wartości aktualnego węzła struktury, to wędruje on w drzewie na lewo, a w przeciwnym wypadku na prawo (patrz przykład). Element drzewa zbudowany jest z pola przechowującego pobraną liczbę oraz dwóch wskaźników (na lewy i na prawy element podrzędny).
Przykład:
Użytkownik podaje kolejno liczby: 14, 30, 20, 5, 8, 45, 2, 7, 6, 0

Powstaje drzewo:




14
5 30
2 8 20 45
7
6

posortowany ciąg: 2, 5, 6, 7, 8, 14, 20, 30, 45

gałęzie: 14, 5, 2

14, 5, 8, 7, 6

14, 30, 20

14, 30, 45

poziom 0: 14

poziom 1: 5, 30

poziom 2: 2, 8, 20, 45

poziom 3: 7

poziom 4: 6





Należy więc zapisać:


  • odpowiednie definicje i deklaracje tak aby program był kompilowalny;

  • funkcję wpisującą podaną przez użytkownika liczbę do struktury;

  • funkcję wypisującą (do podanego jako argument pliku) posortowany podczas wpisywania do drzewa, ciąg liczb;

  • funkcję wypisującą na ekranie wszystkie gałęzie drzewa (korzenia do liścia);

  • funkcję wypisującą na ekranie wszystkie węzły drzewa znajdujące się na podanym (jako argument wywołania funkcji) poziomie;

  • funkcję zwalniającą zajmowaną przez drzewo pamięć (element po elemencie)

  • funkcję main, zawierającą odpowiednie wywołania zaprojektowanych funkcji.



Zadanie 4


Niech będzie dana dwukierunkowa lista liczb całkowitych.

Napisać funkcję, która na wejściu otrzymuje wskaźnik wsk na element tej listy, a której zadaniem jest przesuniecie tego elementu o dwa elementy do prawej strony od wsk (o ile to jest możliwe). Można założyć, że element wskazywany przez wsk istnieje. Zdefiniować odpowiednie typy.

WSKAZÓWKA ! Pamiętać o ewentualnej aktualizacji wskaźnika na pierwszy element.





Zadanie 5


Narysuj strukturę dynamiczną elementów tworzoną przez poniższy program. Rysunek każdego z elementów struktury dynamicznej powinien zawierać wartość pola dane, a pole nast powinno być połączone strzałką ze wskazywanym elementem.

struct elem

{

int dane;

struct elem *next;

} *p, *q;




main(int argc, char **argv)

{

int i ;

i = argc > 1 ? argv[1] : 0;

p = ( struct elem * )malloc( sizeof( struct elem ) );

p->next = p;

p->dane = i;

for( i = 0; i <= 12; i += 4 )

{

q = ( struct elem * )malloc( sizeof( struct elem ) );

q->dane = i;

q->next = p->next;

p->next = q;

p = q;

}

}



Zadanie 6


Niech będzie dany stos do przechowywania liczb całkowitych.

Napisać funkcję, która na wejściu otrzymuje int k – numer elementu tego stosu, a której zadaniem jest usuniecie jego poprzednika i następnika (o ile istnieją). Można założyć, że element wskazywany przez k istnieje. Zdefiniować odpowiednie typy.




Zadanie 7


Niech będzie dana kolejka przechowująca liczby całkowite.

Napisać funkcję, która na wejściu otrzymuje numer k elementu tej kolejki, a której zadaniem jest usuniecie poprzednika i następnika (o ile istnieją) tego elementu. Można założyć, że element wskazywany przez k istnieje. Zdefiniować odpowiednie typy oraz funkcje pomocnicze służące do implementacji kolejki.






Zadanie 8


Niech będzie dana dwukierunkowa lista liczb całkowitych.

Napisać funkcję, która na wejściu otrzymuje wskaźnik wsk na element tej listy oraz liczby a i b, a której zadaniem jest wstawienie elementów przechowujących te liczb odpowiednio przed i za element wskazywany. Można założyć, że element wskazywany przez wsk istnieje. Zdefiniować odpowiednie typy.

WSKAZÓWKA! Pamiętać o ewentualnej aktualizacji wskaźnika na pierwszy element (wskaźnik globalny).





Zadanie 9


Niech będzie dana dwukierunkowa lista liczb całkowitych.

Napisać funkcję, która na wejściu otrzymuje wskaźnik wsk na element tej listy, a której zadaniem jest usuniecie jego poprzednika i następnika (o ile istnieją). Można założyć, że element wskazywany przez wsk istnieje. Zdefiniować odpowiednie typy. WSKAZÓWKA ! Pamiętać o ewentualnej aktualizacji wskaźnika na pierwszy element.







Zadanie 10


Napisać program czytający słowa z pliku tekstowego podanego jako pierwszy argument z linii wywołania programu i wyszukujący w nim wszystkie słowa, które zaczynają się na literę podaną jako drugi argument w linii wywołania programu. Program nie musi być opty­malny pod względem czasowym i pamięciowym, ale liczba słów nie powinna być ograniczona. Można założyć, że każda alokacja pamięci zakończy się sukcesem.




Zadanie 11


Napisać program czytający słowa ze standardowego wejścia i wyszukujący słowo najczęściej występujące. Jeśli liczba wystąpień różnych słów jest równa, wynikiem może być dowolne z tych słów. Program nie musi być opty­malny pod względem czasowym i pamięciowym, ale liczba różnych słów nie powinna być ograniczona. Można założyć, że każda alokacja pamięci zakończy sę sukcesem.

Wskazówka: można skorzystać z funkcji realloc().




Zadanie 12


Dany jest plik 'daty.bin' zawierający nieokreśloną liczbę dat w formacie dzień (1 bajt), miesiąc (1 bajt), rok (2 bajty). Liczba różnych dat nie powinna być ograniczona. Można założyć, że każda alokacja pamięci zakończy się sukcesem.

Napisać program, który wczyta te daty, posortuje je rosnąco i wypisze do pliku tekstowego 'daty.txt'. Można skorzystać z dowolnego algorytmu sortowania. Daty błędne należy ignorować. Można założyć, że jeśli rok jest podzielny przez 4, to jest to rok przestępny (nawet podzielne przez 100).

WSKAZÓWKA! Warto skorzystać z dodatkowej funkcji porównującej dwie daty.



Zadanie 13


Dane są następujące typy

struct Grupa

{

int nr;

struct Grupa *ng; //następna grupa na roku



struct Dane *ls; // lista sudentów

};

struct Dane

{

char imie[20]; // imię

char nazw[20]; // nazwisko

float srednia; // srednia ocen

struct Dane *nast; // nastepny student w grupie

};

Za pomocą tych typów można zbudować strukturę danych przechowującą skład grup dziekańskich na danym roku.



Napisać funkcję

void Zwolnienia(struct Grupa * rok, struct Dane *lista, float s);

która ze struktury wskazanej przez parametr rok, przeniesie do listy wskazanej przez lista wszystkich studentów ze średnią ocen >= s. Lista lista jest wstępnie uporządkowana rosnąco według nazwisk, przy wstawianiu należy taki porządek zachować.







Zadanie 14


Niech będzie dana posortowana dwukierunkowa lista liczb całkowitych.

Napisać funkcję, która na wejściu otrzymuje wskaźnik pocz na początkowy element tej listy oraz liczby a i b, a której zadaniem jest wstawienie elementów zawierających te liczby w odpowiednie miejsce na liście. Można założyć, że element wskazywany przez pocz istnieje. Zdefiniować odpowiednie typy.

WSKAZÓWKA! Pamiętać o ewentualnej aktualizacji wskaźnika na pierwszy element (wskaźnik globalny).




Zadanie 15


Dany jest plik 'punkty.bin' zawierający n dwuwymiarowych punktów o całkowitych współrzędnych (int). W pierwszym elemencie pliku znajduje się liczba punktów n (int).

Napisać program, który wczyta te punkty, posortuje je rosnąco wg odległości od początku układu współrzędnych i wypisze do pliku tekstowego 'punkty.txt'. Można skorzystać z dowolnego algorytmu sortowania.





Zadanie 16


Dany jest plik tekstowy składający się z M wierszy z N kolumn (w sumie w pliku jest M*N znaków). Plik zawiera tylko duże i małe litery alfabetu angielskiego. Napisać program szukaj, który jest wywoływany z czterema parametrami:

  • nazwa pliku

  • liczba wierszy w pliku

  • liczba kolumn w pliku

  • wyraz składający się z dużych i małych liter języka angielskiego

Zadaniem programu jest wyszukanie w pliku (o nazwie przekazanej w pierwszym parametrze) wszystkich wystąpień wyrazu przekazanego w czwartym parametrze. Wyraz może wystąpić w wierszu (od strony lewej do prawej) lub w kolumnie (od góry do dołu). Przy wyszukiwaniu wyrazu zignorować wielkość liter. Dla każdego wystąpienia w wierszu należy wypisać na standartowym wyjściu komunikat:

Wyraz znajduje się w wierszu nr


dla każdego wystąpienia w kolumnie komunikat:

Wyraz znajduje się w kolumnie nr


Jeżeli wyraz nie występuje w pliku to wypisać:

Brak wyrazu w pliku


gdzie:

- wyraz przekazany jako czwarty parametr wywołania programu

- numer wiersza

- numer kolumny

Uwagi:

  • program zostanie wywołany z czterema argumentami

  • argumenty mają poprawny format

  • wyraz mieści się w wierszu i w kolumnie (długość wyrazu <= M i długość wyrazu <= N)

  • plik ma poprawny format tzn. zawiera tylko duże i małe litery języka angielskiego i jest podzielony na M wierszy i N kolumn

  • zawartość pliku mieści się w pamięci operacyjnej




Zadanie 17


Zapisz rekurencyjną funkcję, która wypisze na ekranie wartości kluczy wszystkich elementów struktury drzewa binarnego przedstawionego na rysunku. Element struktury zdefiniowany jest następująco:


struct elem

{

int key;

struct elem *left;

struct elem *right;

}









Zadanie 18


Napisać program, który czyta słowa z pliku wejściowego, tworzy listę ze słów zaczynających się z pewnej litery i drukuje tą listę. Nazwa pliku wejściowego oraz litera mają być zadane jako argumenty programu.




Zadanie 19


Kucharz na przyjęciu ma do przygotowania pewną nieznaną co do ilości, liczbę potraw (zadanych przez nazwę i listę potraw). Każda potrawa składa się z bliżej nieokreślonej ilości półproduktów (zadanych przez nazwę, ilość i jednostkę). Niektóre półprodukty mogą się powtarzać w różnych potrawach.

Napisać program, generujący listę półproduktów i ich ilości potrzebnych do przygotowania wszystkich potraw. Program powinien zawierać kompletne deklaracje i być gotowy do skompilowania. Założyć, że dostępna jest procedura wypełniająca struktury odpowiednimi danymi.


Przykład: załóżmy, że struktury danych opisują następujące potrawy:

Tort - mąka 1 kg; masło 0.5 kg; cukier 0.20 kg; świeczki 5 sztuk

Żurek - mąka 0.30 kg; kiełbasa 0.40 kg; masło 0.10 kg
Wynik działania programu to:

Mąka – 1.30 kg

Masło – 0.60 kg

Cukier – 0.20 kg

Świeczki – 5.00 sztuk

Kiełbasa – 0.40 kg

potrawy:  








©snauka.pl 2016
wyślij wiadomość