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

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

Войти
Регистрация
Восстановить пароль
 
apachan
13 / 13 / 2
Регистрация: 07.12.2010
Сообщений: 127
#1

Угловые элементы в матрице - C++

26.12.2010, 17:33. Просмотров 646. Ответов 9
Метки нет (Все метки)

В общем, суть такова, есть прога - в матрице в каждой строке найти минимальный элемент, затем среди них максимальный, вывести его индексы:

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
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
#include <stdio.h>
#if defined (_MSC_VER) && _MSC_VER <= 1200
#define for if (false) ; else for
#endif 
 
#define n 3
#define m 3
int main()
{int min,max,i_max,j_max,i,j;
    int matrix[n][m];
    srand (time (NULL));
    std::cout << "Matrix:\n";
    for ( i=0; i<n; i++) {
        for ( j=0; j<m; j++) {
            cin>>matrix[i][j];
            std::cout << std::endl; }}
       
        int str_min[n];
                                      
        for(int i=0;i<n;i++)
        {
                min=matrix[i][0];
                for(int j=0;j<m;j++)
                        if(matrix[i][j]<min)
                                min=matrix[i][j];
                str_min[i]=min;
        }
 
        max=str_min[0];
        for(int i=0;i<n;i++)
                if(str_min[i]>max)
                        max=str_min[i];
 
        
        for(int i=0;i<n;i++)
                for(int j=0;j<m;j++)
                        if (matrix[i][j]==max){
                                i_max=i;
                                j_max=j; }
 
                        printf("i : %d\n",i_max);
                        printf("j : %d\n",j_max); 
                        printf("Element : %d\n",matrix[i_max][j_max]);
        return 0;
}
Помогите вывести в довесок к всему вышеперечисленному является ли выбранный элемент угловым.
Например, матрица:
1 2 3
4 5 6
7 8 9

Ответ: "7", индексы: [2][0], является угловым.
И еще, как после ввода матрицы в этой проге вывести ее целиком, а то не получается что-то, туплю =/

Как решить задачу с помощью динамических массивов учитывая, что строки матрицы могут иметь различную длину?

Добавлено через 20 часов 4 минуты
Неужели никто не знает?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.12.2010, 17:33
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Угловые элементы в матрице (C++):

Поменять местами угловые элементы матрицы - C++
Здравствуйте. Помогите, пожалуйста, написать программу: Дана матрица размерностью n. Поменять в ней местами нижнее левое число с верхним...

В заданной матрице найти наибольший элемент и попарно перемножить элементы строки на элементы столбца - C++
В данной квадратной матрице найти наибольший элемент и попарно перемножить элементы строки, в котором он расположен, на элементы столбца, в...

дана целочисленная матрица A , размером а х м, найти в матрице первую строку, все элементы которой равны нолю, Умножить элементы столбца с таким же н - C++
#include &lt;iostream&gt; using namespace std; int main() { const int a = 5; const int m = 4;

Упорядочить элементы в матрице - C++
Есть матрица m*n. Упорядочить по возрастанию элементов строку с наибольшим произведением элементов. Помогите пожалуйста , не могу...

Заменить элементы в матрице - C++
Дана матрица 6*27, состоящая из 0 и 1. Заполненная случайным образом. Нужно сделать так что бы в каждом столбике было не больше 2 единиц. И...

Упорядочить элементы в целочисленной матрице - C++
Помогите разработать целочисленную матрицу n строк m-столбцев (1&lt;n&lt;=100) (1&lt;m&lt;=50) и упорядочить элементы матрици так чтобы, Разместить...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
valeriikozlov
Эксперт C++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
26.12.2010, 20:25 #2
Цитата Сообщение от apachan Посмотреть сообщение
является ли выбранный элемент угловым.
Для элемента matrix[i][j] (для прямоугольной матрицы) так:
C++
1
2
if((i==0 || i==n-1) && (j==0 || j==m-1))
// элемент является угловым
Цитата Сообщение от apachan Посмотреть сообщение
как после ввода матрицы в этой проге вывести ее целиком
C++
1
2
3
4
    for ( i=0; i<n; i++) {
        for ( j=0; j<m; j++) 
           cout<<matrix[i][j]<<" ";
                        cout << endl; }
Цитата Сообщение от apachan Посмотреть сообщение
Как решить задачу с помощью динамических массивов учитывая, что строки матрицы могут иметь различную длину?
Различную длинну строк матрицы можно задать например так (только придется завести еще один массив для хранения длин строк матрицы - в примере это массив a[]):
C++
1
2
3
4
5
6
7
8
9
10
11
12
int *a, **matrix, i, N, temp;
cout<<"Kol-vo strok N= ";
cin>>N;
matrix=new int*[N];
a=new int[N];
for(i=0; i<N; i++)
{
    cout<<"Dlina "<<i+1<<" stroki =";
    cin>>temp;
    matrix[i]=new int[temp];
    a[i]=temp;
}
Только не совсем понятно для чего Вам матрица со строками различной длины?
1
apachan
13 / 13 / 2
Регистрация: 07.12.2010
Сообщений: 127
26.12.2010, 21:52  [ТС] #3
Только не совсем понятно для чего Вам матрица со строками различной длины?
Мне незачем Задание такое. "Учесть, что строки двумерного массива могут иметь различную длину."

Что-то я сам запутался с дин. массивами, куда тогда код выше "приладить"?

C++
1
2
if((i==0 || i==n-1) && (j==0 || j==m-1))
// элемент является угловым
Хм, почему-то все равно не выводит, что "7" в в матрице 123456789 является угловым элементом, я поэтому и спросил совета, что у меня была такая же примерно мысля, но все равно не выводило того, что надо =/
0
valeriikozlov
Эксперт C++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
26.12.2010, 22:00 #4
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
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
#include <stdio.h>
#if defined (_MSC_VER) && _MSC_VER <= 1200
#define for if (false) ; else for
#endif 
 
#define n 3
#define m 3
int main()
{int min,max,i_max,j_max,i,j;
        int matrix[n][m];
    srand (time (NULL));
    std::cout << "Matrix:\n";
    for ( i=0; i<n; i++) {
        for ( j=0; j<m; j++) {
            cin>>matrix[i][j];
                        std::cout << std::endl; }}
       
        int str_min[n];
                                      
        for(int i=0;i<n;i++)
        {
                min=matrix[i][0];
                for(int j=0;j<m;j++)
                        if(matrix[i][j]<min)
                                min=matrix[i][j];
                str_min[i]=min;
        }
 
        max=str_min[0];
        for(int i=0;i<n;i++)
                if(str_min[i]>max)
                        max=str_min[i];
 
        
        for(int i=0;i<n;i++)
                for(int j=0;j<m;j++)
                        if (matrix[i][j]==max){
                                i_max=i;
                                j_max=j; }
 
                        printf("i : %d\n",i_max);
                        printf("j : %d\n",j_max); 
                        printf("Element : %d\n",matrix[i_max][j_max]);
                        if((i_max==0 || i_max==n-1) && (j_max==0 || j_max==m-1))
                              // вот здесь можете писать что элемент угловой
        return 0;
}
1
apachan
13 / 13 / 2
Регистрация: 07.12.2010
Сообщений: 127
26.12.2010, 22:09  [ТС] #5
C++
1
2
3
if((i_max==0 || i_max==n-1) && (j_max==0 || j_max==m-1))
                              printf("Da : %d\n"); 
                        else printf("Net %d");
Странно, но сейчас все работает, хотя до этого также вставил условие...


Так как быть с динамическим массивом?
0
valeriikozlov
Эксперт C++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
26.12.2010, 22:24 #6
Проверяйте:
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
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
#include <stdio.h>
#if defined (_MSC_VER) && _MSC_VER <= 1200
#define for if (false) ; else for
#endif 
 
int main()
{int min,max,i_max,j_max,i,j, n, temp;
        int **matrix, *a;
        std::cout<<"n= ";
        cin>>n;
        matrix=new int*[n];
        a=new int[n];
        for(i=0; i<n; i++)
        {
            std::cout<<"Dlina "<<i+1<<" stroki =";
            cin>>temp;
            matrix[i]=new int[temp];
            a[i]=temp;
        }
 
        
    srand (time (NULL));
    std::cout << "Matrix:\n";
    for ( i=0; i<n; i++) {
        for ( j=0; j<a[i]; j++) {
            cin>>matrix[i][j];
                        std::cout << std::endl; }}
       
        int *str_min=new int[n];
                                      
        for(int i=0;i<n;i++)
        {
                min=matrix[i][0];
                for(int j=0;j<a[i];j++)
                        if(matrix[i][j]<min)
                                min=matrix[i][j];
                str_min[i]=min;
        }
 
        max=str_min[0];
        for(int i=0;i<n;i++)
                if(str_min[i]>max)
                        max=str_min[i];
 
        
        for(int i=0;i<n;i++)
                for(int j=0;j<a[i];j++)
                        if (matrix[i][j]==max){
                                i_max=i;
                                j_max=j; }
 
                        printf("i : %d\n",i_max);
                        printf("j : %d\n",j_max); 
                        printf("Element : %d\n",matrix[i_max][j_max]);
                       // if((i_max==0 || i_max==n-1) && (j_max==0 || j_max==m-1)) теперь это здесь не пройдет
                              // вот здесь можете писать что элемент угловой
        return 0;
}
1
apachan
13 / 13 / 2
Регистрация: 07.12.2010
Сообщений: 127
26.12.2010, 23:39  [ТС] #7
Замечательно, только как теперь вывести введенную матрицу? Простым образом не получается...
0
valeriikozlov
Эксперт C++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
26.12.2010, 23:42 #8
Цитата Сообщение от apachan Посмотреть сообщение
как теперь вывести введенную матрицу?
C
1
2
3
4
5
6
        for(int i=0;i<n;i++)
         {
                for(int j=0;j<a[i];j++)
                    printf("%d ", matrix[i][j]);
                printf("\n");
         }
И еще сами скажите какие элементы теперь будут угловыми? Старый метод не пройдет.
1
apachan
13 / 13 / 2
Регистрация: 07.12.2010
Сообщений: 127
27.12.2010, 00:00  [ТС] #9
Видимо, так:

for(int i=0;i<n;i++)
{
for(int j=0;j<a[i];j++)
if ((i_max==0 || i_max==n-1) && (j_max==0 || j_max==a[i]-1))
printf("Da\n");
else
printf("Net\n");}

Выводит правильно, но "Да"(или "Нет") выводится неск. раз, а так работает, спасибо

Добавлено через 7 минут
Все понял, цикл не там закрыл
0
valeriikozlov
Эксперт C++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
27.12.2010, 00:02 #10
apachan, тогда так (это нужно выводить без цикла):
C++
1
2
3
4
5
6
7
                       printf("i : %d\n",i_max);
                        printf("j : %d\n",j_max); 
                        printf("Element : %d\n",matrix[i_max][j_max]);
if ((i_max==0 || i_max==n-1) && (j_max==0 || j_max==a[n-1]-1))
printf("Da\n");
else
printf("Net\n");
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.12.2010, 00:02
Привет! Вот еще темы с ответами:

Отрицательные элементы в многомерной матрице - C++
Всем привет) Вот такой вопрос, найти отрицательные элементы в многомерной матрицы, и записать их в одномерный массив. Вот что то...

Определить, есть ли в матрице нулевые элементы - C++
Доброго времени суток. У меня задание на поиск присутствия нулевых элементов в матрице. Вот код: #include &lt;iostream&gt; using namespace...

Заменить в матрице полож элементы на 1, а отриц на 0 - C++
В матрице необходимо заменить положительные элементы на 1, а отрицательные на 0. Количество строк и столбцов вводится с клавиатуры, а затем...

Найти максимальный и минимальный элементы в матрице - C++
Найти максимальный и минимальный элементы в матрице и их номера. С++


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
27.12.2010, 00:02
Ответ Создать тему
Опции темы

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