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

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

27.10.2010, 21:39. Показов 14699. Ответов 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
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru