Einführung
in die imperative Programmierung
WS 2016/17
Klausuraufgabe HK14 Aufgabe 2
program aufg2;
const
ANZ = 20;
type
tIndex = 1..ANZ;
tFeld = array[tIndex] of integer;
var
A: tFeld;
i: integer;
procedure loeschen(var ioFeld: tFeld);
var
element: integer;
i, j: integer;
begin
for i:= 1 to 20 do
begin
element:= ioFeld[i];
for j:= i+1 to 20 do
if ioFeld[j]=element then
ioFeld[j] := 0;
end;
end;
BEGIN
for i:=1 to ANZ do
readln(A[i]);
loeschen(A);
for i:=1 to ANZ do
write(A[i],' ');
writeln();
END.
Klausuraufgabe HK14 Aufgabe 3
program pascal;
type
tRefListe = ^tListe;
tListe = record
wert:integer;
next:tRefListe
end;
var
P, neu, neuP: tRefListe;
function Peck(inRefListe: tRefListe) : tRefListe;
var
vor, nach, kopf, ende, hilfe: tRefListe;
begin
vor:= inRefListe;
if vor^.next = nil then
{Liste hat nur ein Element}
begin
new(kopf);
kopf^.wert:= 1;
new(ende);
ende^.wert:= 1;
kopf^.next:= ende;
ende^.next:=nil;
Peck:=kopf;
end
else
begin
nach:=vor^.next;
new(kopf);
kopf^.wert:= 1;
hilfe:=kopf;
while (nach<>nil) do
begin
new(ende);
ende^.wert:= vor^.wert+nach^.wert;
ende^.next:=nil;
hilfe^.next:= ende;
hilfe:=ende;
vor:= nach;
nach:=nach^.next;
end;
new(ende);
ende^.wert:=1;
ende^.next:=nil;
hilfe^.next:= ende;
Peck:= kopf;
end;
end;
BEGIN
new(neu);
neu^.wert:=1;
neu^.next:=nil;
P:=neu;
new(neu);
neu^.wert:=4;
neu^.next:=P;
P:=neu;
new(neu);
neu^.wert:=6;
neu^.next:=P;
P:=neu;
new(neu);
neu^.wert:=4;
neu^.next:=P;
P:=neu;
new(neu);
neu^.wert:=1;
neu^.next:=P;
P:=neu;
neuP := Peck(P);
while (neuP <> nil) do
begin
write(neuP^.wert, ' ');
neuP:= neuP^.next;
end;
writeln();
END.
Klausuraufgabe HK14 Aufgabe 4
program aufgabe4;
type tNatZahl = 1..maxint;
tRefBinBaum = ^tBinBaum;
tBinBaum = record
Wert:tNatZahl;
links:tRefBinBaum;
rechts:tRefBinBaum
end;
function OKBaum(inRefWurzel: tRefBinBaum; inMax: tNatZahl) : boolean;
var
left,right:boolean;
begin
if (inRefWurzel^.links=nil) and (inRefWurzel^.rechts=nil) then
{Blatt erreicht}
begin
if inMax < inRefWurzel^.Wert then
OKBaum:=true
else
OKBaum:= false;
end
else
{innerer Knoten}
begin
if inMax < inRefWurzel^.Wert then
inMax:= inRefWurzel^.Wert;
if inRefWurzel^.links<>nil then
left:= OKBaum(inRefWurzel^.links, inMax)
else
left:=true;
if inRefWurzel^.rechts<>nil then
right := OKBaum(inRefWurzel^.rechts,inMax)
else
right:= true;
OKBaum:= right and left;
end;
end;
BEGIN
END.
Heron
program heron;
var
w,a: real;
i,n: integer;
BEGIN
writeln('a');
readln(a);
writeln('n');
readln(n);
w:=1;
for i:=1 to n do
w:=0.5*(w+a/w);
writeln(w);
END.
Heron rekursiv
program heron_rek;
var
w,a: real;
i,n: integer;
function heron(inA: real; inN : integer): real;
var
w: real;
begin
if inN=0 then
heron:= inA/2
else
begin
w:= heron(inA, inN-1);
writeln(w);
heron:= 0.5* (w+inA/w);
end;
end;
BEGIN
writeln('a');
readln(a);
writeln('n');
readln(n);
w:= heron(a, n);
writeln(w);
END.
Nachklausur 2013 Aufgabe3
program untitled;
const
FELDGROESSE=5;
type
tIndex=1..FELDGROESSE;
tFeld=array[tIndex] of integer;
function istDrin(inFeldA: tFeld; inFeldB: tFeld): boolean;
var
i,j: integer;
OK,elem_drin: boolean;
begin
OK:= true;
for i:= 1 to FELDGROESSE do
begin
elem_drin:= false;
for j:= 1 to FELDGROESSE do
if inFeldA[i]=inFeldB[j] then
elem_drin:= true;
OK:= OK and elem_drin;
end;
end;
BEGIN
END.
Pascalsches Dreieck
program PascalDreieck;
type
tRefListe = ^tListe;
tListe = record
wert:integer;
next:tRefListe
end;
var
Liste,zeiger,neu, NeuZeile : tRefListe;
function naechsteZeile(inListe: tRefListe) : tRefListe;
var
zeigerneu, zeigeralt, neuerKnoten, zeigerneuLetzter: tRefListe;
vorWert:integer;
begin
vorWert:=0;
zeigeralt:= inListe;
zeigerneu:=nil;
while zeigeralt<>nil do
begin
new(neuerKnoten);
neuerKnoten^.wert:= vorWert + zeigeralt^.wert;
neuerKnoten^.next:=nil;
if zeigerneu=nil then
begin
zeigerneu:=neuerKnoten;
zeigerneuLetzter:= neuerKnoten;
end
else
begin
zeigerneuLetzter^.next:= neuerKnoten;
zeigerneuLetzter:= neuerKnoten;
end;
vorWert := zeigeralt^.wert;
zeigeralt:= zeigeralt^.next;
end; {while}
{letztes Element erzeugen}
new(neuerKnoten);
zeigerneuLetzter^.next := neuerKnoten;
neuerKnoten^.wert := 1;
neuerKnoten^.next := nil;
naechsteZeile := zeigerneu;
end;
procedure drucken(inListe: tRefListe);
var zeiger: tRefListe;
begin
zeiger:= inListe;
while zeiger<> nil do
begin
write(zeiger^.wert, ' ');
zeiger:= zeiger^.next;
end;
writeln();
end;
BEGIN
new(Liste);
Liste^.wert:=1;
Liste^.next:=nil;
zeiger:=Liste;
new(neu);
neu^.wert:=4;
neu^.next:=nil;
zeiger^.next:=neu;
zeiger:= neu;
new(neu);
neu^.wert:=6;
neu^.next:=nil;
zeiger^.next:=neu;
zeiger:= neu;
new(neu);
neu^.wert:=4;
neu^.next:=nil;
zeiger^.next:=neu;
zeiger:= neu;
new(neu);
neu^.wert:=1;
neu^.next:=nil;
zeiger^.next:=neu;
zeiger:= neu;
write(' ');
drucken(Liste);
neuZeile := naechsteZeile(Liste);
drucken(neuZeile);
END.
Quadratzahl?
program quadrat;
var
n,i: integer;
istQuadrat: boolean;
BEGIN
readln(n);
istQuadrat:= false;
i:= 0;
while (not istQuadrat) and ((i*i)<=n) do
begin
if (i*i)=n then
istQuadrat:= true
else
i:= i+1;
end;
if istQuadrat then
writeln('Ist Quadratzahl')
else
writeln('Ist keine Quadratzahl');
END.