Замечания и предложения

Вот несколько выдержек из документа “МЕТОДИЧЕСКИЕ РЕКОМЕНДАЦИИ по разработке требований к организации и проведению школьного и муниципального этапов всероссийской олимпиады школьников по информатике в 2017/2018 учебном году”.

Участникам муниципального этапа олимпиады разрешается использование в решениях задач любых внешних модулей и заголовочных файлов, включенных в стандартную поставку соответствующего компилятора.

Это означает, что STL действительно можно использовать - он ведь входит теперь в стандартную поставку… Стало быть, меня обманули, когда сказали, что нельзя, “учителя запрещают”.

А вот и дополнительная группа с PascalABC.NET. Он разрешен, но “не гарантирует…”, да и то, если устроители этапа соизволят его включить в состав ПО. В общем, какая-то Золушка… И к тому же, “Формировать дополнительную группу можно только при согласовании с организаторами муниципального этапа и с учетом обеспечения образовательного учреждения, в котором будет проводиться муниципальный этап соответствующим программным обеспечением.”.

Обратите внимание: фактически олимпиада оставляет С/С++ и Free Pascal. Остальные “не гарантируют” полного решения и при этом “Результат, не являющийся полным решением задачи из - за выбора участником языка или системы программирования дополнительной группы, не может быть основанием для подачи апелляции”. Ну зачем участнику олимпиады всё это трепыхание с участием, если принятие решения (может и вообще каждого!) не гарантируется и не апеллируемо? Как быть тем школам, которые за базу берут изучение языков из списков дополнительных? Фактически эта олимпиада - неприкрытое лоббирование определенных языков и учебников по ним.

А что с первым, школьным этапом? А там все те же рекомендации. Т.е. школа, которая выбрала для обучения, например, модный Питон, включает его в состав сред программирования из дополнительного перечня, но при этом ОБЯЗАНА уведомить участников, что их решения могут быть ПО НЕИЗВЕСТНЫМ причинам не приняты системой проверки. Занятно…

И последнее. Фактически, если кто-то все же рискнет работать с PascalABC.NET, получается что у него будет право пользоваться и библиотекой NumLibABC, и другими, включенными в инсталлятор библиотеками. Единственно, что для этого нужно - это чтобы в проверяющей системе также стояла свеженькая версия.

@Gleb предлагаю писать про это всё же в предложения, как видно дальше цитаты между темами прекрасно работают :wink:

Уже ответили:

С другой стороны,на примере Robocode, видим что программы хотя бы компилируются, если поставить заглушки на место PABCSystem и PABCExtensions. Это было бы как минимум приятной фичей. В том же Robocode хорошо видно как приятно с чистым кодом, а любые вдруг понадобившиеся функции PABCSystem и PABCExtensions можно в любой момент закопипастить(а в идеале написать самому оптимизировав под свою задачу). Фича эта, как уже говорили, не для новичков которые без integer не могут и не для задачи на 5 строчек, когда надо по быстренькому написать мини утилиту. Она полезна для серьёзных проектов когда может даже и не критично, но просто не красиво, как с GraphABC - можно в принципе, если нет сильных требований к производительности, что то написать, но то что окно создаётся с названием, иконкой и размером по умолчанию, и только потом меняется - просто не красиво… И последнее, опять же если вернутся к Robocode, он использует dll-ки созданые паскалем, если их использовать в своём проекте повсеместно, как способ создания модов или даже для изначальной программы - те 20 килобайт становятся монстром.

1 лайк

Да, это так, но почему-то Админ не хочет его отключать. PABCSystem. [quote=“Sun_Serega, post:368, topic:143”] Вместе с этим отключатся типы integer, real, string и т.д. То есть, чуть менее чем всё. [/quote]

Собственно это все понимают. Скажу про себя (к сожалению, больше ни с кем с таким стилем программирования не знаком), давно не использую даже стандартные типы, не говоря уже о файлах и всём прочем. Замещаю их на стандарты NET. Например функция для чтения массива integer из файла:

