mam problem pri jednej funkcii, ktora deli intervali na polku a hlada v poli jedno cislo ... no jednotucho,ide o to , ze sa zacykli do aleluja .... nevidi tam niekto nejaku chybu???
Function Najdi(nazov:string;NajCis:byte):boolean;
Var f: File of byte;
cislo:array[1..50] of byte;
i,min,max,pol:byte;
Begin
Assign(f,nazov);
Reset(f);
For i:=1 to 50 do
Read(f,cislo[i]);
Close(f);
min:= 1;
max:= 50;
Repeat
pol:= (max + min - 1) div 2;
If cislo[pol] = NajCis
Then
Najdi:= true
Else
If cislo[pol] > NajCis
Then
max:= pol
Else
min:= pol;
If (max - min) = 1
Then
Najdi:= false;
Until false;
End;

ocividne sa snazis skodit Binary search. pozri si o tom nieco na wiki - moc sa mi ale nepozdava podmienka (max-min) = 1 ale to som len narychle prebehol kod, takze to moze byt ok(este som sa s takymto zapisom binary search popravde nestretol :) ) - tam by som skorej daj <= 1
druha poznamka je k tomu, preco sa ti to zacykli. Je to jasne, kedze repeat konci vtedy,kedy je za until podmienka splnena a kedze ty tam mas natvrdo False, tak neskonci nikdy. Pokial tam chces mat na tvrdo podmienku false, tak z repeat vyskocis pomocou prikazu break;
problem nastava v tom, ze ty predpokladas, ze ked zadas funkcii vratit hodnotu, tak skonci jej beh, co u pascalu neplati a ona pokracuje dalej
repeat
...
until false;
je nekonecny cyklus rovnako ako:
while true do
begin
end;
Tiez v podmienke nemusi byt prenna=true ale staci samotna premenna
if ladenie then
writeln('Som tu')
alebo mozno pouzit not:
if not ladenie then
writeln('ladenie je vypnute');