powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Выйти из двух циклов в С
44 сообщений из 44, показаны все 2 страниц
Выйти из двух циклов в С
    #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
Выйти из двух циклов в С
    #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
Выйти из двух циклов в С
    #39664818
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну разве что goto
...
Рейтинг: 0 / 0
Выйти из двух циклов в С
    #39664822
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
i = 100;
break;
...
Рейтинг: 0 / 0
Выйти из двух циклов в С
    #39664824
d7i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
заменить for на while...
...
Рейтинг: 0 / 0
Выйти из двух циклов в С
    #39664836
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да. goto единственное решение. спасибо.
...
Рейтинг: 0 / 0
Выйти из двух циклов в С
    #39664837
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T
Код: plaintext
1.
2.
i = 100;
break;



аааа....хитро. спасибо :)
...
Рейтинг: 0 / 0
Выйти из двух циклов в С
    #39664921
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хорошо когда желание структурно программировать не превращается в goto-фобию.
...
Рейтинг: 0 / 0
Выйти из двух циклов в С
    #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
Выйти из двух циклов в С
    #39664959
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonХорошо когда желание структурно программировать не превращается в goto-фобию.
это запутывающее существо дела утверждение.

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

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




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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Как вы собираетесь протестировать блок кода типа for, if и т.п. в исходном коде, раз уж вы не видите никакой разницы с точки зрения структурного кода?
...
Рейтинг: 0 / 0
Выйти из двух циклов в С
    #39665049
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтобы закрыть тему бесполезного флуда. Вот оригинальный учебник Дейкстры
https://www.ozon.ru/context/detail/id/139232156/
...
Рейтинг: 0 / 0
Выйти из двух циклов в С
    #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
Выйти из двух циклов в С
    #39665063
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

да они там часто загоняются, обычно если уж так хочется заморочитсья без goto, то внутренний цикл в отдельную процу решает проблему "что бы в глаза не бросалось"
...
Рейтинг: 0 / 0
Выйти из двух циклов в С
    #39665066
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Выйти из двух циклов в С
    #39665087
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglЧтобы закрыть тему бесполезного флуда. Вот оригинальный учебник Дейкстры
https://www.ozon.ru/context/detail/id/139232156/

Каким образом это закрывает вопрос? Методология разработки ПО с 75-го года довольно существенно поменялась, даже в отрыве от языка и платформы, многое из ранее описанного не актуально и даже вредно.
...
Рейтинг: 0 / 0
Выйти из двух циклов в С
    #39665130
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglЧтобы закрыть тему бесполезного флуда. Вот оригинальный учебник Дейкстры
https://www.ozon.ru/context/detail/id/139232156/
эта книжка и правильная и хорошая.
Но это не учебник .
В том смысле, в каком учебник должен более-менее систематически
раскрывать вопрос и учить его использованию.

Данная книжка - сборник статей независимых авторов с размышлением на тему.
У меня нет сейчас её под рукой.
Но, если не изменяет память, составители с самого начала проделали "хитрый ход"
- просто сняли имена авторов с заголовков статей и представили результат как единый текст.
...
Рейтинг: 0 / 0
Выйти из двух циклов в С
    #39665173
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargl...
АФАИК множественный возврат запрещен не рекомендуется из функции, а не из блока.

да, имхо, в этой фразе закопано некое содержание, достойное самостоятельного развернутого высказывания.
Если кураж не рассеется, может быть, вечером сподвигнусь высказаться.
...
Рейтинг: 0 / 0
Выйти из двух циклов в С
    #39665240
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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;
    }
}



Возможное решение:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
outer:
for (i=0; i<100; i++)
{
    for (j=0; j<100; j++)
    {
        if (condition1)
        {
            break outer; 
        }
    }
}



С уважением, Валентин
...
Рейтинг: 0 / 0
Выйти из двух циклов в С
    #39665338
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы эти два цикла вообще вынес в процедуру и использовал return для выхода.
...
Рейтинг: 0 / 0
Выйти из двух циклов в С
    #39665346
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovЯ бы эти два цикла вообще вынес в процедуру и использовал return для выхода.

Не.. это не олдскульно. Надо флаг дрочить в цикле, или рвать шаблоны через goto
...
Рейтинг: 0 / 0
Выйти из двух циклов в С
    #39665473
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему всего два цикла?

Давайте решать задачу для n циклов. И условия выхода - произвольные.

Go-go!
...
Рейтинг: 0 / 0
Выйти из двух циклов в С
    #39665680
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valentin KolesnikovВозможное решение:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
outer:
for (i=0; i<100; i++)
{
    for (j=0; j<100; j++)
    {
        if (condition1)
        {
            break outer; 
        }
    }
}



С уважением, ВалентинА это какой язык?
...
Рейтинг: 0 / 0
Выйти из двух циклов в С
    #39665685
d7i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
i=j=condition=0;
while(i<100 && !condition)
{
   ....
   while(j<100 && !condition)
   { 
      ....
      if(что-то там пошло не так)
        condition=1;
      j++;
    }
    i++;
}
...
Рейтинг: 0 / 0
Выйти из двух циклов в С
    #39665715
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
for(int s = 0; i < 100 * 100 ; s++) {

	int i = s / 100;
	int j = s % 100;
	
	// ..... processing body with i,j

	if (condition(i,j)) {
		break;
	}
}
...
Рейтинг: 0 / 0
Выйти из двух циклов в С
    #39665729
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Код: plaintext
1.
for(int s = 0; i < 100 * 100 ; s++) {


Зациклится
...
Рейтинг: 0 / 0
Выйти из двух циклов в С
    #39665733
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да. Сорян. Не тестил.
...
Рейтинг: 0 / 0
Выйти из двух циклов в С
    #39665755
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
i=j=0;
for(;;) {
   // ..... processing body with i,j

   j++;
   if(j == 100) {
     j = 0;
     i++;
     if(i == 100) break;
   }
};
...
Рейтинг: 0 / 0
Выйти из двух циклов в С
    #39665764
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К чему все эти извращения?
...
Рейтинг: 0 / 0
Выйти из двух циклов в С
    #39665771
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилК чему все эти извращения?

Я помню, ещё только когда книжкой по Си в детстве обзавёлся, вот такой же фигнёй маялся
...
Рейтинг: 0 / 0
Выйти из двух циклов в С
    #39665780
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил, напомнило тяпничный pwdgen.

http://www.sql.ru/forum/1126611-1/tyapnichnyy-pwdgen

В изначальной постановке мне нужна была утилита которая генерирует символьные сочетания
для произвольных наборов регулярок. Тоесть регулярка наоборот. Не матчер а генератор.

Код: sql
1.
$ pwdgen (Qwe|Asd|Zxc)19\d{2}[!@#$%^&*()]


Данное выражение должно сгенерировать систему из 3х вложенных циклов где
первый цикл идет по префиксам парольных выражений {"Qwe", "Asd", "Zxc"},
второй цикл по всем датам от 1900 года и так далее.

Но я так и не реализовал то что хотел. Просто отложил. Были более интересные дела.
...
Рейтинг: 0 / 0
Выйти из двух циклов в С
    #39666229
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Выйти из двух циклов в С
    #39666237
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttmayton,

https://onlinestringtools.com/generate-string-from-regex
Мне не нужна эта ссылка.
...
Рейтинг: 0 / 0
Выйти из двух циклов в С
    #39666238
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

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


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