Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.91/35: Рейтинг темы: голосов - 35, средняя оценка - 4.91
bizer
0 / 0 / 0
Регистрация: 01.07.2009
Сообщений: 6
1

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

27.10.2010, 21:39. Просмотров 6473. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.10.2010, 21:39
Ответы с готовыми решениями:

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

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

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

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

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

34
-comrade-
357 / 358 / 167
Регистрация: 11.06.2010
Сообщений: 703
27.10.2010, 21:55 2
Цитата Сообщение от bizer Посмотреть сообщение
(условие всередине нескольких циклов, приводить которые не имеет смысла)
А может имеет???
0
bizer
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
alex_x_x
бжни
2455 / 1661 / 134
Регистрация: 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
bizer
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
alex_x_x
бжни
2455 / 1661 / 134
Регистрация: 14.05.2009
Сообщений: 7,162
27.10.2010, 23:05 6
а чем отличается от оригинала, я упускаю?
0
bizer
0 / 0 / 0
Регистрация: 01.07.2009
Сообщений: 6
27.10.2010, 23:08  [ТС] 7
Цитата Сообщение от alex_x_x Посмотреть сообщение
а чем отличается от оригинала, я упускаю?
Прошу прощения, просмотрел ещё раз, по идее все правильно. Хотя рекурсия по прежнему имеет место быть
0
alex_x_x
бжни
2455 / 1661 / 134
Регистрация: 14.05.2009
Сообщений: 7,162
27.10.2010, 23:10 8
это не рекурсия, просто сложная структура, но уж лучше чем с метками
0
KuKu
1559 / 1037 / 93
Регистрация: 17.04.2009
Сообщений: 2,995
27.10.2010, 23:21 9
мб не по теме ... за что так goto все не любят ?)
0
ForEveR
В астрале
Эксперт С++
7995 / 4754 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
27.10.2010, 23:22 10
KuKu, В нем нет смысла в языке среднего/высокого уровня.
0
alex_x_x
бжни
2455 / 1661 / 134
Регистрация: 14.05.2009
Сообщений: 7,162
27.10.2010, 23:23 11
за то что он усложняет понимание поведения программы, ваш КО
0
KuKu
1559 / 1037 / 93
Регистрация: 17.04.2009
Сообщений: 2,995
27.10.2010, 23:26 12
Цитата Сообщение от Lavroff Посмотреть сообщение
KuKu, В нем нет смысла в языке среднего/высокого уровня.
это весьма спорное утверждение, в for тоже так нет смысла - его можно через вайл написать.

Добавлено через 28 секунд
Цитата Сообщение от alex_x_x Посмотреть сообщение
за то что он усложняет понимание поведения программы, ваш КО
КО это что ? бесконечность ?)
0
silent_1991
Эксперт С++
5009 / 3069 / 270
Регистрация: 11.11.2009
Сообщений: 7,043
Завершенные тесты: 1
27.10.2010, 23:30 13
KuKu,
10 Капитан Очевидность)))
20 Ваш GOTO 10
0
KuKu
1559 / 1037 / 93
Регистрация: 17.04.2009
Сообщений: 2,995
27.10.2010, 23:32 14
ну про усложнение тоже имхо аргумент какой то смутный, все зависит от того как писать. Лично я и без го-ту могу написать, что ничего ясно не будет
0
easybudda
Модератор
Эксперт CЭксперт С++
10092 / 6002 / 1504
Регистрация: 25.07.2009
Сообщений: 11,387
27.10.2010, 23:37 15
Цитата Сообщение от KuKu Посмотреть сообщение
в for тоже так нет смысла - его можно через вайл написать.
операторы for и while по сути делают одно и то же, мало того - даже код может одинаковый скомпилиться. С goto совсем другая история. Мало того, что кто-то другой вряд ли уследит за ходом вашей мысли в том плане, откуда и куда там переходы происходят. Попробуйте сами написать програмку хотя бы в пару сотен строк принципиально обходя использование операторов for и while и заменяя их на goto. Убедитесь, что программа работает, и отложите её на неделю примерно. А через неделю откройте и попробуйте сами разобраться. Разве что возле каждой метки и каждого перехода по десять строк комментариев писать...
1
alex_x_x
бжни
2455 / 1661 / 134
Регистрация: 14.05.2009
Сообщений: 7,162
27.10.2010, 23:40 16
KuKu, спорить бесмысленно, just use it, на своем опыте поймете, то что в программировании поняли лет тридцать назад
0
KuKu
1559 / 1037 / 93
Регистрация: 17.04.2009
Сообщений: 2,995
27.10.2010, 23:46 17
easybudda, ну вы уже в крайность вобще for, while не использовать. Ведь иногда же гораздо проще сделать, к примеру, если входящие данные не такие -> goto EXIT без всяких проверок и тому подобное.

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

Добавлено через 1 минуту
Но я подумал над этим
0
ForEveR
В астрале
Эксперт С++
7995 / 4754 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
27.10.2010, 23:47 18
KuKu, А return 1? А throw? А exit() в конце концов? оО
0
KuKu
1559 / 1037 / 93
Регистрация: 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
ForEveR
В астрале
Эксперт С++
7995 / 4754 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
28.10.2010, 00:01 20
KuKu, Что-то вводим если не то
return;
Что-то вводим если не то
exit;
Что-то вводим если не то
throw;
0
28.10.2010, 00:01
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.10.2010, 00:01

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

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

Повторно запустить оператор switch без goto, циклов и доп. функций
Как сабж? int intSum = 0; int main(void) { int intInteger01,...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru