Форум программистов, компьютерный форум CyberForum.ru

Транспонирование матрицы. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.86
Володик
0 / 0 / 0
Регистрация: 24.04.2012
Сообщений: 14
27.04.2012, 00:04     Транспонирование матрицы. #1
Помогите с простенькой задачей!! ПОЖАЛУЙСТА

Нужно написать программу на С++, которая осуществляет:

1. Консольный ввод/вывод целочисленного массива размером 5*5.
2. Транспонирование матрицы относительно побочной диагонали. Вывод
на экран компьютера полученного массива.
3.Определение количества столбцов, среднее арифметическое элементов
которых меньше задаваемой вводом величины.

Больше всего проблемы с транспонированием матрицы по побочной диагонали!

Вот что у меня получилось по транспонированию, после ввода массива и вывода на экран массив не транспонируется, ошибка в коде, помогите исправить!

C++
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
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
#include <conio.h>
 
using namespace std;
int main ()
{
    int **A, n, i,j;
    cout<<"n: "<< endl;
    cin>>n;
    A=new int*[n];
 
    for(i=0; i<n; i++)
       A[i]=new int[n];
    cout<<"vvedite elementbl: "<< endl;
    for(i=0; i<n; i++)
       for(j=0; j<n; j++)
       {
          cout<<"["<<i<<"]["<<j<<"]= ";
          cin>>A[i][j];
       }
        cout<<"Massiv A"<<endl;
    for(i=0; i<n; i++)
        {
       for(j=0; j<n; j++)
          cout<<A[i][j]<<" ";
          cout<<endl;
        }
    cout<<"Transponirovanie po pobochnou diagonali:"<<endl;
    for(i=0; i<n; i++)
    {
       for(j=0; j<n; j++)
           cout<<A[n-1-j][n-1-i]<<" ";
       cout<<endl;
    }
    cout<<endl; 
    return 0; 
getch();
}



А вот эта программа по нахождению, средне арифметического!!!


C++
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
26
27
28
#include <iostream>
#include <conio.h>   
 
using namespace std;
int main(){
int n,m,i,j,NumberOfCols=0,sum;
float value;
cout << "\nEnter number of rows: ";cin >> n;
cout << "Enter number of cols: ";cin >> m;
cout<<endl; 
cout << "Enter a value: ";cin >> value;
cout<<endl; 
int **p;
p = new int*[m];
for (i=0;i<m;i++){
  sum=0;
  p[i]=new int[n];
  for (j=0;j<n;j++){
    cout << "Enter a[" << i+1  << "," << j+1 << "]=";cin >> p[i][j];
    sum+=p[i][j];}
  if (sum/n<value) NumberOfCols++;
  };
cout << "\nNumber of cols with average arithmetic less than " << value << \
" = " << NumberOfCols;
cout<<endl; 
getch();
delete[]p;
}

ПОМОГИТЕ ИСПРАВИТЬ ПЕРВУЮ, И СОЕДЕНИТЬ ЭТИ ПРОГРАММЫ В ОДНУ!! ЗАРАНЕЕ СПАСИБО!!!

 Комментарий модератора 
Запрещено создавать темы с бессмысленными названиями вроде "Помогите!", "Вопрос" и т.п.
Запрещено создавать темы с множеством вопросов во всех разделах, кроме разделов платных услуг. Один вопрос - одна тема.
Правила форума.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.04.2012, 00:04     Транспонирование матрицы.
Посмотрите здесь:

