Zadanie zaliczeniowe z laboratorium Pascala i C. ZSI I. 01/02 ------------------------------------------------------------- Zadane: 13-14.02.2002, odbiór: 27-28.02.2002, 4 punkty. Zad 8. (4 pkt) -------------- Etapy budowy domu. ------------------ Wyobraź sobie, że Twoim zadaniem jest wybudowanie domu. Jednak liczba związanych z tym prac jest tak duża, że postanowiłeś napisać program, który pomoże Ci ustalić właściwą kolejność wykonywania poszczególnych etapów budowy. To co wiesz jest sumą pewnych oczywistych zależności jak np. to, że dach trzeba budować po wybudowaniu ścian, czy jednak okna można wstawiać przed założeniem instalacji C.O. ? To nie jest wcale oczywiste, i dlatego należy napisać program, który wczyta z pliku tekstowego o zadanej nazwie ciąg zależności pomiędzy etapami budowy, a następnie zaproponuje pewną kolejność wykonywania prac, o ile jest to możliwe, lub też wypisze, że ustalenie takiej kolejności jest niemożliwe z powodu wystąpienia cyklu. Etapy budowy są ponumerowane od 1 do n. Plik zawierający zależności między etapami budowy ma następująca postać: - w pierwszym wierszu jest liczba etapów n (1 <= n <= 1000), - zależności są opisane w kolejnych m wierszach (0 <= m <= 10000), - każdą zależność opisuje para liczb Przed Po (oddzielonych jedną spacją) oznaczającą, że etap Przed należy wykonać przed etapem Po. Przykładowo dla danych: 6 4 1 5 2 4 3 6 3 2 4 2 3 jeden z możliwych wyników to: 5 2 6 4 3 1 Założenia dotyczżce implementacji: ---------------------------------- Program powinien składać się z trzech części: * Modułu graf: Implementującego operacje na strukturze danych przechowującej zależności między etapami budowy. Postać struktury do zaprojektowania własnoręcznie. Moduł powinien udostępniać operacje: - PROCEDURE Inicjuj (n : integer); Inicjuje strukturę danych zawierającą n etapów (n <= 1000), bez żadnych zależności; - PROCEDURE WstawZaleznosc(Po, Przed : integer); Wstawia zależnosc: etap Przed musi być wykonany przed etapem Po. - PROCEDURE UsunEtap (E : integer); Usuń etap E wraz ze wszystkimi zależnościami mówiącymi, że ma on być wykonany przed lub po jakimś etapie. - FUNCTION Pierwszy : integer; Daje numer etapu, który zgodnie z pamiętanymi zależnościami może być wykonany jako pierwszy. (0 jeśli taki etap nie istnieje.) - PROCEDURE ZwolnijPamiec; Zwalnia pamięć zajętą przez strukturę danych. * Modułu Plik, zawierającego następujące operacje: - FUNCTION Otworz (nazwapliku : string) : integer; Otwiera plik z danymi i daje liczbę etapów. - FUNCTION DajZaleznosc (var Przed, Po : integer) : boolean; Próbuje wczytać kolejną zależność do zmiennych Przed i Po - daje true, jeśli w pliku była jeszcze zależność. Jeśli nie było, to zamyka plik z danymi i daje false. * Programu głównego