Laboratorium 7.04.2003 -------------------------------- Drugie zadanie punktowane, termin oddania 28.04.2003. Na pewnym dyskretnym odcinku (składającym się z n równooddalonych punktów) żyją punkciaki (jak wiadomo niektóre płaszczyzny zamieszkują płaszczaki, a w R^3 podobno żyją wypuklaki). Żywot punkciaka jest określony zestawem (chciałoby się nawet rzec: listą) prostych poleceń. Każdy punkciak w każdej jednostce czasu (także czas jest w tym zadaniu dyskretny) wykonuje jedno (kolejne) polecenie ze swojego zestawu. Polecenia są następujące: nic nic nie rób (ulubione polecenie punkciaków), lewo przesuń się w lewo o jeden punkt, prawo przesuń się w prawo o jeden punkt, zniknij punkciak znika na zawsze, pączkuj punkciak pączkuje, tworząc nowego w tym samym punkcie. Nowy punkciak dziedziczy po oryginalnym zestaw poleceń, ale oczywiście zaczyna go wykonywać (w następnej jednostce czasu) od pierwszego polecenia. Przesunięcie się w prawo z ostatniego punktu oznacza przejście na pierwszy punkt (i analogicznie z przesuwaniem się w lewo). W jednym punkcie może naraz przebywać dowolna liczba punkciaków (wszak są bezwymiarowe). Po wykonaniu wszystkich poleceń ze swojego zestawu punkciak rozpoczyna ich wykonywanie od początku. Napisz program symulujący życie punkciaków. Program powinien na początku wygenerować przykładowe dane (liczbę punkciaków, ich pierwotne położenie i zestawy poleceń) i wypisać na ekranie początkowe położenie punkciaków. Następnie program ma symulować zachowanie punkciaków w kolejnych jednostkach czasu: wykonać po jednym poleceniu każdego punkciaka i wypisać na ekranie aktualny stan odcinka. Symulacja ma się kończyć w momencie gdy użytkownik naciśnie jakiś klawisz na klawiaturze. Wymagana struktura danych: lista punkciaków, każdy z nich ma cykliczną listę poleceń. Do wyświetlania wygodnie jest użyć tablicy (rozmiaru n) z informacją o liczbie punkciaków w danym punkcie. Uwaga: to nie jest jedyna dobra reprezentacja danych dla tego zadania, natomiast jest to reprezentacja wymagana. Wypisując bieżący stan odcinka należy przeznaczyć na ekranie po jednej pozycji dla każdego punktu. Można założyć, że n nie przekracza szerokości ekranu. Jeśli w punkcie są jakieś punkciaki, to należy wypisać ich liczbę lub * , jeśli jest ich więcej niż 9. Jeśli w punkcie nie ma żadnego punkciaka to należy wypisać spację. Jak zwykle należy wypisać na początku i końcu działania programu informację o zajętości pamięci (oczywiście program po zakończeniu symulacji powinien zwrócić do systemu zajętą przez siebie pamięć dynamiczną, więc te wypisane pary liczb powinny być identyczne). Uwagi: - do sprawdzania czy użytkownik nacisnął jakiś klawisz służy funkcja keypressed z modułu CRT, Możliwe rozszerzenia zadania (nie objęte już punktacją): - bogatszy interfejs (np. możliwość oglądania programu wskazanego punkciaka), - bogatsza lista poleceń (np. skoki, w R^1 nie znają jeszcze programowania strukturalnego).