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

Вниз

Сишные циклы FOR в Паскаль не переводятся?   Найти похожие ветки 

 
Mystic ©   (2006-12-27 11:06) [200]

> - это такая искусственость: присвоение (это же цикл изменения
> счётчика, почему оно вынесено?), inc(i,step)


Все программирование -- искусственность. Кому-то не хватает конечных автоматов, и он предложит ввести конструкции вида

statemacine
 state Initial:
   I := 0;
  gostate ReadFirst;
 state ReadFirst:
{ ... }
end;


Кому-то не хватает именованых циклов, кому-то еще-чего... Я не сторонник большого разрастания языка, новые возможности не должны быть экзотическими. Например, имхо, step в for -- экзотическая возможность -- очень не часто возникает в ней необходимость, а когда возникает, то вполне можно обойтись while.


 
Palladin ©   (2006-12-27 17:33) [201]


> то вполне можно обойтись while.

а большинстве случаев - просто умножением :)


 
Vga ©   (2006-12-27 20:20) [202]

> [192] ors_archangel ©   (27.12.06 05:21)
> Vga ©   (25.12.06 21:46) [188]
> >  Если хочешь посмотреть, что получается, когда неэффективно
> > работает Smart Linking - попробуй сделать форму с кнопкой
> > на Lazarus/LCL. Получается ехе метров на 6. В Delphi ехе
> > файл сравнительно велик из-за большого количества кода,
> > обеспечивающего удобства для программиста.
> насколько я знаю, где-то 5/6 - это debug info, а не код

Не в Delphi. В lazarus после strip ехе облегчается до пары метров.


 
Anatoly Podgoretsky ©   (2006-12-27 20:31) [203]

> Palladin  (27.12.2006 17:33:21)  [201]

> а большинстве случаев - просто умножением :)

Шутник, всегда сложения хватало.


 
Arct   (2007-01-06 05:47) [204]

У кого нибудь есть функции синтаксического разбора паскалевского кода?


 
Галинка ©   (2007-01-06 06:36) [205]

А мне больше всего н6равится цикл foreach (... in ... ). Могли бы и раньше такое придумать.

Конечно крутые прогрмамеры сейчас заплюют. но в вайле больше вероятность возникновения ошибки. особенно если условия сложнее чем "болше равно" и индексов поболее и индексированных переменных ((


 
Arct   (2007-01-06 06:45) [206]


> Галинка ©   (06.01.07 06:36) [205]
>
> А мне больше всего н6равится цикл foreach (... in ... ).
>  Могли бы и раньше такое придумать.
>
> Конечно крутые прогрмамеры сейчас заплюют.


А по-моему это как раз вы плюёте на совместимость.


 
Eraser ©   (2007-01-06 13:27) [207]

> [206] Arct   (06.01.07 06:45)

а зачем она нужна, эта совместимость со старыми версиями?


 
jack128 ©   (2007-01-06 14:42) [208]

Anatoly Podgoretsky ©   (27.12.06 20:31) [203]
Шутник, всегда сложения хватало.

имелось в цикле for вместо
for I := 0 to Max - 1 step 2 do
 Arr[I] := 10;

писать
for I := 0 to (Max - 1) div 2 do
 Arr[I * 2] := 10;


 
palva ©   (2007-01-06 15:00) [209]


> Arct   (06.01.07 05:47) [204]
> У кого нибудь есть функции синтаксического разбора паскалевского
> кода?

Есть в компиляторе http://www.freepalcal.org , исходные паскалевские коды которого выложены на сайте.


 
ForStep   (2007-01-06 15:25) [210]

function ForStep (var i: integer; _to, _step: integer): boolean;
begin
 if _step=0 then
 begin
   result:=false;
   exit;
 end;

 i:=i+_step;

 if _step>0 then
   result:=not (i>_to)
 else
   result:=not (i<_to);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 i,step:integer;
begin
 i:=0;
 step:=2;

 while ForStep(i,10,step) do
   caption:=caption+";"+IntToStr(i);
end;


 
ors_archangel ©   (2007-01-06 16:26) [211]


>  while ForStep(i,10,step) do

Замечательно! Так действительно можно было бы делать, если бы delph не принимал всё слишком всерьёз :( вот встроил бы функцию ForStep вместо её вызова, причём одна переменна здесь ещё передаётся по сслыке, а значит оптимизация была бы ещё лучше (работа с регистром вместо повсемесной косвенной адресации), дальше нужно было бы оптимизировать инвариантность if, и код был бы не хуже i := 0; while i < 10…, правда если step не константен, то постоянное ветвление - это оч плохо, здесь нужна другая оптимизация - вынесение проверки условия _step>0 из цикла (_step в цикле не должен меняться, хотя ForStep этого не гарантирует, как и для остальных переменных), что в общем-то разрешимо только с помощью самомодификации кода, которая в мире SMP и DEP уже не катит, поэтому придётся делать два цикла - если они маленькие, иначе - неотимизируемо... Всё это один большой аргумент, доказывающий необходимость for to step как встроенной конструкции языка, особенно для тупых компиляторов…
Я тоже против разростания языка до конкретной терминологии задачи (как в случае с statemachine в [200]), я за то, чтобы язык имел больше возможностей выражать мысль человеческую, хорший пример - foreach, любой программист, который сколько-то проргаммист, я уверен, сможет перевести это, как и step, с английского и правильно воспринять смысл, а в случае же с statemachine уже нужно знать теорию автоматов, когда на самом деле ему было бы достаточно в действительности знать switch и goto, - это действительно сомнительно. Именованные циклы - тоже тема, тогда можно было бы сделать весьма наглядный дальний break по имени цикла вместо крамольного goto. В ЕЯ предопределены многие супербазовые понятия, как например, целое-часть, причём среди многих понятий есть много общего, но в ЯП почему-то нужно обязательно выкручивать одно через другое, если это возможно: n базовых блоков структурного программирования и живите как хотите :( Понятия, понятные каждому, должны быть понятны и компилятору, например почему в Делфи нет оператора retrun - вряд ли потому что в Борланде каждый день думают как улучшить язык. Забота о совместимости? Если не вносить несовместимость, то вообще не будет развития


 
кобольеро   (2007-01-07 01:10) [212]


> я за то, чтобы язык имел больше возможностей выражать мысль
> человеческую, хорший пример - foreach, любой программист,
>  который сколько-то проргаммист, я уверен, сможет перевести
> это


          SET WX-INDEX TO 1.
          SEARCH WX-STATION
               AT END MOVE "ERROR" TO DETAIL-STATION-NAME
               WHEN IN-WEATHER-STATION = WX-CODE (WX-INDEX)
                    MOVE WX-NAME (WX-INDEX) TO DETAIL-STATION-NAME.
          MOVE ZERO TO WS-HIGH-TEMP.
          MOVE 999  TO WS-LOW-TEMP.
          PERFORM FIND-THE-HI-AND-LO
               VARYING SUB-X FROM 1 BY 1
                 UNTIL SUB-X > 12.
          MOVE WS-HIGH-TEMP TO DETAIL-HIGH-TEMP.
          MOVE WS-LOW-TEMP  TO DETAIL-LOW-TEMP.
          WRITE OUT-ITEM FROM DETAIL-LINE.
          READ IN-FILE
               AT END MOVE "Y" TO END-OF-FILE-FLAG.


 
Arct   (2007-01-07 01:50) [213]


> jack128 ©   (06.01.07 14:42) [208]
> имелось в цикле for вместо
> for I := 0 to Max - 1 step 2 do
>  Arr[I] := 10;


Объясни, зачем тебе каждый десятый элемент выставлять в 10?
Также непонятно, зачем, например, каждый сорок седьмой элемент выставлять в десять, или каждый пятьсотдвадцатьпервый.


 
Arct   (2007-01-07 02:13) [214]


> palva ©   (06.01.07 15:00) [209]
>
>
> > Arct   (06.01.07 05:47) [204]
> > У кого нибудь есть функции синтаксического разбора паскалевского
> > кода?
>
> Есть в компиляторе http://www.freepalcal.org , исходные
> паскалевские коды которого выложены на сайте.


Не работает !


 
for   (2007-01-07 02:18) [215]


> jack128 ©   (06.01.07 14:42) [208]
>
> Anatoly Podgoretsky ©   (27.12.06 20:31) [203]
> Шутник, всегда сложения хватало.
> имелось в цикле for вместо
> for I := 0 to Max - 1 step 2 do
>  Arr[I] := 10;
>
> писать
> for I := 0 to (Max - 1) div 2 do
>  Arr[I * 2] := 10;


DoubleI := 0;
for I := 0 to Max - 1 do begin
Arr[DoubleI] := 10;
DoubleI := DoubleI +2;
end;


 
for   (2007-01-07 02:20) [216]

Упс

DoubleI := 0;
for I := 0 to  (Max - 1) div 2 - 1 do begin
Arr[DoubleI] := 10;
DoubleI := DoubleI +2;
end;


 
for   (2007-01-07 02:22) [217]

Блин
DoubleI := 0;
for I := 0 to  (Max - 1) div 2 do begin
Arr[DoubleI] := 10;
DoubleI := DoubleI +2;
end;


 
Галинка ©   (2007-01-07 03:59) [218]

Arct   (06.01.07 06:45) [206]

а разве в каком то шарпе нет foreach?


 
jack128 ©   (2007-01-07 05:04) [219]

for   (07.01.07 2:18) [215]
Дык это ж нужно доп. переменную объявлять ;-)  Лень, она - матушка, вперёд нас родилась ;-)


 
Arct   (2007-01-07 07:53) [220]


> Галинка ©   (07.01.07 03:59) [218]
>
> Arct   (06.01.07 06:45) [206]
>
> а разве в каком то шарпе нет foreach?

А разве в Дельфи 7 есть ?


> jack128 ©   (07.01.07 05:04) [219]
>
> for   (07.01.07 2:18) [215]
> Дык это ж нужно доп. переменную объявлять ;-)  Л

Ты типа субботу соблюдаешь?

А вообще то нормального человека устроило бы и : Arr[I * 2] := 10;

DoubleI := DoubleI +2;  - разве что для скорости.


 
ors_archangel ©   (2007-01-07 17:28) [221]


> кобольеро   (07.01.07 01:10) [212]

Да... что за язык? (Сам придумал?)
В принципе, семантически каждая строка в отдельности понятна, не кто и не обещал, что без практики всё должно читаться как собственные мысли! Но чтобы полностью понять данных код, нужно знать контекст (задачу данного кода, или хотя бы назначения модуля, которому он принадлежит) - это всегда так, даже в ЕЯ, в большей или меньшей степени в зависимости от ситуации. В общем, данный язык слишком многословен: нет ничего хорошего в повторении ЕЯ, достаточно вспонить прочтение любой математической записи - насколько это громозко и не наглядно; в частности для данного примера, такие вещи, как moveto … обязательно нужно заменять операторами. Главный минус этого ЯП - при том, что запись становится действительно схожа с естественной, на самом деле язык остаётся в рамках строгого, ограниченного малым количеством элементарных статически функционирующих блоков, императивного стиля: это сразу видно по "разнообразию" операторов, и по их строгой последовательности. Т.о. данный ЯП представляет собой в сущности обычный язык высокого уровня, нолько с намёком на естественную запись. Не естественность нужна языку, а гибкость, например, чтобы такое понятие как условие можно было изменять: допустим, у нас есть цикл, выполняющийся до некоторого условия, а по алгоритму может возникнуть необходимость изменить это условие окончания - в Pascale придётся, как говорится, использовать всю мощь языка в виде функтора, значение которого будет то одна функция, то другая, и таким образом мы будем менять условие, вот это неправильно. Это общий недостаток - при наличии понятия оно используется лишь статически, а практически, собственно, программе недоступно для изменения, т.о. сильно ограничеваются свобода действий при решении любой задачи, ведь тоже самое мы наблюдаем и с типами, а в неfreepascal"е даже с операторами :(


 
кобольеро   (2007-01-07 18:08) [222]

> ors_archangel ©   (07.01.07 17:28) [221]
Да... что за язык? (Сам придумал?)

Это COBOL, мальчик.


 
ors_archangel ©   (2007-01-07 18:25) [223]

Объяснил бы лучше, что ты этим - [212] - хотел сказать, что Cobol - идиотский язык, я уже понял, можешь не объяснять, или что-то другое?


 
Галинка ©   (2007-01-07 18:34) [224]

Arct   (07.01.07 07:53) [220]

извините. Я просто сейчас на шарпе все больше. И думаю, что их конструкции не такие уж и плохие )) Просто есть мусульмане, а есть христиане... И те и другие имеют право на существование. Псрото не всегда сутьважно, как устроен процесс изнутри. Возможностей сейчас просто море, железо тоже продвинулось, не надо воевать за каждую строку кода. Расслабтесь и получайте удовольствие.

