Pascal, Mi lehet a hiba? Hol keressem?
A cél az hogy mondja meg a program hányszor fagyott meg a víz, nem összekeverendő hogy hányszor volt negatív érték.
Nos valamiért sokszor jól lefut, de sokszor nem...
Program fagyas;
Uses crt;
Const n=31;
Var tomb:array[1..n] of Longint;
fagyott: Longint;
i: Byte;
fagy: Boolean;
Begin
Clrscr;
Randomize;
fagy:=False;
Writeln('Januari homersekleti adatok elemzese!');
For i:=1 to n do
Begin
Repeat
tomb[1]:=Random(30)-10;
Until tomb[1]<>0;
tomb[i]:=Random(30)-10;
Write (tomb[i]:4);
If (fagy) and (tomb[i]<=0) Then fagyott:=fagyott+1;
fagy:=tomb[i]>0;
End;
Writeln;
Writeln('Fagyasok: ',fagyott);
Readkey;
End.
Nem tudom mi lehet a hiba...
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
Arra válaszolok, hogy hol/hogyan keresd:
Írasd ki a tömböt (mondjuk ez megvan) és írasd ki mellé azt is, hogy mi van a fagy és fagyott változókban. Akkor látni fogod, hol romlik el.
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
program fagy;
const napok = 31;
var tomb : array[1..napok] of integer;
fagyas, i : byte;
begin
Randomize;
for i := 1 to napok do tomb[i] := Random(30) - 10;
while tomb[1] = 0 do tomb[i] := Random(30) - 10;
for i := 1 to napok - 1 do if ((tomb[i] > 0) and (tomb[i+1] <= 0)) then Inc(fagyas);
for i := 1 to napok do WriteLn('Homersekletek: ', tomb[i]);
WriteLn('Fagyos napok sz ma: ', fagyas);
ReadLn;
end.
Szerintem így:)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
Bocs ezt elírtam :while tomb[1] = 0 do tomb[i] := Random(30) - 10; helyett
while tomb[1] = 0 do tomb[1] := Random(30) - 10;
Amúgy ha nem muszáj ne szívasd magad :)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
Szia.
Akkor most az első elem számit vagy nem ?
Ha számit, akkor az első elemet nem vizsgálja csak a második elemet (de ezt is csak akkor ha az első elem nem negativ és igy tovább, addig nem vizsgál amig nem lesz egy pozitiv elem, ha ez első 10 elem mind negativ akkor csak a 11-dik elemet fogja vizsgálni, holott addigra minimum 1 fagyás történt.)
mivel :
fagy:=False;
..
..
..
If (fagy) and (tomb[i]<=0) Then fagyott:=fagyott+1;
fagy:=tomb[i]>0;
..
..
A másik amit látok, fagyott változónak illene értéket adni valahol ott ahol a fagy boolean váltzónak is értéket adsz: fagyott:=0;
Sok sikert.
üdv.
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
"Repeat
tomb[1]:=Random(30)-10;
Until tomb[1]<>0; "
Csak mellékes megjegyzés, hogy ez a ciklus minden alkalommal lefut, amíg a for ciklus fut, tehát mindig megváltoztatod az első elem értékét, aminek nem sok értelme van (és az első futáskor, amikor i=1, akkor még jól felül is írod azt, amit a repeat ciklusod kiszámolt...:) ) A for ciklus előtt kéne lennie, és a for ciklusnak kettőtől kéne indulnia.
No és ez így már okés, vagy van benne nagyobb hiba?
Program homersekletiadatok;
Uses Crt;
Const n=30;
Var tomb:array[1..n] of longint;
i,megfagyott: byte;
fagyott:Boolean;
Begin
Clrscr;
Randomize;
Writeln('Januari homersekleti adatok elemzese');
megfagyott:=0; fagyott:=0;
Repeat
tomb[1]:=Random(20)-10;
Until tomb[1]<>0;
If tomb[1]<0
Then
fagyott:=true
Else
fagyott:=false;
For i:=2 to n do
Begin
tomb[i]:=Random(20)-10;
Write(tomb[i]:4);
If (tomb[i]<0) and (fagyott=false) Then megfagyott:=megfagyott+1;
fagyott:=tomb[i]<0;
write(fagyott:4); Write(megfagyott:2);
End;
Writeln;
Writeln('Ennyiszer fagyott meg a viz: ',megfagyott);
Readkey;
End.
Talán így már jó:
Program homersekletiadatok;
Uses Crt;
Const n=30;
Var tomb:array[1..n] of longint;
i,megfagyott: byte;
fagyott:Boolean;
Begin
Clrscr;
Randomize;
Writeln('Januari homersekleti adatok elemzese');
megfagyott:=0; fagyott:=0;
Repeat
tomb[1]:=Random(20)-10;
Until tomb[1]<>0;
Write(tomb[1]);
If tomb[1]<0
Then
Begin
fagyott:=true;
inc(megfagyott);
End
Else
fagyott:=false;
For i:=2 to n do
Begin
tomb[i]:=Random(20)-10;
Write(tomb[i]:4);
If (tomb[i]<0) and (fagyott=false) Then inc(megfagyott);
fagyott:=tomb[i]<=0;
{ write(fagyott:4); Write(megfagyott:2); }
End;
Writeln;
Writeln('Ennyiszer fagyott meg a viz: ',megfagyott);
Readkey;
End.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!