Болталка PascalABC.NET

Да, я вот смотрю и страдаю…

Тем временем дефолтный антивирус :slight_smile:

Тем временем Аваст

image

жду скрин с Malwarebytes в режиме проверки :grinning:

Болталка это болталка, а не выяснение отношений и переход на личности

Получилось весёлое совпадение. Сохранил код, а через секундку - полторы ПК и выключился. Однако вместо радости получил файл состоящий из “пустых” символов. есть версии, что с ним могло произойти и есть ли возможность выковырять исходник? Сохранились exe’шник и pbd…

Копеечная экономия на UPS рано или поздно оборачивается головной болью. Как и экономия на внешнем устройстве для резервного копирования.

Во время отключения энергии сектора HDD/SSD которые в тот момент перезаписывались остаются в неадекватном состоянии, поэтому при следующем запуске их сбрасывает на нули - то есть char(0), что и видно в IDE. У меня тоже так было, когда на даче пытался программировать.

На будущее: Раз речь идёт про код - лучше всего использовать git. И желательно заливать на облоко, вроде github-а. Там есть и приватные репы, если боитесь показывать свой код.

А в данном случае можно использовать .Net декомпилятор (у меня dotPeek) чтоб конвертировать .exe в кривой код на C#, а затем перевести весь этот код на паскаль ручками.

P.S. Ну или альтернативный вариант - написать код с нуля, подглядывая в декомпилированный код только после того как уже реализовали соответствующую часть в новом коде. Я и без потерь исходников время от времени устраиваю такие переписывания, когда не доволен состоянием кода. Работает как более экстремальная, но и более действенная версия рефакторинга.

примерно так и думал, что система не успела полноценно закончить сохранение.

стабильные версии складирую на USB как правило. Но это была первая версия. Такой подставы я не ожидал конечно.

Переписать с 0 проще будет пожалуй…

Благодарю

Планируется ли снять ограничение с кеш-функций на кол-во параметров? Сейчас нужно как минимум 1

Если нужно, сделаем. Напишите Issue

2 лайка

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

Если скомпилировать модуль допусти на 3.7 версии, то будет ли корректно работать .pcu c последующими версиями или потребуется компилировать заново?

Где-то увидел инфу, которая подталкивает на мысль о несовместимости, но не совсем уверен

Несовместимы

2 лайка

Я вот задумался, а зачем такое может понадобиться? Может, достаточно использовать константы в этом случае?

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

Конечно, можно расплодить кучу параметров у каждой функции, но думаю это не лучшее решение.

В целом не критично, но иногда доставляет неудобства

Ну приведите код всё-таки

Ну допустим недавно как раз помогал с такой задачкой.

С клавиатуры вводятся три значения: a, b, c. Программа вычисляет дискриминант и корни уравнения, после чего выводит их на экран. Реализуйте вычисление корней с помощью процедуры, а вычисление дискриминанта с помощью функции.

Мой вариант был таким

var 
  a, b, c: integer;
  
function disc:= sqr(b)-4*a*c;
 
procedure roots;
begin
  var d:= disc;
  Println('d =', d);
  
  if d < 0 then
    print('Нет корней')
  else if d > 0 then
    $'x1 = {(-b+sqrt(d))/(2*a)}; x2 = {(-b-sqrt(d))/(2*a)}'.Print
  else
    print('x =', (-b)/(2*a));
end;
 
begin
  (a, b, c):= readlninteger3;
  roots;
end.

Глобальные переменные как раз таки что бы не плодить параметры функции. Изначально хотел disc удобно было бы сделать кеш-функцей, но из за ограничения пришлось создавать лишнюю переменную, что бы не вычислять одно и тоже несколько раз.

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

           "Мы рождены, чтоб вам создать проблемы..."
function disc(t:(real, real, real)):= t[1] * t[1] - 4 * t[0] * t[2];
 
procedure roots(t:(real, real, real));
begin
  var d:= disc(t);
  Println('d =', d);
  var (a, b, c) := t;
  if d < 0 then
    print('Нет корней')
  else if d > 0 then
    $'x1 = {(-b+sqrt(d))/(2*a)}; x2 = {(-b-sqrt(d))/(2*a)}'.Print
  else
    print('x =', (-b)/(2*a));
end;
 
begin
  roots(ReadReal3);
end.

а можно, перед тем как бросаться громкими цитатами, внимательно прочитать ветку для начала? :man_facepalming: