Napisz program, który:
1. Do struktury danych, podobnej do dwuwymiarowej tablicy dynamicznej prezentowanej na slajdzie 118, wykład 4 (uwaga: w zadaniu nie chodzi o utworzenie nowego typu danych za pomocą słowa kluczowego struct
, ale o zaproponowanie sposobu powiązania ze sobą zależnościami kilku prostych tablic jednowymiarowych, tak aby wspólnie tworzyły pewną konstrukcję. Takich różnych konstrukcji można zaproponować wiele, w zależności od tego, czy mamy w nich przechowywać listę, graf, drzewo, etc. Dla wspólnego określenia tych konstrukcji używa się zwrotu struktury danych. Można o nich poczytać w wielu podręcznikach i w sieci, np. tutaj), wczyta z pliku tekstowego kilka liczb zapisanych w postaci binarnej. W każdym wierszu pliku znajduje się jedna liczba zapisana w taki sposób, że pierwszą cyfrą musi być zawsze 1, tj. np. 1001
, 100
, 10101111
, 1110010
, itp. Tak zapisane liczby mogą mieć różną liczbę znaków. W każdym wierszu struktury, którym ma być tablica elementów typu char
, przechowywana będzie jedna wczytana liczba. Przyjmij, że liczba wierszy w pliku nie jest stała, ale nie większa niż n, tak aby było wiadomo, jakiej maksymalnej długości musi być pomocnicza tablica wskaźników. Alokowane dynamicznie tablice przechowujące kolejne ciągi binarne muszą być dokładnie takiej długości, aby zmieścił się cały C-napis reprezentujący daną liczbę binarną i nic więcej.
2. Dla każdego ciągu binarnego wywoła funkcję bin2int
, która zwróci wartość typu int odpowiadającą podanej liczbie binarnej (np. dla ciągu binarnego 1001
będzie to wartość 9
). Zwrócona wartość na być wypisana w oknie konsoli. Funkcja bin2int
przyjmuje jako argument wywołania wskaźnik do tablicy przechowującej liczbę w postaci binarnej i zwraca odpowiednią wartość typu int
. Funkcję bin2int
trzeba napisać samemu.
3. Poprzestawia wczytane ciągi binarne w taki sposób, aby wszystkie ciągi, w których ostatnim znakiem jest zero, tj. reprezentujące liczby parzyste, występowały przed ciągami kończącymi się cyfrą 1 (liczbami nieparzystymi). Przemieszczenia w strukturze danych nie dokonuj poprzez kopiowanie wartości z jednych tablic dynamicznych do drugich, ale poprzez zamianę położeń wartości wskaźników do dynamicznych tablic przechowujących liczby w postaci binarnej. To ważne: aby zmienić porządek, nie wykonuj żadnych nowych alokacji zmiennych dynamicznych, a jedynie zamieniaj adresy w komórkach tablicy wskaźników. Uwaga: przygotuj kod również na sytuację, kiedy w pliku nie było ani jednej liczby parzystej, albo, kiedy nie było ani jednej liczby nieparzystej, albo kiedy plik był pusty.
4. Po zakończeniu przestawiania jeszcze raz wypisze w oknie konsoli wartości liczbowe dla wszystkich ciągów binarnych ułożonych wg nowego porządku korzystając z funkcji bin2int
.