Kezdőoldal » Számítástechnika » Programozás » Pascal, Mi lehet a hiba? Hol...

Pascal, Mi lehet a hiba? Hol keressem?

Figyelt kérdés

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...


2014. jún. 4. 19:03
1 2
 1/15 A kérdező kommentje:
A for ciklus elején azért van egy repeat until is, mivel kell egy "előzmény" amit a tömb 1 elemeként kezelek, és itt az a lényeg hogy ne legyen az első adat 0. Azért 31 elemű tömb mivel az első elem csak előzmény :)
2014. jún. 4. 19:05
 2/15 anonim ***** válasza:

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.

2014. jún. 4. 19:21
Hasznos számodra ez a válasz?
 3/15 A kérdező kommentje:
kiírattam úgy ahogy írtad, és azt vettem észre hogy 0-nál mindig kap 1 false érteket de csak akkor adja hozzá ha előtte pozitív volt a szám. De ez így nem okés szerintem, mivel 0 fokon a víz folyékony/szilárd is lehet, és ezt határozza meg az előtte levő hőm(pozitív vagy negatív). Javíts ki ha nem jól gondolom.
2014. jún. 4. 20:01
 4/15 SimkoL ***** válasza:

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:)

2014. jún. 4. 20:12
Hasznos számodra ez a válasz?
 5/15 A kérdező kommentje:
Így sem rossz, de logikai változóval szeretném megoldani mindenképpen :) Úgymond kis kihívás.
2014. jún. 4. 20:45
 6/15 SimkoL ***** válasza:

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 :)

2014. jún. 4. 20:53
Hasznos számodra ez a válasz?
 7/15 coopper ***** válasza:

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.

2014. jún. 4. 21:03
Hasznos számodra ez a válasz?
 8/15 anonim ***** válasza:

"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.

2014. jún. 4. 23:04
Hasznos számodra ez a válasz?
 9/15 A kérdező kommentje:

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.

2014. jún. 5. 17:23
 10/15 A kérdező kommentje:

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.

2014. jún. 5. 17:33
1 2

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!