Консультация № 163407
27.03.2009, 18:20
0.00 руб.
0 2 2
Помогите пожалуйста написать прогу. Очень путает и смущает различная размерность матриц.
Заданы матрицы: А размерности 2х2, В размерности 3х3, С размерности 2х2.
Вычислить максимальное значение из максимальных значений элементов матриц.
Поиск максимального значения хмах оформить в виде подпрограммы procedure.
А= ((1.2 6) ,(7 2) ) В=((3.2 1 4), (2.2 -1 0),(1 1.8 2)) С=((3.6 1), (8 2))
Спасибо!!!

Обсуждение

давно
Профессор
401888
1232
28.03.2009, 12:09
общий
это ответ
Здравствуйте, Сидорова Елена Борисовна!
Решение в приложении.

Приложение:
uses crt;
type Tmatr=array[1..3,1..3] of real;{тип матрицы}
procedure MaxEl(x:byte;mt:Tmatr;var max:real);{поиск имаксимального в матрице}
var i,j:byte;
begin
max:=mt[1,1];
for i:=1 to x do
for j:=1 to x do
if mt[i,j]>max then max:=mt[i,j];
end;
procedure Vyvod(x:byte;var mt:Tmatr;c:char);{вывод матрицы на экран, с-имя матрисы(А,В,С)}
var i,j:byte;
begin
writeln('Matrica ',c,':');
for i:=1 to x do
begin
for j:=1 to x do
write(mt[i,j]:5:1);
writeln;
end;
writeln;
end;
var a,b,c:Tmatr;
mx,mxa,mxb,mxc:real;

begin
clrscr;
a[1,1]:=1.2;a[1,2]:=6;a[2,1]:=7;a[2,2]:=2;{присваиваем значения согласно условию}
b[1,1]:=3.2;b[1,2]:=1;b[1,3]:=4;
b[2,1]:=2.2;b[2,2]:=-1;b[2,3]:=0;
b[3,1]:=1;b[3,2]:=1.8;b[3,3]:=2;
c[1,1]:=3.6;c[1,2]:=1;c[2,1]:=8;c[2,2]:=2;
Vyvod(2,a,'A');{выводим матрицу}
MaxEl(2,a,mxa);{ищем максимальный}
writeln('Max A=',mxa:0:1);{выводим}
writeln;
Vyvod(3,b,'B');
MaxEl(3,b,mxb);
writeln('Max B=',mxb:0:1);
writeln;
Vyvod(2,c,'C');
MaxEl(2,c,mxc);
writeln('Max C=',mxc:0:1);
writeln;
mx:=mxa;{пусть макс в первой матрице}
if mxb>mx then mx:=mxb;{если во второй больше чем макс, он макс}
if mxc>mx then mx:=mxc;{тоже с третьей}
write('Max 3=',mx:0:1);
readln
end.
давно
Старший Модератор
31795
6196
30.03.2009, 16:44
общий
это ответ
Здравствуйте, Сидорова Елена Борисовна!

Смотрите приложение, программа на ТР 7.0.
Масивы в памяти занимают непрерывный участок памяти длиной равной его(массива) размерности. Причем первыми идут элементы первой строки, за ними втроая строка и т.д. В подпрограмму передаётся указатель на начало первого элемента массива, в строке z:=x;, определяется, что указатель указывает на область памяти длиной шесть байт(размер типа REAL). Теперь при обращении к памяти w:=z^, будет считан один элемент массива, на который указывает переменная z^. В строке inc(z), указатель автомически увеличивается на размер оного элемента типа REAL.
Вопросы задавайте в мини-форум.
Удачи!

Приложение:
const
size2=2;
size3=3;
var
a,c:array[1..size2,1..size2]of real;
b:array[1..size3,1..size3]of real;
maxA,maxB,maxC:real;
{функция определения максимального числа}
function myMax(x,y:real):real;
begin
if x>y then myMax:=x
else myMax:=y;
end;
{процедура поиска максимума}
procedure MatrixMax(x:pointer;y:integer;var w:real);
var
i,j:integer;
z:^real;{}
begin
z:=x;{именуем указатель как указатель на переменную действительного типа}
w:=z^;{первый элемент максимальный}
for i:=1 to y do{эти два цикла можно заменить одним
for i:=1 to y*y do}
for j:=1 to y do
begin
w:=myMax(w,z^);{проверяем максимум}
writeln(w:10:5,z^:10:5);{контрольный вывод - эти строки только для деменстрации}
inc(z);{переходим к следующему элементу матрицы}
end;
writeln;
end;
begin
{определяем массив А}
a[1,1]:=1.2;
a[1,2]:=6;
a[2,1]:=7;
a[2,2]:=2;
{определяем массив В}
b[1,1]:=3.2;
b[1,2]:=1;
b[1,3]:=1.8;
b[2,1]:=2.2;
b[2,2]:=-1;
b[2,3]:=0;
b[3,1]:=1;
b[3,2]:=4;
b[3,3]:=2;
{определяем массив С}
c[1,1]:=3.6;
c[1,2]:=1;
c[2,1]:=8;
c[2,2]:=2;
{поиск максимума в каждой матрице}
matrixMax(ptr(seg(a),ofs(a)),2,maxA);
matrixMax(ptr(seg(b),ofs(b)),3,maxB);
matrixMax(ptr(seg(c),ofs(c)),2,maxC);
{выводим результат}
writeln('maxA:=',maxA:10:5,' maxB:=',maxB:10:5,' maxC:=',maxC:10:5);
write('MaxABC:',myMax(myMax(maxA,MaxB),MaxC):10:5);
readln;
end.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа