Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.12.2014, 10:20   #1
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию Как избавится от goto?

В общем смысл такой. Применять do{}while() нельзя, т.к. for(k, продолжается и после него. Но, при условии L = 0, расчёты должны выполняться с самого начала. Суть проблемы ниже. Или это тот случай, где без гота не обойтись?
Код:
int Q = 1;
M40:
  for(int k = Q; k < N-1; k++)
  {
    ..............
    ..............
    if(L != 0) goto M90;
    Вычисляется значение Q
    .............. 
    goto M40;
M90:
    if(k + 1 != P)
    .............
    .............
  }// next k
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 26.12.2014 в 10:32.
Smitt&Wesson вне форума Ответить с цитированием
Старый 26.12.2014, 10:41   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Скорее всего код нужно рефакторить более глобально, нежели на уровне этих циклов, может даже немного алгоритм придётся подправить. Сейчас какая-то наркомания.
pu4koff вне форума Ответить с цитированием
Старый 26.12.2014, 11:04   #3
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
Скорее всего код нужно рефакторить более глобально, нежели на уровне этих циклов, может даже немного алгоритм придётся подправить. Сейчас какая-то наркомания.
Да я уже всяко пробовал. И в подпрограмму выносил и хвост перемещал, один хрен - КПСС получается.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 26.12.2014, 11:28   #4
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Работает - и хрен с ней дальше работает, хоть и КПСС
pu4koff вне форума Ответить с цитированием
Старый 26.12.2014, 11:38   #5
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Код:
if (L == 0)
{
  k = Q - 1;
  continue;
}
waleri вне форума Ответить с цитированием
Старый 26.12.2014, 12:10   #6
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Код:
if (L == 0)
{
  k = Q - 1;
  continue;
}
О_о. Я такого не пробовал. Ща попробую.
Не-а. Не пошло. continue, это пропуск итерации. Новое значение Q он не присвоил.
Спасибо, работает. Это я ошибку зделал.
Код:
    if (L == 0)
    {
      Q = k + 1;
      continue;
    }
Цитата:
Сообщение от pu4koff Посмотреть сообщение
Работает - и хрен с ней дальше работает, хоть и КПСС
Это для справочника. Редакторы за такое "своевольничание" сильно пинать будут.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 26.12.2014 в 12:29.
Smitt&Wesson вне форума Ответить с цитированием
Старый 26.12.2014, 13:45   #7
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
int Q = 1;

ok =false;
while not ok // M40:
{ 
  ok=true;
  for(int k = Q; k < N-1; k++)
  {
    ..............
    ..............
    if(L != 0) 
   { //goto M90;
    Вычисляется значение Q
    .............. 
  //  goto M40;
    ok=false;
    Break;
   } 
/// M90:
    if(k + 1 != P)
    .............
    .............
  }// next k
}
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Старый 26.12.2014, 16:27   #8
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Код:
int Q = 1;

while (true) {
//M40:
  for(int k = Q; k < N-1; k++)
  {
    ..............
    ..............
    if (L) {
       Вычисляется значение Q
       .............. 
       break; // типа goto M40
    } 
    if(k + 1 != P)
    .............
    .............
  }
  break; // хз что ты хочешь делать дальше...
}
Не?

Последний раз редактировалось rrrFer; 26.12.2014 в 16:30.
rrrFer вне форума Ответить с цитированием
Старый 26.12.2014, 17:25   #9
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Добавление лишнего цикла - плохой стиль программирования. Вариант waleri с небольшой переделкой подошел идеально.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 26.12.2014, 21:04   #10
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
Добавление лишнего цикла - плохой стиль программирования
Ну смотри кнешно сам, но я вот думаю что тут цикл нужен и не будет лишним он. Всякие флажки запутывают код значительнее чем goto ИМХО
rrrFer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как избавится от проверки подлиности Windows? ололошенько Windows 28 21.11.2013 01:54
Как избавится от мерцание текста KIRILL284 Общие вопросы Delphi 9 26.09.2013 16:52
Как избавится от лишних библиотек? bill Помощь студентам 2 07.03.2012 10:09
Как избавится от сонливости? Ivan_32 Свободное общение 25 19.10.2010 10:25
Как избавится от этого символа??href Wi1D HTML и CSS 1 06.03.2010 23:55