Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > С матрицами интересная задача


Автор: Япончик 12.11.2005, 23:23
Такая задача:
Произвести транспонирование целочисленной матрицы (ввод, вывод, транспонирование производить в отдельных функциях) и вывести номера строк, в которых значения элементов убывают, и номера столбцов, в которых они возрастают.

Автор: Pakshin A. S. 13.11.2005, 00:03
Модератор: укажите язык программирования, на котором желаете получить ответ. smile

Автор: darkart 13.11.2005, 01:12
Для Pascal:
Код

program Matrix2;
const
  n=3;{размерность матрицы}
type
  TMatrix=array[1..n,1..n] of integer;
var
  Matrix:TMatrix;
procedure InputMatrix(var Matrix:TMatrix);
{процедура ввода}
var
  i,j:integer;
begin
  for i:=1 to n do
  begin
    for j:=1 to n-1 do
      read(Matrix[i,j]);
    readln(Matrix[i,n]);
  end;
end;
procedure PrintMatrix(var Matrix:TMatrix);
{процедура вывода матрицы}
var
  i,j:integer;
begin
  for i:=1 to n do
  begin
    for j:=1 to n-1 do
      write(Matrix[i,j],' ');
    writeln(Matrix[i,n]);
  end;
end;
function Transposing(var Matrix:TMatrix):TMatrix;
{функция возращает транспонированную матрицу}
var
  i,j:integer;
begin
  for i:=1 to n do
    for j:=1 to n do
      Transposing[i,j]:=Matrix[j,i];
end;
procedure PrintDecreaseStrings(var Matrix:TMatrix);
{печать номеров убывающих строк}
var
  i,j:integer;
begin
  writeln('Numbers of a decrease strings:');
  for i:=1 to n do
  begin
    j:=1;
    while(j<n) and (Matrix[i,j]>Matrix[i,j+1]) do
      inc(j);
    if j=n then writeln(i);
  end;
end;
procedure PrintGrowColumns(var Matrix:TMatrix);
{печать номеров возрастающих столбцов}
var
  i,j:integer;
begin
  writeln('Numbers of a grow columns:');
  for j:=1 to n do
  begin
    i:=1;
    while(i<n) and (Matrix[i,j]<Matrix[i+1,j])do
      inc(i);
    if i=n then writeln(j);
  end;
end;
begin
  writeln('Please enter a matrix(',n,'x',n,'):');
  InputMatrix(Matrix);
  writeln('Source matrix:');
  PrintMatrix(Matrix);
  Matrix:=Transposing(Matrix);
  writeln('Transposed matrix:');
  PrintMatrix(Matrix);
  {вычисление идет для транспонированной матрицы}
  PrintGrowColumns(Matrix);
  PrintDecreaseStrings(Matrix);
  writeln('ok');
  readln;
end.


Автор: Япончик 13.11.2005, 02:00
извините, СИ++
smile

Автор: darkart 13.11.2005, 10:52
Вроде бы так:
Код

#include<iostream.h>
const int n=3;//размерность матрицы
void InputMatrix(int Matrix[n][n])
//ввод матрицы
{
    cout<<"Please enter a matrix("<<n<<"x"<<n<<")\n";
    for (int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            cin>>Matrix[i][j];
}
void PrintMatrix(int Matrix[n][n])
//печать матрицы
{
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n-1;j++)
            cout<<Matrix[i][j]<<" ";
        cout<<Matrix[i][n-1]<<"\n";
    }
}
void Transposing(int Matrix[n][n])
//транспонирование матрицы
{

    int i,j,TempMatrix[n][n];
    for(i=0;i<n;i++)
        for(j=0;j<n;j++)
            TempMatrix[i][j]=Matrix[j][i];
    for(i=0;i<n;i++)
        for(j=0;j<n;j++)
            Matrix[i][j]=TempMatrix[i][j];
}
void PrintGrowColumns(int Matrix[n][n])
//печать номеров возрастающих столбцов
{
    cout<<"Numbers of a grow columns:\n";
    for(int j=0;j<n;j++)
    {
        int i=0;
        while(i<n-1&&Matrix[i][j]<Matrix[i+1][j])i++;
        if(i==n-1)cout<<j+1<<"\n";
    }
}
void PrintDecreaseStrings(int Matrix[n][n])
//печать номеров убывающих строк
{
    cout<<"Numbers of a decrease strings:\n";
    for(int i=0;i<n;i++)
    {
        int j=0;
        while(j<n-1&&Matrix[i][j]>Matrix[i][j+1])j++;
        if(j==n-1)cout<<i+1<<"\n";
    }
}
int main()
{
    int Matrix[n][n];
    InputMatrix(Matrix);
    cout<<"Source matrix:\n";
    PrintMatrix(Matrix);
    Transposing(Matrix);
    cout<<"Transposed matrix:\n";
    PrintMatrix(Matrix);
                //вычисление для транспонированной матрицы
    PrintDecreaseStrings(Matrix);
    PrintGrowColumns(Matrix);
    return 0;
}

Автор: S.A.P. 13.11.2005, 11:07
Вот транспонирование без временной матрицы ( когда то задачу такую делал )
Код

    const int m = 5;
    int arr[m][m] = {{1, 2, 3, 4, 5},
                     {6, 7, 8, 9, 10},
                     {11,12,13,14,15},
                     {16,17,18,19,20},
                     {21,22,23,24,25}};
    
    int temp;
    
    for ( int i = 0; i < m; i++ )
        for (int  j = 0; i >= j; j++ ){
            temp = arr[i][j];
            arr[i][j] = arr[j][i];
            arr[j][i] = temp;
        }

Автор: St. Andrew 13.11.2005, 13:36
Цитата
С матрицами интересная задача

Задача просто завораживает своей неповторимой уникальностью. smile

Автор: Япончик 13.11.2005, 13:42
Цитата(St @ 13.11.2005, 13:36)
Цитата
С матрицами интересная задача

Задача просто завораживает своей неповторимой уникальностью. smile

smile ну кому как...

Автор: darkart 13.11.2005, 14:55
Цитата
Вот транспонирование без временной матрицы

smile Каюсь... smile Исправляюсь... smile Получите...
Код

void Transposing(int Matrix[n][n])
//транспонирование матрицы
{

    int i,j;
    for(i=0;i<n;i++)
        for(j=0;j<i;j++)
        {
            Matrix[i][j]=Matrix[i][j]+Matrix[j][i];
            Matrix[j][i]=Matrix[i][j]-Matrix[j][i];
            Matrix[i][j]=Matrix[i][j]-Matrix[j][i];
        }
}

Автор: Шпионка 12.12.2005, 14:41
smile Ребят , помогите пожалуйста решить задачку..очень срочно нужно на завтра ... чтобы получить упв!!! сразу заранее огромное спасибо
задача: составить программу написания транспонирования матрицы . основная программа должна содержать вывод только процедур.

ПОЖАЛУСТА!!!!!!не игнорируйте мой пост!... smile smile

Автор: S.A.P. 12.12.2005, 14:45
Объясни что такое
Цитата
вывод только процедур.


Добавлено @ 14:46
И какой язык (похоже паскаль smile ).

Автор: darkart 12.12.2005, 15:13
Вариант на паскаль(Pascal):
Код

program TrMatr;
const
  n=4;{размерность}
type
  TMatrix=array[1..n,1..n] of integer;
procedure InputMatrix(var Matrix:TMatrix);
{ввод матрицы}
var
  i,j:integer;
begin
  writeln('Please enter a matrix(',n,'x',n,'):');
  for i:=1 to n do
  begin
    for j:=1 to n-1 do
      read(Matrix[i,j]);
    readln(Matrix[i,n]);
  end;
end;
procedure PrintMatrix(var Matrix:TMatrix);
{печать матрицы}
var
  i,j:integer;
begin
  for i:=1 to n do
  begin
    for j:=1 to n-1 do
      write(Matrix[i,j],' ');
    writeln(Matrix[i,n]);
  end;
end;
procedure Transpossing(var Matrix:TMatrix);
{транспонирование матрицы}
var
  i,j:integer;
  tmp:integer;
begin
  for i:=1 to n do
    for j:=i+1 to n do
    begin
      tmp:=Matrix[i,j];
      Matrix[i,j]:=Matrix[j,i];
      Matrix[j,i]:=tmp;
    end;
end;
var
  Matrix:TMatrix;
begin
  InputMatrix(Matrix);
  writeln('Source matrix:');
  PrintMatrix(Matrix);
  Transpossing(Matrix);
  writeln('Matrix after transpossing:');
  PrintMatrix(Matrix);
  readln;
end.

Автор: sergejzr 12.12.2005, 15:32
Модератор: Название темы должно отражать ее суть!

Автор: шпионка 12.12.2005, 18:13
smile БОЖЕ МОЙ!!! спасибо спасибо спасибо спасибо спасибо спасибо спасибо спасибо спасибо спасибо спасибо спасибо спасибо спасибо спасибо спасибо спасибо спасибо спасибо спасибо спасибо спасибо спасибо спасибо спасибо спасибо спасибо спасибо
вы меня очень приочень выручили!!!!!!
ВЫ СУПЕР!!!!!!!!!!!!!!!!!!!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)