M>>По Дискавери одной из самых сложных программ, работающих сегодня, назвали программу автоматического входа шаттла в атмосферу. С начала входа до -4 км до посадки люди к управлению даже не прикасаются. А там, как никак — управляемое падение (планированием это сложно назвать) на запредельных скоростях (13-25 Мах, что ли).
L>мне кажется программа управляющая взлетом и посадкой Бурана полностью в автоматическом режиме должна быть на порядок сложнее.
L>догадаешся на чем написана ?
Где-то здесь на форме пробегало сообщеие, что это был вообще како-то свой язык. Какой-нибудь Автокод Инжинера?
Здравствуйте, Sergey J. A., Вы писали:
F>>Посмотрел в интернете, кажется, Паскаль действительно не запрещает. Позор! Интересно, как с этим в Аде и Обероне?
SJA>Оберон позволяет.
Здравствуйте, qwertyuiop, Вы писали:
F>>Программист — он тоже человек!
Q>Программист — он в первую очередь математик, а в математике первое число — 0!
Первое — 1!!!
F>for i := 1 to n
F> for j := 1 to m
F> sum = sum + a[i][j]
F>
F>нагляднее выражает, что же мы имели в виду.
Ага, особенно если мы имели в виду цикл с шагом 2
Скажу только, что из всего Си-подобного семейства я больше всего восхищён реализацией цикла for. И сколько ни пишу, всё никак на него не нарадуюсь.
F>И еще к слову. Я все понимаю, я знаю все аргументы в пользу того, чтобы начинать индексацию массивов с 0, а не с 1. И все же я считаю это неестественным!
Жаль огорчать, но в большинстве (ИМХО, из личного опыта) практических задач удобнее индексация с 0. При работе с массивами часто требуется величина именно смещения.
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
WARNING: expression "to_be || !to_be" is always true
Здравствуйте, faulx, Вы писали:
F> Это, конечно, цикл for.
Дело в том, что в Обероне (1987) цикла FOR нет вообще (вспомните: циклы бывают всего трех типов... и FOR-а среди них нет).
Под "давлением общественности", по "массовым просьбам трудящихся" или по каким-то иным не известным нам причинам в Обероне 2 (1992) цикл FOR всё-таки появился.
Но он есть самый настоящий синтаксический сахар:
Оператор
FOR v := beg TO end BY step DO statements END
эквивалентен следующему
temp := end; v := beg;
IF step > 0 THEN
WHILE v <= temp DO statements; v := v + step END
ELSE
WHILE v >= temp DO statements; v := v + step END
END
Здравствуйте, faulx, Вы писали:
F>Даже в Паскале можно указывать шаг изменения (или это только в Турбо-паскале с потомками?).
Вона как? Код в студию!
Как я помню, шаг там выбирается между 1 и -1 (соответственно, to и downto). И всё.
Q>>Для человека может и естественно с единиуы, но для программиста естественно с нуля.
F>Программист — он тоже человек!
Да. Но не юзер, а профессионал.
Простому человеку тоже понятнее в граммах, но ювелиры измеряют почему-то в каратах
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
WARNING: expression "to_be || !to_be" is always true
Здравствуйте, Трурль, Вы писали:
Т>Здравствуйте, qwertyuiop, Вы писали:
F>>>Программист — он тоже человек!
Q>>Программист — он в первую очередь математик, а в математике первое число — 0! Т>Первое — 1!!!
Трурль, а вы-то куда на своих наезжать вылезли? Напоминаю, в Обероне массив тоже начинается с нуля
Здравствуйте, Пацак, Вы писали:
П>Здравствуйте, Mamut, Вы писали:
M>>Еще одно доказательство того, что LOOP — это инструкция, Оберону чуждая, привнесенная извне.
П>Тогда уж IF — тоже:
П>
F>>for i := 1 to n
F>> for j := 1 to m
F>> sum = sum + a[i][j]
F>>
F>>нагляднее выражает, что же мы имели в виду.
A>Ага, особенно если мы имели в виду цикл с шагом 2
В исходном Сишном коде был цикл с шагом один. Но шутку я понял.
A>Скажу только, что из всего Си-подобного семейства я больше всего восхищён реализацией цикла for. И сколько ни пишу, всё никак на него не нарадуюсь.
Что такого особенного именно в реализации? Идея — да, красивая. Как и многое в Си. Но на практике натыкаться на ошибки вроде
for (int i = 0; i < n; ++i)
for (int j = 0; j < m; ++j)
надоедает. Конечно, все это обходится. Мне в моем Емаксе не приходится вводить имя переменной три раза — у меня на этот случае есть шаблончик.
A>Жаль огорчать, но в большинстве (ИМХО, из личного опыта) практических задач удобнее индексация с 0. При работе с массивами часто требуется величина именно смещения.
С этим можно поспорить. Может, удобство проистекает именно из привычки?
Здравствуйте, Mamut, Вы писали:
M>Где-то здесь на форме пробегало сообщеие, что это был вообще како-то свой язык. Какой-нибудь Автокод Инжинера?
Слышал, там использовали Дракон, язык на основе блок-схем.
Здравствуйте, qwertyuiop, Вы писали: Q>Большинство современных компиляторов выдают на такую строчку предупреждение
А большинство совремнных PM заставляют компилять с treat warnings as errors
... << RSDN@Home 1.1.4 beta 5 rev. 395>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, faulx, Вы писали:
A>>Скажу только, что из всего Си-подобного семейства я больше всего восхищён реализацией цикла for. И сколько ни пишу, всё никак на него не нарадуюсь.
F>Что такого особенного именно в реализации? Идея — да, красивая. Как и многое в Си. Но на практике натыкаться на ошибки вроде
F>
F>for (int i = 0; i < n; ++i)
F> for (int j = 0; j < m; ++j)
F>
Где ошибка?
F>Мне в моем Емаксе не приходится вводить имя переменной три раза — у меня на этот случае есть шаблончик.
Ну вот и выход нашёлся
A>>Жаль огорчать, но в большинстве (ИМХО, из личного опыта) практических задач удобнее индексация с 0. При работе с массивами часто требуется величина именно смещения.
F>С этим можно поспорить. Может, удобство проистекает именно из привычки?
Нет. Во всяком случае, не думаю. При индексации с 1 в любом случае пришлось бы явно вычитать эту единицу для расчётов (например, расчёта смещения на n блоков в потоке). То, насколько органично чаще всего ложится 0 в задачу, позволяет не сомневаться в его уместности.
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
WARNING: expression "to_be || !to_be" is always true
Здравствуйте, Amidlokos, Вы писали:
F>>Даже в Паскале можно указывать шаг изменения (или это только в Турбо-паскале с потомками?).
A>Вона как? Код в студию!
Может, и ошибся, 10 лет не писал на Паскале. Но я имел в виду не конкретно язык Паскаль, а Паскалеобразный синтаксис (причем только для цикла for). Кстати, судя по этому сообщению
, в пресловутом Обероне шаг цикла можно указывать.
A>Как я помню, шаг там выбирается между 1 и -1 (соответственно, to и downto). И всё.
Да-да-да, что-то припоминаю. А для других шагов там, кажется, целочисленно делили верхнюю границу на величину шага. Давно все это было...
A>Да. Но не юзер, а профессионал.
A>Простому человеку тоже понятнее в граммах, но ювелиры измеряют почему-то в каратах
Может, на футы с милями перейдем? Что нам эти "юзерские" километры?
...в обероне вообще до LOOP докатимся, как выяснилось. Можно конечно это рассматривать как идеологически правильный мегарулез, но как-то не воодушевляет...
Не смотря на "идеологически правильный мегарулез", народ требует объяснить, какую из этого можно получить практическую выгоду.
А вот, например, хотя бы и такую:
Мы можем выйти из нескольких вложенных WHILE/REPEAT циклов. Внешний цикл делаем LOOP-ным, а все вложенные циклы делаем WHILE/REPEAT-ными. Тогда EXIT прервет все циклы сразу. А вот если бы EXIT прерывал бы не только LOOP-ные циклы, но и все остальные, то из нескольких вложенных циклов (без goto или RETURN) выйти было бы (по быстрому) нельзя.
LOOP
...
WHILE...
...
REPEAT... (* много вложенных WHILE/REPEAT циклов *)
...
WHILE...
...
IF c THENEXITEND; (* выход из всех циклов, на конец текущей LOOP-ной итерации *)
... |
END; |
... |
UNTIL...; |
... |
END; |
... |
END |
...---<--------------+
Конечно, если вложенные циклы, тоже LOOP-ные, то описанный тут механизм работать не будет (EXIT выведет только на конец ближайшего LOOP-а).
F>>for (int i = 0; i < n; ++i)
F>> for (int j = 0; j < m; ++j)
F>>
A>Где ошибка?
Блин, а мне еще советовали больше программировать на Си (куда уж больше!). Уже автоматически исправляю. Я имел в виду, конечно, код из моего исходного сообщения
for (int i = 0; i < n; ++i)
for (int j = 0; j < m; ++i)
F>>Мне в моем Емаксе не приходится вводить имя переменной три раза — у меня на этот случае есть шаблончик.
A>Ну вот и выход нашёлся
Костыль.
A>Нет. Во всяком случае, не думаю. При индексации с 1 в любом случае пришлось бы явно вычитать эту единицу для расчётов (например, расчёта смещения на n блоков в потоке). То, насколько органично чаще всего ложится 0 в задачу, позволяет не сомневаться в его уместности.
Может, в этом и разница между массиво-подобными структурами и потоко-подобными (термины выдумал только что и сам)? Скажем, работать с матрицами удобнее при индексации с 1.
Здравствуйте, faulx, Вы писали:
F>Да-да-да, что-то припоминаю. А для других шагов там, кажется, целочисленно делили верхнюю границу на величину шага. Давно все это было...
Ну, в общем, ручками считали. Что не есть удобство
Кстати, сишные for-ы позволяют в зависимости от условий крутиться как вперёд, так и назад:
int step = (condition)? 1 : -1;
for (int i = start; (i < count && i >= 0); i += step)
{
blah_blah_blah(i);
}
Пусть один раз в жизни, но мне такое встречалось В паскале пришлось бы через while писать. Но это всё скорее просто к слову...
A>>Да. Но не юзер, а профессионал.
A>>Простому человеку тоже понятнее в граммах, но ювелиры измеряют почему-то в каратах
F>Может, на футы с милями перейдем? Что нам эти "юзерские" километры?
Ээээ, нет Не путайте национальные системы измерений и профессиональные Футы с милями тоже "юзерские".
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
WARNING: expression "to_be || !to_be" is always true
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Дело в том, что в Обероне (1987) цикла FOR нет вообще (вспомните: циклы бывают всего трех типов... и FOR-а среди них нет).
СГ>Под "давлением общественности", по "массовым просьбам трудящихся" или по каким-то иным не известным нам причинам в Обероне 2 (1992) цикл FOR всё-таки появился.
Здравствуйте, Трурль, Вы писали:
Т>Слышал, там использовали Дракон, язык на основе блок-схем.
Впрочем, нет. Дракон -это учебный вариант того, что там использовалось.
Здравствуйте, Amidlokos, Вы писали:
A>Ээээ, нет Не путайте национальные системы измерений и профессиональные Футы с милями тоже "юзерские".
А какие же профессиональные единицы измерения длины? Кабельтовы с теми же милями, как у моряков? Или мы, как программисты, считаем, что в одном километре 1024 метра?
Здравствуйте, faulx, Вы писали:
F>Здравствуйте, Сергей Губанов, Вы писали:
СГ>>Дело в том, что в Обероне (1987) цикла FOR нет вообще (вспомните: циклы бывают всего трех типов... и FOR-а среди них нет).
СГ>>Под "давлением общественности", по "массовым просьбам трудящихся" или по каким-то иным не известным нам причинам в Обероне 2 (1992) цикл FOR всё-таки появился.
F>Любопытно было бы выслушать ваше мнение по поводу Лисповского мега-цикла.
Да ну, ты что, Оберон — же вершина совершенства, соответственно круче его ничего не может быть по определению, какие там лиспы, функциональные языки — ересь это всё, не гоже адептам правильной веры это трогать даже