Einführung in die imperative Programmierung

WS 2015/16

Aufgabe 1

{$B+} {$R+}
program Maximum (input, output);
   {erwartet beliebig viele ganze Zahlen und berechnet das Maximum}
 var 
   i : integer;
   max : integer;
   
begin
   readln(i); 
   if i=0 then
   {falls erste Zhal 0 ist}
   writeln('leere Eingabefolge')
   else
   begin
   max:=i;
   repeat
   if i> max then
   max := i;
   readln(i);
   until i=0;
   writeln('Maximum ist ', max);
   end; 
end. 


Aufgabe 2

{$B+} {$R+}
program merge (input, output);
      { liest ohne Eingabeueberpruefung zwei sortierte Felder mit 
      integer-Zahlen ein; beide Felder werden in einem weiteren Feld
      sortiert zusammengefuegt; das Ergebnis wird ausgegeben; ist 
      die Eingabe unsortiert, so ist das Ergebnisfeld undefiniert }
      const
      FELDLAENGE1 = 5;
      FELDLAENGE2 = 8;
      ERGEBNISFELDLAENGE = 13; { FELDLAENGE1 + FELDLAENGE2 }
      
      type
      tFeld1 = array [1..FELDLAENGE1] of integer;
      tFeld2 = array [1..FELDLAENGE2] of integer;
      tErgebnisFeld = array [1..ERGEBNISFELDLAENGE] of integer;
 var
      Feld1 : tFeld1;
      Feld2 : tFeld2;
      ErgebnisFeld : tErgebnisFeld;
      i : integer;
      j : integer;
      k : integer;
      begin
      { sortierte Felder einlesen }
      writeln ('Bitte', FELDLAENGE1:2, ' Werte des ersten Feldes ',
      'sortiert eingeben!');
      for i := 1 to FELDLAENGE1 do
      readln (Feld1[i]);
      writeln ('Bitte', FELDLAENGE2:2, ' Werte des zweiten Feldes ',
      'sortiert eingeben!');
      for j := 1 to FELDLAENGE2 do
      readln (Feld2[j]);
 {Feld1 und Feld 2 werden verglichen}
      i:=1; 
      j:=1;
      k:=1;
      while (i<=FELDLAENGE1) and (j<=FELDLAENGE2) do
      begin
      if Feld1[i] <= Feld2[j] then
      begin
      ErgebnisFeld[k] := Feld1[i];
      i:=i+1;
      k:=k+1;
      end
      else
      begin
      ErgebnisFeld[k] := Feld2[j];
      j:=j+1;
      k:=k+1;
      end
      end;
      
      {Restfeld wird an das Ergebnis angehängt}
      while i<=FELDLAENGE1 do
      begin
      ErgebnisFeld[k]:= Feld1[i];
      i:=i+1;
      k:=k+1;
      end;
      
      while j<=FELDLAENGE2 do
      begin
      ErgebnisFeld[k]:= Feld2[j];
      j:=j+1;
      k:=k+1;
      end;
      
      writeln ('Das Ergebnisfeld ist:');
      for k := 1 to ERGEBNISFELDLAENGE do
      write (ErgebnisFeld[k], ' ');
      writeln
      end.
 

Aufgabe 3

   program MatrixSummen (input, output);
   { ueberprueft bei einer Matrix von integer-Zahlen, ob
   jede Spaltensumme groesser ist als die Zeilensumme einer
   angegebenen Zeile }
 const
   ZEILENMAX = 3;
   SPALTENMAX = 4;
 type
   tMatrix = array [1..ZEILENMAX, 1..SPALTENMAX] of integer;
 var
   Matrix : tMatrix;
   ZeilenNr,
   SpaltenNr,
   Eingabe : integer;
 function ZeilenSummeKleiner (var inMatrix : tMatrix;
   inZeilenNr : integer) : boolean;
   var
   ZeilenSumme: integer;
   SpaltenSumme: integer;
   i,j: integer;
   alleGroesser : boolean;
   
   begin 
   {Zeilensumme berechnen}
   ZeilenSumme := 0; 
   for j:= 1 to  SPALTENMAX do
   ZeilenSumme:= ZeilenSumme+ inMatrix[inZeilenNr, j];
   
   {Spalten durchlaufen}
   j:= 1;
   alleGroesser := true;
   repeat 
   SpaltenSumme:=0;
   for i:= 1 to ZEILENMAX do
   SpaltenSumme:= SpaltenSumme + inMatrix[i,j]; 
   if SpaltenSumme <= ZeilenSumme then
   alleGroesser := false;
   j:=j+1; 
   until (j> SPALTENMAX) or (alleGroesser = false);
   ZeilenSummeKleiner := alleGroesser; 
   
   end; { ZeilenSummeKleiner }
begin
   { Matrixelemente einlesen }
   for ZeilenNr := 1 to ZEILENMAX do
   for SpaltenNr := 1 to SPALTENMAX do
   read (Matrix[ZeilenNr, SpaltenNr]);
 repeat
   write ('Welche Zeile soll ueberprueft werden ? (1..',
   ZEILENMAX, ') (anderes = Ende) ');
   readln (Eingabe);
 if (Eingabe > 0) and (Eingabe <= ZEILENMAX) then
   begin
   ZeilenNr := Eingabe;
   { hier wird die Funktion ZeilenSummeKleiner aufgerufen }
   if ZeilenSummeKleiner (Matrix,ZeilenNr) then
   writeln ('Jede Spaltensumme ist groesser als die ',
   'Zeilensumme der ', ZeilenNr, '. Zeile.')
   else
   writeln ('Es sind nicht alle Spaltensummen groesser als die ',
   'Zeilensumme der ', ZeilenNr, '. Zeile.')
   end;
   until (Eingabe <= 0) or (Eingabe > ZEILENMAX)
   end. { MatrixSummen }
 

Funktionen

program gauss (input, output);
 var n : integer;
   
   function summe(n : integer): integer;
   var 
   i : integer;
   ergebnis : integer;
   begin
   ergebnis := 0;
   for i:=1 to n do
   ergebnis:= ergebnis+i;
   summe := ergebnis;
   end;
   
   begin
 readln(n);
   writeln('Summe ist ', summe(n));
   
   end. 
 

Records

program bruchrechnen (input, output);
 type 
   tBruch = record 
   zaehler: integer;
   nenner : integer;
   end;
   
   var
   bruch1, bruch2, bruch3 : tBruch;
   
   function produkt(br1 : tbruch; br2 : tBruch): tBruch;
   var ergebnis: tBruch;
   begin
   produkt.zaehler:= br1.zaehler * br2.zaehler;
   produkt.nenner:=  br1.nenner * br2.nenner;
   {produkt := ergebnis;}
   end;
   
   begin
   writeln('Bruch 1 eingeben');
   readln( bruch1.zaehler, bruch1.nenner);
   
   writeln('Bruch 2 eingeben');
   readln( bruch2.zaehler, bruch2.nenner);
   
   bruch3 := produkt(bruch1, bruch2);
   
   writeln('Produkt ist ', bruch3.zaehler,'/',bruch3.nenner);
end.