function blattmax1(inWurzel: tRefBinBaum; inMax: integer): boolean; {berechnet, ob jedes Blatt größer ist als alle Knoten auf dem Pfad zu ihm} {nil-Knoten werden nicht besucht} var maximum_bisher: integer; erg_links,erg_rechts:boolean; begin if (inWurzel^.links=nil) and (inWurzel^.rechts=nil) then {Blatt} begin if inWurzel^.info>inMax then blattmax1:=true else blattmax1:= false; end else {innerer Knoten} begin maximum_bisher:=inMax; erg_links:=true; erg_rechts:=true; if inWurzel^.info> inMax then maximum_bisher:= inWurzel^.info; if inWurzel^.links<>nil then erg_links:= blattmax1(inWurzel^.links,maximum_bisher); if inWurzel^.rechts<>nil then erg_rechts:= blattmax1(inWurzel^.rechts,maximum_bisher); blattmax1:=erg_links and erg_rechts; end; end; function blattmax2(inWurzel: tRefBinBaum; inMax: integer): boolean; {berechnet, ob jedes Blatt größer ist als alle Knoten auf dem Pfad zu ihm} {auch nil-Knoten werden besucht} var maximum_bisher: integer; begin if inWurzel= nil then {lerer Knoten, liefert true, weil die Bedingung nicht verletzt wird} blattmax2:=true else if (inWurzel^.links=nil) and (inWurzel^.rechts=nil) then {Blatt} begin if inWurzel^.info>inMax then blattmax2:=true else blattmax2:= false; end else {innerer Knoten} begin maximum_bisher:=inMax; if inWurzel^.info> inMax then maximum_bisher:= inWurzel^.info; blattmax2:= blattmax2(inWurzel^.links,maximum_bisher) and blattmax2(inWurzel^.rechts,maximum_bisher); end; end;
program liste (input,output); type tRefListe = ^tListe; tListe = record zahl : integer; next : tRefListe; end; var listenanfang : tRefListe; zeiger : tRefListe; endeListe : tRefListe; eingabe : integer; procedure alleDrucken(zuDrucken: tRefListe); var zeiger: tRefListe; begin zeiger := zuDrucken; while zeiger <> nil do begin writeln(zeiger^.zahl); zeiger:= zeiger^.next; end; writeln; end; procedure umdrehen(var ioListe:tRefListe); var hilfszeiger,vorheriger,naechster:tRefListe; begin hilfszeiger:= ioListe; vorheriger:=nil; while hilfszeiger<>nil do begin naechster:= hilfszeiger^.next; hilfszeiger^.next:= vorheriger; vorheriger:= hilfszeiger; hilfszeiger:=naechster; end; ioListe:= vorheriger; end; BEGIN listenanfang := nil; writeln('Eingabe der Zahlen, Beenden mit 0'); readln(eingabe); while eingabe <> 0 do begin new(zeiger); zeiger^.zahl := eingabe; zeiger^.next:=nil; if listenanfang = nil then listenanfang := zeiger else endeListe^.next:=zeiger; endeListe := zeiger; readln(eingabe); end; alleDrucken(listenanfang); umdrehen(listenanfang); alleDrucken(listenanfang); END.
function gefunden(inWurzel: tRefBinBaum; inZahl: integer) : boolean; {findet Wert in binärem Baum, kein Suchbaum} {bricht Suche ab, wenn gefunden} begin gefunden:=false; if inWurzel<>nil then if inWurzel^.Wert=inZahl then gefunden:= true else gefunden:= gefunden(inWurzel^.links,inZahl) or gefunden(inWurzel^.rechts,inZahl); end;
function gefunden(inWurzel: tRefBinBaum; inZahl: integer) : boolean; {findet Wert in binärem Baum, kein Suchbaum} {bricht Suche nicht ab, wenn gefunden, weniger effizient} begin gefunden:=false; if inWurzel<>nil then if (inWurzel^.Wert=inZahl) or gefunden(inWurzel^.links,inZahl) or gefunden(inWurzel^.rechts,inZahl) then gefunden:= true end;
function gefunden(inWurzel: tRefBinBaum; inZahl: integer) : boolean; {findet Wert in binärem Baum, kein Suchbaum} {bricht Suche nicht ab, wenn gefunden, weniger effizient} begin gefunden:=false; if inWurzel<>nil then gefunden:= (inWurzel^.Wert=inZahl) or gefunden(inWurzel^.links,inZahl) or gefunden(inWurzel^.rechts,inZahl) end;
program rom;
type tRoemZiff = (I, V, X, L, C, D, M, Q); tRefRoemZahlStelle = ^tRoemZahlStelle; tRoemZahlStelle = record ziffer: tRoemZiff; links: tRefRoemZahlStelle; end; var liste,neu,alt: tRefRoemZahlStelle; eingabe: tRoemZiff;
function RoemZiffWert(inZiff: tRoemZiff): integer; begin if inZiff=I then RoemZiffWert:=1 else if inZiff=V then RoemZiffWert:=5 else if inZiff=X then RoemZiffWert:=10 else if inZiff=L then RoemZiffWert:=50 else if inZiff=C then RoemZiffWert:=100 else if inZiff=D then RoemZiffWert:=500 else if inZiff=M then RoemZiffWert:=1000 else RoemZiffWert:=0; end;
function RoemZahlWert(inRoemZahl: tRefRoemZahlStelle): integer; var summe:integer; zeiger: tRefRoemZahlStelle; begin zeiger:= inRoemZahl; summe:= RoemZiffWert(zeiger^.ziffer); while zeiger^.links<>nil do begin if RoemZiffWert(zeiger^.links^.ziffer)>= RoemZiffWert(zeiger^.ziffer) then summe:= summe+ RoemZiffWert(zeiger^.links^.ziffer) else summe:= summe- RoemZiffWert(zeiger^.links^.ziffer); zeiger:= zeiger^.links; end; RoemZahlWert:=summe; end;
BEGIN new(liste);
writeln ('Geben Sie roemische Ziffern ein. Nach jeder Ziffer Return');
writeln('Geben Sie Q zum Beenden ein, alles in Grossbuchstaben');
read(eingabe);
alt:=liste;
liste^.ziffer:=eingabe;
liste^.links:=nil;
read(eingabe);
while (eingabe<>Q)do
begin
new(neu);
neu^.ziffer:=eingabe;
neu^.links:=nil;
alt^.links:=neu;
alt:=neu;
read(eingabe);
end;
writeln(RoemZahlWert(liste)); END.
function istMaxHeap(inRefWurzel: tRefKnoten): Boolean; { Gibt true zurück, genau dann wenn der Baum ein Max-Heap ist. } var linksGroesser, rechtsGroesser: Boolean; begin if inRefWurzel = nil then {Der leere Baum ist ein (leerer) Max-Heap, da er keinen Knoten mit größerem Kind enthält.} istMaxHeap := true else begin {Untersuchung des Wurzelknotens und seiner Kinder} if inRefWurzel^.links = nil then linksGroesser := false else linksGroesser := inRefWurzel^.links^.info > inRefWurzel^.info; if inRefWurzel^.rechts = nil then rechtsGroesser := false else rechtsGroesser := inRefWurzel^.rechts^.info > inRefWurzel^.info; {Führen Sie hier die Funktion geeignet weiter!} if linksGroesser or rechtsGroesser then istMaxHeap:=false else istMaxHeap:= istMaxHeap(inRefWurzel^.links) and istMaxHeap(inRefWurzel^.rechts); end; end;
program zinsen;
var betrag:real; zinsen, laufzeit,i: integer;
BEGIN write('Betrag '); readln(betrag); write('Zinsen '); readln(zinsen); write('Laufzeit '); readln(laufzeit); for i:=1 to laufzeit do begin betrag:=betrag+zinsen/100*betrag; writeln('Nach ',i,' Jahren ', betrag:10:2); end; END.