Zadanie zaliczeniowe z laboratorium Pascala i C. ZSI I. 01/02 ------------------------------------------------------------- Zadane: 6.06.2002, odbiór: 20.06.2002, 4 punkty. Zad 15. (C) --------------- Napisz program który wczyta zawartość plików podanych jako parametry w wierszu wywołania, zapamięta ja w drzewie BST, a następnie będzie odpowiadał w jakich plikach wystąpiło zadane słowo. Przykładowe wywołanie programu: slowa c:\autoexec.bat c:\daen\program.txt c:\home\spis.txt Przykładowa sesja pracy z programem (odpowiedzi użytkownika otoczono znakami ><): Podaj słowo: >Pascal< Słowo Pascal wystąpiło w plikach: 1) c:\dane\program.txt 2) c:\autoexec.bat Podaj słowo: >PL/1< Słowo PL/1 nie wystąpiło w żadnym pliku. Podaj słowo: >< Czy na pewno chcesz skończyć pracę (T/N): >T< Dziękuję za współpracę. Program powinien zawierać co najmniej moduł BST (pliki .c i .h), zwróć uwagę na interfejs tego modułu. Ciekawsza wersja tego zadania polega na pozwoleniu na podawania w wierszu wywołania: - wzorców nazw plików (do odszukiwania pasujących plików można użyć funkcji findfirst, findnext), - opcji przeszukiwania podkatalogów. W przypadku wykrycia błędów w nazwach plików program ma wypisać komunikat i może przerwać działanie. Uwagi: - struktura węzła w drzewie BST: struct wezel{ char* slowo; /* lub char slowo[MAX] */ struct elt *pliki ; /* elt to element listy, ten typ także trzeba zadeklarować */ struct wezel *lsyn,*psyn ; }; - do kopiowania napisów do pól listy/drzewa warto użyć strdup, kopiować należy z bufora (dużej tablicy znaków występującej w jednym egzamplarzu), - deklaracja slowo[MAX] jest znacznie mniej elastyczna, gdyż ogranicza z góry maksymalną długość słów (i ścieżek do plików w liście), może być użyta jako bezpieczniejsza, ale zalecane jest zastosowanie char*. Uwagi stałe: - programy które nie dają się skompilować kompilatorami języka C _nie_ będą sprawdzane, niezależnie od tego czy kompilują się kompilatorami C++ (dotyczy to _także_ komentarzy //, których nie ma w C), - pamiętaj, że pliki źródłowe w C mają rozszerzenie .c (a nie .cpp), użycie innego rozszerzenie może spowodować wywołanie kompilatora C++ a nie C, - pamiętaj o zwolnieniu pamięci (!!!), - pamiętaj o włączeniu _wszelkich_ dostępnych ostrzeżeń kompilatora.