goto vs ...
label 1;
var i:integer;
begin
prost:=true;
for i:=2 to num div 2 do
if num mod i = 0 then begin prost:=false; goto 1 end;
1:
end;
Не понял? А какая необходимость goto в if втыкать.
Во-первых там можно break поставить (выход из цикла).
Во-вторых там вообще надо уже exit'ом из ф-и выходить.
P.S. Это так - к слову.
Во-первых там можно break поставить (выход из цикла).
Во-вторых там вообще надо уже exit'ом из ф-и выходить.
P.S. Это так - к слову.
goto ... break...
если ориентироваться на стандарт паскаля там вообще break нету :)
ну а в TB пожалуйста
если вам break больше метки на последний пустой оператор нравится
если ориентироваться на стандарт паскаля там вообще break нету
ну а в TB пожалуйста
если вам break больше метки на последний пустой оператор нравится[/quote]
давай сразу определимся, а то ты все время про стандарты, да про стандарты. стандартов вообще-то три штуки ты каким пользуешься? я приведу тебе цитату Н. Вирта:"Фактический стандарт для Паскаля был определен компанией Borland просто потому, что ими был создан компилятор, который распространялся широко и дешево." Так что tp и bp - это стандарт + ко всему здесь почти у всех именно tp или bp, так что хорош про стандарты.
ISO 1990г например
я в принципе ничего против не имею...
привык просто если уж в паскале то goto вместо break
а вообще это абсолютно неважно :)
главное чтоб алгоритм дурной работы не делал
ps главное в жизни двойных стандартов избегать ;)
про goto:
я просто еще хочу проинформировать о том, что использование goto на данный момент считается плохим тоном программирования, да ты наверное сам знаешь об этом.
я просто еще хочу проинформировать о том, что использование goto на данный момент считается плохим тоном программирования, да ты наверное сам знаешь об этом.
да это так )
в структурном програмировании считается что должен быть один вход и один выход на оператор
самый дурной тон это выход по goto к примеру из while цикла
а из for цикла это еще куда нишло - особенно если упрощает жизнь и делает понятней код
можно ведь и так сделать было
while ( i<=num div 2 ) and not t do
begin
t:=num mod i =0;
i:=i+1
end;
вопрос - что лучше 5 строчек или 2
лично я считаю что основная цель структурного програмирования - упрощение программы для понимания логики
хз я могу быть и не прав:)
с точки зрения компактности кода 2 строки лучше, но не всегда понятнее и это "-". к тому же begin и end несут не такую уж и большую смысловую нагрузку, так что получаем соответственно 3 и 2 строки кода + если изменить чуток код(перепишем с использованием exit), то он станет понятнее(также и останется 3 строки не считая begin и end) и максимально ближе к тому где используется for. куски кода будут почти идентичны.
и что тебе мешает использовать exit с for?
var i:integer;
begin
prost:=true;
for i:=2 to num div 2 do
if num mod i = 0 then begin prost:=false; exit; end;
end;
и что тебе мешает использовать exit с for?
пора заканчивать оффтоп :)
а exit меня полностью устраивает
но exit - это по сути та же метка
на последний опрератор
так что по логике это будет эквивалентно
tp7.0 и потом bp7.0
И не разу в голову не приходило вместо break ставить goto.
А уж exit в вашем iso-стандарте точно есть.
Не понимаю откуда такая манера взялась использовать один стандарт,
когда реализован другой. да еще когда стандарт на паскаль - простите
вообще никому не нужное дер*о, как и сам язык.
Может вам пескаль преподавал древний фанат фортрана, знавший Вирта,
И он приучил Вас стандарту следовать?? ;)
если привыкнуть писАть компактный код, то потом если будете
изучать не компактный то будут возникать такие ситуации:
смотришь, смотришь, 1,2,3,5 строка и понимаешь - на хрен этот
ламер такую хрень расписывает на столько строк???
мозги со временем выработают дополнительные извилины, которые ни
кому еще не помешали и вам станет удобнее смотреть и писАть маленький код с высокой смысловой нагрузкой.
З.Ы. Конечно это боллее явно можно ощутить, если писАть не на паскале а на С/С++,... хотя один хрен.
вообще никому не нужное дер*о, как и сам язык.[/quote]
ты по аккуратнее со словами. язык необходим и это факт(с него половина студентов РФ начинают постигать программирование), стандарты тоже было бы неплохо знать.
[quote=kerdan]Может вам пескаль преподавал древний фанат фортрана, знавший Вирта[/quote]
а чем тебе фортран не угодил? между прочим этот язык до сих пор используется в различных научных лабораториях и не даром такие пакеты как Matlab и MathCad его поддерживают. о том что он создан давно еще ничего не говорит.
[quote=kerdan]поверьте, лучше две чем пять.
если привыкнуть писАть компактный код, то потом если будете
изучать не компактный то будут возникать такие ситуации:
смотришь, смотришь, 1,2,3,5 строка и понимаешь - на хрен этот
ламер такую хрень расписывает на столько строк???
мозги со временем выработают дополнительные извилины, которые ни
кому еще не помешали и вам станет удобнее смотреть и писАть маленький код с высокой смысловой нагрузкой.[/quote]
человек, который умеет писать компактный код без проблем сможет разобрать и тот, что на 5 строк. если у тебя с этим проблемы, то ... не знаю что тебе сказать - это тебе минус причем огроменный.
а стандарт паскаля это скорее абстрактный язык которого уж лично я придерживаюсь при написании программ на паскале (за исключением случаев когда пишется для конкр цели)
к примеру стандарт ничего не говорит про работу с файлами :)
таких вещей как assign close в стандате нет
и вообще турбо это не какой-нибудь идеал - к примеру почему (не будем далеко ходить ) при работе с файлами нет процедур get и put
и нет буферных переменных
Возможно, но это предположение умерщвляется следующей задачей:
"Выход из множества вложенных циклов одновременно"
"Выход из множества вложенных циклов одновременно"
о да
это классический аргумент:)
это классический аргумент:)
и единственый, из мне известных покрайней мере :). данный аргумент просто исключение из правила.
А интересно стало, как выход из вложенных циклов реализован в Java, C# и Обероне? На память не помню. Ведь меток, вроде бы, ни в одном из перечисленных языков нет.
а что неужели никто не использует метки в других случаях...
признавайтесь )))
Я уже забыл, когда последний раз пользовался меткой. Значит, лет 5-6 без меток точно. Писал на Дельфи.
По крайней мере в C# есть и goto и break (ещё там есть классная штука yield return).
Пусть есть такое сравнение:
if(objectA.nValue == objectB.nValue)
{
}
else if(objectC.nValue == objectD.nValue)
{
}
else if(objectE.nValue == objectF.nValue){...}
Лично для меня этот код неудобен как для чтения, так и для отладки. Поэтому я его заменяю на:
if(objectA.nValue == objectB.nValue)
{
...
goto END;
}
if(objectC.nValue == objectD.nValue)
{
...
goto END;
}
if(objectE.nValue == objectF.nValue)
{
...
goto END;
}
END:....
Особенно код с else'ами красиво смотриться, когда там сравнений так 10.
[quote=Freeman]yield return
[/quote]
Это возвращение объекта итерации в результат без выхода из функции. Например, пусть метод возвращает перечисление данных типа int (в .NET есть такое понятие перечисление - это не массив и не список, читать данные из него можно только при помощи итератора) - обозначается как IEnumerable<int>, метод в цикле обрабатывает данные и возвращает в последовательность значения типа int. Когда заполнение закончено, цикл автоматически прерывается.
if(objectA.nValue == objectB.nValue)
{
}
else if(objectC.nValue == objectD.nValue)
{
}
else if(objectE.nValue == objectF.nValue){...}
Лично для меня этот код неудобен как для чтения, так и для отладки. Поэтому я его заменяю на:
if(objectA.nValue == objectB.nValue)
{
...
goto END;
}
if(objectC.nValue == objectD.nValue)
{
...
goto END;
}
if(objectE.nValue == objectF.nValue)
{
...
goto END;
}
END:....
Особенно код с else'ами красиво смотриться, когда там сравнений так 10.
case... ? )
А какие могут быть сложности с блоком else if () ???
Я им всегда пользуюсь - просвети пожалуйста.
KoderAlex
case - это очень узкоспециализированный оператор, который работает только на проверку равенства целочисленным константам. А набор условий порою бывает гораздо сложнее :(
Согласен, сам начинал с него. Причем года три юзал.
Но - смотреть в стандарт, когда все юзают tp7/bp7 - глупо.
Смотри в этот tp7/bp7, что ОН умеет и не умеет, а не стандарт.
Борланд задали стандарт, а не iso - это просто факт.
Я знаю эту парочку от и до и при этом не разу не вчитывался
в стандарт на Паскале. А некотрые со своим стандортом лепят
у себя в коде какую-то хрень.
Фортран и Паскаль и прочие раритеты я безмерно уважаю.
Это была просто ирония.
Вы меня не правильно поняли. Более ценен программист, который
умеет писать комактно - самому проще и приятнее во всем.
И вообще-то я говорил, что когда вижу растянутый и не компактный
код, то я не понимаю ТОГО КТО ЭТО писал (ибо нефиг расписывать
всякую фигню...), а НЕ САМ КОД. Так что минус у Вас - это Вы не смогли
прочитать правильно мое сообщение. :)
Смотри в этот tp7/bp7, что ОН умеет и не умеет, а не стандарт.
Борланд задали стандарт, а не iso - это просто факт.
Я знаю эту парочку от и до и при этом не разу не вчитывался
в стандарт на Паскале. А некотрые со своим стандортом лепят
у себя в коде какую-то хрень.[/quote]
согласен вот я это и писал nilbog'у если ты внимательно читал
[quote=kosfiz]я приведу тебе цитату Н. Вирта:"Фактический стандарт для Паскаля был определен компанией Borland просто потому, что ими был создан компилятор, который распространялся широко и дешево." Так что tp и bp - это стандарт + ко всему здесь почти у всех именно tp или bp, так что хорош про стандарты.[/quote]
далее
[quote=kerdan]Вы меня не правильно поняли.[/quote]
возможно
[quote=kerdan]Более ценен программист, который
умеет писать комактно - самому проще и приятнее во всем.[/quote]
это чем же он более ценен?
вообще-то тема давно уже сменилась.
KoderAlex
case - это очень узкоспециализированный оператор, который работает только на проверку равенства целочисленным константам. А набор условий порою бывает гораздо сложнее :(
перегрузка оператора ) . хотя не помню , есть такое в паскале или нет .
Такого в Паскале не помню, но можно свести к какой-нибудь подходящей (почти всегда - самописной) функции, с которой case .. of работать будет. Решение, ИМХО, паллиативное, но... таков дух Паскаля. :)
KoderAlex
case - это очень узкоспециализированный оператор, который работает только на проверку равенства целочисленным константам. А набор условий порою бывает гораздо сложнее :(
пара пустяков (буду на си писать :) )
long tmp;
.....
tmp=0;
if(objectA.nValue == objectB.nValue){tmp=tmp|0x0001};
if(objectC.nValue == objectD.nValue){tmp=tmp|0x0002};
if(objectE.nValue == objectF.nValue){tmp=tmp|0x0004};
//и т.д.
swith(tmp){
case 1: {...};break;
case 2: {...};break;
//и т.д.
};
и никаких goto :)
присмотрись как работает код .
присмотрись как работает код .
посмотрела, но так ничего и не уведела...
в приведенном примере Заз, насколько я понимаю, идет речь о том, если объект А равен об. Б - делаем ряд операций и идем к Енд(etc.), а остальные условия не проверяются. не вижу чтобы ор поменял ситуацию, хотя может и не понимаю. я привыкла писать как можно проще, если это возможно.
в любом случае использовать иф'ы подобным образом, чтобы затем пользовать касе - ИМХО, изврат.
1)улучшаем читабальность
2)не используем goto
3)для любой комбинации получаем ветвление (не обязательно условия должны выполнятся )
1)улучшаем читабальность
сомневаюсь, все зависит от поставленной задачи.
иф ... елсе иф...елсе, и никаких гото, хотя если речь о комбинациях то не подходит, согласна
3)для любой комбинации получаем ветвление (не обязательно условия должны выполнятся )
ну если для любой то ладно, ну у ЗАЗа код без комбинаций условий ...
у тебя на 3 условия 8 вариантив, а у Заза по его коду на 3 условия будет 4...
ЗАЗ поставил условия )
иф ... елсе иф...елсе, и никаких гото, хотя если речь о комбинациях то не подходит, согласна
у ЗАЗа получилось с гото .
ну если для любой то ладно, ну у ЗАЗа код без комбинаций условий ...
у него цепочка if(){if(){};}else{if(){};}; - это комбинация вроде бы )
у тебя на 3 условия 8 вариантив, а у Заза по его коду на 3 условия будет 4...
необязательно использовать все ветви .
Без кода врядли кто-то тебе точно ответит на этот вопрос, но в общем вполне достаточно циклов, if'ов и т.д., как и написал IL84.
Если бы это было так, то такого оператора просто не существовало бы....
GOTO нужен....
и зачастую позволяет СОКРАТИТЬ и повысить УДОБОЧИТАЕМОСТЬ кода в разы....
Единственный момент -- не прыгать !!В!! функции и циклы, а из них пожалуйста...
И еще один аргумент в пользу goto:
А как вы думаете реализованы while и тому подобные циклы?