Einführung in die imperative Programmierung

WS 2017/18

Gauss mit for-Schleife

program gauss;
uses crt;
   var i ,n ,summe: integer;
BEGIN
   readln(n);
   summe:=0;
   for i:= 1 to n do
   begin
   summe := summe+i;
   end;
 writeln('Summe: ', summe); 
   
   summe:= n * (n+1) div 2;
   
   writeln('Summe: ', summe);
   
   END.

Gauss mit while-Schleife

program gauss;
uses crt;
   var i ,n ,summe: integer;
BEGIN
   readln(n);
   summe:=0;
   
   i:=0;
   while i<n do
   begin
   i:=i+1;
   summe:=summe + i;
   end;
   
   writeln('Summe: ',summe);
   
   END.

Gauss mit repeat-Schleife

program gauss;
type tIndex = 1..MAXINT;
var i  ,summe: integer;
   n: tIndex;
BEGIN
   readln(n);
   summe:=0;
   
   i:=1;
   if n>=1 then
   repeat
   summe:=summe+i;
   i:=i+1;
   until i>n;
   
   writeln('Summe: ',summe);
   
   END.

Datei lesen

program datei;
 uses crt;
   var 
   Textdatei : Text;
   zeile: string;
BEGIN
   assign(Textdatei, 'daten.txt'); 
   reset(Textdatei);
   repeat
   readln(Textdatei, zeile);
   writeln(zeile);
   until eof(Textdatei);
   
END.

Aufgabe 1

program aufg1;
var  zahl, maximum : integer;
BEGIN
   writeln('Bitte Werte eingaben, für Beenden eine 0');
   
   readln(zahl);
   maximum:= zahl;
   while zahl<>0 do
   begin 
   if zahl>maximum then
   maximum:=zahl; 
   readln(zahl); 
   end;
   
   if maximum<>0 then
   writeln('Maximum: ',maximum)
   else
   writeln('Leere Eingabefolge!')
   
 END.
 

Aufgabe 2

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]);
 { Verschmelzungsprozess beginnen }
   i:=1; 
   j:=1;
   k:=1;
   for k:=1 to ERGEBNISFELDLAENGE do
   begin
   if i>FELDLAENGE1 then
   begin
   ErgebnisFeld[k] := Feld2[j];
   j:=j+1
   end
   else 
   if j>FELDLAENGE2 then
   begin
   ErgebnisFeld[k] := Feld1[i];
   i:=i+1
   end
   else
   begin
   if Feld1[i] < Feld2[j] then
   begin
   ErgebnisFeld[k] := Feld1[i];
   i:=i+1
   end 
   else
   begin
   ErgebnisFeld[k] := Feld2[j];
   j:=j+1
   end
   end;
   
   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 ({Eingabematrix} var inMatrix : tMatrix;
   inZeilenNr : integer) : boolean;
   { ergibt true, falls die Summe aller Elemente mit dem
   uebergebenen Zeilenindex kleiner ist als jede
   Spaltensumme }
   
   var ZeilenSumme, Spaltensumme,i,j:integer; 
   spaltegroesserzeile: boolean;
   
   begin 
   {Zeilensumme berechnen}
   ZeilenSumme:=0;
   for i:=1 to SPALTENMAX do
   ZeilenSumme:= ZeilenSumme + inMatrix[inZeilenNr, i];
   
   j:=1;
   spaltegroesserzeile:= true;
   repeat
   {Spaltensumme berechnen}
   Spaltensumme:=0;
   for i:= 1 to ZEILENMAX do
   Spaltensumme:= Spaltensumme + inMatrix[i, j];
   j:=j+1; 
   
   if  Spaltensumme <= ZeilenSumme then
   spaltegroesserzeile:= false;
   
   until (j>SPALTENMAX) or ( not spaltegroesserzeile) ;
   
   ZeilenSummeKleiner := spaltegroesserzeile;
 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 }