Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Naginata
-65 / 0 / 0
Регистрация: 02.01.2014
Сообщений: 60
#1

Создание и обработка матрицы - C++

02.01.2014, 22:08. Просмотров 756. Ответов 12
Метки нет (Все метки)

Здравствуйте, я начинающий в программировании и в С++ в частности, вот столкнулся с проблемой, мне надо задать матрицу, выделить все элементы над главной диагональю и из них выбрать наибольшие по значению, записать их индексы в отдельный массив, где в одной строке будут индексы строк, в другой индесксы столпцов этих элементов. Я не прошу от вас сделать всё за меня, но у меня даже не получается вывести матрицу в консоль, пытался несколькими разными способами, даже ошибок не выдаёт, но делает не то что нужно, к примеру в последнем варианте кода выводит только первую строку матрицы, не знаю почему, а моя просьба состоит в следуйщем: помогите полноценно вывести матрицу, а затем обьясните как оформить остальное, я знаю общие сведения, но как к конктретной задаче подойти не знаю. Надеюсь я не требую слишком много. Зарание спасибо. P.S. Если по каким-либо причинам вы не можете мне обьяснить как подойти к этой конкретной задаче, то хотя бы дайте ссылку на источник где в доступной форме это изложенно.
Создание матрицы:
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
#include "stdafx.h"
#include "math.h"
#include "iostream"
#include "conio.h"
#include "stdlib.h"
 
using namespace std;
int main() 
{
    int i,j,n,m,a[4][4];
    cout<<"n="; cin>>n;
    cout<<"m="; cin>>m;
    cout<<"Input matrix A \n";
    for (i=0; i<n; i++)
    for (j=0; j<m; j++)
    cin>>a[i][j];
    cout<<"matrix A \n";
    for (i=0; i<n; i++)
  { for (j=0; j<m; j++)
    cout<<a[i][j]<<"\t";
    
    system ("pause");
    return 0;}
}
P.S. Библиотек так много, потому что наивно полагал, что это поможет программе работать так, как я хотел.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.01.2014, 22:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Создание и обработка матрицы (C++):

Создание и обработка списков - C++
Даны натуральное число n, действительные числа а1,…, a2n. Получить: a1*a2n+a2*a2n-1+an*an+1. Написать программу на С++

СОЗДАНИе И ОБРАБОТКа ФАЙЛОВ - C++
Информация о сотрудниках фирмы включает: Ф.И.О., табельный номер, количество проработанных часов за месяц, почасовой тариф. Рабочее время...

Создание и обработка файлов - C++
В массиве целых чисел M (14) найти среднее арифметическое всех четных элементов, стоящих на четных местах. Вывести на экран массив и...

Создание и обработка файлов - C++
1. Составить программу, которая создает файл и записывает в него 5 введённых пользователем целых чисел. Причем каждое число должно...

Создание и обработка файлов в С - C++
Информация об участниках соревнований содержит: - Ф.И.О. игрока; - игровой номер; - возраст; - рост; - вес. Вывести информацию...

Создание и обработка файлов в С - C++
Для участия в конкурсе исполнителей необходимо заполнить анкету с данными: -Ф.И.О; -год рождения; -название страны; -класс...

12
MicM
822 / 480 / 90
Регистрация: 29.12.2009
Сообщений: 1,097
Завершенные тесты: 1
02.01.2014, 22:32 #2
Цитата Сообщение от Naginata Посмотреть сообщение
помогите полноценно вывести матрицу
C++
1
2
3
4
5
6
for (int i=0; i<n; i++)
{
    for (int j=0; j<m; j++)
        cout <<a[i][j] <<' ';
    cout <<'\n';
}
Добавлено через 3 минуты
Цитата Сообщение от Naginata Посмотреть сообщение
выделить все элементы над главной диагональю
C++
1
2
3
for (int i=0; i<n-1; i++)
    for (int j=i+1; j<m; j++)
        /*...*/
1
Naginata
-65 / 0 / 0
Регистрация: 02.01.2014
Сообщений: 60
03.01.2014, 01:10  [ТС] #3
Цитата Сообщение от MicM Посмотреть сообщение
C++
1
2
3
4
5
6
for (int i=0; i<n; i++)
{
    for (int j=0; j<m; j++)
        cout <<a[i][j] <<' ';
    cout <<'\n';
}
Добавлено через 3 минуты

C++
1
2
3
for (int i=0; i<n-1; i++)
    for (int j=i+1; j<m; j++)
        /*...*/
Цитата Сообщение от MicM Посмотреть сообщение
C++
1
2
3
4
for (int i=0; i<n; i++) 
{ for (int j=0; j<m; j++) 
cout <<a[i][j] <<' '; 
cout <<'\n'; }
Спасибо это сработало.
Цитата Сообщение от MicM Посмотреть сообщение
C++
1
2
3
for (int i=0; i<n-1; i++) 
for (int j=i+1; j<m; j++) 
/*...*/
А вот это во время выведения в консоль, просто повторяет сообщение "Для продолжения нажмите любую клавишу." P.S. Хотя делает это три раза как количество элементов над главной диагональю, может я не туда вставил кусок кода?
Вот как выглядит код после подставления кусков вашего кода.
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
#include "stdafx.h"
#include "math.h"
#include "iostream"
#include "conio.h"
#include "stdlib.h"
 
    using namespace std;
    int main() 
{   int i,j,n,m,a[4][4];
    cout<<"n="; cin>>n;
    cout<<"m="; cin>>m;
    cout<<"Input matrix A \n";
    for (i=0; i<n; i++)
    for (j=0; j<m; j++)
    cin>>a[i][j];
    for (int i=0; i<n; i++)
{   for (int j=0; j<m; j++)
    cout <<a[i][j] <<' ';
    cout <<'\n';
}   for (int i=0; i<n-1; i++)
    for (int j=i+1; j<m; j++)
        /*...*/
    system ("pause");
    return 0;
}
0
Ev_Hyper
Заблокирован
03.01.2014, 01:20 #4
Цитата Сообщение от Naginata Посмотреть сообщение
А вот это во время выведения в консоль, просто повторяет сообщение "Для продолжения нажмите любую клавишу."
вы все правильно сделали, но вот под этой строчкой:
Цитата Сообщение от Naginata Посмотреть сообщение
/*...*/
имелось ввиду ваша реализация остальной части программы

А "Для продолжения нажмите любую клавишу." появляется потому, что
C++
1
system ("pause");
находится в цикле.
1
Naginata
-65 / 0 / 0
Регистрация: 02.01.2014
Сообщений: 60
03.01.2014, 10:27  [ТС] #5
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
имелось ввиду ваша реализация остальной части программы
А "Для продолжения нажмите любую клавишу." появляется потому, что
system ("pause");
находится в цикле.
Точно, спасибо, наверное просто устал.

Добавлено через 2 часа 42 минуты
Скажите пожалуйста, как взять индекс полученного элемента и перенести его в другой массив где в одной строке было бы значение строки, а в другой значение столпца, к примеру максимальный элемент 7, координаты этого элемента: вторая строка, первый столбец, так вот, надо что бы в другом массиве на одной строке было только 2-вторая строка, а на другой 1-первый столбец. С остальным разобрался. Зарание спасибо.
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
#include "stdafx.h"
#include "math.h"
#include "iostream"
#include "conio.h"
#include "stdlib.h"
 
    using namespace std;
    int main() 
{   int i,j,n,m,a[4][4],max;
    
    cout<<"n="; cin>>n;
    cout<<"m="; cin>>m;
    cout<<"Input matrix A \n";
    for (i=0; i<n; i++)
    for (j=0; j<m; j++)
    cin>>a[i][j];
    for (int i=0; i<n; i++)
{   for (int j=0; j<m; j++)
    cout <<a[i][j] <<' ';
    cout <<'\n';
}   {for (int i=0; i<n-1; i++)
    for (int j=i+1; j<m; j++)
        /*...*/
    max = a[i][j];
    cout << max << endl;
    }
    system ("pause");
    return 0;
}
Добавлено через 6 часов 19 минут
Немного изменил код, только почему то вместо индекса элемента выдаёт его уникальное имя в двоичной системе как изменить что бы выдавал именно индекс элемента в массиве?
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
#include "stdafx.h"
#include "math.h"
#include "iostream"
#include "conio.h"
#include "stdlib.h"
 
    using namespace std;
    int main() 
{   int e,j,n,m,a[4][4],max;
    
    cout<<"n="; cin>>n;
    cout<<"m="; cin>>m;
    cout<<"Input matrix A \n";
    for (e=0; e<n; e++)
    for (j=0; j<m; j++)
    cin>>a[e][j];
    for (int e=0; e<n; e++)
{   for (int j=0; j<m; j++)
    cout <<a[e][j] <<' ';
    cout <<'\n';
}   {for (int e=0; e<n-1; e++)
    for (int j=e+1; j<m; j++)
        /*...*/
    max = a[e][j];
    cout << max <<endl;}
    {int arr [1][1];
    a[e][j] = arr[1][1];
    cout << arr[e] << endl;
    cout << arr[j] << endl;}
    system ("pause");
    return 0;
}
0
Ev_Hyper
Заблокирован
03.01.2014, 17:47 #6
Для начала у вас скобки в программе поставлены неправильно.

C++
1
int arr [1][1];
вы хотите сюда записать индексы максимума?

C++
1
a[e][j] = arr[1][1];
что вы хотите этим сделать?

PHP
1
2
cout << arr[e] << endl;
 cout << arr[j] << endl;}
а как это понимать?
1
Naginata
-65 / 0 / 0
Регистрация: 02.01.2014
Сообщений: 60
03.01.2014, 22:28  [ТС] #7
C++
1
int arr [1][1];
Да.
C++
1
a[e][j] = arr[1][1];
Хотел присвоить значение индекса е строке нового массива, а индекс j столпца.
C++
1
2
cout << arr[e] << endl;
 cout << arr[j] << endl;}
