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.