Помощь - Поиск - Пользователи - Календарь
Полная версия: Операции над матрицами
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Earl_Ananiy
Разработать блок-схему алгоритма и составить программу для решения задачи с использованием подпрограмм. Условия, ‴Заданы три матрицы A(M,M), B(N,N), C(M,M). Найти минимальное из трех чисел X, Y, Z, которые равны сумме элементов неглавной диагонали матриц A, B, C соответственно‴. Определить операции, которые необходимо оформить в виде подпрограммы и выбрать тип подпрограммы – процедуру или функцию. Обосновать свой выбор. Определить входные и выходные параметры подпрограмм.

Добавлено через 7 мин.
Пожалуйста проверьте мою программу, а то не могу найти ошибки.

program Kurs1;
uses crt;
type Mat=array[1..50,1..50] of real;
var A,B,C:Mat;
x,y,z:integer;
i,j:integer;
m,n:integer;

procedure F(D:Mat;R:integer);
begin
for i:=1 to R do
for j:=1 to R do
D[i,j]:=random(50);
end;

procedure G(D:Mat;R:integer);
begin
for i:=1 to R do
begin
for j:=1 to R do
write(D[i,j]:5);
writeln;
end;
end;

function H(D:Mat;R:integer):real;
var S:integer;
begin
S:=0;
for i:=1 to R do
for j:=1 to R do begin
if i+j-1=R then S:=S+D[i,j];
end;
H:=S;
end;

function Min(x,y:integer):integer;
begin
if x>y then Min:=y else Min:=x
end;

begin
clrscr;
randomize;
writeln('m=');
readln(m);
writeln('n=');
readln(n);

writeln;

F(A,m);
F(B,n);
F(C,m);

writeln('Matrica A');
G(A,m);
writeln;

writeln('Matrica B');
G(B,n);
writeln;

writeln('Matrica C');
G(C,m);
writeln;

x:=H(A,m);
y:=H(B,n);
z:=H(C,m);

writeln('x= ',x,' ','y= ',y,' ','z= ',z);

writeln;

writeln('min= ',Min(Min(x,y),z));
readln;

end.

Тэги!.. Lapp
Lapp
Цитата(Earl_Ananiy @ 28.01.2010 3:46) *
Пожалуйста проверьте мою программу, а то не могу найти ошибки.
Не раньше, чем ты потрудишься назвать сами ошибки..
Что не так?
volvo
Цитата
Пожалуйста проверьте мою программу, а то не могу найти ошибки.
Компилятор покажет твои ошибки. Нажми F9, и увидишь их... Хинт: нельзя присваивать значение Integer <- Real... Обратно, Real <- Integer, можно.
Earl_Ananiy
Цитата(Lapp @ 28.01.2010 6:16) *

Не раньше, чем ты потрудишься назвать сами ошибки..
Что не так?


Выдает ошибку Error 26: Type mismatch.Нажмите для просмотра прикрепленного файла
volvo
Я тебе сказал, в чем ошибка. Исправляй...
Earl_Ananiy
Цитата(volvo @ 28.01.2010 14:02) *

Я тебе сказал, в чем ошибка. Исправляй...


Я исправил но все равно показывает такую же ошибку
Прикрепляю исправленный файл.Нажмите для просмотра прикрепленного файла
Lapp
Цитата(Earl_Ananiy @ 28.01.2010 14:34) *
Я исправил но все равно показывает такую же ошибку
Ты не все исправил. Вот тут еще:
 x:=H(A,m);
y:=H(B,n);
z:=H(C,m);
- функции типа Real, их нужно как-то привести к целым: либо округлить (Round), либо отсечь (Trunc).
А ты не можешь сам найти строку, в которой ошибка? Компилятор тебе не показывает ее? Так было бы намного быстрее.. Какой у тебя компилятор?

volvo
Цитата
Я исправил
Исправил, да не везде. У тебя X, Y, Z тоже описаны как Integer, а ты в них хочешь записать вещественные числа.
Earl_Ananiy
Цитата(Lapp @ 28.01.2010 14:43) *

Ты не все исправил. Вот тут еще:
 x:=H(A,m);
y:=H(B,n);
z:=H(C,m);
- функции типа Real, их нужно как-то привести к целым: либо округлить (Round), либо отсечь (Trunc).
А ты не можешь сам найти строку, в которой ошибка? Компилятор тебе не показывает ее? Так было бы намного быстрее.. Какой у тебя компилятор?

Turbo Pascal 7.0

Добавлено через 15 мин.
Цитата(volvo @ 28.01.2010 14:44) *

Исправил, да не везде. У тебя X, Y, Z тоже описаны как Integer, а ты в них хочешь записать вещественные числа.

Заработал. Только выдает нулевую матрицу все 0Нажмите для просмотра прикрепленного файла
Lapp
Цитата(Earl_Ananiy @ 28.01.2010 16:06) *
Turbo Pascal 7.0
Так он прекрасно ставит курсор прямо на то место, где ошибка..

Цитата
Заработал. Только выдает нулевую матрицу все 0
Естественно )). Ты же не передаешь заполненную матрицу из процедуры назад. Используй var в процедуре F. Вот так:
procedure F(var D:Mat;R:integer);


Earl_Ananiy
Цитата(Lapp @ 28.01.2010 16:58) *

Так он прекрасно ставит курсор прямо на то место, где ошибка..

Естественно )). Ты же не передаешь заполненную матрицу из процедуры назад. Используй var в процедуре F. Вот так:
procedure F(var D:Mat;R:integer);


Спасибо огромное!!! Все заработало!!! Ур-р-ра!!!Нажмите для просмотра прикрепленного файла
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.