Цитата:
Сообщение от лекси 1
Помогите пожалуйста!
|
Черт, что за запах отвратительный? Ох, чую - пахнет Паскалем АВС. Превосходящим своею глючностью самою глючность. В общем, так - за глюки этого... изделия я не отвечаю. Кроме того:
1. Ведь вот просил Вас выкладывать листинги в тегах {Code}, и объяснил, как это делается - нет, всё мимо. Ведь так неудобно читать неформатированный текст программы! Впрочем, это так - воркотня.
2. Не надо менять то, что было отлажено и выверено! Например, у меня:
If b then Write(P:15);
Writeln;
у Вас:
If b then Write
ln(P:15);
Writeln;
В результате на экране появляются лишние пустые строки, матрица рвется. И зачем?
Ну ладно. Главное, ответить на извечный вопрос "Что делать?". Предлагаю попытаться обойти глюки Вашего лжепаскаля путем задания типа произведения P, как "Real". Должно помочь. Тогда (заодно еще кое-где кое-что "причесал" и добавил исключение нулевых элементов матрицы):
Код:
Program Primer;
uses crt;
const
n=5;
var
M: array[1..n,1..n]of integer;
i,j,r,k,a,c :integer;
P:Real;
b:boolean;
begin
clrscr;
randomize;
write('Enter the range [a,c]: ');
readln(a,c);
writeln;
writeln('Initial matrix:');
writeln;
for i:=1 to N do
begin
b:=true;
P:=1;
for j:=1 to N do
begin
M[i,j]:=random(c-a+1)+a;
if M[i,j]=0 then M[i,j]:=1;
if M[i,j]<0 then b:=false;
if b then P:=P*m[i,j];
write(m[i,j]:4);
end;
if b then write(P:15:0);
writeln;
end;
readkey;
writeln;
writeln('Ordered matrix:');
writeln;
for j:=1 to n do
begin
for k:=1 to n-2 do
begin
for i:=k+2 to n do
if k mod 2 <> 0 then
if sqr(m[k,j]) < sqr(m[i,j]) then
begin
r:=m[k,j];
m[k,j]:=m[i,j];
m[i,j]:=r;
end;
end;
end;
for i:=1 to n do
begin
for j:=1 to n do write (m[i,j]:4);
writeln;
end;
readkey;
End.