Форум программистов, компьютерный форум, киберфорум
QBasic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
0 / 0 / 1
Регистрация: 09.10.2013
Сообщений: 34

Цикл в программе пропускается

09.10.2013, 22:29. Показов 1016. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Когда дело доходит до цикла, то он легко пропускается и начинают выполнятся строчки после цикла (здесь - строчки перехода).
Объясните, пожалуйста, почему так и как исправить. Вроде всё по науке.
QBasic/QuickBASIC
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
5 CLS
10 PRINT TAB(40); 0
20 INPUT "A"; a
30 INPUT "B"; b
40 IF a <= 20 AND a >= -20 THEN GOTO 50 ELSE GOTO 5
50 IF b <= 20 AND b >= -20 THEN GOTO 60 ELSE GOTO 5
60 IF ABS(a) < ABS(b) THEN GOTO 100 ELSE 70
70 IF ABS(a) > ABS(b) THEN GOTO 200 ELSE 80
80 IF a = b THEN GOTO 300
100 FOR i = 0 TO a            ' Фокусы начинаются здесь. Цикл просто пропускается
      CLS                     ' Это не выполняется
      PRINT TAB(40 + i); i    ' Это не выполняется
      SLEEP 1                 ' Это не выполняется
      NEXT i                  ' Это не выполняется
150 GOTO 500      ' Basic переходит на эту строчку, которая переводит на другую строчку (500)
200 FOR i = 0 TO b
     CLS
     PRINT TAB(40 + i); i
     SLEEP 1
    NEXT i
250 GOTO 600
300 FOR i = 0 TO a
    CLS
    PRINT TAB(40 + i); i
    SLEEP 1
    NEXT i
500 FOR i = 0 TO a - b
     CLS
     PRINT TAB(40 + a - i); a - i
     SLEEP 1
    NEXT i
600 FOR i = 0 TO b - a
    CLS
    PRINT TAB(40 + b - i); b - i
    SLEEP 1
    NEXT i
Вложения
Тип файла: zip ROBOT.zip (369 байт, 4 просмотров)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.10.2013, 22:29
Ответы с готовыми решениями:

Цикл 3 раза пропускается
Учусь программировать на java по Герберту Шилдту, использую компилятор Eclipse, и когда я дошел до темы цикла for, была задача сделать...

Почему пропускается цикл
пишу сюда чтобы не плодить темы. помогите понять тугоумному почему в моем коде пропускается цикл for #include &lt;iostream&gt; ...

При выполнении программы пропускается цикл for
Это звучит бредово, но вчера эта самая программа работала. Однако сегодня паскаль даже видить не хочет цикл for. В чем может быть...

12
1045 / 315 / 74
Регистрация: 13.07.2013
Сообщений: 1,270
09.10.2013, 23:50
А почему Вы сделали вывод, что эти строки не выполняются?

Добавлено через 3 минуты

Не по теме:

Цитата Сообщение от dimon4ezzz Посмотреть сообщение
40 IF a <= 20 AND a >= -20 THEN GOTO 50 ELSE GOTO 5
50 IF b <= 20 AND b >= -20 THEN GOTO 60 ELSE GOTO 5
60 IF ABS(a) < ABS(b) THEN GOTO 100 ELSE 70
70 IF ABS(a) > ABS(b) THEN GOTO 200 ELSE 80
80 IF a = b THEN GOTO 300
Не мое, конечно, дело, но с такими конструкциями сложно работать - попробуйте оптимизировать, да и вообще по-меньше использовать GOTO.



Добавлено через 3 минуты
Для начала: объясните, что эта программа делает? Может так будет проще (может, даже Вы сами поймете).
0
 Аватар для vodav
572 / 141 / 37
Регистрация: 12.03.2012
Сообщений: 403
10.10.2013, 05:17
У меня при выполнении условия
QBasic/QuickBASIC
1
ABS(a)<ABS(b)
цикл выполняется.
Другое дело, что как должен выполняться цикл
QBasic/QuickBASIC
1
FOR i=0 TO a
при отрицательных значениях a?
Добавлю: Я использую QB, там метки применяются с двоеточием: 100:, LABEL:, и т.п.
0
0 / 0 / 1
Регистрация: 09.10.2013
Сообщений: 34
10.10.2013, 13:13  [ТС]
О том, что цикл не выполняется я узнал из пошагового выполнения (F8).
Условие задачи:

Робот стоит в точке 0 числовой прямой. Он может перемещаться за 1 шаг на единицу влево или вправо. При получении двух целых чисел робот начинает работать по следующему алгоритму: определяет ближайшее на данный момент число и перемещается туда, а затем перемещается к оставшемуся.
Написать и отладить программу, которая по заданным с клавиатуры числам a и b (-20 <= a,b <= 20):
а) печатает все целые числа, которые робот пройдёт на своём пути.
б) показывает процесс в графическом или текстовом режимах работы.

Добавлено через 2 минуты
Цитата Сообщение от vodav Посмотреть сообщение
У меня при выполнении условия
QBasic/QuickBASIC
1
ABS(a)<ABS(b)
цикл выполняется.
Другое дело, что как должен выполняться цикл
QBasic/QuickBASIC
1
FOR i=0 TO a
при отрицательных значениях a?
Добавлю: Я использую QB, там метки применяются с двоеточием: 100:, LABEL:, и т.п.
То есть? По моему от 0 до -20 можно дойти циклом. Это неважно.
0
 Аватар для vodav
572 / 141 / 37
Регистрация: 12.03.2012
Сообщений: 403
10.10.2013, 13:51
Цитата Сообщение от dimon4ezzz Посмотреть сообщение
То есть? По моему от 0 до -20 можно дойти циклом. Это неважно.
Да, только если цикл будет оформлен: FOR i=0 TO a STEP -1
А для контроля прохождения какого либо участка можно воткнуть оператор BEEP
0
0 / 0 / 1
Регистрация: 09.10.2013
Сообщений: 34
10.10.2013, 16:35  [ТС]
Цитата Сообщение от vodav Посмотреть сообщение
Да, только если цикл будет оформлен: FOR i=0 TO a STEP -1
А для контроля прохождения какого либо участка можно воткнуть оператор BEEP
мне кажется, что код будет слишком нагромождён
0
1045 / 315 / 74
Регистрация: 13.07.2013
Сообщений: 1,270
10.10.2013, 16:58
Цитата Сообщение от dimon4ezzz Посмотреть сообщение
мне кажется, что код будет слишком нагромождён
По-моему, операторы GOTO нагромождают код. А такие отладочные детали не могут загромождать. Даром что без некоторых (step -1) код работать НЕ БУДЕТ.

Добавлено через 17 минут
Код
QBasic/QuickBASIC
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
48
49
SUB a(a)
    FOR i = 0 TO a
        CLS
        PRINT TAB(40 + i); i
        SLEEP 1
    NEXT i
END SUB
 
SUB b(b)
    FOR i = 0 TO b
        CLS
        PRINT TAB(40 + i); i
        SLEEP 1
    NEXT i
END SUB
 
SUB c(a)
    FOR i = 0 TO a
        CLS
        PRINT TAB(40 + i); i
        SLEEP 1
    NEXT i
END SUB
 
SUB d(a, b)
    FOR i = 0 TO a - b
        CLS
        PRINT TAB(40 + a - i); a - i
        SLEEP 1
    NEXT i
END SUB
 
SUB e(a, b)
    FOR i = 0 TO b - a
        CLS
        PRINT TAB(40 + b - i); b - i
        SLEEP 1
    NEXT i
END SUB
 
DO UNTIL a <= 20 AND a >= -20 AND b <= 20 AND b >= -20
    CLS
    PRINT TAB(40); 0
    INPUT "A"; a
    INPUT "B"; b
LOOP
IF ABS(a) < ABS(b) THEN CALL a(a): CALL d(a, b): CALL e(a, b)
IF ABS(a) > ABS(b) THEN CALL b(b): CALL e(a, b)
IF a = b THEN           CALL c(a): CALL d(a, b): CALL e(a, b)

Даже так лучше, не правда ли?

Добавлено через 29 секунд
(хотя я мог и запуться в Вашей программе...)
1
 Аватар для vodav
572 / 141 / 37
Регистрация: 12.03.2012
Сообщений: 403
10.10.2013, 17:32
Цитата Сообщение от Good-Morning Посмотреть сообщение
(хотя я мог и запуться в Вашей программе...)
Вы тоже не учли отрицательных значений счетчиков цикла.
0
1045 / 315 / 74
Регистрация: 13.07.2013
Сообщений: 1,270
10.10.2013, 17:35
Цитата Сообщение от vodav Посмотреть сообщение
Вы тоже не учли отрицательных значений счетчиков цикла.
Не совсем - я просто переписал программу dimon4ezzz-а. Ничего не исправлял.

Добавлено через 55 секунд
Кстати, по-моему, проще там везде модуль поставить.
0
 Аватар для vodav
572 / 141 / 37
Регистрация: 12.03.2012
Сообщений: 403
10.10.2013, 17:40
Цитата Сообщение от Good-Morning Посмотреть сообщение
Кстати, по-моему, проще там везде модуль поставить.
Хр.. знает, что там за логика, я не стал разбираться.
0
1045 / 315 / 74
Регистрация: 13.07.2013
Сообщений: 1,270
10.10.2013, 17:45
[После запуска программы]
А... А что это?
1
0 / 0 / 1
Регистрация: 09.10.2013
Сообщений: 34
30.12.2014, 15:15  [ТС]
Цитата Сообщение от Good-Morning Посмотреть сообщение
[После запуска программы]
А... А что это?
я уже и не помню надо всегда в комментарии писать, что делает эта программа!
0
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
30.12.2014, 17:39
там метки применяются с двоеточием
В QB\QBasic числовые метки можно писать без двоеточия.

По-моему, операторы GOTO нагромождают код.
Когда их столько - да.

Фокусы начинаются здесь. Цикл просто пропускается
Цикл пропускается только в одном случае, когда шаг несоответствует.
По умолчанию шаг равен целочисленной единице. Чтобы цикл шёл в обратную сторону
надо дописывать к примеру STEP -1. Почитайте справку по оператору FOR.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.12.2014, 17:39
Помогаю со студенческими работами здесь

цикл в программе
Как будет выглядить такой цикл в С++? if(k=m) then begin Edit2.Enabled:=false; Button2.Enabled:=false; Label3.Enabled:=false; ...

Не работает цикл в программе!
Я написала программу. Она состоит из подфункций. Каждую подфункцию я потестила, все работает. Потом все эти функции объединила в одну...

Заменить цикл в программе
вот собственно программа uses crt; var a,n: longint; i:byte; begin clrscr; writeln('Vvedite 4islo'); readln(n);

Бесконечный цикл в программе
здравствуйте. Прошу помогите мне пожалуйста. Я с мейплом знаком только на уровне вбивания формул, а от программирования я далек. И есть...

Организовать цикл в программе
Здравствуйте! Я прикрепляю программу на маткаде и алгоритм, который нужно реализовать. Но у меня возникли трудности с условиями. ...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
1С: Программный отбор элементов справочника Номенклатура по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор под наименованию группы (на. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника Сотрудники по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru