Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.12.2009, 17:59   #1
AndyShafl
Новичок
Джуниор
 
Регистрация: 22.12.2009
Сообщений: 7
По умолчанию Преобразование матрицы. (транспонирование)

Выполнить следующее преобразование с квадратной матрицей: B= B^T (транспонировать).


Сие чудо нужно сделать в консольке... сам разобраться немогу... не усвоил процедуры (а сделать нужно именно применив таковые)
Заранее спасибо за помощь...
AndyShafl вне форума Ответить с цитированием
Старый 22.12.2009, 18:07   #2
RoS
Форумчанин
 
Аватар для RoS
 
Регистрация: 13.12.2009
Сообщений: 272
По умолчанию

Транспонирование - запись i-ой строки в j-ый столбец, т.е.
Код:
int A[MAX][MAX]; //исходная
int T[MAX][MAX]l; //транспонированная

for (i=0;i<MAX;i++)
for (j=0;j<MAX;j++)
T[j][i]=A[i][j];
Ну или как-то так
Если я помог вам - порадуйте меня, нажмите на весы слева
RoS вне форума Ответить с цитированием
Старый 22.12.2009, 18:33   #3
AndyShafl
Новичок
Джуниор
 
Регистрация: 22.12.2009
Сообщений: 7
По умолчанию

Ну, нужно в delphi как бы, обязательным условием является процедура, как описал, сам непонял тему процедур, простенькую матрицу и ее транспонированный аналог я делал, но препод заявил, что задание требует процедур.
Все равно спасибо, что откликнулся)
AndyShafl вне форума Ответить с цитированием
Старый 22.12.2009, 19:17   #4
RoS
Форумчанин
 
Аватар для RoS
 
Регистрация: 13.12.2009
Сообщений: 272
По умолчанию

Цитата:
Сообщение от AndyShafl Посмотреть сообщение
Ну, нужно в delphi как бы, обязательным условием является процедура, как описал, сам непонял тему процедур, простенькую матрицу и ее транспонированный аналог я делал, но препод заявил, что задание требует процедур.
Все равно спасибо, что откликнулся)
Если честно - я не знаю, как писать процедуры (функции) на делфи, но вот этот блок тебе нужно обособить, передавать в него массив исходный, и менять его в функции, либо возвращать измененную матрицу!
Если я помог вам - порадуйте меня, нажмите на весы слева
RoS вне форума Ответить с цитированием
Старый 23.12.2009, 09:39   #5
AndyShafl
Новичок
Джуниор
 
Регистрация: 22.12.2009
Сообщений: 7
По умолчанию

Еще актуально... немогу разобраться с процедурами.
AndyShafl вне форума Ответить с цитированием
Старый 23.12.2009, 10:50   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Код:
const ArraySize = 10;
type MyArray = array[1..ArraySize,1..ArraySize] of integer;

procedure Transpose( var B,T : MyArray);
var i,j : integer;
begin
  // а вот, собственно, транспонирование
  for I := 1 to ArraySize do
    for J := 1 to ArraySize do
       T[J,I] := B[I,J];

end;
...

Последний раз редактировалось Serge_Bliznykov; 23.12.2009 в 10:53.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.12.2009, 14:58   #7
AndyShafl
Новичок
Джуниор
 
Регистрация: 22.12.2009
Сообщений: 7
По умолчанию

Код:
const ArraySize = 10;
type MyArray = array[1..ArraySize,1..ArraySize] of integer;

procedure Transpose(var B,T:MyArray);
var i,j : integer;
begin
  // à âîò, ñîáñòâåííî, òðàíñïîíèðîâàíèå
  for I := 1 to ArraySize do
    for J := 1 to ArraySize do
       T[J,I] := B[I,J];

end;
procedure vivod;
var i,j:integer;
begin
write('T[',J,',',i,']=');
writeln('=====================================');
writeln('B[',i,',',j,']=');
end;
begin
transpose(B,T);
vivod;
end;
end.
руки кривые, чего тут взять, ничего не получается.
AndyShafl вне форума Ответить с цитированием
Старый 23.12.2009, 15:47   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1) в начале Вы забыли описать переменные типа МояМатрица:
Код:
var
  B,T : MyArray;
