![]() |
Модераторы: volvo877, Snowy, MetalFan |
![]() ![]() ![]() |
|
Innuendo108 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 143 Регистрация: 3.4.2008 Репутация: нет Всего: 2 |
Я помню, когда школьником ходил на городские и республиканские олимпиады - там за использованием GOTO или аннулировали задание, или говорили переделать и не принимали задание пока там не будет GOTO... Так же, потом когда я перешел на FreePascal - я заметил что там в настройках компилятора есть такая опция "Разрешать GOTO или нет" - т.е. всё-таки были какие-то споры у программистов насчёт GOTO в паскале.
Когда я готовился к экзаменам Бакалавра (после школы - у нас другая система образования) - я занимался в группе Паскаля. там преподаватель тоже очень резко относился к использованию label и GOTO, говорил что это пережитки basic'а =) Сейчас, в университете, я вижу как нас чуть-ли не заставляют везде этот GOTO вставлять - который я уже считаю злом... Так кто прав? Я в интернете искал информацию на эту тему, но так и не нашел. Кто решил что что GOTO нельзя и почему? Я уже сам за тех, кто против goto (привык уже как-то), но просто интересно. Это просто этикет программирования (в паскале), или есть какие-то стандарты? Если есть таковые стандарты - то хотелось бы почитать. Может быть goto нельзя, потому что в настоящем паскале его нет, а потом доделали так сказать) |
|||
|
||||
Kbl4AH |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 741 Регистрация: 1.4.2008 Где: Вятка Репутация: нет Всего: 15 |
Goto юзать можно, но не нужно...
1) гооврит о плохо продуманном алгоритме... 2) неудобства в чтении кода... 3) сложнее отлавливать ошибки имхо юзать можно, но тока в крайнем, безвыходном случае... тем боле в основном юзают начинающие, не умеющие составлять свои подпрограммы... а при использовании подпрограмм мона и exit юзать, в циклах - break, continue... |
|||
|
||||
volvo877 |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2073 Регистрация: 15.11.2004 Репутация: 2 Всего: 116 |
Не надо догм. Используй то, что тебе нужно там, где оно тебе нужно. Естественно, если ты пишешь на Паскале в стиле Basic-а, ни к чему хорошему это не приведет. Но иногда Goto сильно облегчает задачу. В принципе, у меня основной язык - Ada, так что мне как-то и Goto не нужен, чтоб, скажем, выйти из нескольких циклов без усилий - на то у нас есть именованные циклы:
Попробуй то же самое сделать (так же просто и естественно) без Goto в Паскале (только не надо предлагать ввести еще переменную, и изменить циклы на While/Repeat, это раздует код, а зачем, если можно этого избежать?)...
Ни о чем это не говорит... Повторяю еще раз: не нравится (или не умеешь) - не используй. Другим не мешай. |
||||||
|
|||||||
Kbl4AH |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 741 Регистрация: 1.4.2008 Где: Вятка Репутация: нет Всего: 15 |
И в мыслях мешать не было ![]() Щелковская гимназия
Википедия
Королевство Delphi
PS. Что-то вы, volvo877, как-то очень ревностно и категорично к большинству постов в вашем разделе относитесь... Оно и понятно - ваша епархия... |
||||||||
|
|||||||||
Metalex |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 635 Регистрация: 22.10.2008 Где: Украина-ZPсity Репутация: нет Всего: нет |
Меня тоже учили обходится без goto, если это не очень усложняет код, по нескольким причинам, одной из которых есть написание алгоритма к программе.
-------------------- Don't let the system get you down. |
|||
|
||||
Innuendo108 |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 143 Регистрация: 3.4.2008 Репутация: нет Всего: 2 |
Вообщем стояло задача. Я не буду говорить всю задачу, упрощу до нельзя - нужно было 2 раза сгенерировать случайное число (от 1 до 5) - но чтоб оно не повторялось. я сделал, как мне показалось, - очень просто:
(программа выглядела больше, потому что между этими действиями ещё были выводы разные и кейсы. Но это не важно. Преподаватель сказал что нужно обойтись БЕЗ ЦИКЛОВ. И я сидел, и голову ломал, как же так random задать красиво, чтоб он не повторился... А в конце он говорит ответ:
и что я вижу? помоему в данном случае - goto назад является своебразным циклом)) И это меня взбесило)) что мало того, где можно обойтись простым while-ом заставляют использовать ненужный goto, так ещё и "без циклов", хотя по-сути ответ с циклом. ведь по-сути, если задать условие проверки и выполнять GOTO назад, то это как и repeat until =) Это сообщение отредактировал(а) Innuendo108 - 17.3.2009, 01:38 |
||||||
|
|||||||
Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: нет Всего: 130 |
Если в языке есть некий оператор, то глупо утверждать, что использование данного оператора - плохой тон.
-------------------- There's nothing left but silent epitaphs. |
|||
|
||||
pompei |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 7.9.2007 Репутация: нет Всего: 6 |
В ядре linux-а, написаном на C, оператор goto используется очень часто - если грамотно, то использовать можно всё.
--------------------
А всё оказывается гораздо проще: пассивные наноструктуры - активные наноструктуры - системы наносистем - молекулярные наносистемы - сингулярность! По пять лет на каждый этап. |
|||
|
||||
Metalex |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 635 Регистрация: 22.10.2008 Где: Украина-ZPсity Репутация: нет Всего: нет |
Также в плохом тоне еще обвиняют exit и подобные ему..
-------------------- Don't let the system get you down. |
|||
|
||||
pompei |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 7.9.2007 Репутация: нет Всего: 6 |
Пример грамотного использования goto на C.
Данный подход используется в ядре linux Это сообщение отредактировал(а) pompei - 17.3.2009, 11:04 --------------------
А всё оказывается гораздо проще: пассивные наноструктуры - активные наноструктуры - системы наносистем - молекулярные наносистемы - сингулярность! По пять лет на каждый этап. |
|||
|
||||
volvo877 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2073 Регистрация: 15.11.2004 Репутация: 2 Всего: 116 |
Ну, здесь налицо явный дебилизм преподавателя. ТАК goto использовать не стОит... К тому же для столь искусственной задачи и еще более искусственного ограничения (ну, чем ему помешали циклы?) существует вариант и без циклов и без goto:
|
|||
|
||||
AXOXC |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 17.3.2009 Репутация: нет Всего: нет |
А не j := s[random(length(s))] + 1; ? Обращаемся к элементу строки под номером "random(length(s))"? Спсибо,данный способ вижу впервые, но а если нужен рандом из 100-150 чисел тогда будем строке присваивать значения в массиве? ИМХО идиальным вариантом является через while хотя и возможен бессконечный цикл( |
|||
|
||||
Kbl4AH |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 741 Регистрация: 1.4.2008 Где: Вятка Репутация: нет Всего: 15 |
||||
|
||||
AXOXC |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 17.3.2009 Репутация: нет Всего: нет |
||||
|
||||
volvo877 |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2073 Регистрация: 15.11.2004 Репутация: 2 Всего: 116 |
Конечно неважно, обвинить другого, что у него неверно, а потом рассмеяться и сказать: "Ну, это неважно"...
Так вот иди и учи синтаксис. А потом будешь искать ошибки в чужих программах. Или (ХОТЯ БЫ) потрудись запустить то, что выложено. И посмотреть, что выдается...
Вообще-то не через While, а через Repeat. Потому что сначала надо сгенерировать новое число, и только потом проверять, а не повторилось ли оно. |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "Delphi" | |
|
Запрещается! 1. Обсуждать и делится взломанными компонентами или программным обеспечением 2. Публиковать ссылки на варез 3. Оффтопить
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |