Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2007.01.28;
Скачать: [xml.tar.bz2];

Вниз

Сишные циклы 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 1.06 MB
Время: 0.07 c
1-1165034574
SerB
2006-12-02 07:42
2007.01.28
Variant


1-1165303018
AlexeyT
2006-12-05 10:16
2007.01.28
EM_LINESCROLL не прокручивает RichEdit горизонтально


2-1168177071
Dr. Genius
2007-01-07 16:37
2007.01.28
Скрытие файлов и папок на уровне Windows kernel


15-1168357595
ocean
2007-01-09 18:46
2007.01.28
Скопировать несколько DVD в один


2-1168100863
Metaaa
2007-01-06 19:27
2007.01.28
Запуск сервиса





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский