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

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

Восстановить пароль Регистрация
 
apachan
13 / 13 / 2
Регистрация: 07.12.2010
Сообщений: 127
26.12.2010, 17:33     Угловые элементы в матрице #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
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 минуты
Неужели никто не знает?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.12.2010, 17:33     Угловые элементы в матрице
Посмотрите здесь:

C++ В квадратной матрице поменять местами элементы
C++ Отрицательные элементы в многомерной матрице
C++ дана целочисленная матрица A , размером а х м, найти в матрице первую строку, все элементы которой равны нолю, Умножить элементы столбца с таким же н
Поменять местами угловые элементы матрицы C++
Упорядочить элементы в матрице C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 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;
}
Только не совсем понятно для чего Вам матрица со строками различной длины?
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 является угловым элементом, я поэтому и спросил совета, что у меня была такая же примерно мысля, но все равно не выводило того, что надо =/
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 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;
}
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");
Странно, но сейчас все работает, хотя до этого также вставил условие...


Так как быть с динамическим массивом?
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 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;
}
apachan
13 / 13 / 2
Регистрация: 07.12.2010
Сообщений: 127
26.12.2010, 23:39  [ТС]     Угловые элементы в матрице #7
Замечательно, только как теперь вывести введенную матрицу? Простым образом не получается...
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 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");
         }
И еще сами скажите какие элементы теперь будут угловыми? Старый метод не пройдет.
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 минут
Все понял, цикл не там закрыл
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.12.2010, 00:02     Угловые элементы в матрице
Еще ссылки по теме:

C++ Заменить элементы в матрице
C++ Упорядочить элементы в целочисленной матрице
Максимальные и минимальные элементы в матрице C++

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

Или воспользуйтесь поиском по форуму:
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 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");
Yandex
Объявления
27.12.2010, 00:02     Угловые элементы в матрице
Ответ Создать тему
Опции темы

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