Ошибки PascalABC.NET

Вы программу приведите, чтобы можно было загрузить её на компьютер и попытаться ситуацию воспроизвести. А то похоже на письмо в конференцию “Помогите, у меня сегодня голова заболела, похоже сама по себе”"

после нажатия shift+F9 запускается командная строка и вылетает ошибка programrunner.exe перестал работать. как исправить

uses crt; const n=10; var a,g: array [1…100] of integer; var b : array [1…100] of string; var m,i,j,x,o,k: integer; var p:array[1…100] of integer; f:boolean; begin randomize; m:=1; p[1]:=1+random(10); write(p[1]:4); for i:=2 to 10 do begin repeat f:=false; x:=1+random(10); for j:=1 to m do if p[j]=x then f:=true; until f=false; p[i]:=x; m:=m+1; end; writeln (‘Ответы вводятся строкой без пробелов. Пример: 12345’); b[1]:=‘1. Общество в широком смысле слова – это ‘+NewLine+ ’ 1) территория обитания людей’+NewLine+ ’ 2) история человечества’+NewLine+ ’ 3) совокупность форм объединения людей’+NewLine+ ’ 4) производительные силы’;

b[2]:= ‘2. Обществознание – это ‘+NewLine+ ’ 1) наука’+NewLine+ ’ 2) учебная дисциплина’+NewLine+ ’ 3) комплекс наук об обществе и человеке’+NewLine+ ’ 4) сфера естественнонаучного знания’+NewLine+ ’ 5) сфера гуманитарного знания’;

b[3]:= ‘3. Человек отличается от животного наличием’+NewLine+ ’ 1) языка’+NewLine+ ’ 2) разума’+NewLine+ ’ 3) сознанием’+NewLine+ ’ 4) трудовой деятельности’+NewLine+ ’ 5) мышления’;

b[4]:= ‘4. Личность возможна (Определить неверный ответ)’+NewLine+ ’ 1) без морали’+NewLine+ ’ 2) без гражданственности’+NewLine+ ’ 3) без ответственности’+NewLine+ ’ 4) без диплома о высшем образовании’;

b[5]:= ‘5. Человек и общество’+NewLine+ ’ 1) человек первичен по отношению к обществу’+NewLine+ ’ 2) общество первично по отношению к человеку’+NewLine+ ’ 3) человек и общество взаимно обусловлены’+NewLine+ ’ 4) общество и человек развиваются независимо друг от друга’;

b[6]:= ‘6. Мораль в религии основывается’+NewLine+ ’ 1) на разуме’+NewLine+ ’ 2) на вере’+NewLine+ ’ 3) на долге’+NewLine+ ’ 4) на свободе’;

b[7]:= ‘7. Целью развитой религии является достижение’+NewLine+ ’ 1) материального благополучия’+NewLine+ ’ 2) социального положения и значимости’+NewLine+ ’ 3) спасение души’+NewLine+ ’ 4) познание мира’+NewLine+ ’ 5) управление силами природы’;

b[8]:= ‘8. К монотеистическим религиям относятся’+NewLine+ ’ 1) индуизм’+NewLine+ ’ 2) ислам’+NewLine+ ’ 3) буддизм’+NewLine+ ’ 4) язычество’;

b[9]:= ‘9. К основным моральным категориям относятся (определить неверный ответ)’+NewLine+ ’ 1) добро’+NewLine+ ’ 2) справедливость’+NewLine+ ’ 3) совесть’+NewLine+ ’ 4) выгода’+NewLine+ ’ 5) любовь’;

b[10]:= ‘10. Мораль проявляется в следовании’+NewLine+ ’ 1) интересам власти’+NewLine+ ’ 2) общественному мнению’+NewLine+ ’ 3) анимизму’+NewLine+ ’ 4) гороскопу’+NewLine+ ’ 5) внутреннему «Я» человека’;

a[1]:=3; a[2]:=23; a[3]:=12345; a[4]:=4; a[5]:=3; a[6]:=2; a[7]:=3; a[8]:=23; a[9]:=4; a[10]:=5;

k:=0; for o:=1 to n do begin i:=p[o]; writeln(b[i]); readln(g[i]); clrscr; if g[i]=a[i] then k:=k+1; end; writeln ('Ваша оценка: ',k/2); end.

  1. Все нормально работает, следовательно проблема конкретно у Вас. Возможные шаги:
  • попробуйте удалить uses Crt и clrscr и запустите обычным путем, а не по Ctrl+F9
  • обновите версию
  • переустановите .NET

Здравствуйте! Не могу решить проблему, прошу помощи.

Имеется модуль RecurWorld, в нём имеется следующая функция LinkMaxChetInList:

function LinkMaxChetInList(l: LinkedList<integer>): LinkedListNode<integer>;
  function LinkMaxChetInListRealization(link, linkMax: LinkedListNode<integer>; max: integer): LinkedListNode<integer>;
  begin
    if link = nil then
    begin
      Result := linkMax;
      exit;
    end;
    
    if (link.Value mod 2 = 0) and (abs(link.Value) >= max) then
      Result := LinkMaxChetInListRealization(link.Next, link, abs(link.Value))
    else
      Result := LinkMaxChetInListRealization(link.Next, linkMax, max);
  end;
begin
  Result := LinkMaxChetInListRealization(l.First, nil, integer.MinValue);
end;

