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

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

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

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

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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.10.2010, 21:39
Ответы с готовыми решениями:

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

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

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

Замена goto
Здравствуйте! Имеется следующий код: start: double a; cout << "\nEnter side of...

34
365 / 366 / 167
Регистрация: 11.06.2010
Сообщений: 703
27.10.2010, 21:55 2
Цитата Сообщение от bizer Посмотреть сообщение
(условие всередине нескольких циклов, приводить которые не имеет смысла)
А может имеет???
0
0 / 0 / 0
Регистрация: 01.07.2009
Сообщений: 6
27.10.2010, 22:00  [ТС] 3
Цитата Сообщение от -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
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
27.10.2010, 22:43 4
Цитата Сообщение от 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  [ТС] 5
Цитата Сообщение от 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
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
27.10.2010, 23:05 6
а чем отличается от оригинала, я упускаю?
0
0 / 0 / 0
Регистрация: 01.07.2009
Сообщений: 6
27.10.2010, 23:08  [ТС] 7
Цитата Сообщение от alex_x_x Посмотреть сообщение
а чем отличается от оригинала, я упускаю?
Прошу прощения, просмотрел ещё раз, по идее все правильно. Хотя рекурсия по прежнему имеет место быть
0
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
27.10.2010, 23:10 8
это не рекурсия, просто сложная структура, но уж лучше чем с метками
0
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
27.10.2010, 23:21 9
мб не по теме ... за что так goto все не любят ?)
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
27.10.2010, 23:22 10
KuKu, В нем нет смысла в языке среднего/высокого уровня.
0
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
27.10.2010, 23:23 11
за то что он усложняет понимание поведения программы, ваш КО
0
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
27.10.2010, 23:26 12
Цитата Сообщение от Lavroff Посмотреть сообщение
KuKu, В нем нет смысла в языке среднего/высокого уровня.
это весьма спорное утверждение, в for тоже так нет смысла - его можно через вайл написать.

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

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

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

есть подозрение, что если код не мал, то такая схема будет не хуже чем через throw, return и exit и не менее(если не более) наглядна. Тут все решают какие то частности в решение конкретной задаче.
P.S. я же обещал, думаю все таки над тем, что готу плох
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
28.10.2010, 00:01 20
KuKu, Что-то вводим если не то
return;
Что-то вводим если не то
exit;
Что-то вводим если не то
throw;
0
28.10.2010, 00:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.10.2010, 00:01
Помогаю со студенческими работами здесь

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

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

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

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


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

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