Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.99/76: Рейтинг темы: голосов - 76, средняя оценка - 4.99
0 / 0 / 0
Регистрация: 01.07.2009
Сообщений: 6

Замена goto на адекватный оператор

27.10.2010, 21:39. Показов 14463. Ответов 34
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть приблизительно такой код (условие всередине нескольких циклов, приводить которые не имеет смысла):

C++
1
2
3
4
5
6
7
8
9
10
metka1: if (Y[f][j]==i+1)  
            {
                ...
            }
            else 
            {
                ...
                f=Y[f][j];
                goto metka1;
            }

При таком раскладе уходит в рекурсию.

Можно как-то переписать код без использования оператора goto?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.10.2010, 21:39
Ответы с готовыми решениями:

Оператор Goto и ветвление
Помогите, пожалуйста, написать программу, которая сперва считывает введенное с клавиатуры число, а потом, если введено одно значение...

Как исполльзовать оператор goto?
Как его юзать?

Оператор goto в коде под Банкомат
Начал изучать C++ и сейчас возникла проблема з оператором goto,немогу понять как сделать так,если переменная введена правильно срабатывал...

34
365 / 366 / 167
Регистрация: 11.06.2010
Сообщений: 703
27.10.2010, 21:55
Цитата Сообщение от bizer Посмотреть сообщение
(условие всередине нескольких циклов, приводить которые не имеет смысла)
А может имеет???
0
0 / 0 / 0
Регистрация: 01.07.2009
Сообщений: 6
27.10.2010, 22:00  [ТС]
Цитата Сообщение от -comrade- Посмотреть сообщение
А может имеет???
Может быть, приведу, мало ли что

C++
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
for (i=0; i<N; i++)  {
    for (j=0; j<N; j++)  {
       string="";
          if (i!=j)
           {
             if (AN[i][j]==sum)  {
                string=IntToStr(i+1)+" -> "+IntToStr(j+1)+" = ìàðøðóòà íåò ";
                ListBox1->Items->Add(string);
             }
             else  {
               if (Y[i][j]==i+1)  {
                  string=string+IntToStr(i+1)+" -> "+IntToStr(j+1)+" = "+IntToStr(AN[i][j]);
                  ListBox1->Items->Add(string);
               }
               else  {
                  f=Y[i][j];
                  string=string+IntToStr(i)+" -> "+IntToStr(f);
 
       metka1:    if (Y[f][j]==i+1)  {
                         string=string+" -> "+IntToStr(j) + "="+IntToStr(AN[i][j]);
                         ListBox1->Items->Add(string);
                      }
                      else {
                         string=string+" -> "+IntToStr(Y[f][j]);
                         f=Y[f][j];
                         goto metka1;
                      }
              }
            }
        }  
    }   
}
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
27.10.2010, 22:43
Цитата Сообщение от bizer Посмотреть сообщение
metka1: if (Y[f][j]==i+1) {
string=string+" -> "+IntToStr(j) + "="+IntToStr(AN[i][j]);
ListBox1->Items->Add(string);
}
else {
string=string+" -> "+IntToStr(Y[f][j]);
f=Y[f][j];
goto metka1;
}
C++
1
2
3
4
5
6
while(Y[f][j]!=i+1){
   string=string+" -> "+IntToStr(Y[f][j]);
   f=Y[f][j];
}
string=string+" -> "+IntToStr(j) + "="+IntToStr(AN[i][j]);
ListBox1->Items->Add(string);
0
0 / 0 / 0
Регистрация: 01.07.2009
Сообщений: 6
27.10.2010, 22:58  [ТС]
Цитата Сообщение от alex_x_x Посмотреть сообщение
C++
1
2
3
4
5
6
while(Y[f][j]!=i+1){
   string=string+" -> "+IntToStr(Y[f][j]);
   f=Y[f][j];
}
string=string+" -> "+IntToStr(j) + "="+IntToStr(AN[i][j]);
ListBox1->Items->Add(string);
Это немного не то. Строка будет неправильно сформирована.
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
27.10.2010, 23:05
а чем отличается от оригинала, я упускаю?
0
0 / 0 / 0
Регистрация: 01.07.2009
Сообщений: 6
27.10.2010, 23:08  [ТС]
Цитата Сообщение от alex_x_x Посмотреть сообщение
а чем отличается от оригинала, я упускаю?
Прошу прощения, просмотрел ещё раз, по идее все правильно. Хотя рекурсия по прежнему имеет место быть
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
27.10.2010, 23:10
это не рекурсия, просто сложная структура, но уж лучше чем с метками
0
 Аватар для KuKu
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
27.10.2010, 23:21
мб не по теме ... за что так goto все не любят ?)
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
27.10.2010, 23:22
KuKu, В нем нет смысла в языке среднего/высокого уровня.
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
27.10.2010, 23:23
за то что он усложняет понимание поведения программы, ваш КО
0
 Аватар для KuKu
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
27.10.2010, 23:26
Цитата Сообщение от Lavroff Посмотреть сообщение
KuKu, В нем нет смысла в языке среднего/высокого уровня.
это весьма спорное утверждение, в for тоже так нет смысла - его можно через вайл написать.

Добавлено через 28 секунд
Цитата Сообщение от alex_x_x Посмотреть сообщение
за то что он усложняет понимание поведения программы, ваш КО
КО это что ? бесконечность ?)
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
27.10.2010, 23:30
KuKu,
10 Капитан Очевидность)))
20 Ваш GOTO 10
0
 Аватар для KuKu
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
27.10.2010, 23:32
ну про усложнение тоже имхо аргумент какой то смутный, все зависит от того как писать. Лично я и без го-ту могу написать, что ничего ясно не будет
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
27.10.2010, 23:37
Цитата Сообщение от KuKu Посмотреть сообщение
в for тоже так нет смысла - его можно через вайл написать.
операторы for и while по сути делают одно и то же, мало того - даже код может одинаковый скомпилиться. С goto совсем другая история. Мало того, что кто-то другой вряд ли уследит за ходом вашей мысли в том плане, откуда и куда там переходы происходят. Попробуйте сами написать програмку хотя бы в пару сотен строк принципиально обходя использование операторов for и while и заменяя их на goto. Убедитесь, что программа работает, и отложите её на неделю примерно. А через неделю откройте и попробуйте сами разобраться. Разве что возле каждой метки и каждого перехода по десять строк комментариев писать...
1
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
27.10.2010, 23:40
KuKu, спорить бесмысленно, just use it, на своем опыте поймете, то что в программировании поняли лет тридцать назад
0
 Аватар для KuKu
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
27.10.2010, 23:46
easybudda, ну вы уже в крайность вобще for, while не использовать. Ведь иногда же гораздо проще сделать, к примеру, если входящие данные не такие -> goto EXIT без всяких проверок и тому подобное.

Добавлено через 25 секунд
alex_x_x, ну надо же когда то дорасти до программистов 30ти летней давности ...

Добавлено через 1 минуту
Но я подумал над этим
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
27.10.2010, 23:47
KuKu, А return 1? А throw? А exit() в конце концов? оО
0
 Аватар для KuKu
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
27.10.2010, 23:59
Lavroff,
- что то вводим если не то goto EXIT
- что то делаем если не то goto EXIT
- что то выводим
- return(0)
- :EXIT
- что то делаем
- return(0)

есть подозрение, что если код не мал, то такая схема будет не хуже чем через throw, return и exit и не менее(если не более) наглядна. Тут все решают какие то частности в решение конкретной задаче.
P.S. я же обещал, думаю все таки над тем, что готу плох
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
28.10.2010, 00:01
KuKu, Что-то вводим если не то
return;
Что-то вводим если не то
exit;
Что-то вводим если не то
throw;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.10.2010, 00:01
Помогаю со студенческими работами здесь

Замена goto
Здравствуйте! Имеется следующий код: start: double a; cout &lt;&lt; &quot;\nEnter side of triangle: &quot;; while(!(cin&gt;&gt;a) ||...

C++ Замена goto
Здравствуйте. Имеется программа которая меняет в предложении местами заданные глаголы. Всё работает, но нужно что бы было без оператора...

Использовать оператор перехода GOTO в приведенном коде
Мне нужен оператор перехода GOTO в программе. Если выводится сообщение &quot;Данное число в массиве отсутствует&quot;, то должно перейти на...

Заменить оператор goto на цикл, если это возможно
Есть простой таймер #include &lt;cstdlib&gt; #include &lt;iostream&gt; #include &lt;windows.h&gt; using namespace std; int main(){ ...

Переделать фрагмент кода так, чтобы использовался оператор goto
Ребяяяят!! Помогите переделать в goto данный фрагмент программы! Все плохо... for (int i = 0; i&lt;n; i++) { for (int j...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru