Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
2-1168414839
DelphiLexx
2007-01-10 10:40
2007.01.28
Помогите создать аналог распределения MessageBox a


2-1168120534
koha
2007-01-07 00:55
2007.01.28
brcc32 - можно ли ей конвертировать любой файл в ресурс?


15-1168244315
vajo
2007-01-08 11:18
2007.01.28
Посоветуйте колонки для компьютера.


2-1168014381
mih
2007-01-05 19:26
2007.01.28
SQL в TQuery


2-1168699117
IvanIvan
2007-01-13 17:38
2007.01.28
DbGrid





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский