Цикл FOR. Делфи, Delphi. Алгоритм

компьютеры программирование делфи алгоритм цикл

Есть такая функция: (проверка на дубликат)
function TForm1.Dubl(md5:string): Boolean;
var
j:byte; f:boolean;
begin
Result:=false;
for j := 0 to 52 do
begin
if K[j].ID =md5 then
Result:=true;
Break;
end;
end;
Отладчик смотрю: заходит в цикл FOR один раз со значением переменной j = 53

вызываю эту функцию в процедуре тоже в цикле FOR
for I := 0 to StrToInt(Edit1.Text)-1 do
if Dubl(md5Card(i+1)) then

Что делаю не так?

Примечание:
to Kasim_RI спасибо

to All
for j := 0 to 52 do
begin
if K[j].ID =md5 then
Здесь цикл почему-то работает так: начинается с j=53 и вниз, т.е. следующий j=52, j=51. Но лишь столько шагов сколько равно i+1 в вызываемой процедуре, т.е. вот здесь if Dubl(md5Card(i+1)) then
т.е. если i=4 то в функции j=53, j=52, j=51, j=50, j=49

Видимо так нельзя вызывать... цикл в цикле получается, но всё равно не понятно почему цикл в вызываемой функции работает зависимо от того как вызвать эту функцию...

Примечание:
to Kasim_RI
изменил на integer - всё по прежнему, чудеса )
Вообще такого не может быть, но есть ) Приглашаю в гости посмотреть :)
скриншот: http://i055.radikal.ru/1006/91/87081cb1972c.png
Ответы:
if K[j].ID =md5 then
      Result:=true;
      Break;
в этом куске break будет выполнятся независимо от условия, надо делать так:
    if K[j].ID =md5 then
    begin
      Result:=true;
      Break;
    end;
---
Попробуй вместо byte указать тип integer, а вообще вроде как j не может равняться  53.
---
Очень странно, что тут не так))). примени другой цикл, имя переменной поменяй, и что-то в этом роде.
Например так:
 result := false;
 jj := 0;
 while (not result) do
 begin
   if K[jj].ID =md5 then
     Result := true;
    inc(jj);
  end;
>Здесь цикл почему-то работает так: начинается с j=53 и вниз, т.е. следующий j=52, j=51.
даже теоретически так быть не должно, у вас j=53 вообще в цикл никак не попадает, то ли всё не так как вы написали то ли это глюк, советую: попробуйте проинициализировать j до цикла, а лучше вообще переобзовите переменную пооригинальней, jj например, сделайте ее integerом и проинициализируйте до цикла.
А вообще код ваш запутан и непонятен как и его объяснения..
у вас в функции прописано что там будет переменная типа стринг, md5Card(i+1) имеет тип стринг? Так же, объявляется f но нигде не используется. Если писать так, как сказал Kasim_RI, то операторные скобки после for там вообще не нужны, ибо if является цельной конструкцией.. это так, с одного взгляда если посмотреть что мне не нравится, поверхностно.
Дополнение #2 сейчас вообще переписали неправильно. смотрите, предположим что у вас выполнился ваш иф хотябы раз:
f:=false;
result:=true;
далее получаем брейк и вываливаемся из цикла
result:=f, то есть false.
Результат: что бы вы не делали функция вернет false.


14 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.