Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
2 / 2 / 1
Регистрация: 07.11.2011
Сообщений: 22
1

Магия с условием

19.12.2011, 15:54. Показов 1209. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Возможно я полный наркоман,но все же.

Как-то в интернетах видел решение данной проблемы.

Проблема в следующим.
Цикл в нем условие.Цикл выполняется только 1 раз,либо условие отвечает на true только один раз,но скорее всего цикл.Если перед условием добавляю showmessage,то все ок.

99% я видел решение данной ситуации. Щас найти не могу.Если не ошибаюсь,там ошибка решалась 1 функцией.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.12.2011, 15:54
Ответы с готовыми решениями:

Решить уравнение с пред условием, пост условием и со счетчиком
Здраствуйте,паскаль я начал изучать недавно,почти ничего непонимаю,уравнение примерно такое...

Нужна прога с пред условием и пост условием и циклом
Написать прогу с-пред пост условием и циклич. Дано натуральное n, и действительное Х вычислить :...

Цикл с пред условием и пост условием: табулирование функций
составить цикл с пред условием и пост условием y=8{x}^{3}-2{x}^{2}+sin(x/2) nx=-20 xk=20 h=0.2

Магия
Подскажите, у меня много вкладок и некоторые из них формируются динамически из SQL, но есть которые...

17
512 / 298 / 37
Регистрация: 22.06.2011
Сообщений: 929
19.12.2011, 15:58 2
Отсыпь немножко...
0
2184 / 1254 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
19.12.2011, 16:04 3
не фига не понятно что ты хочешь ))
если нужно что бы цикл выполнился только 1 раз, то зачем вообще нужен цикл
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
19.12.2011, 16:05 4
Давай сюда этот исходник, посмотрю, кто там Глорию потерял в кольце Юпитера.
0
2 / 2 / 1
Регистрация: 07.11.2011
Сообщений: 22
19.12.2011, 16:11  [ТС] 5
Цитата Сообщение от anonimus Посмотреть сообщение
не фига не понятно что ты хочешь ))
если нужно что бы цикл выполнился только 1 раз, то зачем вообще нужен цикл
Нет.Трабла в том ,что он и выполняется только 1 раз.А если добавляю перед условие showmessage,то он выполняется как ему и положено.

Добавлено через 3 минуты
Цитата Сообщение от taras atavin Посмотреть сообщение
Давай сюда этот исходник, посмотрю, кто там Глорию потерял в кольце Юпитера.
Сам исходник будет очень большим.
Но ошибка тут

отформатированный код:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
If tip='friends' then
  begin
    If antiban <> 1 then
      begin
        for i := 0 to Length(list)-1 do
          begin
            If (ignorelist('friends.txt',list[i])<>1) then
              begin
                Enter.Clear;
                Enter.Add('act=add_box&al=1&mid='+list[i]);
                otvet := Form2.idhttp1.post('http://vkontakte.ru/al_friends.php',enter);
                reg.Expression:='hash: '+#39+'(.*?)'+#39;
                reg.Exec(otvet);
                Enter.Clear;
                Enter.Add('act=add&al=1&hash='+reg.Match[1]+'&mid='+list[i]);
                otvet := Form2.idhttp1.post('http://vkontakte.ru/al_friends.php',enter);
                While 1=1 do
                  begin
                    reg.Expression:='>2<!>([0-9]{1,})<';
                    reg.Exec(otvet);
                    If (reg.Match[1]<>'') then
                      begin
                        DownloadJpeg('http://vkontakte.ru/captcha.php?s=1&sid='+reg.Match[1],'reklama.jpg');
                        form1.Image1.Picture.LoadFromFile('captcha.jpg');
                        Form3.ShowModal;
                        Enter.Clear;
                        Enter.Add('act=add&al=1&hash='+reg.Match[1]+'&mid='+list[i]+'&captcha_key='+Captchakod+'&captcha_sid='+reg.Match[1]);
                        otvet := Form2.idhttp1.post('http://vkontakte.ru/al_friends.php',enter);
                      end
                    else
                      break;
                  end;
                savefile('friends.txt',list[i],true);
                break;
                If stop=1 then
                  break;
              end;
          end;
      end;
    If stop = 1 then
      break;
    If (antiban=1) then
      sleep_time(30000)
    else
      sleep_time(10000);
  end;
