Консультация № 174784
02.12.2009, 22:01
0.00 руб.
0 13 2
Уважаемые эксперты помогите решить эти задачи!!!

1 прога - Дана квадратная матрица. Поменять строки. Например первую с последней,вторую с предпоследней и т.д
2 прога - это умножение матрицы на матрицу.
3 прога - Дан квадратнаям матрица. Отсортировать её с помощью Метода Выбора.
4прога - Дан мвумерный массив А размерностью m*m Найти максимальное значение элемента в каждой строке матрицы. Создать новый массив из этих элементов.


Обсуждение

давно
Специалист
246813
155
03.12.2009, 01:19
общий
Прозоров Леонид:
Не задавайте несколько разных, не связанных с друг другом вопросов, в одном. Это не запрещено (если все вопросы относятся к теме рассылки), но вероятность того, что Вы получите на них ответы, будет гораздо выше, если Вы зададите их по отдельности. Например, мало кому из экспертов захочется отвечать на вопрос, в котором просто перечислено несколько задач из задачника. Отвечать на такие вопросы неудобно, ответы трудно читаются в выпусках рассылок, затрудняется обсуждение в форуме. Поэтому большинство экспертов просто игнорируют вопросы, в которых под видом одного дано несколько вопросов или задач. Гораздо лучше, если Вы в одном вопросе спросите про решение одной проблемы, особенно, если Вы покажете, что пытались решить ее самостоятельно, и укажете, что именно вызвало трудности. Тогда многие захотят Вам помочь.
давно
Академик
320937
2216
03.12.2009, 17:40
общий
это ответ
Здравствуйте, Прозоров Леонид. В приложении ответ на первый вопрос. Turbo Pascal 7. Динамически создаем объект, содержащий квадратную матрицу максимального (для нашего примера) размера 100*100 и инициализируем часть матрицы, например, 5*5, случайным образом. Меняем строки. Освобождаем память, занятую объектом.


Приложение:
(* Дана квадратная матрица. Поменять строки. *)
program p174784;
uses
crt;
const
MaxSize = 100;
type
TMatrix = object
rows: integer;
cols: integer;
ar: array[1..MaxSize, 1..MaxSize] of integer;

procedure swap(row1: integer; row2: integer);
{ обмен строк }
procedure print;
{ печать матрицы }
constructor init(InitRows, InitCols: integer);
{ создание матрицы с используемым размером InitRows * InitCols }
end;
var
mat: TMatrix;
r,c: integer;
mPtr: ^TMatrix; { указатель на объект, содержащий матрицу 100*100 }

constructor TMatrix.init(InitRows, InitCols: integer);
var
r,c: integer;
begin
rows := InitRows;
cols := InitCols;
Randomize;
for r:= 1 to rows do
for c := 1 to cols do
ar[r,c] := random(256);
end; { init }

procedure TMatrix.swap(row1: integer; row2: integer);
var
col: integer;
tmp: integer;
begin
for col:= 1 to cols do
begin
tmp := ar[row1, col];
ar[row1, col] := ar[row2, col];
ar[row2, col] := tmp;
end;
end; { swap }

procedure TMatrix.print;
var
r,c: integer;
begin
writeln;
for r:= 1 to rows do
begin
for c:= 1 to cols do
write(ar[r,c]:4);
writeln;
end;
end; { print }

begin { main }
clrscr;
{ динамически выделяем память для объекта типа TMat
и заполняем часть массива 5*5 случайным образом }
new(mPtr, Init(5,5));
writeln('Создана матрица');
mPtr^.print;
mPtr^.swap(3,4); { обмен 3 и 4 строк }

writeln('Матрица после обмена строк');
mPtr^.print;
dispose(mPtr); { объект не нужен, освободили память }
readln;
end.
5
Неизвестный
03.12.2009, 22:04
общий
leonid59:
А можно без процедур,пжлста?
И у вас выводит одну и ту же матрицу
Неизвестный
04.12.2009, 00:04
общий
Прозоров Леонид:
Добрый вечер!
1. Сначала, если можно, разберемся с одной и той же матрицей. Как понимать фразу:
И у вас выводит одну и ту же матрицу
.
Я разместил скрин-шот прогона программы здесь: https://rfpro.ru/upload/1136.
2. Можно без процедур. Выложу в мини-форум.
Неизвестный
04.12.2009, 00:38
общий
Извените,не увидел,там вроде поменял 2 и 3 строку местами,если не ошибаюсь.
Неизвестный
04.12.2009, 00:45
общий
leonid59:
Я посм ваш скрин,но задания другое было,надо было поменять 1 строку с последней,2-ю с предпоследн.
Например
Основная матрица

2 4 3
5 6 4
6 7 9
4 5 1

Конечная

2 5 1
6 7 9
5 6 4
2 4 3

Вот такой результат должен получиться
Неизвестный
04.12.2009, 01:13
общий
это ответ
Здравствуйте, Прозоров Леонид.
Вторая задача в приложении.

