Pull to refresh
14

Химик и программист.

32
Subscribers
Send message
Перемешайте определения, добавьте 100 строк кода и почувствуйте разницу!
Могут игнорировать, главное чтобы к компилятору прислушивался их начальник.
просто объявляя «про запас» переменные типа «s1,s2…»

Многие компиляторы (нпр., Дельфи) выдают предупреждения про неиспользованные переменные.
Просто не использовать параметры как переменные.
Сомнительный совет для школьной информатики.
Пусть:

procedure myProc (nameP : stringN1; var xP,yP,zP :real);
const
 minNum = 3; 
 maxNum = 23;
type
 TPoint = record 
                x,y,z : real;
                name : stringN1;
             end;
 TVector = array [minNum .. maxNum] of TPoint;
var
 vector : TVector;
 buf  : TPoint;
begin // тело процедуры


В ходе работы пришлось переделать:

procedure myProc (nameP : stringN2; // было stringN1
 var xP,yP,zP : extended //  было real
  );
const
 minNum = 2; //  было 3
 midNum = 12;  // добавлено
 midNumAdd1 = midNum +1; // добавлено
 maxNum = 23;
type
 TPoint = record 
                x,y,z : extended; // было real
                id : integer; // добавлено
                name : stringN2; // было stringN1
             end;
 TVector = array [minNum .. maxNum] of TPoint;
 TVectorLo = array [minNum .. midNum ] of TPoint; // добавлено
 TVectorHi = array [midNumAdd1 .. maxNum] of TPoint; // добавлено
var
 vector : TVector; 
 bufLo : TVectorLo; // добавлено
 bufHi  : TVectorHi; // добавлено
// убрано buf  : TPoint; 
begin // тело процедуры


Если определения были бы размазаны по всему телу процедуры в 100+ строк, то такая переделка была труднее. А тело было бы на два десятка строк больше.
переменные должны объявляться как можно ближе к контексту
Да. Не будем забывать о параметрах процедуры или функции. Это важнейшие переменные и значения. К ним (т.е. к заголовку) и должны быть ближе остальные локальные переменные. В функции (процедуре) м.б. определены константы и типы, эти определения используются в определении переменных. Чем ближе все определения друг к другу — тем удобнее работать
Я не знаю, что такое «классические алгоритмы»
Думаю, тут не требуется строгого определения. Интуитивно понятно, что пузырьковая сортировка вполне школьный алгоритм, а вот поиск прямых и овалов преобразованием Хафа в OpenCV для школы не обязателен, и параллельные алгоритмы в школе тоже не обязательны.

Ну да потому, что мы разносим инициализацию переменной и контекст её использования.
В разных ЯП разные требования к объявлению переменных, но постараюсь обобщить для противоположного Паскалю подхода.

Пусть школьнику поставлена задача прочитать координаты двух точек и вычислить расстояние между ними. Решая столь сложную задачу, школьник прочтет координаты первой точки в x1, y1 и координаты второй — в x2, y2. Потом найдет в мат. справочнике формулу, где расстояние дано для точек, координаты которых обозначены (x0, y0) и (x1, y1). Так и перепишет в программу и получит детскую ошибку. Во избежание подобных ошибок во многих учебниках рекомендуется сначала писать:

var
   x1, y1 : real; {координаты 1-ой точки}
   x2, y2 : real; {координаты 2-ой точки}


Это интуитивно понятное правило. Аналогично, театральные пьесы начинаются списком действующих лиц, а кулинарные рецепты — списком необходимых продуктов.
Очень забавная логика!: Дельфи (топ-10 в TIOBE) исключаем, а менее популярные ЯП добавляем.
Ау! Организаторы!

Я так и не получил ответа: dcc32 в compile-dpr.bat у вас на сервере будет работать?
Вообще-то есть куча интерпретаторов Паскаля с открытым исходным кодом. К примеру, я взял P5 для поддержки спец. скриптов и добавил простую IDE на Delphi. Можно было бы для школ что-то подобное сделать и выложить как freeware.
нет ассоциативных массивов

В Delphi можно использовать класс TStringList, но ИМХО школьникам это не обязательно.

Переменные можно описывать только в начале функций.
Речь про локальные переменные функций. На мой взгляд это очень полезное правило и не только для школьников. Оно дисциплинирует, предохраняет от ряда глупых ошибок, улучшает стиль и читаемость кода.
Так что идеала не найти.
Раз люди постоянно предлагают новые ЯП, то значит идеала нет. Но ЯП близкий к идеальному для школы, не обязательно будет идеальным для разработки ПО и наоборот. Я продолжаю придерживаться взгляда, что в школе главное классические алгоритмы. Их удобно изучать на Паскале.
О! За вопросы по игре минусы дают! Если это делают организаторы, значит слишком много участников. А если делают участники, то это попытка убрать конкурентов? :)

Не спортивно!
Еще непонятный вопрос. Во многих играх допустим метод S/L (save/load). Можно ли в данной игре сохранить состояние и вернуться, пусть м.б. и с потерей общего времени?
Попробуйте compile-dpr.bat и получите фатальную ошибку в Delphi 7.
Появились сомнения: ALLY это свой? Значений могло быть и больше: Любой, Свой, Чужой, Неизвестный, Пленник, Ранен и т.д.Некоторые из таких значений могли быть просто не перечислены. Свой = не Враг и т.д. В некоторых играх и не такое бывает.
ANY, ALLY, ENEMY — любой, союзник, враг. Принадлежность юнита.
Спасибо. А кто союзник в данной игре? Или союзник=свой?
// Сначала цикл по всем новым юнитам

На Паскале я могу написать цикл:

for i:=a to b do


Как мне определить a, b?
вырезано из compile-fpc.bat, входящего в состав pascal-cgdk

А еще там есть compile-dpr.bat, в котором:

if "%DELPHI7_HOME%" == "" (
dcc32 -Q -cc Runner.dpr 1>compilation.log
) else (
"%DELPHI7_HOME%\Bin\dcc32" -Q "-U%DELPHI7_HOME%\Bin" "-I%DELPHI7_HOME%\Bin" -cc Runner.dpr 1>compilation.log
)

У меня нет проблем с английским (и не только с техническим), но есть проблемы с некоторыми именами в API данной игры. В частности, что значит «ALLY»?

Information

Rating
Does not participate
Registered
Activity