старый вариант
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
If tip='friends' then begin
if antiban<>1 then
begin
for i:=0 to Length(list)-1 do begin
if (ignorelist('friends.txt',list[i])<>1) then
begin
Enter.Clear;
Enter.Add('act=add_box&al=1&mid='+list[i]);
otvet := Form2.idhttp1.post('http://vkontakte.ru/al_friends.php',enter);
reg.Expression:='hash: '+#39+'(.*?)'+#39;
reg.Exec(otvet);
Enter.Clear;
Enter.Add('act=add&al=1&hash='+reg.Match[1]+'&mid='+list[i]);
otvet := Form2.idhttp1.post('http://vkontakte.ru/al_friends.php',enter);
while 1=1 do begin
reg.Expression:='>2<!>([0-9]{1,})<';
reg.Exec(otvet);
if (reg.Match[1]<>'') then
begin
DownloadJpeg('http://vkontakte.ru/captcha.php?s=1&sid='+reg.Match[1],'reklama.jpg');
form1.Image1.Picture.LoadFromFile('captcha.jpg');
Form3.ShowModal;
Enter.Clear;
Enter.Add('act=add&al=1&hash='+reg.Match[1]+'&mid='+list[i]+'&captcha_key='+Captchakod+'&captcha_sid='+reg.Match[1]);
otvet := Form2.idhttp1.post('http://vkontakte.ru/al_friends.php',enter);
end else break;
end;
savefile('friends.txt',list[i],true);
break;
if stop=1 then break;
end;
end;
end;
if stop=1 then break;
if (antiban=1) then sleep_time(30000)
else sleep_time(10000);
end;

Если первый раз условие выполнилось с false,то второй раз оно не выполняется.

Если делаю так
Delphi
1
2
3
for i:=0 to Length(list)-1 do begin
showmessage(list[i]);
if (ignorelist('friends.txt',list[i])<>1) then
То все нормально.
0
2184 / 1254 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
19.12.2011, 16:13 6
Цитата Сообщение от Filya.deleted Посмотреть сообщение
Нет.Трабла в том ,что он и выполняется только 1 раз.А если добавляю перед условие showmessage,то он выполняется как ему и положено.
ну так если нет showmessage пишешь break; если есть то break стираешь )
0
2 / 2 / 1
Регистрация: 07.11.2011
Сообщений: 22
19.12.2011, 16:15  [ТС] 7
Цитата Сообщение от anonimus Посмотреть сообщение
ну так если нет showmessage пишешь break; если есть то break стираешь )
Я похоже не одинок.Все мы нарики.
0
401 / 312 / 74
Регистрация: 17.03.2010
Сообщений: 1,119
19.12.2011, 16:16 8
Цитата Сообщение от Filya.deleted Посмотреть сообщение
Я похоже не одинок.Все мы нарики.
+100500
0
2184 / 1254 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
19.12.2011, 16:19 9
Цитата Сообщение от Filya.deleted Посмотреть сообщение
Все мы нарики.
не мы а Вы. Какой вопрос таков и ответ.

Добавлено через 2 минуты
с отладчиком знаком?
0
2 / 2 / 1
Регистрация: 07.11.2011
Сообщений: 22
19.12.2011, 16:19  [ТС] 10
Цитата Сообщение от anonimus Посмотреть сообщение
не мы а Вы. Какой вопрос таков и ответ.

Добавлено через 2 минуты
с отладчиком знаком?
Нет - не знаком.
0
2184 / 1254 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
19.12.2011, 16:24 11
Цитата Сообщение от Filya.deleted Посмотреть сообщение
Нет - не знаком.
ну значит туго придется в написании программ.

Добавлено через 48 секунд
а если вместо вывода сообщения в цикле поставишь sleep(500) то тоже работает?
1
401 / 312 / 74
Регистрация: 17.03.2010
Сообщений: 1,119
19.12.2011, 16:29 12
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
  if tip='friends' then 
  begin
    if antiban<>1 then
    begin
      for i:=0 to Length(list)-1 do 
      begin
        if (ignorelist('friends.txt',list[i])<>1) then
        begin
          Enter.Clear;
          Enter.Add('act=add_box&al=1&mid='+list[i]);
          otvet := Form2.idhttp1.post('http://vkontakte.ru/al_friends.php',enter);
          reg.Expression:='hash: '+#39+'(.*?)'+#39;
          reg.Exec(otvet);
          Enter.Clear;
          Enter.Add('act=add&al=1&hash='+reg.Match[1]+'&mid='+list[i]);
          otvet := Form2.idhttp1.post('http://vkontakte.ru/al_friends.php',enter);
          while 1=1 do 
          begin
            reg.Expression:='>2<!>([0-9]{1,})<';
            reg.Exec(otvet);
            if (reg.Match[1]<>'') then
            begin
              DownloadJpeg('http://vkontakte.ru/captcha.php?s=1&sid='+reg.Match[1],'reklama.jpg');
              form1.Image1.Picture.LoadFromFile('captcha.jpg');
              Form3.ShowModal;
              Enter.Clear;
              Enter.Add('act=add&al=1&hash='+reg.Match[1]+'&mid='+list[i]+
                            '& captcha_key='+Captchakod+'&captcha_sid='+reg.Match[1]);
              otvet := Form2.idhttp1.post('http://vkontakte.ru/al_friends.php',enter);
            end 
            else 
              break;
        end;
        savefile('friends.txt',list[i],true);
        break;
        if stop=1 then 
          break;
      end;
    end;
  end;
  if stop=1 then 
    break;
  if (antiban=1) then 
    sleep_time(30000)
  else 
    sleep_time(10000);
end;
ИМХО программа путается в твоих многочисленных Break...
Разбей эту процедуру на более мелкие процедуры...
И почитай про форматирование кода)))
http://citforum.ru/programming... le_delphi/
2
2 / 2 / 1
Регистрация: 07.11.2011
Сообщений: 22
19.12.2011, 16:31  [ТС] 13
Цитата Сообщение от anonimus Посмотреть сообщение
ну значит туго придется в написании программ.

Добавлено через 48 секунд
а если вместо вывода сообщения в цикле поставишь sleep(500) то тоже работает?
=*
Вроде работает.

Добавлено через 1 минуту
Цитата Сообщение от NIch Посмотреть сообщение
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
  if tip='friends' then 
  begin
    if antiban<>1 then
    begin
      for i:=0 to Length(list)-1 do 
      begin
        if (ignorelist('friends.txt',list[i])<>1) then
        begin
          Enter.Clear;
          Enter.Add('act=add_box&al=1&mid='+list[i]);
          otvet := Form2.idhttp1.post('http://vkontakte.ru/al_friends.php',enter);
          reg.Expression:='hash: '+#39+'(.*?)'+#39;
          reg.Exec(otvet);
          Enter.Clear;
          Enter.Add('act=add&al=1&hash='+reg.Match[1]+'&mid='+list[i]);
          otvet := Form2.idhttp1.post('http://vkontakte.ru/al_friends.php',enter);
          while 1=1 do 
          begin
            reg.Expression:='>2<!>([0-9]{1,})<';
            reg.Exec(otvet);
            if (reg.Match[1]<>'') then
            begin
              DownloadJpeg('http://vkontakte.ru/captcha.php?s=1&sid='+reg.Match[1],'reklama.jpg');
              form1.Image1.Picture.LoadFromFile('captcha.jpg');
              Form3.ShowModal;
              Enter.Clear;
              Enter.Add('act=add&al=1&hash='+reg.Match[1]+'&mid='+list[i]+
                            '& captcha_key='+Captchakod+'&captcha_sid='+reg.Match[1]);
              otvet := Form2.idhttp1.post('http://vkontakte.ru/al_friends.php',enter);
            end 
            else 
              break;
        end;
        savefile('friends.txt',list[i],true);
        break;
        if stop=1 then 
          break;
      end;
    end;
  end;
  if stop=1 then 
    break;
  if (antiban=1) then 
    sleep_time(30000)
  else 
    sleep_time(10000);
end;
ИМХО программа путается в твоих многочисленных Break...
Разбей эту процедуру на более мелкие процедуры...
И почитай про форматирование кода)))
http://citforum.ru/programming... le_delphi/
Спасибо за совет.
0
2184 / 1254 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
19.12.2011, 16:33 14
Цитата Сообщение от Filya.deleted Посмотреть сообщение
Вроде работает.
вообще конечно не должно быть такого, но по тому коду что ты выложил ничего толкового не скажешь, тут отладчиком нужно пройтись и посмотреть
1
Of Wolf and Man
999 / 198 / 5
Регистрация: 09.07.2008
Сообщений: 1,784
19.12.2011, 17:42 15
Delphi
1
2
 while 1=1 do            begin             reg.Expression:='>2<!>([0-9]{1,})<';             reg.Exec(otvet);             if (reg.Match[1]<>'') then             begin               DownloadJpeg('http://vkontakte.ru/captcha.php?s=1&sid='+reg.Match[1],'reklama.jpg');               form1.Image1.Picture.LoadFromFile('captcha.jpg');               Form3.ShowModal;               Enter.Clear;               Enter.Add('act=add&al=1&hash='+reg.Match[1]+'&mid='+list[i]+                             '& captcha_key='+Captchakod+'&captcha_sid='+reg.Match[1]);               otvet := Form2.idhttp1.post('http://vkontakte.ru/al_friends.php',enter);             end              else                break;
         end;
Зачем тебе условие IF внутри цикла - это условие у тебя только выход из цикла.
Если тебе необходимо чтобы код между началом цикла и проверкой условия выполнился хотя бы один раз, при этом код в условии мог не выполняться правильнее
выполнить этот код до цикла, и потом повторить его в конце цикла. (-1 break -1 if)
Если тебе требуется чтобы весь код цикла выполнился хотя бы один раз - используй цикл с пост-условием
repeat
...
until <условие>

Delphi
1
2
3
for i:=0 to Length(list)-1 do        begin         if (ignorelist('friends.txt',list[i])<>1) then
          begin           Enter.Clear;           Enter.Add('act=add_box&al=1&mid='+list[i]);           otvet := Form2.idhttp1.post('http://vkontakte.ru/al_friends.php',enter);           reg.Expression:='hash: '+#39+'(.*?)'+#39;           reg.Exec(otvet);           Enter.Clear;           Enter.Add('act=add&al=1&hash='+reg.Match[1]+'&mid='+list[i]);           otvet := Form2.idhttp1.post('http://vkontakte.ru/al_friends.php',enter);           while 1=1 do              begin             ...             end;           savefile('friends.txt',list[i],true);         break;         if stop=1 then            break;       end;
 end;
В конце вышестоящего кода условие if stop=1 then break не выполниться ни одного раза, ибо перед ним идет неизбежный безусловный break выход из цикла.
Этот последний break, как и тот что стоит под условием if stop=1 выводят из цикла который начинается в начале вышестоящего отрезка кода.
А это значит что код выполняется только один раз со счетчиком 0 (зачем тогда вообще вводить цикл?).

Delphi
1
if tip='friends' then    begin     if antiban<>1 then     begin       ...     end;   end;   if stop=1 then      break;   if (antiban=1) then      sleep_time(30000)   else      sleep_time(10000); end;

Последний брейк вообще не понятно к чему относится, конечно может быть какой либо цикл который вы не включили в код, но тем не менее.
Условие у него как у брейка из вышестоящего цикла, а это значит что если стоп - то программа должна вывалиться из всех циклов и код if antiban... выполняться не должен.

По поводу вопроса - УБЕРИ БЕЗУСЛОВНЫЙ БРЕЙК !

Добавлено через 3 минуты
Эк как код перекосило...
Значит так в первой вырезке я брал код начиная с while 1=1 и до конца этого цикла
Во втором случае я рассматривал вышестоящий цикл for со счетчиком перед концом которого есть один безусловный брейк
В третьем случае я брал начало кода и конец кода (код под циклом for пометил многоточием типа он там есть) и обратил внимание что в конце данного отрезка существует брейк, который не завязан ни на один цикл. (или цикл вначало кода не записали)

Добавлено через 6 минут
ЗЫЖ - пойду потренеруюсь, видимо в последнем фаерфоксе криво работают теги Delphi. Извините за кривой код.
0
1905 / 1016 / 123
Регистрация: 08.12.2009
Сообщений: 2,792
Записей в блоге: 2
20.12.2011, 06:38 16
Цитата Сообщение от Xentar Посмотреть сообщение
ЗЫЖ - пойду потренеруюсь, видимо в последнем фаерфоксе криво работают теги Delphi. Извините за кривой код.
Firefox тут ни причём

Добавлено через 2 минуты
Filya.deleted, во-первых, как уже сказали - учись красиво оформлять код. В твоём куске кода ничерта не понятно.
Во-вторых - учи язык. Судя по всему ты ещё и циклы не особо понимаешь, и до TIdHTTP тебе как до луны пешком.
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
20.12.2011, 07:11 17
Цитата Сообщение от Filya.deleted Посмотреть сообщение
Если первый раз условие выполнилось с false,то второй раз оно не выполняется.
Ну это же семантика while! При фалз выполняется только заголовок и последний раз. Да и откуда фалз? 1=1 всегда тру.
0
Of Wolf and Man
999 / 198 / 5
Регистрация: 09.07.2008
Сообщений: 1,784
20.12.2011, 13:52 18
Тарас, я думаю что он там стопами (условие где переменная stop=1) всё время проверяет и ими же делает выход из 3х вложенных циклов. Где то эта переменная не перезадается и при повторном вызове данной F(x) он эти цикелы пропускает.
0
20.12.2011, 13:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.12.2011, 13:52
Помогаю со студенческими работами здесь

Магия ip
Здрасте ,О,Админы! Мой маленький мозг просить помощи у вас! В сети на некоторых машинах если...

Магия с if..else
Здравствуйте. Начал изучать питон, есть опыт программирования на других языках. Столкнулся с не...

Магия в юнити
Я не знаю что происходит Вот пару моментов: 1. Я жму на объект, вызывается функция, жму на второй...

Магия математики
echo (231.725 - 231.574); Выводит - &quot;0.15099999999998&quot; . Это как?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru