Trzecie zadanie punktowane, termin oddania 16.05.2003. 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†.