блин, трудно с указателями этими
var
a,b,t,x:^integer; //типизированные указатели типа int
c,d,e:integer;
begin
repeat
write('Enter matrix size:'); //вводим размер n параметр
readln(e);
until e>0;
{}
GetMem(a,e*e); //тут что звездочка означает?
t:=a;
for c:=1 to e do
for d:=1 to e do
begin
write('Enter A[',c,',',d,']:');
readln(t^); //обращаемся к памяти?
inc(t);
end;
{}
t:=a;
for c:=1 to e do
begin
for d:=1 to e do
begin
write(t^:5); //обращаемся к памяти?
inc(t);
end;
writeln;
end;
FreeMem(a,e*e); // и тут
end.
//тут что звездочка означает?
GetMem (процедура)
Создает динамическую переменную определенного размера и записывает ее адрес
в памяти в указательную переменную.
Объявление:
Procedure GetMem(Var P : Pointer; Size : Word);
Замечания:
Параметр P - переменная любого указательного типа. Параметр Size - выражение, определяющее размер динамической переменной в байтах. Недавно созданная переменная может быть вызвана как P^. Если в куче недостаточно свободного пространства для распределения динамической переменной, то происходит ошибка во время выполнения программы.
Ограничения:
Самый большой блок, который может быть безопасно распределен в куче равен 65,528 байт (64K-$8).
FreeMem (процедура)
Освобождает память, занятую динамической переменной данного размера.
Объявление:
Procedure FreeMem(Var P : Pointer; Size : Word);
Замечания:
Параметр P - переменная любого указательного типа, предварительно распределенная в памяти процедурой GetMem или та, которой было присвоено значение оператором присваивания. Параметр Size - выражение, определяющее размер динамической переменной в байтах, память, занимаемую которой нужно освободить. Он должен быть равен числу байт, предварительно распределенных для этой переменной процедурой GetMem. Процедура FreeMem уничтожает переменную, связанную с P и освобождает память, занимаемую этой переменной. Если P не указывает на область памяти в куче, то происходит ошибка во время выполнения программы. После обращения к FreeMem, значение P становится неопределенным и если вы впоследствии пытаетесь сослаться на P^, то происходит ошибка.
В программе учесть все варианты решения (система имеет линейных уравнений единственное решение, система линейных уравнений имеет множество решений, система линейных уравнений не имеет решений ???
Ответ: так как детерминант матрицы равен нулю, то система не может быть решена этим методом (система не имеет решений или имеет множество решений).
begin
b:=new integer[e];
b0:=0;
writeln('Enter B:');
for c:=1 to e do
begin
write('B[',c,']:=');
readln(b[b0]);
inc(b0);
end;
for c:=1 to e do
begin
a0:=0;
b0:=0;
inc(a0,(c-1));
for d:=1 to e do
begin
g:=b[b0];//тут можете написать что делаем?
b[b0]:=a[a0];//тут можете написать что делаем?
a[a0]:=g;//тут можете написать что делаем?
inc(a0,e);//тут можете написать что делаем?
inc(b0);//тут можете написать что делаем?
end;
writeln('x[',c,']:=',det(a,e)/detA);
a0:=0;
b0:=0;
inc(a0,(c-1));
for d:=1 to e do
begin
g:=b[b0];
b[b0]:=a[a0];
a[a0]:=g;
inc(a0,e);
inc(b0);
end;
end;
b:=nil; // это мы память освобождает? если да, то зачем
end;
a:=nil; // это мы память освобождает? если да, то зачем
это мы память освобождает? если да, то зачем
function det(a:array of integer;b:integer):integer;
var
c:array of integer;
a0,c0:integer;
d,k,k0,i,j,ji:integer;
begin
a0:=0;
k:=1;//
d:=a[a0];
if b>1 then
begin
c:= new integer[(b-1)*(b-1)];
d:=0;
for i:=1 to b do
begin
c0:=0;a0:=0;
for j:=1 to b do begin if i=j then k0:=a[a0];inc(a0);end;
for j:=1 to b-1 do
for ji:=1 to b do
if ji=i then inc(a0)
else begin c[c0]:=a[a0];inc(a0);inc(c0);end;
d:=d+k*k0*det(c,b-1);
k:=-k;
end;
c:=nil;
end;
det:=d;
end;
var
a,b:array of integer;
a0,b0:integer;
c,d,detA,e,g:integer;
begin
repeat write('Enter matrix size:');readln(e);until e>0;
a:= new integer [e*e];
a0:=0;
writeln('Enter A:');
for c:=1 to e do
for d:=1 to e do
begin
write('A[',c,',',d,']:=');
readln(a[a0]);
inc(a0);
end;
detA:=det(a,e);
writeln('determinant=',detA:10);
if detA=0 then writeln('Нет решений')
else
if det(a,e)=0 then writeln('Бесконечное множество решений')
else
begin
b:=new integer[e];
b0:=0;
writeln('Enter B:');
for c:=1 to e do
begin
write('B[',c,']:=');
readln(b[b0]);
inc(b0);
end;
for c:=1 to e do
begin
a0:=0;
b0:=0;
inc(a0,(c-1));
for d:=1 to e do
begin
g:=b[b0];
b[b0]:=a[a0];
a[a0]:=g;
inc(a0,e);
inc(b0);
end;
writeln('x[',c,']:=',det(a,e)/detA);
a0:=0;
b0:=0;
inc(a0,(c-1));
for d:=1 to e do
begin
g:=b[b0];
b[b0]:=a[a0];
a[a0]:=g;
inc(a0,e);
inc(b0);
end;
end;
b:=nil;
end;
a:=nil;
Readln;
end.
сейчс если детерминант 0
Ответ: так как детерминант матрицы равен нулю, то система не может быть решена этим методом (система не имеет решений или имеет множество решений).
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.