Hallo.
Ich habe aus schulischen Zwecken ein Programm geschrieben, welches diese Funktion hat:
Wir haben 100 Gefängniszellen (als ein 100er array) welche vorerst geschlossen sind.
Nun werden sie geöffnet und geschlossen: Am ersten Tag wird jede Tür geöffnet, am zweiten wird jede zweite Tür geschlossen, am dritten wird jede dritte überprüft, offene werden geschlossen, geschlossene werden geöffnet.Dies geht so weiter bis 100.
Nach 100 Tagen wird angegeben welche Zellen nun noch offen sind.
Mein Programm führt nun aus, gibt jedoch statt denn Zellen die geöffnet sind alle Zellen von 1-100 aus.
Nach mehreren Stunden Beschäftigung würde ich nun gerne wissen, wo denn der Fehler liegt, da ich ihn einfach nicht finden kann. Das Programm sollte in der Form so bestehen bleiben, nur das gröbste Problem, welches das richtige Ergebnis verhindert, genannt werden. Ich danke im Voraus!
(1 steht in dem Programm für geschlossen, 2 für offen)
program gefaengnis;
var p,j,x,y,i,u:integer;
zahl:array[1..100] of integer;
begin
x:=1;
y:=1;
p:=1;
for j:=1 to 100 do (hier stelle ich zunächst alle Türen auf geschlossen)
begin
zahl[p]:=1;
p:=p+1;
end;
for i:=1 to 100 do
begin
while x<=100 do (diese Wiederholungsschleifen sorgen für das Öffnen und
begin Schließen der Türen, wie im Text beschrieben)
if zahl[x]=1 then
zahl[x]:=2
else
zahl[x]:=1;
x:=x+y;
end;
y:=y+1;
end;
for u:=1 to 100 do (Diese Schleife sorgt für die Ausgabe der Zellennummern die auf
begin offen (d.h. der Zahl 2) stehen)
if zahl[u]=2 then
writeln(u);
readln;
end;
end.
Was ich ausgegeben bekomme:
1
2
3
4
5.....100
Ich bitte inständigst um Hilfe!