Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.01.28;
Скачать: CL | DM;

Вниз

Сишные циклы 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;
Скачать: CL | DM;

Наверх




Память: 0.65 MB
Время: 0.061 c
11-1145378794
thaddy
2006-04-18 20:46
2007.01.28
Problem with new cute control ;)


15-1168353459
Cooller
2007-01-09 17:37
2007.01.28
Машина Бека


15-1168538869
Kerk
2007-01-11 21:07
2007.01.28
Как бы выглядел Google, если б он был Yahoo


15-1168296414
SSE
2007-01-09 01:46
2007.01.28
С каких процессоров началсь поддержка SSE1 ?


1-1165036767
allrussia
2006-12-02 08:19
2007.01.28
Как в Memo при наведении мыши на слово оно выделялось цветом