Помощь - Поиск - Пользователи - Календарь
Полная версия: Ссылка не указывает на экземпляр объекта
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
TOPEHTO
Цитата
var a: array of integer;
n,i,j,b: integer;
procedure input (a: array of integer);
var
i,n: integer;
begin
readln(n);
for i:=1 to n do
readln (a[i]);
end;
procedure swap(var a,b,c: integer);
begin
b:=c;
c:=a;
a:=b;
end;
begin
input(a);
for j:=1 to n-1 do
for i:=1 to n-j do
begin
if a[i] < a[i+1] then
swap(a[i+1], b, a[i]);
end;
writeln(a[n], ' - наименьшее');
writeln(a[1], ' - наибольшее');
end.


Вылетает на 9 строке на вводе

Форум читал, ссылки видел. Но не могу понять почему не работает, точно такая же процедура работала в другой программе.
Федосеев Павел
Если это FPC или Delphi, то перед использованием массива нужно выделить ему место в памяти SetLength(a, n).
TOPEHTO
это Паскаль АБС
просто раньше все работало а теперь ошибка
zhdanow5a
Советую массив задать через type ( в начале кода) . тогда возможно разрешится проблема.
Федосеев Павел
или выделить память под массив SetLength
TOPEHTO
Цитата
type
mas=array of integer;

var a: array of integer;
n,i,j,b: integer;
procedure input (a: mas);
var
i,n: integer;
begin
SetLength(a, 5);
readln(n);
for i:=1 to n do
readln (a[i]);
end;
procedure swap(var a,b,c: integer);
begin
b:=c;
c:=a;
a:=b;
end;
begin
input(a);
for j:=1 to n-1 do
for i:=1 to n-j do
begin
if a[i] < a[i+1] then
swap(a[i+1], b, a[i]);
end;
writeln(a[n], ' - наименьшее');
writeln(a[1], ' - наибольшее');
end.


Теперь тут ругается.
А что случилось? Почему раньше все работало, а теперь понадобились динамические массивы?
TOPEHTO
Цитата
type
mas=array of integer;

var a: array of integer;
n,i,j,b: integer;
procedure input (a: mas);
var
i,n: integer;
begin
SetLength(a, 5);
readln(n);
for i:=1 to n do
readln (a[i]);
end;
procedure swap(var a,b,c: integer);
begin
b:=c;
c:=a;
a:=b;
end;
begin
input(a);
for j:=1 to n-1 do
for i:=1 to n-j do
begin
if a[i] < a[i+1] then
swap(a[i+1], b, a[i]);
end;
writeln(a[n], ' - наименьшее');
writeln(a[1], ' - наибольшее');
end.


Теперь тут ругается.
А что случилось? Почему раньше все работало, а теперь понадобились динамические массивы?
Федосеев Павел
1. Покажи, что такое раньше.
2. procedure input (a: mas); - где var?
3. Глобальная (sic!) одноимённая (sic!) переменная a - тоже можно причислить к недостаткам, за которые во времена "1001 ночи" на Востоке отрубали руки.

Начни рефакторинг кода с избавления от глобальных переменных.

И если не сложно, реагируй по-чаще - я уже слишком стар и могу не дожить до рабочего состояния твоего кода.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.