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

Ну так закомментировано же…

А где это собственно устанавливается:

То есть False будет если {$apptype windows}.

Я увидел такую проверку в коде и решил сделать у себя. Если она работает не всегда, а RedirectIOUnitUsed — только в модулях, как проверять без модулей, как запущен exe: c Shift или без? Ну не так же. :laughing:

function Костыль: boolean;
begin
  Result := true;
  try
    Console.CursorLeft := 0;
  except
    Result := false;
  end;
end;

begin
  IsConsoleApplication:=Костыль;
  Writeln(IsConsoleApplication);
  Write('1'*1);
end.

Не понял. Я считаю, что true, если в exe есть PABCSystem. Только почему столько файлов суются в exe лишь из-за одного символа?

Сравнение содержимого exe.rar (38.3 КБ)

?

Тот что у вас “без PABCSystem” - ссылается на RTL: библиотеку, содержащую уже полностью откомпилированные версии нескольких модулей, включая PABCSystem. И это только потому что у вас включёно ускорение запуска из под оболочки. У меня выключено, поэтому PABCSystem всегда вшит в .exe, не важно как я запускаю.

##

var mode := System.Environment.GetCommandLineArgs.Skip(1).FirstOrDefault;
if mode<>nil then
begin
  mode := if mode.StartsWith('[') and mode.EndsWith(']') then
    mode.SubString(1,mode.Length-2) else
    nil;
end;

Writeln(mode);
readln;

Это единственное что по-особому передаётся в программу при запуске, в зависимости от того, как запустили. F9, Shift+F9, из папки.

А __RedirectIOMode.pas это стандартный модуль, который автоматом добавляется в .exe если вы компилируете его путём нажатия простого F9. Он нужен, чтобы помочь IDE привязать ввод/вывод к окну ввода.
Но он остаётся в .exe пока вы его не перекомпилируете - даже если затем вы запустите его из папки.


И я так и не увидел примера, где использование operator* для (символа/строки) и числа хоть как то влияет на IsConsoleApplication.

Как и причины, зачем это всё… С этого всегда надо начинать.

Пример:

function yesNoChoice: boolean;
begin
  if IsConsoleApplication then
  begin
    Result := (Console.ReadKey.Key = System.ConsoleKey.Y);
    Writeln;
  end
  else
    Result := (ReadChar.ToUpper = 'Y');
end;

label конец;

begin
  Writeln('Вы хотите выйти немедленно? Y/N.');
  if yesNoChoice then
    goto конец;
  if IsConsoleApplication then
    // Вызовы методов класса консоли, например,
    Writeln(Console.ReadKey(true))
  else
    Writeln('Данная программа не работает из-под оболочки.');
  конец: Write('Работа программы завершена.');
  if IsConsoleApplication then
  begin
    Write(' Нажмите любую клавишу, чтобы закрыть.');
    Console.ReadKey(true);
  end;
end.

Ок, применение по делу… Но при чём тут IsConsoleApplication? Вы решили что это то что вам нужно только потому что у него в названии консоль?
Но это название переводится не “есть ли консоль у приложения”, а “является ли приложение консольным (т.е. не оконным)”.
Как я уже сказал, это свойство .exe файла, а не конкретного его запуска. Ввод/вывод любого консольного приложения можно перенаправить куда угодно при запуске - хоть в окно вывода IDE, хоть в файл. Сама консоль при этом всегда прячется, но приложение от этого не становится вдруг оконным.

И я уже показал как определять, каким образом был запущен .exe файл (по крайней мере относительно IDE).

Тогда тут должно быть всегда true? Даже из-под оболочки?

##
Write(IsConsoleApplication) // False

Да. А у вас False???

Да. Поэтому я использовал это как проверку запуска из-под оболочки. При ускорении запуска из-под оболочки и запуске по F9 у консольного приложения `IsConsoleApplication = false` · Issue #2731 · pascalabcnet/pascalabcnet · GitHub

Возможно ли не добавлять аргументы для проверки аутентификации, если кнопка аутентификации скрыта?

Хотелось бы, что бы документирующие комментарии для модуля подтягивались не только из, собственно модуля, но и из xml-фала рядом, при его наличии. Совсем как для библиотек. Когда кода в модуле становится достаточно много, писать в нём же комментарии не очень удобно. Было бы неплохо иметь возможность разделить эти части

1 лайк
## a[1:2,3:4] := new integer[2,3];

Выдаёт

SYNTAXTREEVISITORSERROR_MULTIDIMENSIONAL_SLICES_FORBIDDEN_IN_LEFT_SIDE_OF_ASSIGNMENT
1 лайк
## var x := 5;
typename(Sqr(x)).Print; // int64
typename(x.Sqr).Print;  // integer

Не равномерно получается… При чём:

/// Возвращает квадрат числа
function Sqr(Self: integer): integer; extensionmethod;
begin
  Result := Sqr(Self);
end;

То есть умножает как int64, но потом выбрасывает часть точности.

Сделали int64 потому что слишком часто влетали в переполнение на элементарных алгоритмах. Например, когда проверяем не превышает ли квадрат некоторого числа типа integer значения величины integer.MaxValue

Это правильно ещё и потому, что умножение двух 32-битных чисел может дать почти все 64 бита информации в результате. Поэтому я думаю тут x.Sqr надо исправить.

На почту miks@sfedu.ru отправил письмо следующего содержания: Добрый день, Станислав Станиславович.

**В школы Краснодарского края поступил документ от 13 декабря 2023 года о программном обеспечении, которые должно быть установлено на станциях КЕГЭ. Для языка Pascal утвержден PascalABC.Net версии 3.8.3 (и НЕ выше). ** С 08.05.2023 года официально доступна версия 3.9.0, которая содержит значительные изменения и доработки. Но на странице сайта PascalABC.NET и ЕГЭ по информатике 2022 | PascalABC.NET статьи, примеры опубликована статья, на которую и ссылаются чиновники, отказываясь устанавливать более новую версию. В это статье речь идет о версии 3.8.3, но статья от 2022 года, что мало интересует организаторов ЕГЭ. Можно ли изменить эту статью, чтобы можно было предъявить организаторам экзамена мнение разработчиков? Кроме того, на странице Скачать имеется ссылка на версию 3.8.3, что тоже не добавляет аргументов в пользу 3.9.0. Ранее старые версии PascalABC бы ли недоступны для скачивания с этой страницы, можно было скачать только текущую. Заранее спасибо за ответ. И спасибо за то, что делаете Вы и Ваш коллектив.

С уважением, Дмитрий Тищенко, учитель информатики СОШ №18 х. Первомайского Мостовского района

Хотелось бы услышать ответ на этот вопрос. Спасибо

На почту не получал. Пошлите еще раз.

По ссылке поменял текст. Обновим и решения заданий.

1 лайк

Письмо продублировал. Спасибо за ответ. Буду “радовать” организаторов КЕГЭ Краснодарского края.

Поделитесь потом, насколько они обрадовались.

Кстати, письмо на miks@sfedu.ru не приходило. Нет его и в спаме

Краснодарские жрецы от образования сошли с ума? У кого более свежая версия, нужно сносить и искать старую? Если это на самом деле так, это уже клинический случай…

По моему там было написано что то типа “рекомендуем ограничится такой то версией”. Я думаю разработчики имели в виду использовать такую или более новую. Но эти, как вы их назвали, “жрецы” интерпретировали как им нравится и решили что старый установщик для 3.8.3 на официальной странице для скачивания - тому подтверждение.