// Писать везде System не обязательно, если написать директиву Uses System;
Function ReadIntsFromFile(fname: System.string): array of System.int32;
Begin
  Var fs:=System.IO.File.OpenRead(fname);
  Var buf: array of System.byte;
  buf:=new System.byte[4];
  Result:=new System.int32[fs.Length div 4];
  For Var n:=0 to (fs.Length div 4)-1 do
    Begin
      For Var i:=0 to 3 do
        buf[i]:=fs.ReadByte;
      Result[n]:=System.BitConverter.ToInt32(buf, 0);
    End;
  fs.Close();
  System.GC.Collect();
End;

Собственно, есть язык C#, как известно, являющийся одним из “предков” нашего паскаля, в нём нет ничего стандартного, кроме основных простых типов int, float string, bool… Всё остальное пишется, опираясь на NET, при этом язык в топе!:sunglasses: Собственно, для тех, кого интересует отключение, думаю, это не будет проблемой, тем более что можно использовать отдельные функции из PABCSystem, просто копируя их из кода модуля. Думаю, что реализовать эту функцию нужно.[quote=“Sun_Serega, post:368, topic:143”] И последнее, опять же если вернутся к Robocode, он использует dll-ки созданые паскалем, если их использовать в своём проекте повсеместно, как способ создания модов или даже для изначальной программы - те 20 килобайт становятся монстром. [/quote]

Собственно, не так давно, это не считали проблемой. Теперь, надеюсь, аргументов достаточно для реализации директивы. Всё-же количество профессионалов(без намёков), использующих паскаль для своих проектов растёт.

Так, может быть, это не к сожалению, а к счастью? Зачем использовать язык, в котором почти ничего из языка не использовать?

Этот форум поддерживает маркдаун из гитхаба Там много полезного но прежде всего прочитайте часть Syntax highlighting ибо код написанный без отступов и никак не выделенный очень трудно читать.

Я никак не пойму, как его выделять.

В паскале хороша сама его структура, но не его стандартные методы и типы. Опять таки, любимая пара C++ и C#.

Выделять, окаймляя код тремя подряд идущими обратными апострофами, теми, что на клавише с ~ и Ё

Спасибо! Исправил.

Дык и возлюбляйте на здоровье! Только не надо с этой любовью на паскалевский-то форум лезть…

Как насчёт того чтоб добавить что то типо кортежей для типов, чтоб уменьшить количество кода:

type
  ints=(System.ubyte,System.byte,System.int16,System.uint16,System.int32,System.uint32,System.int64,System.uint64);

///-procedure Inc(var i:целое число);
/// Увеличивает значение целого числа на 1
procedure Inc<T:ints>(var i:T);
begin
  i+=1;
end;

Или же чтоб ints было только в процедуре Inc

///-procedure Inc(var i:целое число);
/// Увеличивает значение целого числа на 1
procedure Inc<T:(System.ubyte,System.byte,System.int16,System.uint16,System.int32,System.uint32,System.int64,System.uint64)>(var i:T);
begin
  i+=1;
end;

При компиляции процедуру Inc разобьёт на несколько, так же как картёжное присвоение разбивается на несколько операторов.

В указателе справки очень не хватает таких тем как Приоритет операций. То что там далеко не все темы это ошибка или они по определённому алгоритму добавляются/не добавляются?

1 лайк

implementation раздел мода сворачивается в просто [...] вместо implementation[...], остальные разделы(interface, initialization и finalization) вообще не сворачиваются.

1 лайк

Можно ли реализовать сокращённое условие (условный оператор), подобный Сишному?

Var result: System.Int32:=(true=false)?:0:1;

У вас лишний : после ?, уберите и будет работать. И скобки тоже не нужны.

Так он уже есть?

Уже нашёл. Даже удивился!:smiley:

Возникла проблема с файлами ресурсов в библиотеках. Компиляция кода проходит нормально, но вот при вызове метода, который как раз извлекает ресурс, возникает ошибка “System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.”. При этом в обычной программе, всё работает нармально. Код:

Library MyLib;
{$Resource 'MySource.file'}
Procedure Initialize();
Begin
...
GetResourceStream('MySource.file');
...
End;
End.

Если вы хорошо проверили и это точно ошибка паскаля а не ваша оплошность - пишите сюда. Тут оно может отмотаться а на гитхабе будет висеть пока не исправят.

а в каком именно методе падает? приведите стек исключения