Einführung in die imperative Programmierung

WS 2016/17

 

 

Aufgabe 1

program aufg1;
 uses crt;
   var 
   zahl: integer;
   max: integer;
BEGIN
   readln(zahl);
   max:=zahl;
   while zahl<> 0 do
   begin
   if zahl > max then
   max:= zahl;
   readln(zahl);
   end;
   if max<>0 then
   writeln('Max: ', max)
   else
   writeln('leere Eingabenfolge') 
   
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;
   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 
   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; {Verschmelzungsprozess} 
 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;
   { ergibt true, falls die Summe aller Elemente mit dem
   uebergebenen Zeilenindex kleiner ist als jede
   Spaltensumme }
   var 
   zeilenSumme, spaltenSumme: integer;
   i,j: integer; 
   begin 
   zeilenSumme:=0;
   for i:=1 to SPALTENMAX do
   zeilenSumme:= zeilenSumme + inMatrix[inZeilenNr, i];
   j:=1;
   repeat
   spaltenSumme:=0;
   for i:=1 to ZEILENMAX do
   spaltenSumme:= spaltenSumme+ inMatrix[i, j];
   j:=j+1; 
   until (spaltenSumme<= zeilenSumme) or (j>SPALTENMAX); 
   if spaltenSumme>zeilenSumme then
   ZeilenSummeKleiner:=true
   else 
   ZeilenSummeKleiner:=false;
   
   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 }
 

Aufzählungstyp

   program blumen;
 type
   tFarbe = (rot, blau, gelb);
   tBlumenzahl = array [tFarbe] of integer;
   
   var
   i: integer;
   Blumenzahl : tBlumenzahl;
   farbe: tFarbe;
BEGIN
   for farbe := rot to gelb do
   Blumenzahl[farbe]:=0;
   
   for farbe := rot to gelb do
   writeln(farbe,': ',Blumenzahl[farbe]);
   
   END.
 

Fakultät

   program fak;
 var 
   i : integer;
   prod: real;
   
   BEGIN
   {for-Schleife}
   prod:=1;
   for i:=1 to 100 do
   prod:=prod*i;
   writeln('Fakultaet: ', prod);
   
   {while-Schleife}
   prod:=1;
   i:=1;
   while i<=100 do
   begin
   prod:=prod*i;
   i:=i+1
   end; {while}
   writeln('Fakultaet: ', prod);
   
   {repeat-Schleife}
   prod:=1;
   i:=1;
   if i<=100 then
   repeat
   prod:=prod*i;
   i:=i+1;
   until not(i<=100);
   writeln('Fakultaet: ', prod);
   
   END.

Fakultät

program fakFunktion;
 var 
   i : integer;
   j : integer;
   k : integer;
 function fakultaet(i: integer): integer;
   {berechnet die Fakultät von i}
   var
   j: integer;
   ergebnis: integer;
   begin
   ergebnis:=1;
   for j:= 1 to i do
   ergebnis:= ergebnis*j;
   fakultaet:= ergebnis;
   j:=7;
   k:=7;
   end;
BEGIN
   readln(i);
   writeln(i,' ', fakultaet(i)); 
   writeln(k);
   
   END.

Gauss

 program gauss;
 var 
   i : integer;
   summe: integer;
   
   BEGIN
   summe:=0;
   for i:=1 to 100 do
   summe:=summe+i;
   writeln('Summe: ', summe);
 END.

Matrixmultiplikation

 program matrixMult;
 type
   tmatrix = array[1..2,1..2] of integer;
 var 
   i ,j ,k : integer;
   m1, m2, m3: tmatrix;
 
BEGIN
   for i:=1 to 2 do
   for j:=1 to 2 do
   readln(m1[i,j]); 
   
   for i:=1 to 2 do
   for j:=1 to 2 do
   readln(m2[i,j]);
   
   for i:= 1 to 2 do
   begin
   for j:= 1 to 2 do
   begin
   m3[i,j]:=0; 
   for k:= 1 to 2 do
   m3[i,j] := m3[i,j] + m1[i,k]*m2[k,j];
   end;
   end; 
   
   for i:=1 to 2 do
   begin
   for j:=1 to 2 do
   write(m3[i,j],' '); 
   writeln();
   end; 
   
   END.

Palindromtest

program pali;
 uses crt;
   var 
   i: integer;
   wort : string;
   gespiegelt: string;
BEGIN
   readln(wort);
   
   for i:=length(wort) downto 1 do
   gespiegelt := gespiegelt + wort[i];
   writeln(gespiegelt);
   
   if gespiegelt=wort then
   writeln('ist ein Palindrom')
   else
   writeln('kein Palindrom');
   
   END.


RECORD

program person;
 type
   tgeb = record
   tag: 1..31;
   monat: 1..12;
   jahr: integer;
   end;
   tperson = record
   name: string;
   vorname: string;
   geb: tgeb;
   end;
   tpersonFeld = array[1..100] of tperson;
   
   var
   person1 : tperson;
   personen : tpersonFeld;
BEGIN
   person1.name:= 'Maier';
   person1.vorname:= 'Otto';
   person1.geb.tag := 1;
   person1.geb.monat:= 12;
   person1.geb.jahr:= 1954;
   
   personen[1] := person1;
   
   END.

Wort umdrehen

program umdrehen;
 uses crt;
   var 
   i: integer;
   wort : string;
BEGIN
   readln(wort);
   
   for i:=length(wort) downto 1 do
   write(wort[i]);
   writeln();
   
   END.