Думал вывести в отдельных строках е и j.
0
Ev_Hyper
Заблокирован
03.01.2014, 22:32 #8
Цитата Сообщение от Naginata Посмотреть сообщение
Думал вывести в отдельных строках е и j.
так делать нельзя

Цитата Сообщение от Naginata Посмотреть сообщение
Да.
а зачем вам массив, можно просто две переменные использовать.

Цитата Сообщение от Naginata Посмотреть сообщение
Хотел присвоить значение индекса е строке нового массива, а индекс j столпца.
для этого в цикле сохраняйте e,j
1
Naginata
-65 / 0 / 0
Регистрация: 02.01.2014
Сообщений: 60
03.01.2014, 22:38  [ТС] #9
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
для этого в цикле сохраняйте e,j
Вот это, не понял, можно на примере?
0
Ev_Hyper
Заблокирован
03.01.2014, 22:40 #10
Примерно вот так:
C++
1
2
3
4
5
6
7
8
9
int str=0,stl=1;
for (int e=0; e<n-1; e++){
for (int j=e+1; j<m; j++)
if(max<a[e][j]){
    max = a[e][j];
    str=e;
    stl=j;
    }
}
1
Naginata
-65 / 0 / 0
Регистрация: 02.01.2014
Сообщений: 60
03.01.2014, 22:56  [ТС] #11
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
Примерно вот так:
C++
1
2
3
4
5
6
7
8
9
int str=0,stl=1;
for (int e=0; e<n-1; e++){
for (int j=e+1; j<m; j++)
if(max<a[e][j]){
 max = a[e][j];
 str=e;
 stl=j;
 }
}
Вставил ваш кусок кода, теперь после выведения максимального элемента, ничего не происходит (не выводится индекс максимального элемента), что я делаю не так?
0
Ev_Hyper
Заблокирован
04.01.2014, 11:39 #12
Naginata, вы наверное где-то ошиблись с выводом, вот так попробуйте:
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
     int main() 
{  
    int e,j,n,m,a[10][10],max;
    
    cout<<"n="; cin>>n;
    cout<<"m="; cin>>m;
    cout<<"Input matrix A \n";
    for (e=0; e<n; e++)
    for (j=0; j<m; j++)
    cin>>a[e][j];
    for (int e=0; e<n; e++){
    for (int j=0; j<m; j++)
    cout <<a[e][j] <<' ';
    cout <<'\n';
    }   
    max=a[0][1];
    int str=0,stl=1;
    for (int e=0; e<n-1; e++){
    for (int j=e+1; j<m; j++)
    if(max<a[e][j]){
        max = a[e][j];
        str=e;
        stl=j;
    }
    }
    cout << max <<" "<<str<<" "<<stl<<endl;
    system ("pause");
    return 0;
}
1
Naginata
-65 / 0 / 0
Регистрация: 02.01.2014
Сообщений: 60
08.01.2014, 23:40  [ТС] #13
Спасибо всем, кто участвовал, вышло в итоге с вашей помощью и помощью знакомого вот это.
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
#include "stdafx.h"
#include "math.h"
#include "iostream"
#include "conio.h"
#include "stdlib.h"
 
using namespace std;
 
   int main() 
{  int i,j,n,m,a[4][4],max;
    int mas[2][16];
    cout<<"n="; cin>>n;
    cout<<"m="; cin>>m;
    cout<<"Input matrix A \n";
    for (i=0; i<n; i++)
    for (j=0; j<m; j++)
    cin>>a[i][j];
    for ( i=0; i<n; i++)
{  for ( j=0; j<m; j++)
    cout <<a[i][j] <<' ';
    cout <<'\n';}  
     int k=0;
     max=a[0][1];
     for (i=0; i<n-1;i++) 
{   for (j=i+1; j<m;j++)
{   if (max<a[i][j])
{   max=a[i][j];
     k=0;
     for (int q=0; q<n-1;q++) 
{   for (int w=q+1; w<m;w++)
{   if (max==a[q][w])
{   mas[0][k]=q+1;
     mas[1][k]=w+1;
     k++;
     cout << max << endl;
     }
    }
   }
  }
 }
}
    for (i=0; i<2;i++)
{   for (j=0; j<k;j++)
{   cout << mas[i][j] << " ";
  } cout << endl;
 }  system ("pause");
}
0
08.01.2014, 23:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.01.2014, 23:40
Привет! Вот еще темы с ответами:

Создание и обработка одномерного массива - C++
Очень надеюсь на помощь. Преподаватель толком нам ничего не объясняет, а задания дает. У меня возникают трудности с созданием массива....

Создание и обработка динамического массива - C++
Порядок выполнения работы 1. Ввести размер массива; 2.Сформировать массив с помощью операции new или библиотечных функций malloc...

Создание и обработка двоичного файла - C++
Задание: Создать файл с информацией о клиентах банка: ФИО, номер счета, принято вклад, выдано вклад, остаток,дата проведения операции....

Создание и обработка данных в файле - C++
Составить две отдельных функции по частям А и Б: Функция А должна создавать файл, содержащий данные. Функция В должна обрабатывать...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.