PO 2017: Wejściówka na Lab.5

Napisz program, który:

  1. Do struktury odpowiadającej dwuwymiarowej tablicy dynamicznej podobnej do tej prezentowanej na slajdzie 121, wykład 4, 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, ale nie większą niż k. 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.
    (uwaga: w poleceniu powyżej 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. http://www.algorytm.org/klasyczne/)
  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 napis-liczbę w postaci binarnej i zwraca odpowiednią wartość typu int. Funkcję bin2int trzeba napisać samemu.
  3. Posortuje wczytane ciągi binarne w taki sposób, aby liczby całkowite reprezentowane przez ciągi były uporządkowane rosnąco. Przemieszczenia ciągów binarnych 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 ciągi binarne. To ważne: aby zmienić porządek, nie wykonuj żadnych alokacji nowych tablic dynamicznych, a jedynie zamieniaj adresy w komórkach tablicy wskaźników. Zastosuj dowolne sortowanie. Uwaga: przygotuj kod również na sytuację, 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.