Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Выйти из двух циклов в С / 25 сообщений из 44, страница 1 из 2
24.06.2018, 15:12
    #39664813
jenya7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выйти из двух циклов в С
Как мне красиво выйти из двух циклов? Без condition2.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
for (i=0; i<100; i++)
{
    for (j=0; j<100; j++)
    {
        if (condition1)
        {
            condition2 = 1;
            break; 
        }

        if (condition2)
            break;
    }
}
...
Рейтинг: 0 / 0
24.06.2018, 15:14
    #39664816
jenya7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выйти из двух циклов в С
ошибся. правильно так.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
for (i=0; i<100; i++)
{
    for (j=0; j<100; j++)
    {
        if (condition1)
        {
            condition2 = 1;
            break; 
        }
    }

     if (condition2)
        break;
}
...
Рейтинг: 0 / 0
24.06.2018, 15:20
    #39664818
Barlone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выйти из двух циклов в С
ну разве что goto
...
Рейтинг: 0 / 0
24.06.2018, 15:56
    #39664822
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выйти из двух циклов в С
Код: plaintext
1.
2.
i = 100;
break;
...
Рейтинг: 0 / 0
24.06.2018, 15:58
    #39664824
d7i
d7i
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выйти из двух циклов в С
заменить for на while...
...
Рейтинг: 0 / 0
24.06.2018, 16:42
    #39664836
jenya7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выйти из двух циклов в С
да. goto единственное решение. спасибо.
...
Рейтинг: 0 / 0
24.06.2018, 16:46
    #39664837
jenya7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выйти из двух циклов в С
Dima T
Код: plaintext
1.
2.
i = 100;
break;



аааа....хитро. спасибо :)
...
Рейтинг: 0 / 0
24.06.2018, 21:16
    #39664921
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выйти из двух циклов в С
Хорошо когда желание структурно программировать не превращается в goto-фобию.
...
Рейтинг: 0 / 0
25.06.2018, 00:05
    #39664952
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выйти из двух циклов в С
jenya7Как мне красиво выйти из двух циклов? Без condition2.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
for (i=0; i<100; i++)
{
    for (j=0; j<100; j++)
    {
        if (condition1)
        {
            condition2 = 1;
            break; 
        }

        if (condition2)
            break;
    }
}


goto
...
Рейтинг: 0 / 0
25.06.2018, 00:32
    #39664959
booby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выйти из двух циклов в С
maytonХорошо когда желание структурно программировать не превращается в goto-фобию.
это запутывающее существо дела утверждение.

А оно здесь в том, что цикл for не являются частью разрешенных в структурном программировании конструкций.

Раз этот пример не следует рецептам структурного программирования, то его и нарушить здесь применением goto нельзя .
...
Рейтинг: 0 / 0
25.06.2018, 00:34
    #39664961
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выйти из двух циклов в С
jenya7Dima T
Код: plaintext
1.
2.
i = 100;
break;




аааа....хитро. спасибо :)

Это не «хитро». Это откровенное плохо пахнущий код.

Для выхода из N вложенных циклов конечно можно использовать GOTO, но его необходимость ещё потребуется обосновать, ведь достаточно весь цикл положить в функцию и выходить из всех циклов через return. Это и решает задачу, и способствуют эффективному структурированию кода.
...
Рейтинг: 0 / 0
25.06.2018, 00:52
    #39664966
booby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выйти из двух циклов в С
hVostt...
Для выхода из N вложенных циклов конечно можно использовать GOTO, но его необходимость ещё потребуется обосновать, ведь достаточно весь цикл положить в функцию и выходить из всех циклов через return.
...

это пять баллов за "структурирование кода".
...
Рейтинг: 0 / 0
25.06.2018, 00:57
    #39664967
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выйти из двух циклов в С
boobymaytonХорошо когда желание структурно программировать не превращается в goto-фобию.
это запутывающее существо дела утверждение.

А оно здесь в том, что цикл for не являются частью разрешенных в структурном программировании конструкций.

Раз этот пример не следует рецептам структурного программирования, то его и нарушить здесь применением goto нельзя .Прошу предъявить источник знаний, кто же фор запретил.
boobyhVostt...
Для выхода из N вложенных циклов конечно можно использовать GOTO, но его необходимость ещё потребуется обосновать, ведь достаточно весь цикл положить в функцию и выходить из всех циклов через return.
...

это пять баллов за "структурирование кода".Аналогично, ваши измышления хотелось бы подтвердить нормальными учебниками.
...
Рейтинг: 0 / 0
25.06.2018, 01:08
    #39664974
booby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выйти из двух циклов в С
Siemargl,

что ты называешь измышлениями?
и по твоему тоже "структурное программирование" подразумевает множественность возвратов из блока кода?

может, укажешь "учебник", где такому структурному программированию учат.
...
Рейтинг: 0 / 0
25.06.2018, 01:19
    #39664979
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выйти из двух циклов в С
booby,

твои предположения о "неправильности".

И если ты пишешь, о "for - не являются частью разрешенных в структурном программировании конструкций" - то подтверди источником.

АФАИК множественный возврат запрещен не рекомендуется из функции, а не из блока.
...
Рейтинг: 0 / 0
25.06.2018, 01:20
    #39664980
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выйти из двух циклов в С
booby
это пять баллов за "структурирование кода".

Сам пошутил -- сам посмеялся? Ну-ну.
...
Рейтинг: 0 / 0
25.06.2018, 01:21
    #39664981
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выйти из двух циклов в С
boobyчто ты называешь измышлениями?
и по твоему тоже "структурное программирование" подразумевает множественность возвратов из блока кода?

если решили строить из себя наци по определениям, потрудитесь аргументировать свои слова правильными определениями, а также пруфами, чтобы не выглядеть смешно.
...
Рейтинг: 0 / 0
25.06.2018, 01:55
    #39664989
booby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выйти из двух циклов в С
Siemarglbooby,

твои предположения о "неправильности".

И если ты пишешь, о "for - не являются частью разрешенных в структурном программировании конструкций" - то подтверди источником.

АФАИК множественный возврат запрещен не рекомендуется из функции, а не из блока.
1) в части for - ок.
конкретно в c/c++ for и допустим и может есть быть частью структурного программирования,
т.к. условие выхода явно формулируется как логическое условие.

Во многих других языках языках нет возможности сформулировать условие завершения for прямо в заголовке.
Поэтому для таких языков не принято считать for частью инструментария "структурного программирования" по основанию множественного возврата из цикла.

Но в данном случае, да, шутка оказалась смазанной.
То есть - в итоге признаю - не удалась.

2) по части блок-функция.
функция - частный случай блока кода.

структурное программирование формулируется именно по отношению к блокам кода,
как бы они не назывались, поскольку вся программа рассматривается именно как последовательность блоков кода, каждый из которых имеет единственный вход и единственный выход.

Собственно цикл здесь - это не просто конструкция, внутри которой может оказаться какая-то повторяемая последовательность блоков, а конструкция, образующая, порождающая свой собственный блок кода .
Как и конструкция выбора iff.

Какой из блоков или последовательности блоков получает собственной имя (функции, например), и, таким образом получает возможность связывания в разные последовательности блоков путем указания их имен - само по себе структурное программирование не интересует.

Программа - последовательность блоков.
цикл и операция выбора - признаваемые за правомерные способы формирования
новых блоков, при условии соблюдения принципа единственности входа и выхода.

учебники - не знаю.
Вероятно, сейчас структурному программированию уже не учат.
А так - любой учебник 30-40 летней давности.

И да, в ремарке, обращённой к hVostt я смеялся.
И именно над предложением совершить харакири return из внутренностей цикла.

Вы, вероятно, в иных странах живёте, потому нашего сарказма просто не понимаете.
...
Рейтинг: 0 / 0
25.06.2018, 02:05
    #39664990
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выйти из двух циклов в С
booby,

Да всё нормально, просто хотелось бы пояснений. Наконец-то оно последовало, спасибо.

По поводу «структурное программирование формулируется именно по отношению к блокам кода» это лирика, так как у различных блоков кода -- различное предназначение. Во многих языках блок кода можно определить просто с помощью фигурных скобочек, для того, чтобы ограничить область видимости локальных переменных. Но это не строительный блок кода.

По поводу «структурное программирование не интересует» это демагогия. Очень даже интересует, так как «блоком кода» можно с таким же успехом можно считать «от этого комментария до этого», но все понимают, что это курам на смех.
...
Рейтинг: 0 / 0
25.06.2018, 02:08
    #39664992
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выйти из двух циклов в С
booby при условии соблюдения принципа единственности входа и выхода.

Это что за принцип такой, для чего нужен и какую задачу решает, можете пояснить?
...
Рейтинг: 0 / 0
25.06.2018, 02:11
    #39664994
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выйти из двух циклов в С
booby,

Ещё момент, многие не любят и умилительно морщатся, когда об этом заходит разговор.

Функцию можно протестировать.

Как вы собираетесь протестировать блок кода типа for, if и т.п. в исходном коде, раз уж вы не видите никакой разницы с точки зрения структурного кода?
...
Рейтинг: 0 / 0
25.06.2018, 09:12
    #39665049
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выйти из двух циклов в С
Чтобы закрыть тему бесполезного флуда. Вот оригинальный учебник Дейкстры
https://www.ozon.ru/context/detail/id/139232156/
...
Рейтинг: 0 / 0
25.06.2018, 09:13
    #39665054
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выйти из двух циклов в С
С позволения господ Кернингана и Ричи я приведу фрагмент исходника из их книги.

3.8 Оператор goto и метки.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
found = 0;
for(i=0;i<n && ! found; i++){
 for(j=0;j<m && ! found; j++) {
  if (a[i] == b[j]) found = 1;
 }
}
if (found) { .... }
...
Рейтинг: 0 / 0
25.06.2018, 09:24
    #39665063
kealon(Ruslan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выйти из двух циклов в С
mayton,

да они там часто загоняются, обычно если уж так хочется заморочитсья без goto, то внутренний цикл в отдельную процу решает проблему "что бы в глаза не бросалось"
...
Рейтинг: 0 / 0
25.06.2018, 09:28
    #39665066
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выйти из двух циклов в С
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Выйти из двух циклов в С / 25 сообщений из 44, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]