Stránka 1 z 1

Pomoc s turbopascalom

Napsal: 18 lis 2010, 18:24
od mety
Zdravim všetkych.
Potreboval by som pomôcť s turbopascalom.
Konkretne ide o premennu "b" v priloženom kode programu.
Po spustení programu sa hodnota premenny "b" výpíše viac krát ta ista pod seba.
Ja ju potrebujem vypísať len raz.
Neviete niekto pomôcť kde mam chybu?
Lebo keď dam vypisať hodnotu "oneskorenie" priamo:
writeln(oneskorenie ) vypiše sa hodnota správne len raz.
Ako náhle priradim hodnotu oneskorenie premennej
b:=(oneskorenie) , vypiše mi to viac krát pod seba :(
Tu je samotný program:

Kód: Vybrat vše

Program test;
uses crt;
var a:word;
    i:byte;
    c,b:word;

const oneskorenie : array [1..165] of word =
(5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
6,6,6,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,
8,9,9,9,9,9,9,9,10,10,10,10,10,10,11,11,11,
11,12,12,12,12,13,13,13,13,14,14,14,14,14,15,
15,15,15,16,16,16,16,17,17,17,18,18,18,19,19,
19,20,20,20,21,21,22,22,23,23,24,24,25,25,26,
26,27,27,28,28,29,29,30,30,31,31,32,33,33,34,
35,36,36,37,38,39,40,41,42,43,44,45,46,48,49,
50,52,54,55,57,59,61,63,66,68,71,74,77,80,84,
88,92,97,102,108,115,122,130,139,150,163,177,
185,194,204,215,227,241);

const ctIN : array [1..166] of word =
(100,102,103,105,107,109,110,111,112,113,114,
115,117,118,119,120,121,122,124,125,126,128,
129,130,132,133,135,136,138,140,141,143,145,
146,148,150,152,154,156,158,160,162,164,167,
169,171,174,176,179,182,185,188,190,194,197,
200,203,207,211,214,218,222,226,231,235,240,
245,248,251,254,258,261,264,268,271,275,279,
283,287,291,296,300,305,309,314,319,324,330,
335,341,347,353,359,366,373,380,387,395,403,
411,420,429,435,441,448,455,462,469,476,484,
492,500,508,517,526,536,545,556,566,577,588,
600,612,625,638,652,667,682,698,714,732,750,
769,789,811,833,857,882,909,938,968,1000,1034,
1071,1111,1154,1200,1250,1304,1364,1429,1500,
1579,1667,1765,1875,2000,2143,2308,2500,2609,
2727,2857,3000,3158,3333) ;


begin
clrscr;

write('Zadaj hodnotu:');
readln(a);

for i:=1 to 165 do
begin
if (a>=ctIN [i]) AND (a<ctIN [i+1]) then b:=(oneskorenie[i]) ;
writeln(b);
end;






repeat until keypressed;

end.

Napsal: 18 lis 2010, 18:45
od ZdenekHQ
To je logický, k "i" přičítáš jen jedničku, zatímco interval máš třeba 5. Nastav si po výpisu nějakej příznak (třeba d:=1) a dej to jako podmínku pro writeln.

write('Zadaj hodnotu:');
readln(a);
d:=0;

for i:=1 to 165 do
begin
if (a>=ctIN ) AND (a<ctIN [i+1]) and (d=0) then
begin
b:=(oneskorenie) ;
writeln(b);
d:=1;
end;

end;

Napsal: 18 lis 2010, 18:56
od mety
Diky za radu , funguje to :)

Napsal: 18 lis 2010, 21:40
od pocitujlasku
este drobnost, ktora mi hned udrela do oci:

Kód: Vybrat vše

repeat until keypressed; 
zbytocne vytazi procak na 100%, namiesto toho pouzi

Kód: Vybrat vše

readln;

Napsal: 19 lis 2010, 09:47
od ZdenekHQ
Když jsme u toho zatížení, je tam možnost použít cyklus

i:=0;
repeat
i:=i+1;

...

until (d=1) or (i=165);

takže to skončí hned, jak to najde správnou hodnotu.