Это рекурсивный алгоритм поиска максимального по модулю чётного числа в списке. Имеется файл, который использует данный модуль и вызывает данную функцию:

uses RecurWorld;

begin
  var a := new LinkedList&<integer>(arr&<integer>(1,2,3)); 
  Writeln(LinkMaxChetInList(a).Value);
end.

Так вот. При компиляции данного файла возникает следующая ошибка:

Внутренняя ошибка компилятора в модуле [pabcnetc.exe] :'System.Exception: System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.
   в PascalABCCompiler.NETGenerator.ILConverter.visit(ICommonNestedInFunctionFunctionCallNode value)
   в PascalABCCompiler.NETGenerator.ILConverter.AssignToLocalVariableNode(IExpressionNode to, IExpressionNode from)
   в PascalABCCompiler.NETGenerator.ILConverter.ConvertStatement(IStatementNode value)
   в PascalABCCompiler.NETGenerator.ILConverter.visit(IStatementsListNode value)
   в PascalABCCompiler.NETGenerator.ILConverter.ConvertBody(IStatementNode body)
   в PascalABCCompiler.NETGenerator.ILConverter.ConvertFunctionBody(ICommonFunctionNode func)
   в PascalABCCompiler.NETGenerator.ILConverter.ConvertFunctionsBodies(ICommonFunctionNode[] funcs)
   в PascalABCCompiler.NETGenerator.ILConverter.ConvertFromTree(IProgramNode p, String TargetFileName, String SourceFileName, CompilerOptions options, String[] ResourceFiles)
   в PascalABCCompiler.Compiler.Compile()'

Обновлял .NET и PascalABC.

Вот так работает:

function LinkMaxChetInListRealization(link,linkMax:LinkedListNode<integer>;
    max:integer):LinkedListNode<integer>;
begin
  if link = nil then begin
      Result := linkMax;
      exit
    end;
  if (link.Value mod 2 = 0) and (abs(link.Value) >= max) then
    Result := LinkMaxChetInListRealization(link.Next, link, abs(link.Value))
  else
    Result := LinkMaxChetInListRealization(link.Next, linkMax, max);
end;

function LinkMaxChetInList(l: LinkedList<integer>): LinkedListNode<integer>;
begin
  Result := LinkMaxChetInListRealization(l.First, nil, integer.MinValue);
end;

begin
  var a := new LinkedList&<integer>(arr&<integer>(1,2,3)); 
  Writeln(LinkMaxChetInList(a).Value);
end.

Я не понял, для чего Вы одну функцию объявляете в теле другой. Конечно, компилятор не должен от этого слетать, но все же…

То есть суть проблемы была в том, что я объявил одну функцию в теле другой? Хм. Спасибо за помощь, на будущее учту.

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

Спасибо, подобная ошибка у меня встретилась трижды, и во всех этих случаях удалось избежать её выносом одной п/п из другой. Подождём, конечно, ответа разработчиков. А писал я так в целях читабельности.

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

когда подключаешь System.Windows.Forms и хотя бы у 1 буквы сделать не тот регистр - паскаль перестаёт распознавать имена переменных типов и вообще всего кроме зарегистрированных имён(на Ctrl+Space)

type a=record procedure create; begin end; end;

я понимаю что тут пересекается имя для конструктора и процедуры но ошибка в том что вылазит не та ошибка :slight_smile: Файл нет имени, ошибка на строчке 0 ещё и это сообщение которое пока ок не нажмёшь - не отстанет

Исправили

Похоже, в данном случае будет устранена “поздно” ))))

Я не знаю, о каком случае Вы говорите. Еще раз повторю, что надо писать в Issues на Github и там обсуждать

Тогда и я повторю еще раз… (а как иначе?) Чтобы посмотреть, о каком случае речь, насколько я понимаю, достаточно щелкнуть мышкой пиктограмму-стрелочку в правом верхнем углу цитируемого сообщения. Более того, в данном случае в issue уже Вы сами поместили все, что надо:

И еще осмелюсь напомнить, что моя реплика от 7 апреля осталась без ответа, поэтому и продолжаю писать сюда:

Есть код

[code]function GetWords(sq:sequence of string):sequence of string; begin foreach var x in sq do begin var a := x.toWords; //в этой строке ошибка, если раскомментировать yield //yield a[0]; end; end;

begin var sq := Seq(‘1 2 3’, ‘a b c d’); GetWords(sq); end.[/code] Он компилируется (да, возвращаемое значение не определено, но это не важно). Если раскомментировать строку с yield, получу ошибку при компиляции “Неизвестное имя ‘x’” в строке var a := x.toWords; Если переписать функцию без использования ToWords, но с yield, она компилируется

function GetWords(sq:sequence of string):sequence of string; begin foreach var x in sq do begin var a := x; yield a; end; end; В чем причина? P.S. С x.Split тоже самое :frowning:

Скорее всего, это ошибка того же рода, о которой я писал вот тут Вот способ несколько поправить ситуацию:

function GetWords(sq:sequence of string):sequence of string;
begin
  var x:string;
  foreach x in sq do
  begin
    var a := x.toWords; 
    yield a[0];
  end;
end;
begin
  var sq := Seq('1 2 3', 'a b c d');
  GetWords(sq);
end.

Ну, зарегистрируйтесь на GitHub. Этого будет достаточно чтобы написать Issue

Да, увидели. Баг. Будем исправлять

Есть ли какие-то требования или рекомендации по оформлению сообщений в issue?