Помощь новичкам

А чтобы не получить его при real(a)/b, нужно, чтобы MinReal<=a<=MaxReal и MinReal<=b<=MaxReal? Есть ли способы избежать real.Infinity без ограничения диапазона значений переменных a и b (включая способы, подразумевающие обход переведения BigInteger в Real)?

А у меня другой вопрос: какой реальной задачей надо заниматься, чтобы для представления результатов не хватало 10^308 ? Или это вопрос из разряда “А что, уже просто так спросить нельзя?”

В моей программе есть код типа

var
  a, b, c, d: BigInteger;
begin
  var s:BigInteger:=a*5+b*4+c*3+d*2;
  var already:BigInteger:=a+b+c+d;
  var СреднееАрифметическое:real:=real(s)/real(already);
end.

где переменные s и already могут принимать значение (потому что они не ограничены), при котором выйдет ошибка, связанная с real.Infinity.

Кстати, второй раз заметил, что (когда я держу открытой вкладку браузера с этим форумом, прикрываю, а после снова открываю окно браузера) если серый счётчик времени от момента написания сообщения в правом верхнем углу равен 21 минуте, то он показывается как “1мин”, вместо “21мин”.

Я не задавал вопроса, какой конкретно код Вы написали, я спросил, В КАКОЙ РЕАЛЬНОЙ ЗАДАЧЕ может возникнуть нужда работать с величинами, значение которых неограниченно? Вы вычисляете нечто, где в формуле указана “бесконечность”? Но тогда это не вычислительный алгоритм. Поймите, всегда будет актуальной фраза профессора Преображенского

Разруха не в клозетах, а в головах

На бедного везде каплет (народное)

Пытаюсь сделать, чтобы, если значение слишком большое, запрашивало повторный ввод в переменные a, b, c и d:

if ((a*5+b*4+c*3+d*2)>MaxReal) then
begin
  Writeln('Ошибка. Сумма a, b, c и d больше ', MaxReal, '. Введите значения поменьше.');
  goto ВыборTrue;
end;

но выходит ошибка:

Операция '>' не применима к типам System.Numerics.BigInteger и real

Как исправить?

Я сам решил:

if real.IsInfinity(real(a*5+b*4+c*3+d*2)) then
begin
  Writeln('Ошибка. Сумма оценок больше ', MaxReal, '. Введите значения поменьше.');
end;

Это, конечно, просто финиш! goto в PascalАВС.NЕТ в 2020 году! Нет, это пя-я-я-я-я-ть! :rofl:

А что-нибудь в стиле

repeat
   ...
until not real.IsInfinity(real(a*5+b*4+c*3+d*2));

никак нельзя?

1 лайк

Что делать (только ждать, пока добавят поддержку TryRead для типа Boolean?), если выходит ошибка “Нет перегруженной подпрограммы с такими типами параметров”, когда я пытаюсь выполнить

var
  Выбор: boolean;
begin
  while not TryRead(Выбор) do Writeln('Ошибка. Неподходящее значение.');
end.

Какие, по вашем, строки должны вводиться? И при чём тут ожидание, вы не можете сами такую подпрограмму реализовать?

Не понял Вас.

Готово.

Как написать длинное название программы в строке с program, например,

program Программа с длинным названием v1.0;

Какие строчки надо подать на ввод чтоб её прочитало как boolean, и каким значениям они будут соответствовать?

А, стоп, ну да…

procedure IOStandardSystem.read(var x: boolean);
begin
  var s := ReadLexem.ToLower;
  if s = 'true' then
    x := True
  else if s = 'false' then
    x := False  
  else raise new System.FormatException('Входная строка имела неверный формат');
end;

Но вообще тогда уж лучше…

begin
  var b: boolean;
  while not boolean.TryParse(ReadString, b) do
    Writeln(new System.FormatException);
  b.Println;
end.

Хотя это бред, обычно для нормального консольного интерфейса надо ожидать на ввод что то типа t/f, а не целое слово. Это не юзабельно.

Но что я пытался донести - что подавать на ввод можно долго думать, странно было бы отдавать предпочтение 1 из вариантов в стандартном модуле.

Всё равно не понимаю. С моей степенью понимания на данный момент я могу ответить следующим образом:

Если написать в поле ввода True или true, то переменная типа boolean примет значение True. Если написать в поле ввода False или false, то переменная типа boolean примет значение False.

Пока это писал, заметил новое сообщение, следовательно, возможно, что написанное выше уже не актуально. Кроме того, сообщение, начинающееся со слов

я тоже не понял, кроме части

В общем, я решил вопрос с отсутствием подпрограммы для случая

begin
  var x:boolean;
  TryRead(x);
end.

добавив в свою программу подпрограмму наподобие уже существующих и отправив предложение на её добавление в этом сообщении: Замечания и предложения.

Теперь мне нужно узнать

поскольку при таком написании Pascal не принимает пробелы и точки в названии программы.

IOStandardSystem это тип из PABCSystem отвечающий за парсинг значений различных типов при вводе.

Зачем вам вообще строчка с program? Она практически ничего не делает. С тем же успехом можно добавить комментарий.

А что же она делает? (Она только делает так, чтобы заголовок окна программы не зависел от имени файла, с помощью которого она запускается?) И всё-таки,

Изменяет внутреннее представление. В .Net-овских .exe бывают только классы. Ваши глобальные переменные - это статические поля классов (поэтому и медленнее локальных). Ваши глобальные подпрограммы - на самом деле статические методы классов.

Строчки program, unit и library изменяют название класса, в который будет сувать глобальные подпрограммы и поля текущего файла.

Видеть это можно только в стеках исключений:

//program abc;

begin
  try
    raise new Exception;
  except
    on e: Exception do
      Writeln(e);
  end;
end.

Посмотрите что выводит так и если разкомментировать первую строчку.

Вы имеете в виду консольное окно? Так оно показывает имя .exe файла. То есть оно поменяется если вы готовый бинарник переименуете. Но по моему проще поменять Console.Title.

Здравствуйте, @Just_name . Вы можете использовать ABCNET вместо PABCSystem. Что Вы получите при данном выборе:

  • Независимость от PascalABC.NET - работает на всех NET языках
  • Высокая структурированность
  • Большее количество функционала
  • Высокий уровень стандартизации

Более того - установка библиотеки достаточно удобна благодаря наличию соответствующего NuGet-пакета. Более подробно об этом можно узнать на главной странице проекта, на которую ссылка ниже.

Посмотреть возможности библиотеки Вы можете без скачивания примеров - в разделе Wiki проекта имеются ссылки на примеры для запуска online.

Если Вам понравится продукт - Вы можете стать частью нашей команды разработчиков, но для этого - просьба обратиться ко мне лично, чтобы я выдал Вам соответствующие права разработчика на GitHub и группе поддержки.

Некоторые полезные инструменты, которые могут пригодится и в повседневной жизни:

– NETMouse projects ©

Давайте-ка я Вас отсюда уберу. Вот за эту фразу на вашем ресурсе:

“PascalABC. NET (нестабильная IDE со слабым компилятором)”

Мы думали, Вы исправились после той истории с Хабром, но видимо нет.

Здесь на страницах форума мы не будем рекламировать ничей продукт, который содержит подобные строки.

Кроме того, мы просим вас не регистрироваться на форуме под разными аккаунтами и использовать свой основной аккаунт MrFresnel, под которым здесь вас хорошо знают

2 лайка