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');