Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ матрица и ее главная диагональ

Автор: Булавка 28.05.2006 17:53

необходимо проверить является ли произведение элементов главной диагонали квадратной матрицй М ( n=4)
целым числом.
я написала программу для нахождения произведения диагонали, но как проверить является ли оно целым числом?

program matrica;
uses crt;
const n=4;
var
M:array[1..n,1..n] of integer;
i,j,s;integer;
begin
writeln ('введите матрицу М');
for i:=1 to n do
for j:=1 to n do
read (M[i,j];

s:=1;
for i:=1 to n do
for j:=1 to n do
if i=j then
S:=s*M[i,j];
writeln ('s=',s:4);
readln;
end.

Автор: volvo 28.05.2006 18:31

Проверяй, является ли дробная часть близким к нулю числом...

Кстати, совсем не обязательно делать 2 цикла, вполне хватит одного:

s:=1;
for i:=1 to n do
s:=s*M[i, i];
if Frac(abs(s)) < 1E-6 then writeln('целое число') { <--- Собственно, проверка }

Автор: Булавка 28.05.2006 22:08

посни пожалусто что такое 1E-6, и еще вопос-матрица у нас integer ?

Автор: klem4 28.05.2006 22:11

Цитата
посни пожалусто что такое 1E-6


1E-6 = 10 в минус шестой степени (погрешность)

Цитата
и еще вопос-матрица у нас integer ?


M:array[1..n,1..n] of integer;

smile.gif

Но судя по заданию должно быть НЕ integer (вообще не целочисленный тип)

Автор: Булавка 28.05.2006 22:59

я тож так подумала. только real упорно не хочет приниматся

Автор: klem4 28.05.2006 23:01

А что пишет ? Попробуй поставить {$N+} в первой строчке программы. Скорее всего дело в этом, подключения математического сопроцессора не хватает.

Автор: volvo 28.05.2006 23:25

Ну, Real - то должен приниматься всегда... Это НЕ сопроцессорный тип... А вот S тоже должна быть описана, как Real, иначе будет попытка записать
Integer <- Real
, чего компилятор не пропустит...

Автор: Булавка 30.05.2006 22:58

вот вся программа. помогите поменять тип, только чтоб она работала

Код
Program Matrica;
uses crt;
const n=4;
var
A:array[1..n,1..n] of integer;
B,C:array[1..n] of integer;
i,j,z,y,min,max,m,k,S:integer;
begin
writeln ('ввод масива А');
for i:=1 to n do
for j:=1 to n do
read (A[i,j]);


      for i:=1 to n do
      begin
        m:=m+1;
      for j:=1 to n do

     B[m]:=B[m]+A[i,j];
     end;

   min:=B[1];
   z:=1;
   for m:=1 to n do
   if B[m]<min then
   begin
     min:=B[m];
     z:=m;
   end;

   for j:=1 to n do
   begin
   k:=k+1;
   for i:=1 to n do
   begin
   A[i,j]:=abs(A[i,j]);
   C[k]:=C[k]+A[i,j];
   end;
   end;
   max:=C[n];
   y:=n;
   for k:=1 to n do
   if C[k]>max then
   begin
   max:=C[k];
   y:=k;
   end;
   s:=1;
   for i:=1 to n do
   for j:=1 to n do
   if i=j then
   S:=s*A[i,j];
if frac(abs(s))<1e-6 then
writeln ('произведение элементов диагонали целое число');

writeln('min=',min:4,'   z=',z:4);
writeln('max=',max:4,'   y=',y:4);
writeln ('s=',s:3);
   readln;
   repeat until keypressed
   end.

Автор: klem4 30.05.2006 23:01

Вот тако по крайней мере запускается и отрабатвыает без ошибок

{$N+}
Program Matrica;
uses crt;
const n=4;
var
A:array[1..n,1..n] of single;
B,C:array[1..n] of single;
i,j,z,y,m,k : integer;
S, min, max:single;
begin
writeln ('ввод масива А');
for i:=1 to n do
for j:=1 to n do
read (A[i,j]);


for i:=1 to n do
begin
m:=m+1;
for j:=1 to n do

B[m]:=B[m]+A[i,j];
end;

min:=B[1];
z:=1;
for m:=1 to n do
if B[m]<min then
begin
min:=B[m];
z:=m;
end;

for j:=1 to n do
begin
k:=k+1;
for i:=1 to n do
begin
A[i,j]:=abs(A[i,j]);
C[k]:=C[k]+A[i,j];
end;
end;
max:=C[n];
y:=n;
for k:=1 to n do
if C[k]>max then
begin
max:=C[k];
y:=k;
end;
s:=1;
for i:=1 to n do
for j:=1 to n do
if i=j then
S:=s*A[i,j];
if frac(abs(s))<1e-6 then
writeln ('произведение элементов диагонали целое число');

writeln('min=',min:4,' z=',z:4);
writeln('max=',max:4,' y=',y:4);
writeln ('s=',s:3);
readln;
repeat until keypressed
end.