Einführung in die imperative Programmierung

Array aufbauen

program Felder (input,output);
   
 const FELDMAX = 10;
 
 type
 tIndex = 1..FELDMAX;
 tFeld = array[tIndex] of integer;
 
 var 
 a : tFeld; 
 eingabe : integer;
 zeiger : integer;
 
 procedure alleDrucken(zuDrucken:  tFeld);
 var
 zeiger: integer;
 begin
 zeiger := 1;
 writeln();
 while zeiger <> FELDMAX do 
 begin
 writeln(a[zeiger]);
 zeiger:= zeiger+1;
 end;
 end;
 
BEGIN
   writeln('Eingabe der Zahlen, Beenden mit 0'); 
   readln(eingabe);
   zeiger:=0;
   while eingabe <> 0 do
   begin
   zeiger:=zeiger+1;
   a[zeiger] := eingabe; 
   readln(eingabe);
   end;
   
   alleDrucken(a);
END.

Binären Suchbaum aufbauen

program Binaerbaum (input, output);              
   {Verwaltet einen Binärbaum}                      
   const
   NULL=0;                                         
   EINS=1;
   F=false;
   T=true;
   
   type
   tRefBinBaum= ^tBinBaum;                        
   tBinbaum= record                               
   info: integer;
   links:tRefBinBaum;
   rechts:tRefBinBaum;
   end;
   var 
   wurzel : tRefBinBaum;
   Zahl: integer;
   
   procedure einf(inWert:integer; 
   var ioBaum:tRefBinBaum);                     
   {fügt inWert als neuen Knoten in den Baum ein}            
   var
   Zeiger: tRefBinBaum; 
   begin                                                
   if ioBaum=nil then
   {Baum ist noch leer}
   begin
   new(Zeiger);
   Zeiger^.info:=inWert;
   Zeiger^.links:=nil;
   Zeiger^.rechts:=nil;
   ioBaum:=Zeiger;                                         
   end
   else
   begin
   if inWert <= ioBaum^.info then
   {Wert links einfügen}
   begin
   if ioBaum^.links=nil then
   {einfügen}
   begin
   new(Zeiger);
   Zeiger^.info:=inWert;
   Zeiger^.links:=nil;
   Zeiger^.rechts:=nil;
   ioBaum^.links:=Zeiger;
   end
   else
   {links weitersuchen}
   einf(inWert, ioBaum^.links);
   end;
   if inWert > ioBaum^.info then
   {Wert rechts einfügen}
   begin
   if ioBaum^.rechts=nil then
   {einfügen}
   begin
   new(Zeiger);
   Zeiger^.info:=inWert;
   Zeiger^.links:=nil;
   Zeiger^.rechts:=nil;
   ioBaum^.rechts:=Zeiger;
   end
   else
   {rechts weitersuchen}
   einf(inWert, ioBaum^.rechts);
   end;
   end;
   end; 
 function finden(inBaum:tRefBinBaum; 
   inWert:integer): boolean;                           
   {sucht inWert im Baum und gibt true oder false zurück}              
   begin
   if inBaum=nil then
   {Knoten leer}
   finden:=F
   else
   if inBaum^.info=inWert then
   {Wert gefunden}
   finden:=T
   else
   {links und rechts suchen}
   finden:=finden(inBaum^.links,inWert) or finden(inBaum^.rechts,inWert);
   end;
   
   procedure drucken(inBaum:tRefBinBaum);
   begin
   if inBaum <> nil then
   begin
   drucken(inBaum^.links);
   writeln(inBaum^.info);
   drucken(inBaum^.rechts);
   end;
   end;
   
   BEGIN                                                                 
   {Baum aufbauen}                                                     
   wurzel:=nil;                                                        
   einf(NULL, wurzel);
   einf(EINS , wurzel);
   einf(9, wurzel); 
   einf(5, wurzel);
   einf(3, wurzel);
   einf(10, wurzel);
   einf(EINS, wurzel);
   
   for Zahl:= 20 to 30 do
   begin
   einf(Zahl, wurzel);
   {Zahl := Zahl+1; ist auskommentiert}				              
   end; 
 {Baum drucken}
   drucken(wurzel);
   
   {im Baum suchen}
   Zahl:=0;
   while Zahl >= 0 do
   begin
   writeln('Nach Zahl suchen, Abbrechen mit negativer Zahl');        
   readln(Zahl);
   if Zahl>=0 then
   writeln(finden(wurzel, Zahl)); 
   end;
   
 END.
 

Verkettete Liste aufbauen

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;
   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);
   
 END.