Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Матрица, Транспонирование матрицы с использованием процедуры.

Автор: Credo 24.11.2010 19:36

Помогите.
Описать процедуру Transp(A,m), выполняющую транспонирование квадратной вещественной матрицы А порядка М. Двумерный массив А - входной и выходной параметр, М-входной параметр. Использовать эту процедуру для транспонирование данной матрицы А порядка М.

no1.gif Матрицу незнаю совсем, можете привести пример для данной задачи.

Автор: TarasBer 24.11.2010 19:48

> Матрицу незнаю совсем

var a: array [0 .. m-1, 0 .. m-1] of extended;

вот тебе матрица

Автор: Credo 24.11.2010 19:57

Цитата(TarasBer @ 24.11.2010 15:48) *

> Матрицу незнаю совсем

var a: array [0 .. m-1, 0 .. m-1] of extended;

вот тебе матрица

а это ясно, мне бы пример для данной задачи)) можно?

Автор: мисс_граффити 24.11.2010 20:05

Транспонировать - значит, каждый элемент [i,j] поменять местами с элементом [j,i].

Автор: TarasBer 24.11.2010 20:07

Кстати, почему в названии темы нету ни слова "транспонирование", ни слова "матрица"?

Автор: Credo 24.11.2010 20:17

Цитата
Транспонировать - значит, каждый элемент [i,j] поменять местами с элементом [j,i].

Спасибо, постораюсь чтот сделать.

Цитата
Кстати, почему в названии темы нету ни слова "транспонирование", ни слова "матрица"?

Ок, буду знать

Автор: TarasBer 24.11.2010 20:19

> Ок, буду знать

Ну и? Отредактируй же название темы.

Автор: Credo 24.11.2010 20:41

Цитата
Ну и? Отредактируй же название темы.

cool.gif сделал

Автор: Credo 26.11.2010 2:54

У меня куча ошибок. помогите исправьте подскажите.

program proc;
uses crt;
const n=5;
type
matrix=array [0..n-1,0..n-1] of extended;

{---------------------------------------------------------------------------}

procedure vvod(var a:matrix; n:byte);
var
i,j:byte;
BEGIN
writeln('Исходная матрица: ');
for i:=1 to n do
a[i]:=random(n);
for j:=1 to n do
a[j]:=random(n);
write(a[i,j]);

{---------------------------------------------------------------------------}

Procedure Transp(var a:matrix; n:byte);
Var
i,j:byte;
BEGIN
for i:=1 to n do
begin
for j:=1 to n do
a[j,i]:=a[i,j];
End;
writeln;

{---------------------------------------------------------------------------}

begin

clrscr;
vvod(matrix);
transp(matrix);
end.


Изображение

Автор: Unconnected 26.11.2010 3:31

А у тебя там end-ов не хватает, посмотри внимательно.

Автор: Credo 26.11.2010 3:37

Да, не компилируется. где я еще ошибся ((

Автор: volvo 26.11.2010 3:54

Да много где. У тебя матрица - два измерения, а ты заполняешь ее по одному?

procedure vvod(var a:matrix; n:byte);
var
i, j: byte;
BEGIN
writeln('Исходная матрица: ');
for i:=0 to n-1 do
for j:=0 to n-1 do { раз написал, что индексы от 0 (кому это надо - непонятно) }
begin
a[i, j]:=random(n); { <--- Вот оно, правильное обращение к элементу... }
write(a[i,j]);
end;
end;

Аналогично с индексами исправляй в другой процедуре.

И еще: ты не боишься, что перенесешь ДВАЖДЫ каждый элемент, и в итоге матрица останется прежней? Все-таки надо как-то ограничить цикл, чтоб этого не произошло...

Автор: Credo 26.11.2010 15:12

Цитата
У меня куча ошибок

Цитата
Да много где

Знаю smile.gif

Цитата
Аналогично с индексами исправляй в другой процедуре.

И еще: ты не боишься, что перенесешь ДВАЖДЫ каждый элемент, и в итоге матрица останется прежней? Все-таки надо как-то ограничить цикл, чтоб этого не произошло...

Спасибо вам, буду разбиратся.