IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Матричная задачка на паскале.
сообщение
Сообщение #1


Гость






Задача такая: Дана матрица А (m.n). Надо из матрицы А сделать матрицу B так,чтобы все столбцы матрицы А были упорядочены по убыванию максимальных элементов.Заранее спасибо. Пршограмма на паскале должна быть.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Алгоритм такой:
1. Описываешь массив Max размером N (я правильно понимаю, что это - число столбцов? smile.gif )...
2. В каждый элемент этого массива заносишь максимум соответствующего столбца матрицы A...
3. Копируешь всю матрицу A в матрицу B...
4. Сортируешь матрицу В вместе с массивом Max любым алгоритмом сортировки (для примера - "пузырьком") примерно так, как это было сделано здесь: задачка на двумерный массив, только вместо
If mx[Pred(j)][k] > mx[j][k] Then Begin
T := mx[Pred(j)]; mx[Pred(j)] := mx[j]; mx[j] := T
End;

делать так:
If max[Pred(j)] > max[j] Then Begin
Tint := max[Pred(j)]; max[Pred(j)] := max[j]; max[j] := Tint {Tint: integer}
T := B[Pred(j)]; B[Pred(j)] := B[j]; B[j] := T {T: TColumn}
End;
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






А ты не мог бы полностью написать прогу,дело в том что мне 28 числа все нужно сдавать,а у менЯ еще несколько прог,простых,которые я сейчас делаю
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






:no: Нет, полностью программы я НЕ пишу.

Я могу помочь решить задачу, но не решать ее ЗА КОГО-ТО...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5





Группа: Пользователи
Сообщений: 5
Пол: Женский

Репутация: -  0  +


Uses Crt; {для того, чтобы вызывать ClrScr и др }

Const
M = 2; {кол-во строк}
N = 3; {кол-во столбцов}

Type
MyType = integer; {здесь можно менять тип элементов матрицы}
TMyMatrix = array[1..M, 1..N] of MyType ; {для передачи матриц параметром в функцию,
для меньшей писанины, в общем, для удобства}

Var
A, B: TMyMatrix; {исходная и результирующая матрицы}
used: array [1..N] of byte;{массив для отметки использованных столбцов при поискке максималньго элемента матрицы}
i, j: integer; {переменные для циклов}

procedure Proceed(SrcMtr: TMyMatrix; var DstMtr: TMyMatrix);
var
cc:integer; {счетчик для количества пройденных столбцов}
CurMax: mytype; {текущий максимальный элемент}
CurColumn:integer; {столбец максимального элемента}
begin
cc := 1;
for i := 1 To N do
used[i] := 0;

while (cc <= N) do
begin
{берем первый элемент в первом найденном неиспользованном столбце}
for i := 1 To N do
if (used[i] = 0) then
begin
CurMax := SrcMtr[1, i];
CurColumn := i;
break;
end;

{находим максимум и его столбец}
for i := 1 to M do
for j := 1 to N do
if used[j] = 0 then
if(SrcMtr[i, j] > CurMax) then
begin
CurMax := SrcMtr[i, j];
CurColumn := j;
end;

{заполняем столбец результирующей матрицы}
for i := 1 To M do
DstMtr[i, cc] := SrcMtr[i, CurColumn];
Inc(cc);{прибавляем счетчик использованных столбцов}
used[CurColumn] := 1; {отмечаем, что столбец использован}
end;
end;

{процедура для вывода матрицы на экран}
procedure WriteMatrix(Mtr: TMyMatrix);
var
i, j:integer;
begin
for i := 1 To M do
begin
for j := 1 To N do
begin
Write(Mtr[i, j]:5, ' ';
end;
WriteLn;
end
end;

Begin
ClrScr;
{вводим элементы матрицы - каждый вводим enter ом. Если поменяшь mytype на real, то десятые вводятся точкой}
for i := 1 To M do
for j := 1 To N do
begin
Write('Enter matrix element [', i,',',j, ']: ';
ReadLn(A[i, j]);
end;
{выведем исходнуюматрицу на экран}
WriteLn;
WriteLn('Source matrix:';
WriteMatrix(A);
{заполним результирующую по нашему алгоритму}
Proceed(A, B);
{выведем результирующую матрицу на экран}
WriteLn('Result matrix:';
WriteMatrix(B);
{ждем нажатия клавиши}
ReadKey;
End.
Что тут не так????
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Цитата(Katenok8777 @ 27.07.05 13:22)
Что тут не так????

ВСЁ !!!
И потом, теги CОDE к Вам не относятся?

TMyMatrix = array[1..M, 1..N] of MyType;
{для передачи матриц параметром в функцию,
для меньшей писанины, в общем, для удобства}

ЭТО - не удобство !!! Удобно - это когда столбцы меняются одним оператором:
Const
size_col = 6; { число столбцов }
size_row = 8; { число строк }
Type
TColumn = Array[1 .. size_row] Of Integer;
TMatrix = Array[1 .. size_col] Of TColumn;
...
Var
mx: TMatrix;
T: TColumn;
...
T := mx[1]; mx[1] := mx[2]; mx[2] := T;

А то, что выше - это, извините, извращение...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7





Группа: Пользователи
Сообщений: 5
Пол: Женский

Репутация: -  0  +


Зачем мне использовать массив,если у меня дана матрица и с ней же должно быть проще?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8





Группа: Пользователи
Сообщений: 5
Пол: Женский

Репутация: -  0  +


Пожалуйста напиши мне полностью программу в долгу не останусь,обещаю,мне очень срочно нужно. :molitva:
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






Const
size_col = 6; { число столбцов }
size_row = 8; { число строк }
Type
TColumn = Array[1 .. size_row] Of Integer;
TRow = Array[1 .. size_col] Of Integer;

TMatrix = Array[1 .. size_col] Of TColumn;

Function GetMax(A: TMatrix; num_row: Integer): Integer;
Var max_value, i: Integer;
Begin
max_value := A[num_row][1];
For i := 2 To size_row Do
If max_value < A[num_row][i] Then
max_value := A[num_row][i];
GetMax := max_value
End;

Procedure Bubble(Var mx: TMatrix; Var row: TRow);
Var
i, j, Tint: Integer;
T: TColumn;
Begin
For i := 1 To size_col Do
For j := size_col DownTo i+1 Do
If row[Pred(j)] > row[j] Then Begin
Tint := row[Pred(j)]; row[Pred(j)] := row[j]; row[j] := Tint;
T := mx[Pred(j)]; mx[Pred(j)] := mx[j]; mx[j] := T;
End
End;

Procedure ReadMatrix(Var mx: TMatrix);
Var i, j: Integer;
Begin
For i := 1 To size_row Do Begin
WriteLn('row #', i);
For j := 1 To size_col Do Begin
Write('matrix[', j,',',i, ']: '); ReadLn(mx[j][i]);
End;
End;
End;

Procedure WriteMatrix(Var mx: TMatrix);
Var i, j: Integer;
Begin
For i := 1 To size_row Do Begin
For j := 1 To size_col Do Begin
Write(mx[j][i]:4);
End;
WriteLn
End;
End;

Var
max: TRow;
A, B: TMatrix;
i: integer;

begin
ReadMatrix(A);

B := A;
For i := 1 To size_col Do
max[i] := GetMax(A, i);
Bubble(B, max);

WriteMatrix(B);

end.

Больше полностью ничего не буду делать...
Все уже было написано во 2-ом посте, нужно было ТОЛЬКО собрать это в одну программу, неужели это НАСТОЛЬКО трудно?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10





Группа: Пользователи
Сообщений: 5
Пол: Женский

Репутация: -  0  +


огромное тебе спасибо,как будем расчитываться?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 1.09.2025 20:28
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name