кстати, их имена АБСОЛЮТНО не зависят от имён формальных переменных (параметров, которые использовались при описании процедур/функций...
например,
процедура
procedure Transpose(var B,T:MyArray);
...
перед главным begin описание переменных:
var
MassivSrc, MassivResult : MyArray;
begin
..
вызов процедуры:
transpose(MassivSrc, MassivResult);


2) А КТО, по Вашему исходный массив заполнит?!?
Это ОБЯЗАТЕЛЬНО нужно сделать!
Можно заставить вводить элементы пользователя (правда 100 чисел ввести - занятие для сильноусидчивых!!)
либо, ЛУЧШЕ - заполнить случайными числами..
например, так:
Код:
procedure InitArray(var A:MyArray);
var i,j : integer;
begin
  for I := 1 to ArraySize do
    for J := 1 to ArraySize do
       A[I,J] := random(100);
end;

var B,T:MyArray;
begin
   Randomize;
   InitArray(B);
   vivod(B);
   transpose(B,T);
   vivod(T);
   writeLn('pause. For continue press Enter');
   readln;
end.
3) процедура vivod неверна!
там БРЕД внутри описан...
похоже, что Вы вообще не понимаете, что такое матрица, для чего нужно два вложенных цикла (по i и j) как Вы сдавать работу собираетесь!?! ;(

4) и последнее замечание.
про процедуру vivod (когда Вы сделаете вывод нормально!)
Обратите внимание. если Вы уж делаете на процедурах программу, так позаботесь о том, чтобы НЕ ИСПОЛЬЗОВАТЬ ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ (все необходимые в работе функции/процедуры переменные должны или описываться внутри (и тогда они называются локальные переменные), либо передаваться в эту процедуру/функцию как параметры!! и никак иначе! Использование глобальных переменных зло! (и лично я бы снизил за это оценку!)

Последний раз редактировалось Serge_Bliznykov; 23.12.2009 в 15:50.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.12.2009, 16:17   #9
AndyShafl
Новичок
Джуниор
 
Регистрация: 22.12.2009
Сообщений: 7
По умолчанию

Спасибо, буду разбираться.
AndyShafl вне форума Ответить с цитированием
Старый 23.12.2009, 17:25   #10
AndyShafl
Новичок
Джуниор
 
Регистрация: 22.12.2009
Сообщений: 7
По умолчанию

Код:
program GJworkcomplete;

{$APPTYPE CONSOLE}

uses
  SysUtils;

const ArraySize = 5;
type MyArray = array[1..ArraySize,1..ArraySize] of integer;
var
  B,T : MyArray;
   procedure InitArray(var B:MyArray);
var i,j:integer;
begin
 randomize;
     for i:=1 to 5 do
     for j:=1 to 5 do
     B[i,j]:=random(8);
    begin
     writeln;
     for i:=1 to 5 do
    begin
     writeln;
     for j:=1 to 5 do
write(B[i,j],' ');
end;
     end;
     end;

procedure Transpose( var B: MyArray);
var i,j : integer;
begin
   writeln;
     for j:=1 to 5 do
   begin
     writeln;
     for i:=1 to 5 do
     write(B[i,j],' ');
   end;
     end;

begin
Randomize;
  InitArray(B);
    transpose(B);
      writeln;
     writeln;
  writeLn('pause. For continue press Enter');
   readln;
end.
вот что получилось, может где нетак чего сделал, но работает так как и требовалось.

Serge_Bliznykov
Спасибо, без тебя бы я не вник в процедуры, объяснил, лучше моего учителя.
AndyShafl вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
DevС++ Транспонирование матрицы. Проблема Shoberg Помощь студентам 4 25.05.2009 05:46
PHP. Транспонирование матрицы POPOV Помощь студентам 2 04.02.2009 01:08
транспонирование квадратной матрицы 777UFO777 Общие вопросы Delphi 1 04.12.2008 19:31
Транспонирование матрицы на i8080 RANDOM223 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 29.04.2008 17:33