program HRA; Uses fdelay, Crt; { ve skole smazat fdelay} const MAXDELKA = 40; type RETEZEC = string[MAXDELKA]; SPOJ = ^UZEL; UZEL = record TEXT : RETEZEC; ANO : SPOJ; NE : SPOJ; end; var KOREN, AKTUALNI : SPOJ; ODPOVEDANO : Boolean; procedure CTIRETEZ(var R: RETEZEC); var I:0..MAXDELKA; ZN: RETEZEC; begin repeat read(ZN) until ZN > ' '; readln(R); R:= ZN + R end; procedure CTIANONE(var ANO: Boolean); var ODP: RETEZEC; begin CTIRETEZ(ODP); ANO:= (ODP[1] = 'A') or (ODP[1] = 'a') end; procedure INICIALIZACESTROMU; begin new(KOREN); with KOREN^ do begin KOREN^.TEXT:= 'leta?'; new(ANO); new(ANO); end; with KOREN^.ANO^ do begin TEXT:= 'ptak?'; ANO:= nil; NE:= nil; end; with KOREN^.NE^ do begin TEXT:= 'ryba?'; ANO:= nil; NE:= nil; end end; function LIST(P:SPOJ): Boolean; begin LIST:= (P^.ANO = nil) and (P^.NE = nil) end; procedure DOPLNPODSTROM(P:SPOJ); var NOVEZVIRE, NOVAOTAZKA : RETEZEC; NOVYANO, NOVYNE : SPOJ; ODPANO: Boolean; begin writeln('Dam se podat. Jake zvire jste myslel?'); CTIRETEZ(NOVEZVIRE); writeln('Napiste otazku vystihujici rozdil mezi ',NOVEZVIRE,' a ', P^.TEXT,'!'); CTIRETEZ(NOVAOTAZKA); writeln('Pro zvire, kt. jste myslel je odpoved ano ci ne?'); CTIANONE(ODPANO); new(NOVYANO); with NOVYANO^ do begin ANO:= nil; NE := nil end; new(NOVYNE); with NOVYNE^ do begin ANO:= nil; NE := nil end; if ODPANO then begin NOVYANO^.TEXT:= NOVEZVIRE; NOVYNE^.TEXT:= P^.TEXT end else begin NOVYNE^.TEXT:= NOVEZVIRE; NOVYANO^.TEXT:= P^.TEXT end; with P^ do begin TEXT:= NOVAOTAZKA; ANO:= NOVYANO; NE:= NOVYNE end; end; begin Clrscr; INICIALIZACESTROMU; repeat writeln('Myslite si nejake zvire?'); CTIANONE(ODPOVEDANO); if ODPOVEDANO then begin AKTUALNI:= KOREN; repeat writeln(AKTUALNI^.TEXT); CTIANONE(ODPOVEDANO); if ODPOVEDANO then AKTUALNI:= AKTUALNI^.ANO else AKTUALNI:= AKTUALNI^.NE until LIST(AKTUALNI); writeln('Je to ',AKTUALNI^.TEXT,'?'); CTIANONE(ODPOVEDANO); if ODPOVEDANO then writeln('Uhadl jsem.') else DOPLNPODSTROM(AKTUALNI); writeln('Dekuji. Chcete hrat jeste jednou?'); CTIANONE(ODPOVEDANO) end until not ODPOVEDANO; Clrscr; end.