Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Dokumentacja programu sortword.c
- Wymagania
- Program ma za zadanie pobierać od użytkownika pojedyncze słowa po jednym w każdej linii, zaś linia pusta – zawierająca jedną lub więcej spacji na początku, powinna zakończyć wprowadzanie danych. Następnie sortuje owe wprowadzone słowa alfabetycznie, nie rozróżniając wielkich liter od małych i eliminując powtarzające się słowa, a następnie wyświetla je użytkownikowi.
- Wprowadzanie innego znaku niż litera (np. liczba, znak specjalny) lub więcej niż jednego wyrazu w jednej linii, powoduje wyświetlenie komunikatu o błędnych danych, wyłączając spacje na początku, która kończy wprowadzanie danych, zaś maksymalna ilość słów wprowadzonych przez użytkownika to 49 (50 linii danych – 49 słów i pusta linia), która to może być zmieniona w razie potrzeby.
- Użytkownik winien mieć na względzie to, iż słowa wyświetlane na wyjściu przekształcone będą do postaci, w której użyte są jedynie małe litery. Słowo nie może składać się z więcej niż 30 znaków, jednakże możliwe jest ustawienie innych długości wyrazów w razie potrzeby.
- Architektura
- Program napisany jest w języku C, kompilowany przy użyciu kompilatora GNU GCC. Składa się z 3 funkcji, z których każda ma określone zadanie.
- Program korzysta z dwóch bibliotek – stdio.h do obsługi danych wejścia wyjścia oraz podstawowych operacji; string.h do mierzenia długości słów wprowadzanych przez użytkownika (strlen) oraz kopiowania tablic znaków (słów) między tablicami (strcpy).
- Funkcja main: szkielet całego programu; sprawdza poprawność wprowadzanych danych, jednocześnie przekształcając wielkie litery na małe; wykrywa linie pustą, która kończy wprowadzanie danych; tworzy z danych wejściowych tablicę dwuwymiarową temp_array, gdzie pierwsza współrzędna oznacza numer linii poczynając od 0, zaś druga jest tablicą znaków (wyrazem) wpisanym przez użytkownika przekształconym na słowo złożone tylko z małych liter; wywołuje pozostałe funkcje; na koniec wypisuje posortowane słowa.
- Funkcja erase_duplicates: otrzymuje tablicę słów wprowadzoną przez użytkownika i przekształconą przez funkcję main (temp_array); szuka powtarzających się słów, które 'usuwa' z otrzymanej tablicy; wszystkie niepowtarzające się słowa zapisuje do nowej tablicy main_array;
- Funkcja selection_sort: otrzymuje tablicę main_array; sortuje wyrazy w owej tablicy metodą prostego wybierania.
- Szczegółowy opis działania funkcji
- Funkcja main(void):
- 1. Sprawdza długość linii wejściowej
- 2. Sprawdza czy linia nie zaczyna się od znaku spacji oraz czy nie zaczyna się od znaku nowej linii; jeśli zaczyna się od znaku nowej linii program wyświetli komunikat o błędzie, zaś jeśli zaczyna się od znaku spacji to przerywa wczytywanie linii wejściowych i przechodzi do dalszej części programu
- 3. Wpisuje podane przez użytkownika słowo do kolejnych tablic w dwuwymiarowej tablicy tymczasowej, zastępując znak nowej linii pobrany wraz z nią, znakiem końca wyrazu oraz zamieniając wielkie litery na małe
- 4. Jeśli został wprowadzony tylko jeden wyraz, funkcja od razu go wyświetli i przerwie działanie, w przeciwnym wypadku przechodzi do funkcji usuwającej dublikaty
- 5. Gdy zostanie wykonana funkcja usuwające powtarzające się słowa, przechodzi do funkcji sortującej je alfabetycznie
- 6. Gdy zostanie wykonana funkcja sortująca, wyświetla wyniki z tablicy głównej na ekranie terminala, po czym program kończy działanie
- Funkcja erase_duplicates(int m, int n, char array[m][n]):
- 1. Otrzymuje na wejściu dwuwymiarową tablicę tymczasową o określonych parametrach
- 2. Porównuje słowa w tablicy tymczasowej i jeśli są one takie same, to nadpisuje początkowy znak drugiego z nich znakiem NULL, zaś oryginalny wyraz kopiuje do tablicy głównej programu
- 3. Po sprawdzeniu pierwszego słowa z każdym następnym i nadpisaniu powtarzających się, zwiększa licznik o 1 i przechodzi do następnego słowa, jeśli nie zaczyna się ono od znaku NULL
- 4. Po wykonaniu funkcji, globalna tablica główna jest zapisana niepowtarzającymi się wyrazami, indeksowanymi od 0 do n, gdzie n jest ilością oryginalnych słów
- Funkcja selection_sort(int m, int n, char array[m][n]):
- 1. Otrzymuje na wejściu tablicę główną zapełnioną niepowtarzającymi się wyrazami, o określonych parametrach
- 2. Funkcja ustawia jako 'minimum' pierwszy wyraz w tablicy i przeszukuje ją pod kątem 'mniejszych' pod względem alfabetu słów, po czym jeśli taki wyraz znajdzie zapamiętuje jego indeks
- 3. Następnie jeśli zostanie znalezione 'mniejsze' słowo, zamienia miejscami 'minimalne' słowo z owym znalezionym, postępuje tak aż do końca tablicy, tzn. do przedostatniego elementu, gdyż ostatni element jest już wtedy posortowany
- Założenia
- (1) wprowadzane znaki są literami alfabetu łacińskiego
- (2) każde słowo ma maksymalnie 30 znaków, gdyż limit znaków w linii określony jest na 32, gdzie przedostatnim znakiem jest znak nowej linii (0x0a), a ostatnim znakiem NULL (0x00)
- (3) linia gdzie na początku występuje znak spacji jest linią kończącą wprowadzanie danych
- (4) linia gdzie nie występuje żaden wyraz uznawana jest za linię złożoną z dwóch znaków (0x0a i 0x00) gdzie żaden z nich nie jest literą więc wyświetlany jest komunikat o błędzie wprowadzonych danych
- (5) wielkie i małe litery nie są rozróżniane, co więcej, wielkie litery przekształcane są do małych przez co na wyjściu słowa nie składają się z wielkich liter, mimo iż na wejściu mogły je zawierać
- (6) jeśli linia zawiera inny znak niż litera alfabetu łacińskiego, włączając w to liczby i znaki białe, zostanie wyświetlony komunikat o błędzie i program zakończy działanie
- (7) jeśli na pierwszym miejscu linii stoi spacja to możliwe jest wpisanie po niej innych znaków, które nie zostaną wzięte pod uwagę
- Przykładowe pakiety danych wejściowych i wyjściowych
- Wejściowe:
- Wyjściowe:
- Abecadlo
- abecadlo
- Mama
- brat
- tata
- jezyk
- brat
- komputer
- siostra
- mama
- programowanie
- programowanie
- JEZYK
- przescieradlo
- Komputer
- siostra
- PRZEscieRADLO
- tata
- <znak spacji> asdfjlsalda';
- array
- Blad danych
- template
- L;;dfa Df
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement