Форум: "Прочее";
Текущий архив: 2007.01.28;
Скачать: [xml.tar.bz2];
ВнизСишные циклы FOR в Паскаль не переводятся? Найти похожие ветки
← →
Думкин © (2006-12-17 14:09) [40]
> Stexen © (17.12.06 01:50) [32]
Все что может Сишный фор, я легко достигаю вайлом. И проблем ни в чем не вижу. А фор в Паскале - тут уже много напсали - условие окончаний считаетися единожды.
Т.е.for(i=1;i<=length(c);i++){}
for i:=1 to length(c) do
Разные вещи. В паскале подобное достигаетсяi := 1;
while i <= length(c) do begin
....
inc(i)
end;
Либо repeat...until;
← →
vidiv © (2006-12-17 16:45) [41]Блин, ну почему мой цикл зациклился :(
var i:integer;
begin
for i:=0 to 100 do begin
PInteger(@i)^ := 1;
end;
end;
Чего вам так не нравится сишный for, помоему удобная штука, если понимать что к чему. А если не понимать, то может стоить подумать, над выбором профессии? :)
← →
Anatoly Podgoretsky © (2006-12-17 18:18) [42]> vidiv (17.12.2006 16:45:41) [41]
> Чего вам так не нравится сишный for
Потому что это не for, а while
← →
Думкин © (2006-12-17 19:21) [43]> vidiv © (17.12.06 16:45) [41]
Покажи пальцем где кому то он не нрпавится. И может не только о выборе профессии, но вообще - прежде чем говорить - стоит думать?
← →
ANTPro © (2006-12-17 19:59) [44]> [40] Думкин © (17.12.06 14:09)
> for i:=1 to length(c) do
Однако, это работает быстрее, чем :
> [40] Думкин © (17.12.06 14:09)
> i := 1;
> while i <= length(c) do begin
← →
iZEN © (2006-12-17 20:41) [45]
> Anatoly Podgoretsky © (17.12.06 18:18) [42]
> > vidiv (17.12.2006 16:45:41) [41]
> > Чего вам так не нравится сишный for
> Потому что это не for, а while
Отчасти да, но это не вся правда. :)
← →
Думкин © (2006-12-17 20:54) [46]> ANTPro © (17.12.06 19:59) [44]
Это игра в слепоглухонемой телефон? Быстрее и что мне теперь с этим делать?
← →
ANTPro © (2006-12-17 21:15) [47]> [46] Думкин © (17.12.06 20:54)
Ничего, мысленно убрать из моего поста > [40] Думкин © (17.12.06 14:09)
> [46] Думкин © (17.12.06 20:54)
> Это игра в слепоглухонемой телефон?
:) , это что?
← →
Думкин © (2006-12-18 05:43) [48]> ANTPro © (17.12.06 21:15) [47]
Это когда раз сказанное, озвучивается вновь и вновь и вновь - как сломанная пластинка. :)
← →
J_f_S (2006-12-18 06:45) [49]А теперб дружно смотрим ссылку
http://www.gamedev.ru/flame/forum/?id=58865
Уже не первый раз замечаю раздвоение темы тут, и на геймдеве, причем главный зачинщик проявляется только первым постом. Троллинг?
← →
Думкин © (2006-12-18 06:50) [50]> J_f_S (18.12.06 06:45) [49]
По первой странице подобной же темы - там прямо заповедник ламеров.
← →
Думкин © (2006-12-18 06:54) [51]Впрочем и по остальным тоже.
← →
vidiv © (2006-12-18 07:02) [52]
> Покажи пальцем где кому то он не нрпавится. И может не только
> о выборе профессии, но вообще - прежде чем говорить - стоит
> думать?
[42], например :)
> Anatoly Podgoretsky © (17.12.06 18:18) [42]
> Потому что это не for, а while
Для паскаля может и while, а для си как был конструкцией for так и остался. Есть отдельно while, есть там еще чтото (я в си не очень так). Я так думаю, что у компиляторов Си тоже есть оптимизатор, который сможет както оптимизировать for(i=0; i<10; i++), также как и delphi for i:=0 to 9 do...
← →
Думкин © (2006-12-18 07:05) [53]
> vidiv © (18.12.06 07:02) [52]
Про не нравится, ттам все-таки слов нет. Но, то что это не аналог Паскалевскому фор - это так.
Думаешь, или так и есть?
← →
vidiv © (2006-12-18 07:15) [54]
> Про не нравится, ттам все-таки слов нет.
Anatoly Podgoretsky, отвечает "Потому что это не for, а while" на вопрос "Чего вам так не нравится сишный for" => он согласен с тем что ОН (Сишный for) ему не нравится!
> Но, то что это не аналог Паскалевскому фор - это так.
А я не говорю что аналог. Сишный for имеет более широкие возможности, ввиду его особенности. И тем не менее записьfor(i=0; i<10; i++)
является аналогомfor i:=0 to 9 do
, если вы не согласны, то, пожалуйста объясните в чем разница? Только не надо говорить что это:i:=0;
while i<10 do begin
...
inc(i)
end;
и ничто другое. Ибо паскалевский for - представляет собой тоже самое. То что там оптимизатор творит - это уже другой разговор.
← →
Думкин © (2006-12-18 07:19) [55]
> Ибо паскалевский for - представляет собой тоже самое
Не то же самое. И оптимизатор ни при чем. Я же предлагал внчале обсуждения пройти в статьи.
http://www.delphimaster.ru/articles/optimization.htmlВынесение инвариантного кода за пределы цикла – не выносится. Наиболее распространенный недочет – условие цикла записывается как:
for i:=0 to memo1.lines.count – 1 do...
Delphi будет при каждой итерации вызывать метод count, вычитать из результата 1 и потом уже сверять. Настоятельно рекомендуется переписывать подобный код как
lin := .lines.count – 1;
for i:=0 to lin do...
Весь код VCL написан с нарушением этого правила. Очевидно, что проще подобного рода оптимизацию встроить в компилятор, нежели переписывать VCL :)
Так вот. Это не так. Сишный фор - будет, Паскалевский - ни разу.
← →
vidiv © (2006-12-18 07:28) [56]Это фенечка паскалевского for-а, не больше. Тем большее для случая который привел я - это как раз не принципиально. Конечно реализовать в Си эту фенечку в конструкции for достаточно трудно на первый взгляд - но думаю вполне возможно =)
> Сишный фор - будет, Паскалевский - ни разу.
1 раз всетаки будет =)
← →
J_f_S (2006-12-18 07:33) [57]Иль самому керосинчека плеснуть?
1. А почему, все решили, что переменная в цикле должна быть одна?
for (int i = 0, int j = 30; i < j; i++, j--)
Запишите паскалевским фором, или вайлом, или рипит-антилом.
2. Еще, например, условие выхода из цикла может быть неявным
for(int i=0;;i++)
3. А еще, в цикле может изменяться не сама переменная цикла
for(int i =0; i < 10; j++)
4. А еще, в условии окончания цикла может быть не завязана на переменную цикла
for(int = 0; j < 10; i++)
Да много чего еще можно придумать.
Вывод - функциональность сишного фора гораздо больше паскалевского :-)
← →
vidiv © (2006-12-18 07:36) [58]
> J_f_S (18.12.06 07:33) [57]
во +1
← →
Думкин © (2006-12-18 07:39) [59]> vidiv © (18.12.06 07:28) [56]
Мы не про фенечки. Все-таки фор и вайл - различное поведение имеют, и к друг другу не сводятся. А в Си сводятся. Я не ругаю Си - это прерогатива ламеров, но какое приемущество, кроме записи дает фор перед вайлом там?
> J_f_S (18.12.06 07:33) [57]
1. А сам не можешь? Текста поболее будет, но и все. Для понимания, возможно и проще.
2. ? и что?
3. ? И что?
4. ? И что?
Чем Сишный фор лучше его же Вайла? Записью?
← →
vidiv © (2006-12-18 07:47) [60]
> Чем Сишный фор лучше его же Вайла? Записью?
ну вобщем да!
как и в паскале:for counter := initialValue to finalValue do statement
это тоже что и
counter := initialValue;
endValue := finalValue;
while counter <= endValue do
begin
statement;
counter := Succ(counter);
end;
получается только записью
← →
Думкин © (2006-12-18 07:51) [61]> vidiv © (18.12.06 07:47) [60]
Не всегда. Хотя ты это назовешь фенечками компилятора. :)
← →
J_f_S (2006-12-18 07:56) [62]1. В С такая запись имеет явную смысловую и логическую нагрузку, через while - тут будет горотьба из обьявлений переменных в одном месте программы, самого цикла, в цикле будут инкременты, плюс неявное условие.
2,3,4 - иногда так лучше написать.
Coupe de gras -
В цикле C/C++ в качестве переменных могут быть объекты (намекаю - итераторы стандартной библиотеки шаблонов) . Любые обьекты, у классов которых определены соответствующие операторы.
← →
vidiv © (2006-12-18 07:58) [63]
> Не всегда.
А, например, когда?
← →
for (2006-12-18 07:59) [64]
> Mystic © (17.12.06 10:35) [37]
>
> По поводу цикла for я имел в виду несколько другое. Конструкция
> цикла for в C/C++ более гибкая,
Я о том, что целочисленный цикл - это инструмент мышления. Ему не нужна гибкость или больше возможностей.
Ему нужно последовательно перебирать целые числа. И всё.
Глядя на for ты сразу понимаешь что он делает. А глядя на сишные тебе надо обдумывать. В этом разница.
← →
Думкин © (2006-12-18 07:59) [65]> 2,3,4 - иногда так лучше написать.
Чем лучше?
← →
Думкин © (2006-12-18 08:03) [66]> vidiv © (18.12.06 07:58) [63]
for counter := initialValue to finalValue do statement;
Не будет эквивалентом:counter := initialValue;
endValue := finalValue;
while counter <= endValue do
begin
statement;
counter := Succ(counter);
end;
Если statement не использует counter. Да, и в общем случае тоже возможно. Тут надо тех, кто ЦПУ любит смотреть спрашивать. МВо или Sha, например. Я пас.
← →
J_f_S (2006-12-18 08:09) [67]
> Чем лучше?
А это уже мелочь и придирка.
Насчет обьектов - цикл не обязатеьлно должен быть целочисленным. Это - ограниченность взгляда программиста. Очень часто стоит задача последовательного перебора некоторого множества обьектов, к чему я собственно, STL и вспоминал. В С for-е можно пребрать некоторое множество из отображения (контейнера) . В паскале такого вопроса не стоит в виду отсутствия шаблонов (Всем молчать!), соответственно, контейнеров и их итераторов. Хотя, хотя, тут была бы более логичной концепция for_each, но она не стандартизована (она есть в бусте).
← →
Думкин © (2006-12-18 08:13) [68]> J_f_S (18.12.06 08:09) [67]
Это мы уже в другое ударяемся. Все-таки изначально влопрос ставился иначе.
Циклы фор из Си не реализуются фором в Паскале. Фор Паскаля не реализуется на Си также.
То есть это два разные Фор. И все.
← →
J_f_S (2006-12-18 08:16) [69]Если ставить вопрос как "Одинаковые ли это форы" - ответ, конечно, "нет".
А вот если задать вопрос - "Что мощнее", то тут можно смотреть выше по топику.
← →
Mystic © (2006-12-18 08:44) [70]> 1. А почему, все решили, что переменная в цикле должна быть одна?
for (int i = 0, int j = 30; i < j; i++, j--)
Противоречит стандарту, правильно:for(int i=0, j=30; i<j; ++i, --j)
> 3. А еще, в цикле может изменяться не сама переменная циклаfor(int i =0; i < 10; j++)
Это скорее преимущество паскалевкого варианта цикла for, где так ввести в заблуждение человека, читающего код, нельзя :) Теоретически можно написать файловый менеджер, где повесить на клавишу Esc функции по удалению файлов :)
Вообще c С++ довольно-таки забавная история: вначале пишут гибкий язык программирования, потом на фирмах вводят стандарты кодирования, которые запрещают использование некоторых возможностей :) К тому сейчас в моде, пользоваться готовыми алгоритмами STL, например так:template<class Arg, class Result>
std::unary_negate<std::pointer_to_unary_function<Arg, Result> >
ptr_not_fun(Result (*pfunc)(Arg))
{
return std::not1(std::ptr_fun(pfunc));
}
inline void skip_spaces(string::iterator& pos, string::iterator end)
{
pos = find_if(pos, end, ptr_not_fun(&isspace));
}
← →
Anatoly Podgoretsky © (2006-12-18 13:24) [71]> vidiv (18.12.2006 7:02:52) [52]
Если для тебя важнее как операторные скобки пишутся в том или другом языке, то тебе еще учиться и учиться.
← →
Anatoly Podgoretsky © (2006-12-18 13:27) [72]> vidiv (18.12.2006 7:02:52) [52]
Теперь замени i<10 на что ни будь более серьезное, наприме на функцию, а еще лучше на List.Count и особенно сделай в цикле, что бы этот Count увеличивался и тогда посмотрим, что будет.
← →
Anatoly Podgoretsky © (2006-12-18 13:30) [73]> J_f_S (18.12.2006 8:09:07) [67]
> Насчет обьектов - цикл не обязатеьлно должен быть целочисленным. Это - ограниченность взгляда программиста.
И математиков, не много на себя берешь?
← →
Anatoly Podgoretsky © (2006-12-18 13:33) [74]> Думкин (18.12.2006 8:13:08) [68]
Не два разных FOR а два разных цикла, что из того, что использовано одно и тоже имя, в других языках например может использоваться другое имя. Разница в сущности - в Паскале цикл с именем FOR соответствует математике. И есть другие циклы, не только этот. Сущности разделены.
← →
Anatoly Podgoretsky © (2006-12-18 13:34) [75]> J_f_S (18.12.2006 8:16:09) [69]
> А вот если задать вопрос - "Что мощнее",
А если задать другой вопрос, насколько хорошо я знаю общую теорию программирования, математику, вот этот вопрос будет правильнее. А не крутить пальцы, мол мощнее, при этом не разбираясь в предмете.
← →
Думкин © (2006-12-18 13:34) [76]
> Anatoly Podgoretsky © (18.12.06 13:33) [74]
Про это я и писал. 2 разных цикла. Все-таки, с клиентом видимо тебе труднее обозревать все целиком. Получается без контекста.
← →
J_f_S (2006-12-18 13:45) [77]
> Anatoly Podgoretsky © (18.12.06 13:30) [73]
>
> > J_f_S (18.12.2006 8:09:07) [67]
>
> > Насчет обьектов - цикл не обязатеьлно должен быть целочисленным.
> Это - ограниченность взгляда программиста.
>
> И математиков, не много на себя берешь?
Если судить с точки зрения математики третьего класса - то да, должны быть циферки. С точки зрения дискретной математики, мы оперируем множеством обьектов. Иногда это множество оказывается равным множеству целых чисел, иногда нет.
← →
Игорь Шевченко © (2006-12-18 13:55) [78]Думкин © (18.12.06 07:39) [59]
> Чем Сишный фор лучше его же Вайла? Записью?
Строчек меньше
← →
Думкин © (2006-12-18 13:57) [79]> Игорь Шевченко © (18.12.06 13:55) [78]
То есть записью. Речь же все-таки об ином шла. Впрочем опять патефон начинается.
← →
Anatoly Podgoretsky © (2006-12-18 13:58) [80]> Думкин (18.12.2006 13:34:16) [76]
Нормально получается, я твое сообщение видел.
Кашу маслом не испортишь, ты в одном контексте, я в другом, но мельница вертится.
Страницы: 1 2 3 4 5 6 вся ветка
Форум: "Прочее";
Текущий архив: 2007.01.28;
Скачать: [xml.tar.bz2];
Память: 0.63 MB
Время: 0.054 c