Приложение:
uses crt;
const n=5;
var a,b,c:array[1..n,1..n] of integer;
i,j,k:byte;
begin
clrscr;
randomize;
writeln('Матрица 1');
for i:=1 to n do
begin
for j:=1 to n do
begin
a[i,j]:=random(10);
write(a[i,j]:3);
end;
writeln;
end;
writeln('Матрица 2:');
for i:=1 to n do
begin
for j:=1 to n do
begin
b[i,j]:=random(10);
write(b[i,j]:3);
end;
writeln;
end;
{Умножение матриц 1*2}
for k:=1 to n do
for j:=1 to n do
begin
c[k,j]:=0;
for i:=1 to n do
begin
c[k,j]:=c[k,j]+a[k,i]*b[i,j];
end;
end;
writeln('Результат умножения');
for i:=1 to n do
begin
for j:=1 to n do
write(c[i,j]:5);
writeln;
end;
readln
end.
5
Неизвестный
04.12.2009, 10:12
общий
Прозоров Леонид:
Доброе утро!
Код:
(* Дана квадратная матрица. Поменять строки:первую с последней,вторую с предпоследней и т.д *)

program p174784;
uses
crt;
const
MaxSize = 100;
type
TMatrix = object
rows: integer;
cols: integer;
ar: array[1..MaxSize, 1..MaxSize] of integer;

procedure swap(row1: integer; row2: integer);
{ обмен строк }
procedure print;
{ печать матрицы }
constructor init(InitRows, InitCols: integer);
{ создание матрицы с используемым размером InitRows * InitCols }
end;
var
mat: TMatrix;
r,c: integer;
mPtr: ^TMatrix; { указатель на объект, содержащий матрицу 100*100 }

constructor TMatrix.init(InitRows, InitCols: integer);
var
r,c: integer;
begin
rows := InitRows;
cols := InitCols;
Randomize;
for r:= 1 to rows do
for c := 1 to cols do
ar[r,c] := random(256);
end; { init }

procedure TMatrix.swap(row1: integer; row2: integer);
var
col: integer;
tmp: integer;
begin
for col:= 1 to cols do
begin
tmp := ar[row1, col];
ar[row1, col] := ar[row2, col];
ar[row2, col] := tmp;
end;
end; { swap }

procedure TMatrix.print;
var
r,c: integer;
begin
writeln;
for r:= 1 to rows do
begin
for c:= 1 to cols do
write(ar[r,c]:4);
writeln;
end;
end; { print }

begin { main }
clrscr;
{ динамически выделяем память для объекта типа TMat
и заполняем часть массива 5*5 случайным образом }
new(mPtr, Init(5,5));
writeln('Создана матрица');
mPtr^.print;
{============================================}
for r:= 1 to mptr^.rows div 2 do
mPtr^.swap(r,mptr^.rows-r+1); { обмен строк 1 и rows, 2 и rows-1 }
{============================================}

writeln('Матрица после обмена строк');
mPtr^.print;
dispose(mPtr); { объект не нужен, освободили память }
readln;
end.
Неизвестный
04.12.2009, 11:15
общий
leonid59:
Доброе утро.Немогли бы закинуть в приложение,а то я просто с телефона
Неизвестный
04.12.2009, 11:38
общий
Прозоров Леонид:
Что значит "закинуть в приложение"?
Неизвестный
04.12.2009, 11:57
общий
leonid59:
Ну оформить не в коде,а как в вашем ответе,на 1 задачу..оформить в приложении,а не в коде
Неизвестный
04.12.2009, 12:25
общий
Прозоров Леонид:
1. Как обещал, выкладываю вариант без процедур.
Код:
program p174784b;
uses
crt;
const
n=8;
var
tmp: integer;
i,j: integer;
a: array[1..n,1..n] of integer;
begin
clrscr;
randomize;
for i:=1 to n do
for j:=1 to n do
a[i,j]:=random(10);

writeln('Матрица до');
for i:=1 to n do
begin
for j:=1 to n do
write(a[i,j]:3);
writeln;
end;

for i:= 1 to n div 2 do
for j:= 1 to n do
begin { обмен }
tmp:= a[i,j];
a[i,j] := a[n-i+1,j];
a[n-i+1,j] := tmp;
end;

writeln('Матрица после');
for i:=1 to n do
begin
for j:=1 to n do
write(a[i,j]:3);
writeln;
end;

readln
end.

2. Оба файла выложены на сервер 174784a и 174784b.
3. Поскольку в задании сказано "..например..",
прога - Дана квадратная матрица. Поменять строки. Например первую с последней,вторую с предпоследней и т.д
, я привел свой пример. В задании не сказано, что нельзя использовать объекты и процедуры. В связи с этим считаю неправильным менять свой ответ. К тому же я специально ответил только на один вопрос, чтоб другие отвечающие могли продемонстрировать другие подходы к решению задачи. Если что-то в программе непонятно - задавайте вопросы.
Неизвестный
05.12.2009, 10:36
общий
Прозоров Леонид:
Доброе утро! Можете показать, как выглядит в Вашем задании отсортированная матрица?
Форма ответа