Консультация № 176190
21.01.2010, 18:16
0.00 руб.
0 4 2
Добрый дeнь увaжaeмыe экспeрты!!!
Помогите мне решить задачи,по процедурам.
Даны две матрицы разной размерности. Найти.
1. Мин. и макс. элемент в четных строках.
2. Поменять местами мин.и макс.
3. Сфорировать для каждой матрицы вектор суммы нечетных столбцов.
4. Вывести результаты.

P.S: каждое задание в в разных процедурах.,например в одной найти мак и мин...в другой поменять их местами и т.д

Обсуждение

Неизвестный
22.01.2010, 20:19
общий
это ответ
Здравствуйте, Пичкaлёв Сeргeй Ивaнович .
В программе, которая приведена ниже, реализован вывод массива, заполненного случайным образом.
При вызове procedure1; в четных строках матрицы ищатся максимальный и минимальный элементы.
При вызове procedure2; в нечетных столбацах считается сумма элементов.
Удачи.

Приложение:
const
n=5; m=10;
var i,j:integer;
a: array [1..n,1..m] of integer;
procedure procedure1;
var max,min:integer;
begin
for i:=1 to n do
begin
if (i mod 2)=0 then {если строка четная}
begin
min:=a[i,1]; max:=a[i,1];
for j:=1 to m do
begin {ищем минимальный и максимальный элементы}
if (a[i,j]>max) then
max:=a[i,j];
if (a[i,j]<min) then
min:=a[i,j];
end;
write('max in line ',i); writeln(' = ',max);
writeln('min = ',min);
end;
end;
end;

procedure procedure2;
var vector: array [1..m] of integer;
summa: integer;
begin
for i:=1 to m do vector[i]:=0;
for i:=1 to n do
begin
for j:=1 to m do
begin
if (j mod 2)<>0 then {если столбец нечетный}
vector[j]:=vector[j]+a[i,j];
end;
end;
{вывод получившегося вектора}
for i:=1 to m do
if (i mod 2)<>0 then
write(vector[i]:4);
end;

begin
randomize;
for i:=1 to n do
begin
for j:=1 to m do
begin
a[i,j]:=random(100); {заполнение массива случайными значениями}
write(a[i,j]:4);
end;
writeln;
end;
procedure1;
procedure2;
readln;
end.
5
большоe спaсибо!!*успeхов Вaм!!
давно
Старший Модератор
31795
6196
22.01.2010, 23:44
общий
Лейла:
Цитата: из вопроса
Даны две матрицы разной размерности.

Вы работаете только с одной матрицей и ту определили как глобальную.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Неизвестный
22.01.2010, 23:57
общий
Зенченко Константин Николаевич:
Цитата: Зенченко Константин Николаевич
Даны две матрицы разной размерности

Не заметила, если честно. Но, думаю, я ему хоть немного помогла, и дальше он справится сам =)
давно
Академик
320937
2216
27.01.2010, 11:05
общий
это ответ
Здравствуйте, Пичкaлёв Сeргeй Ивaнович .
Ответ в приложении Turbo Pascal 7.
Комментарии к программе.
1. На самом деле обрабатываются 2 матрицы одного размера, разный размер эмулируется заданием и обработкой числа строк. Для матриц реально разного размера требуется использования указателей.
2. Действия в задании 2 не описаны однозначно. Например, в строке {1,1,2,3,3,3} два минимальных значения и три максимальных. В программе принято решение менять местами первый максимум и первый минимум. Так, в приведенном примере получится {3,1,2,1,3,3}.


Приложение:
{
Даны две матрицы разной размерности. Найти.
1. Мин. и макс. элемент в четных строках.
2. Поменять местами мин.и макс.
3. Сфорировать для каждой матрицы вектор суммы нечетных столбцов.
4. Вывести результаты.
}
program p176190;
const
MaxRows = 50; { максимальное число строк }
MaxCols = 50; { максимальное число столбцов }
width = 4; { ширина поля печати одного элемента массива }
type
TVector = array[1..MaxRows] of integer;
TMatrix = array[1..MaxRows, 1..MaxCols] of integer;
var
rows1, cols1, rows2, cols2: integer;
m1, m2: TMatrix;
v1, v2: TVector;

procedure GetSize(var rows, cols: integer);
{ ввод размеров матрицы }
begin
write('Число строк ');
readln(rows);
write('Число столбцов ');
readln(cols);
end;

procedure MInput(var m: TMatrix; rows, cols: integer);
{ заполнение матрицы }
var
i,j: integer;
begin
for i:= 1 to rows do
for j:= 1 to cols do
m[i][j]:= random(MaxRows)-MaxRows div 2;
end; { InputMatrix }

procedure MPrint(var m: TMatrix; rows, cols: integer; heading: string);
{ печать матрицы }
var
i, j: integer;
begin
writeln;
writeln(heading);
for j:= 1 to cols*width do
write('-');
writeln;
for i:= 1 to rows do
begin
for j:= 1 to cols do
write(m[i,j]:width);
writeln;
end;
for j:= 1 to cols*width do
write('-');
writeln;
end; { MPrint }

procedure Swap(var a,b: integer);
{ обмен значений переменных }
var
tmp: integer;
begin
tmp:= a;
a:= b;
b:= tmp;
end; { Swap }

procedure FindMinMax(m: TMatrix; ThisRow, cols: integer; var jmin, jmax: integer);
{ нахождение минимального и максимального значений в строке матрицы }
var
j: integer;
begin
jmin:= 1;
jmax:= 1;
for j:= 2 to cols do
begin
if m[ThisRow,j]<m[ThisRow,jmin] then
jmin := j;
if m[ThisRow,j]>m[ThisRow,jmax] then
jmax := j;
end;
end; { FindMinMax }

procedure VCreate(var v: TVector; m: TMatrix; rows, cols: integer);
{ заполнение вектора сумм нечетных столбцов матрицы }
var
i, j, sum: integer;
vi: integer;
vrows: integer;
begin
vrows := (cols+1) div 2;
for vi:= 1 to vrows do
begin
sum := 0;
for i:= 1 to rows do
begin
j:= vi*2-1;
inc(sum,m[i,j]);
end;
v[vi]:= sum;
end;
end; { VCreate }

procedure VPrint(var v: TVector; rows: integer);
{ печать вектора сумм нечетных столбцов }
var
i: integer;
begin
for i:= 1 to rows do
write(v[i]:width, ' ':width);
writeln;
end; { VPrint }

procedure MProcess( var m: TMatrix; var rows, cols: integer; mheading: string; var v: TVector);
{ обработка матрицы }
var
i: integer;
jmin, jmax: integer;
begin
writeln('Матрица '+mheading);
GetSize(rows, cols);
if (rows in [1..MaxRows]) and (cols in [1..MaxCols]) then
begin
MInput(m, rows, cols);
MPrint(m, rows, cols, ' Данная матрица '+mheading);
i:= 2;
while i<=rows do
begin
FindMinMax(m, i, cols, jmin, jmax);
Swap(m[i,jmin], m[i,jmax]);
i:= i+2;
end;
VCreate(v,m,rows,cols);
MPrint(m, rows, cols, 'Матрица '+mheading+' после замены');
VPrint(v, (cols+1) div 2);
end
else
writeln(' Матрица '+mheading+' задана неверно');
end; { MProcess }

begin { p176190 }
randomize;
MProcess(m1, rows1, cols1, '1', v1);
MProcess(m2, rows2, cols2, '2', v2);
readln;
end.
Форма ответа