Но это конечно не мнение профи. Я когда своему шефу сказала, что мне посоветовали что надо экономнее оперативкой и всем таким пльзваться, он меня обсмеял. Сказал, что для пентиума 4 с 3,4 частотой и двумя гигами оперативки нефиг экономить на спичках. Главное что-б работало. И побыстрее )) (в смысле уже через месяц прога была готова).


 
кобольеро   (2007-01-07 18:48) [225]


> ors_archangel ©   (07.01.07 18:25) [223]

Тебе не угодишь. statemachine не устраивает, простые английские фразы MOVE..TO и PERFORM..VARYING - идиотизмом называешь. Видно, что есть свои гениальные мысли, которые превосходят все придуманное за 50 лет развития программирования. Жаль я не гений, чтобы их понять.


 
ors_archangel ©   (2007-01-07 19:23) [226]


> кобольеро   (07.01.07 18:48) [225]

А тебя, как будто, statemachine устраивает?
Почему "простые английские фразы" меня не устраивают я уже написал: по аналогии с математической записью они излишни в программировании: загромождают запись, разве мало общепринятых операторов?
И единственная мысль, которая у меня есть по поводу всех ЯП, причисляющих себя к высокому уровню, выражается в простом непонимании их неразвитости (которая на лицо), причём эта мысль отнюдь, как видишь, не гениальна. Не отрицаю я всего, но расхваливать тоже не собираюсь. Сарказм твой мне вполне понятен, чтож, заслужил значит, постараюсь в будущем быть толерантнее. "Просто есть мусульмане, а есть христиане...", а я похоже, атеист.
p.s. За слово "идиотизм" извиняюсь, не хотел никого обижать, достаточно было слова "избыточность".


 
Anatoly Podgoretsky ©   (2007-01-07 22:03) [227]

> Галинка  (07.01.2007 18:34:44)  [224]

Правильный у тебя шеф.


 
Arct   (2007-01-08 03:31) [228]


> ors_archangel ©   (07.01.07 17:28) [221]
> > кобольеро   (07.01.07 01:10) [212]
> Да... что за язык? (Сам придумал?)
> В принципе, семантически каждая строка в отдельности понятна,
>  не кто и не обещал, что без практики всё должно читаться
> как собственные мысли!

Это в Си не обещал, из за возможности массы извратов. А в Паскале - обычное дело.


> Но чтобы полностью понять данных код, нужно знать контекст
> (задачу данного кода, или хотя бы назначения модуля, которому
> он принадлежит)

Чушь. Может у вас в Си и так, а в Паскале принято давать ПОНЯТНЫЕ имена.


 
ors_archangel ©   (2007-01-08 07:11) [229]


> Arct   (08.01.07 03:31) [228]


> Это в Си не обещал, из за возможности массы извратов. А
> в Паскале - обычное дело.

Согласен, Си менее читабелен, чем Паскаль, думаю здесь все согласны.

> Чушь. Может у вас в Си и так, а в Паскале принято давать
> ПОНЯТНЫЕ имена.

До сих пор удивляюсь, как безоснавательно иногда можно делать выводы :)
Я пишу недостаточно конкретно? Данный код - [212] мне как раз и не понятен, потому что имена мало о чём говорят, "семантически каждая строка понятна", и вообще, я в печали... А вы тут...
Интересно вообще-то: речь о Си совсем ведь не шла, мы с кобольеро обсуждали Cobol и ЕЯ... Ответ, имхо, не в тему, как и большая часть ветки, собственно :)
Бедный Си...


 
J_f_S   (2007-01-08 07:47) [230]

Да закроют ветку наконец, или нет?


 
мр Паскаль   (2007-01-09 04:25) [231]


> Галинка ©   (07.01.07 18:34) [224]
>
> Arct   (07.01.07 07:53) [220]
>
> извините. Я просто сейчас на шарпе все больше. И думаю,
> что их конструкции не такие уж и плохие )) Просто есть мусульмане,
>  а есть христиане... И те и другие имеют право на существование.


Ну и кого ты тут называешь мусульманами?



Страницы: 1 2 3 4 5 6 вся ветка

Текущий архив: 2007.01.28;
Скачать: CL | DM;

Наверх




Память: 1.07 MB
Время: 0.066 c
2-1168759566
Garacio
2007-01-14 10:26
2007.01.28
из ListView в ComboBox


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


2-1168609607
DelphiLexx
2007-01-12 16:46
2007.01.28
Как в SynEdit выделить некоторые строки другим цветом


1-1165306590
Lovd_E
2006-12-05 11:16
2007.01.28
Текст в Stringgride


1-1164903061
CaSH_
2006-11-30 19:11
2007.01.28
TreeView при выделении строки иконка меняется (продолжение 2)