Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: Программа на си  (Прочитано 3692 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Señor_Gaga

  • Забанен
  • Активист
  • *
  • Сообщений: 878
  • Ubuntu 12.04LTS & Linux Mint 13LTS "Maya"
    • Просмотр профиля
Re: Программа в си
« Ответ #15 : 24 Марта 2014, 11:45:55 »
Тем не менее многоуважаемый Н.Вирт оставил goto
и в Модуле-2 и в Обероне.

Ни кому ведь в голову не приходит jmp из ассемблера убирать.

Оффлайн Sly_tom_cat

  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12139
  • Xubuntu 22.04
    • Просмотр профиля
    • Github
Re: Программа в си
« Ответ #16 : 24 Марта 2014, 12:05:45 »
Señor_Gaga, ну так в ассемблере без переходов - никак. А вот в ЯП типа паскаля и си goto если и сохраняют то только для школьников ИМХО.
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

Оффлайн SergeyIT

  • Зануда.
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5743
  • Все по палатам!
    • Просмотр профиля
Re: Программа в си
« Ответ #17 : 24 Марта 2014, 13:19:42 »
А чем goto хуже while(true) и т.п. ?
« Последнее редактирование: 24 Марта 2014, 14:03:58 от SergeyIT »
Извините, я все еще учусь

Lifewalker

  • Гость
Re: Программа в си
« Ответ #18 : 24 Марта 2014, 13:39:49 »
Señor_Gaga, я в общем-то тоже, и что? Официально меня учили программировать станки с ЧПУ. А программированию компьютеров учился сам, но шоб такое...

И кстати, в стандартах Модулы-2 и Оберона-2 goto нет, в Обероне точно, 100% нету. Может в каких-то особо извращённых реализациях они есть? Что до goto в асме, так это от процессора зависит. Если создать процессор, который на аппаратном уровне поддерживает парадигму программирования только на базе «последовательность+ветвление+повторение», то jmp можно убирать из набора команд. Разве не так?

Sly_tom_cat, жестоко, но правильно, goto - это ужас и кошмар.
« Последнее редактирование: 24 Марта 2014, 17:59:52 от Lifewalker »

Оффлайн Señor_Gaga

  • Забанен
  • Активист
  • *
  • Сообщений: 878
  • Ubuntu 12.04LTS & Linux Mint 13LTS "Maya"
    • Просмотр профиля
Re: Программа в си
« Ответ #19 : 24 Марта 2014, 17:54:12 »
Однако если нужно ВНЕЗАПНО
выйти из нескольких вложенных циклов,
то goto самое то,
что нужно.

Lifewalker

  • Гость
Re: Программа в си
« Ответ #20 : 24 Марта 2014, 18:06:10 »
Однако если нужно ВНЕЗАПНО выйти из нескольких вложенных циклов, то goto самое то, что нужно.
Могу ошибаться, но разве необходимость внезапно покинуть несколько вложенных циклов не является либо результатом катастрофы аварийного хода исполнения либо хреновой декомпозиции программы? И в том и в другом случае goto во вред, а не на пользу.

Оффлайн peregrine

  • FSM
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 7215
  • Gentoo x64 Ubuntu 16.04.1 x64
    • Просмотр профиля
Re: Программа в си
« Ответ #21 : 24 Марта 2014, 18:06:54 »
Señor_Gaga, break, return в большинстве случаев с головой хватает. Код с goto похож на лапшу, в нём чёрт ногу сломит. В ASM-е особо вариантов нет, вот и есть там jmp.

Оффлайн Sly_tom_cat

  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12139
  • Xubuntu 22.04
    • Просмотр профиля
    • Github
Re: Программа в си
« Ответ #22 : 24 Марта 2014, 18:43:21 »
Выход из нескольких вложенных циклов (кроме break, return) может еще быть реализован через механизм ексепшенов (это как раз для аварийного хода исполнения).

Собственно go to mast go - чисто холиварная тема, предлагаю ее свернуть.

Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

Оффлайн Виталий Голованов

  • Новичок
  • *
  • Сообщений: 19
  • Я мненью общества вращенье придавал и стержнем был
    • Просмотр профиля
Re: Программа в си
« Ответ #23 : 30 Марта 2014, 20:39:14 »
а представьте ситуацию,когда у вас открыта куча дескрипторов. И каждый важен. Как вы выпишите ситуацию проверки успешности открытия каждого и полной очистки ресурсов в случае ошибки на каком-то из этапов? Вы будете вызывать подпрограмму очистки на каждом этапе и выходить или проще сохранить код ошибки и прыгнуть в конец функции на очистку? Я предпочитаю второе, чем монстроподобные многоуровневые условия. Gоtо живет ради таких ситуаций и быдлокодят как раз те, кто строит многоэтажки из вложенных условий. В ассемблере без джампов не обойдешься, но и в си иногда тоже. Главное внимательно выписать алгоритм. Вспомните недавний глюк в мак-осе с лишним gоtо
Толпа не любит одиночек;она признает только фальшивых людей,подражающих во всем друг другу. © Ошо

Оффлайн Чистый

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 3473
  • nix - вот оно счастье...
    • Просмотр профиля
Re: Программа в си
« Ответ #24 : 30 Марта 2014, 21:17:01 »
да ладно народ, если есть goto значит он кому-то нужен, в том же ядре линя их вагон и маленькая тележка
Тестовый репозиторий kdeNeur ppa:devcode/kdeneur
各々が死ぬことをどのように決定する

Оффлайн Гриб_под_зонтом

  • Автор темы
  • Активист
  • *
  • Сообщений: 301
    • Просмотр профиля
Re: Программа в си
« Ответ #25 : 15 Сентября 2014, 19:56:09 »
 :)
:o за вещи типа "goto ubuntu" нам в ВУЗе сразу ставили 2 бала.

Конструкции языка позволяющие организовать цикл по условию и конструкции логического ветвления и выбора решают все возможные алгоритмические задачи БЕЗ go to.


PS таки надо было на лекции ходить и на практику .... что бы не позорится таким быдлокодом...
Учусь в школе (7 класс) программирование изучаю сам, без помощи так что пишу как умею. Но за совет спасибо если бы вы ещё рассказали про циклы был бы очень благодарен
Hp 250 G3: 8Gb RAM, Intel Celeron 2.16-2.58GHz with 2 core, Intel HD Graphics.
Ubuntu 18.04 LTS with GNOME 3.

Оффлайн Sly_tom_cat

  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12139
  • Xubuntu 22.04
    • Просмотр профиля
    • Github
Re: Программа на си
« Ответ #26 : 15 Сентября 2014, 20:57:24 »
Haker, так циклы описаны в куче литературы.

Основные примитивы:

Цикл for - выполняется по целочисленному индексному значению с ограничением от и до или по списку значений (элементами могуть быть произвольные типы значений). Но список для такого типа циклов реализован не во всех языках.

Цикл while - производится проверка условия продолжения цикла и если оно истинно выполняется тело цикла, после чего производится неявный переход к проверке условия, иначе происходит неявный переход к выполнению кода за кодом цикла.

Цикл until - выполняется тело цикла и после этого производится проверка условия выхода из цикла: если оно истино - продолжается выполнение кода за циклом, иначе происходит неявный переход к началу кода цикла. Конструкция until-цикла в некоторых языках (например в Python) не реализована т.к. считается частным случаем цикла while (что концептуально верно только от части...)   
« Последнее редактирование: 15 Сентября 2014, 21:23:26 от Sly_tom_cat »
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

Оффлайн peregrine

  • FSM
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 7215
  • Gentoo x64 Ubuntu 16.04.1 x64
    • Просмотр профиля
Re: Программа на си
« Ответ #27 : 15 Сентября 2014, 21:01:13 »
Sly_tom_cat, в C нет until, там это называется цикл do-while (он же цикл с предусловием, выполнится как минимум 1 раз).

Оффлайн Sly_tom_cat

  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12139
  • Xubuntu 22.04
    • Просмотр профиля
    • Github
Re: Программа на си
« Ответ #28 : 15 Сентября 2014, 21:27:53 »
peregrine, я описывал не реализацию в конкретном языке, а основные примитивы циклов. А так да - в каждом конкретном языке эти примитивы реализуются с помощью разных синтаксических конструкций (с использованием своей лексики).

Однако но на мой взгляд важно уловить концепцию построения алгоритмов, а реализация алгоритма на конкретном языке - это частный случай. 
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

Оффлайн unimix

  • Активист
  • *
  • Сообщений: 537
    • Просмотр профиля
Re: Программа на си
« Ответ #29 : 16 Сентября 2014, 00:59:32 »
Рекурсивные функции также можно отнести к циклам.

 

Страница сгенерирована за 0.023 секунд. Запросов: 21.