Program Morseovka; uses Crt; type Ukaz=^kod; kod=record Pismeno:char; Tecka,Carka:Ukaz end; var Koren:Ukaz; procedure InitTree; begin new(Koren); with Koren^ do begin Pismeno:=' '; new(Tecka); new(Carka); end; with Koren^.Tecka^ do begin Pismeno:='E'; new(Tecka); new(Carka); with Tecka^ do begin Pismeno:='I'; new(Tecka); new(Carka); with Tecka^ do begin Pismeno:='S'; new(Tecka); new(Carka); with Tecka^ do begin Pismeno:='H'; Tecka:=nil; Carka:=nil; end; with Carka^ do begin Pismeno:='V'; Tecka:=nil; Carka:=nil; end; end; end; with Carka^ do begin Pismeno:='U'; Carka:=nil; new(Tecka); with Tecka^ do begin Pismeno:='F'; Tecka:=nil; Carka:=nil; end; end; with Carka^ do begin Pismeno:='A'; new(Tecka); new(Carka); with Tecka^ do begin Pismeno:='R'; new(Tecka); Carka:=nil; with Tecka^ do begin Pismeno:='L'; tecka:=nil; carka:=nil; end; end; with Carka^ do begin Pismeno:='W'; new(Tecka); new(Carka); with Tecka^ do begin Pismeno:='P'; Tecka:=nil; Carka:=nil; end; with Carka^ do begin Pismeno:='J'; Tecka:=nil; Carka:=nil; end; end; end; end; with Koren^.Carka^ do begin Pismeno:='T'; new(Tecka); new(Carka); with Tecka^ do begin Pismeno:='N'; new(Tecka); new(Carka); with Tecka^ do begin Pismeno:='D'; new(Tecka); new(Carka); with Tecka^ do begin Pismeno:='B'; Tecka:=nil; Carka:=nil; end; with Carka^ do begin Pismeno:='X'; Tecka:=nil; Carka:=nil; end; end; with Carka^ do begin Pismeno:='K'; new(Carka); new(Tecka); with Tecka^ do begin Pismeno:='C'; Tecka:=nil; Carka:=nil; end; with Carka^ do begin Pismeno:='Y'; Tecka:=nil; Carka:=nil; end end; end; with Carka^ do begin Pismeno:='M'; new(Tecka); new(Carka); with Tecka^ do begin Pismeno:='G'; new(Tecka); Carka:=nil; with Tecka^ do begin Pismeno:='Z'; tecka:=nil; carka:=nil; end; end; with Carka^ do begin Pismeno:='O'; new(Tecka); Carka:=nil; with Tecka^ do begin Pismeno:='Q'; Tecka:=nil; Carka:=nil; end; end; end; end; end; procedure Desifruj(Morse:Ukaz); var Aktualni:Ukaz; Znak:char; begin ClrScr; Aktualni:=Morse; writeln('Zadejte kod v Morseove abecede:'); while not eoln do begin read(Znak); case Znak of '.':aktualni:=aktualni^.Tecka; '-':aktualni:=aktualni^.Carka; ' ':begin write(Aktualni^.Pismeno); Aktualni:=Morse end end; end; writeln(Aktualni^.Pismeno); end; begin InitTree; Desifruj(Koren); end. -------------------------------------------------------------------------------- Program UhadniZvire; uses Crt; const MaxDelka=20; type Retezec=string[MaxDelka]; Spoj=^Uzel; Uzel=record Text:Retezec; Ano:Spoj; Ne:Spoj; end; var Koren,Aktualni:Spoj; OdpovedAno:Boolean; procedure CtiRetezec(var R:Retezec); var I:0..MaxDelka; Zn:char; begin repeat read(ZN) until Zn>' '; readln(R); R:=ZN+R; end; procedure CtiAnoNe(var ANO:Boolean); var ODP:Retezec; begin CtiRetezec(ODP); Ano:=(ODP[1]='A') or (ODP[1]='a'); end; procedure InicialStrom; begin New(Koren); with Koren^ do begin Koren^.Text:='Zije ve vode?'; new(Ano); new(Ne); end; with Koren^.Ano^ do begin Text:='Je to savec?'; new(Ano); new(Ne); end; with Koren^.Ano^.Ano^ do begin Text:='Velryba'; Ano:=nil; Ne:=nil; end; with Koren^.Ano^.Ne^ do begin Text:='Ryba'; Ano:=nil; Ne:=nil; end; with Koren^.Ne^ do begin Text:='Je to savec?'; new(Ano); new(Ne); end; with Koren^.Ne^.Ano^ do begin Text:='Zije pod zemi?'; new(Ano); new(Ne); end; with Koren^.Ne^.Ano^.Ano^ do begin Text:='Krtek'; Ano:=nil; Ne:=nil; end; with Koren^.Ne^.Ano^.Ne^ do begin Text:='Veverka'; Ano:=nil; Ne:=nil; end; with Koren^.Ne^.Ne^ do begin Text:='Lita'; new(Ano); new(Ne); end; with Koren^.Ne^.Ne^.Ano^ do begin Text:='Ptak'; Ano:=nil; Ne:=nil; end; with Koren^.Ne^.Ne^.Ne^ do begin Text:='Jesterka'; 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 mel na mysli?'); CtiRetezec(NoveZvire); writeln('Napiste otazku vystihujici rozdil mezi ',NoveZvire,' a ',P^.Text,'.'); CtiRetezec(NovaOtazka); writeln('Pro zvire, ktere jste si 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; InicialStrom; 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 end.