Транспонирование матрицы C++
Транспонирование матрицы C++
C++ транспонирование матрицы
C++ Транспонирование матрицы
C++ Транспонирование матрицы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MuroLike
2 / 2 / 0
Регистрация: 24.04.2012
Сообщений: 14
27.04.2012, 01:06     Транспонирование матрицы. #2
C++
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include <iostream>
#include <conio.h>
using namespace std;
int main ()
{
    int **A,**B, n, i,j;
    cout<<"n: "<< endl;
    cin>>n;
    A=new int*[n];
    B=new int*[n];
    for(i=0; i<n; i++)
    {
       A[i]=new int[n];
       B[i]=new int[n];
    }
    cout<<"vvedite elementbl: "<< endl;
    for(i=0; i<n; i++)
    {
       for(j=0; j<n; j++)
       {
          cout<<"["<<i<<"]["<<j<<"]= ";
          cin>>A[i][j];
       }
    }
     for(i=0;i<n;i++)
     {
        for(j=0;j<n;j++)
        {
         B[i][j]=A[i][j];
        }
     }
        cout<<"Massiv A"<<endl;
    for(i=0; i<n; i++)
        {
       for(j=0; j<n; j++)
       {
          cout<<A[i][j]<<" ";
          cout<<endl;
        }
       }
    cout<<"Transponirovanie po pobochnou diagonali:"<<endl;
    for(i=0; i<n; i++)
    {
       for(j=0; j<n; j++)
           cout<<A[n-1-j][n-1-i]<<" ";
       cout<<endl;
    }
    cout<<endl;
    int value,sum;
    cout <<"Enter the value=";
    cin>>value;
    sum=0;
    for( i = 0 ; i < n ; i++)
    {
     for( j = 0 ; j < n ; j++)
     {
        sum+=B[i][j];
     }
     if((sum/n)<value)
     {
        cout<<"Col["<<i<<"] less then value"<<endl;
        sum=0;
     }
    }
getch();
}
Массив B создал, ибо не знаю тебе до или после транспонирования проверял на Builder, работает.
1 часть не трогал ибо работает или возможно я не понял, что именно ты хочешь от этой части.
Володик
0 / 0 / 0
Регистрация: 24.04.2012
Сообщений: 14
27.04.2012, 01:13  [ТС]     Транспонирование матрицы. #3
Супер!! Спасибо большое, вот только ожешь преред транспонированием сделать обычный вывод массива на экран?? а после транспонировать?)

Добавлено через 2 минуты
И ещё среднее арифметическое, странно работает! Она выводит просто количество строк
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4925 / 2668 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
27.04.2012, 01:14     Транспонирование матрицы. #4
3.
C++
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
26
27
28
29
30
31
#include <iostream>
#include <cstdlib>
#include <ctime>
 
int main()
{
    srand( time(NULL) );
    const int N = 5;
    int A[N][N], count = 0;
    double average, x;
    for (int i=0; i < N; i++)
    {
        for (int j=0; j < N; j++)
        {
            A[i][j] = rand()%10;
            std::cout<< A[i][j]<< " ";
        }
        std::cout<< std::endl;
    }
    std::cout<< "Enter value: ";
    std::cin>> x;
    for (int j=0; j < N; j++)
    {
        average = 0;
        for (int i=0; i < N; i++)
            average += A[i][j];
        if (average/N < x) count++;
    }
    std::cout<< "Number of columns: "<< count;
    return 0;   
}
MuroLike
2 / 2 / 0
Регистрация: 24.04.2012
Сообщений: 14
27.04.2012, 01:21     Транспонирование матрицы. #5
Так у тебя и так перед транспонирование выводится обычный массив, а потом уже результат.
C++
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <iostream>
#include <conio.h>
using namespace std;
int main ()
{
    int **A,**B, n, i,j;
    cout<<"n: "<< endl;
    cin>>n;
    A=new int*[n];
    B=new int*[n];
    for(i=0; i<n; i++)
    {
       A[i]=new int[n];
       B[i]=new int[n];
    }
    cout<<"vvedite elementbl: "<< endl;
    for(i=0; i<n; i++)
    {
       for(j=0; j<n; j++)
       {
          cout<<"["<<i<<"]["<<j<<"]= ";
          cin>>A[i][j];
       }
    }
     for(i=0;i<n;i++)
     {
        for(j=0;j<n;j++)
        {
         B[i][j]=A[i][j];
        }
     }
        cout<<"Massiv A"<<endl;
    for(i=0; i<n; i++)
        {
       for(j=0; j<n; j++)
       {
          cout<<A[i][j]<<" ";
          cout<<endl;
        }
       }
    cout<<"Transponirovanie po pobochnou diagonali:"<<endl;
    for(i=0; i<n; i++)
    {
       for(j=0; j<n; j++)
           cout<<A[n-1-j][n-1-i]<<" ";
       cout<<endl;
    }
    cout<<endl;
    int value,sum,cols;
    cols=0;
    cout <<"Enter the value=";
    cin>>value;
    sum=0;
    for( i = 0 ; i < n ; i++)
    {
     for( j = 0 ; j < n ; j++)
     {
        sum+=B[i][j];
     }
     if((sum/n)<value)
     {
        cols++;
        sum=0;
     }
    }
    cout<<cols<<" < value ";
getch();
}
Володик
0 / 0 / 0
Регистрация: 24.04.2012
Сообщений: 14
27.04.2012, 01:25  [ТС]     Транспонирование матрицы. #6
Спасибо! Но я не совсем пойму, как она работает, точнее у меня она не работает, результата нет!!!
И если вы сможете исправить ошибку, помогите пожалуйста соединить её с основной программой!

Добавлено через 2 минуты
MuroLike, Спасибо большое, вот только сможешь преред транспонированием сделать обычный вывод массива на экран??

Добавлено через 10 секунд
Буду очень признателен!

Добавлено через 1 минуту
Массив выводится в виде строки, а не в виде матрицы, вот в чем проблема!
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4925 / 2668 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
27.04.2012, 01:25     Транспонирование матрицы. #7
Вот все вместе. Если необходимо именно получить транспонированную матрицу, тогда создайте массив B[N][N] в цикле пройдитесь и B[i][j] = A[j][i];
C++
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <iostream>
 
int main()
{
    const int N = 5;
    int A[N][N], count = 0;
    double average, x;
    // <<<<<<<<<<<< 1 >>>>>>>>>>>>
    for (int i=0; i < N; i++)
        for (int j=0; j < N; j++)
        {
            std::cout<< "Enter value: ";
            std::cin>> A[i][j];
        }
    // <<<<<<<<<<<< 2 >>>>>>>>>>>>
    std::cout<< "\nMatrix:\n";
    for (int i=0; i < N; i++)
    {
        for (int j=0; j < N; j++)
            std::cout<< A[i][j]<< " ";
        std::cout<< std::endl;
    }
    std::cout<< "\nTransposed:\n";
    for (int i=0; i < N; i++)
    {
        for (int j=0; j < N; j++)
            std::cout<< A[j][i]<< " ";
        std::cout<< std::endl;
    }
    // <<<<<<<<<<<< 3 >>>>>>>>>>>>
    std::cout<< "\nEnter value: ";
    std::cin>> x;
    for (int j=0; j < N; j++)
    {
        average = 0;
        for (int i=0; i < N; i++)
            average += A[i][j];
        if (average/N < x) count++;
    }
    std::cout<< "Number of columns: "<< count;
    return 0;   
}
Володик
0 / 0 / 0
Регистрация: 24.04.2012
Сообщений: 14
27.04.2012, 01:30  [ТС]     Транспонирование матрицы. #8
MrGluck Спасибо, но у меня почему то не хочет работать программа! Постоянно выводит на экран "Enter a value" Что можно сделать?

Добавлено через 51 секунду
Сморозил глупость!!! Спасибо)
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4925 / 2668 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
27.04.2012, 01:31     Транспонирование матрицы. #9
Цитата Сообщение от Володик Посмотреть сообщение
MrGluck Спасибо, но у меня почему то не хочет работать программа! Постоянно выводит на экран "Enter a value" Что можно сделать?
Можно сделать то, что она просит. Если б я написал "Press any key to continue", вы бы искали на клаве any key?
Введите значение элемента массива (пункт 1 задания).
Володик
0 / 0 / 0
Регистрация: 24.04.2012
Сообщений: 14
27.04.2012, 01:33  [ТС]     Транспонирование матрицы. #10
MrGluck Скажите пожалуйста, у меня исчезает экран после 3 пункта, в смысле после того как я ввёл заданную ??
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4925 / 2668 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
27.04.2012, 01:37     Транспонирование матрицы. #11
Цитата Сообщение от Володик Посмотреть сообщение
MrGluck Скажите пожалуйста, у меня исчезает экран после 3 пункта, в смысле после того как я ввёл заданную ??
Просто вы скорее всего работает под виндой, она закрывает консоль после выполнения, добавьте паузу.

C++
1
2
3
4
5
#include <conio.h>
...
    getch();
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.04.2012, 01:41     Транспонирование матрицы.
Еще ссылки по теме:

C++ Транспонирование матрицы
Транспонирование матрицы C++
C++ Транспонирование матрицы

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Володик
0 / 0 / 0
Регистрация: 24.04.2012
Сообщений: 14
27.04.2012, 01:41  [ТС]     Транспонирование матрицы. #12
MrGluck Вы меня спасли! Спасибо огромное
Yandex
Объявления
27.04.2012, 01:41     Транспонирование матрицы.
Ответ Создать тему
Опции темы

Текущее время: 03:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru