Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 41, средняя оценка - 4.61
bizer
0 / 0 / 0
Регистрация: 01.07.2009
Сообщений: 6
#1

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

27.10.2010, 21:39. Просмотров 5826. Ответов 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 на адекватный оператор (C++):

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

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

Замена goto - C++
Здравствуйте! Имеется следующий код: start: double a; cout << "\nEnter side of triangle: "; while(!(cin>>a) ||...

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

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

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

34
-comrade-
355 / 356 / 42
Регистрация: 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
бжни
2450 / 1655 / 84
Регистрация: 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
бжни
2450 / 1655 / 84
Регистрация: 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
бжни
2450 / 1655 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
27.10.2010, 23:10 #8
это не рекурсия, просто сложная структура, но уж лучше чем с метками
0
KuKu
1558 / 1036 / 78
Регистрация: 17.04.2009
Сообщений: 2,988
27.10.2010, 23:21 #9
мб не по теме ... за что так goto все не любят ?)
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
27.10.2010, 23:22 #10
KuKu, В нем нет смысла в языке среднего/высокого уровня.
0
alex_x_x
бжни
2450 / 1655 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
27.10.2010, 23:23 #11
за то что он усложняет понимание поведения программы, ваш КО
0
KuKu
1558 / 1036 / 78
Регистрация: 17.04.2009
Сообщений: 2,988
27.10.2010, 23:26 #12
Цитата Сообщение от Lavroff Посмотреть сообщение
KuKu, В нем нет смысла в языке среднего/высокого уровня.
это весьма спорное утверждение, в for тоже так нет смысла - его можно через вайл написать.

Добавлено через 28 секунд
Цитата Сообщение от alex_x_x Посмотреть сообщение
за то что он усложняет понимание поведения программы, ваш КО
КО это что ? бесконечность ?)
0
silent_1991
Эксперт С++
4989 / 3046 / 149
Регистрация: 11.11.2009
Сообщений: 7,028
Завершенные тесты: 1
27.10.2010, 23:30 #13
KuKu,
10 Капитан Очевидность)))
20 Ваш GOTO 10
0
KuKu
1558 / 1036 / 78
Регистрация: 17.04.2009
Сообщений: 2,988
27.10.2010, 23:32 #14
ну про усложнение тоже имхо аргумент какой то смутный, все зависит от того как писать. Лично я и без го-ту могу написать, что ничего ясно не будет
0
easybudda
Модератор
Эксперт CЭксперт С++
9698 / 5648 / 964
Регистрация: 25.07.2009
Сообщений: 10,863
27.10.2010, 23:37 #15
Цитата Сообщение от KuKu Посмотреть сообщение
в for тоже так нет смысла - его можно через вайл написать.
операторы for и while по сути делают одно и то же, мало того - даже код может одинаковый скомпилиться. С goto совсем другая история. Мало того, что кто-то другой вряд ли уследит за ходом вашей мысли в том плане, откуда и куда там переходы происходят. Попробуйте сами написать програмку хотя бы в пару сотен строк принципиально обходя использование операторов for и while и заменяя их на goto. Убедитесь, что программа работает, и отложите её на неделю примерно. А через неделю откройте и попробуйте сами разобраться. Разве что возле каждой метки и каждого перехода по десять строк комментариев писать...
1
27.10.2010, 23:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.10.2010, 23:37
Привет! Вот еще темы с ответами:

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

Повторно запустить оператор switch без goto, циклов и доп. функций - C++
Как сабж? int intSum = 0; int main(void) { int intInteger01, intInteger02; int intSwitch; cout &lt;&lt; &quot;Input integer #1...

Вычислить таблицу значений функции, используя switch в паре с break, оператор перехода goto - C++
Доброго вам времени суток. Есть самое бредовое задание которое я только видел в своей жизни. Написать программу, используя операторы...

При вводе пользователем числа от 0 до 9, вывести на экран название программы (использовать оператор goto) - C++
Программу по заданию я написал Написать программу для выполнения следующих действий. При вводе цифры от 0 до 9 будет выводиться ее...


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

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

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