Laboratorium 28.04.2003 ----------------------- Trzecie zadanie punktowane, termin oddania 12.05.2003. Wersja 1.01. Często się zdarza, że przechowujemy zestaw wzajemnie się do siebie odwołujących plików. Gdy takich plików jest wiele i niekoniecznie wszystkie znajdują się w jednym katalogu powstaje problem zlokalizowania takich grup plików. Napisz program mapa, który służy do rozwiązania powyższego problemu. Wywołanie programu powinno mieć postać: mapa np. mapa c:\strony\ htm " wynik.out gdzie: jest katalogiem startowym wyszukiwania określa jakie pliki chcemy przeglądać jest pojedynczym znakiem, który wyznacza początek i koniec odnośnika w przeglądanych plikach. Odnośnik ma postać: gdzie jest nazwą (być może ze ścieżką) pliku. nazwa (być może ze ścieżką) pliku, który ma zawierać wygenerowaną mapę. Wynikiem programu ma być wypisanie do pliku wynikowego mapy powiązań plików w postaci: : ... : ... ... : ... gdzie oznacza pełna ścieżkę do pliku. Nazwy przed dwukropkiem są nazwami plików do których występują odnośniki w plikach podanych w kolejnych wierszach. Do przechowywania informacji o wystąpieniach plików użyj drzewa BST z kluczami będącymi pełnymi (tj. wraz ze ścieżkami) nazwami plików z odnośników, zaś wartościami będącymi posortowanymi (wzgl. pełnych nazw) listami nazw plików zawierających odnośniki. Zwróć uwagę na właściwą organizację programu (procedury i moduły). Twój program powinien zawierać co najmniej moduły: BST, Lista, Pliki. Zadbaj o możliwie proste interfejsy modułów. Uwagi: - program ma na początku sprawdzić poprawność parametrów (tzn. czy jest ich 4, czy rozszerzenie nie ma więcej niż 3 znaki, czy ogranicznik ma jeden znak, czy plik wynikowy nie istnieje); jeśli parametry sa niepoprawne, to należy wypisać stosowny komunikat i zakończyć pracę, - oczywiście jeśli w jakimś pliku występuje kilka razy odnośnik do tego samego pliku, to w mapie informacja o powiązaniu pojawia się tylko raz, - uwaga na względne scieżki (tj. z .. lub .) w odnośnikach: a) trzeba je właściwie wyliczać (tj. względem katalogu, w którym jest plik z odnośnikiem), b) trzeba utożsamiać odwołania do tego samego pliku (np. .\.\plik i plik), spróbuj np. writeln(fexpand('twojplik.pas')). - jeśli odnośnik nie jest zakończony przed końcem wiersza, to uważamy go za błędny i ignorujemy, - jeśli plik podany w odnośniku nie istnieje, to odnośnik uważamy za błędny i ignorujemy, - jak zwykle należy wypisać stan pamięci na początku działania, po wygenerowaniu struktur danych i na końcu działania programu. - nawet nie wypada już przypominać, że należy zwolnić pamięć, a pliki pozamykać. Historia zmian: wersja 1.01 (11.05.2003): w punkcie b) uwagi o względnych ścieżkach zmieniono / na \.