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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 37, средняя оценка - 4.70
Умница++
0 / 0 / 0
Регистрация: 23.12.2008
Сообщений: 13
#1

Решение задачи на матрицу с помощью указателей - C++

14.01.2009, 21:29. Просмотров 4915. Ответов 4
Метки нет (Все метки)

Помогите немного доделать вот такую задачку:

Дана целочисленная квадратная матрица размерности nxn. Найти максимум среди сумм элементов диагоналей, параллельных главной диагонали матрицы.

Без указателей я её решила, привожу программу:
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
69
void main()
{
srand((unsigned)time(NULL));
//инициализация массива
const int n=5;
int mas[n ][n],sum[n*2-2]={0};
//формируем массив...
for(int i=0;i<n;i++)
    for(int j=0;j<n;j++)
        mas[i][j]=rand()%10-5;
//...и выводим его на экран.
for(int i=0;i<n;i++)
    {cout<<"\n";
     for(int j=0;j<n;j++)
        cout<<mas[i][j]<<" ";
    };
//находим сумму эл-тов диагоналей || главной
cout<<"\n\n"<<"Massive of sum:";
for (int k=n*(-1)+1,p=0;k<n;k++)
    {if(k!=0)
        {for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            (i==j+k)?(sum[p]+=mas[i][j]):(NULL);
            cout<<sum[p]<<", ";
            p+=1;
        };
    };
cout<<"\n\n";
//Ищем максимальную сумму!
int max=0;
for(int i=0;i<(n*2-2);i++)
    (max<sum[i])?(max=sum[i]):(NULL);
cout<<"Max summ is: "<<max<<"!"<<"\n\n";    
}
 
 
Но, при решении этой задачи с указателями возникают трудности:
 
Вывод матрицы получается:
 
//функция вывода массива на экран
void show(int n,int **mas)
{    for(int i=0;i<n;i++)
    {    
        cout<<"\n";
        for(int j=0;j<n;j++)
        cout<<mas[i][j]<<" ";
    }
    cout<<"\n\n";
    return; 
}
 
void main()
{
//srand((unsigned)time(NULL));
//сформируем динамический массив!
int n;
int sum[n*2-2]={0};
cout<<"Vvedite razmernost' massiva: ";
cin>>n;
int** matrix=new int* [n];
for(int i=0;i<n;i++)
    matrix[i]=new int[n];
for(int i=0;i<n;i++)
    for(int j=0;j<n;j++)
        matrix[i][j]=rand()%10-3;
show(n,matrix);
//diag(n,matrix);
}

Помогите написать функцию для нахождения суммы эл-тов диагоналей || главной и соответственно максимальную сумму, с помощью указателей.

Добавлено через 3 минуты 3 секунды
Ой, смайлики вставились, там вместо смайла двоеточие
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.01.2009, 21:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Решение задачи на матрицу с помощью указателей (C++):

Слияние двух массивов, решение с помощью указателей - C++
помогите,пожалуйста,решить! Задан массив A из N элементов и массив B из M элементов. Сформировать массив L из массивов A и B путем их...

Переписать решение системы линейных уравнений с помощью указателей - C++
Нужно написать, так сказать, модификацию задачи. В исходном коде организовать данные с помощью указателей. Помогите пожалуйста ...

Решение задачи в помощью оператора цикла. - C++
— Дай мне яблоко, и у меня будет вдвое больше, чем у тебя,— сказал один школьник другому. — Это несправедливо. Лучше дай ты мне...

Преобразовать решение используя указатели (дано решение без указателей) - C++
Элемент матрицы назовем седловой точкой, если он является наименьшим в своей своей строке и одновременно наибольшим в своем столбце или,...

Преобразовать решение (дано решение без указателей) - C++
Помогите начинающему программисту с преобразованием. Нужно приведенное решение преобразовать в решение с указателями. Дана квадратная...

Индексация массивов с помощью указателей - C++
Не смог понять логику вот этой программы, связанной с объявлением массивов через указатель: #include &lt;iostream&gt; ...

4
ISergey
Maniac
Эксперт С++
1376 / 887 / 53
Регистрация: 02.01.2009
Сообщений: 2,663
Записей в блоге: 1
14.01.2009, 22:21 #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
67
68
69
70
71
72
73
74
75
76
77
78
int **arrCreate(const int row,const int col)
{
    if((row > 0))
    {
        int **arr = new int*[row];
        for(int i = 0; i < row; ++i)
        {
            arr[i] = new int[col];
        }
        return arr;
    }
    else
        return NULL;
}
void arrFree(int **arr)
{
    if(arr != NULL)
    {
        int lenrow = static_cast<int>(_msize(arr)/sizeof(int));
        for(int i = 0; i < lenrow; ++i)
            delete[] arr[i];
        delete[] arr;
    }
}
 
void arrOut(int **arr)
{
    if(arr != NULL)
    {
        int lenrow  = static_cast<int>(_msize(arr)/sizeof(int));
        int lencol  = static_cast<int>(_msize(arr[0])/sizeof(int));
        for(int i = 0; i < lenrow; ++i)
        {
            cout<<"[ ";
            for(int j = 0; j < lencol; ++j)
                cout<<arr[i][j]<<" ";
            cout<<"]"<<endl;
        }
    }
}  
 
void main()
{
    const int n=5;
    int sum[n*2-2]={0};
    int **arr = arrCreate(n,n);
    //формируем массив...
    for(int i = 0; i < n; i++)
        for(int j = 0; j < n; j++)
        {
            arr[i][j] = 1;//!или то шо надо
        }
    arrOut(arr);
 
    //находим сумму эл-тов диагоналей || главной
    cout<<"\n"<<"Massive of sum:";
    for (int k=n*(-1)+1,p=0;k<n;k++)
    {
        if(k!=0)
        {
            for(int i=0;i<n;i++)
                for(int j=0;j<n;j++)
                    (i==j+k)?(sum[p]+=arr[i][j]) :NULL;
            cout<<sum[p]<<", ";
            p+=1;
        }
    }
 
    cout<<"\n";
 
    //Ищем максимальную сумму!
    int max=0;
    for(int i=0;i<(n*2-2);i++)
        (max<sum[i])?(max=sum[i]) : NULL;
 
    cout<<"Max summ is: "<<max<<"!"<<"\n"; 
    arrFree(arr);
}
1
Умница++
0 / 0 / 0
Регистрация: 23.12.2008
Сообщений: 13
14.01.2009, 22:41  [ТС] #3
ISergey,
Как-то у вас всё очень замудрено, тем более ,что вывод матрицы у меня получался уже и размерность задавалась с клавиатуры.
А тут получается строго размерность 5, да и еще заполняется одними 1
0
ISergey
Maniac
Эксперт С++
1376 / 887 / 53
Регистрация: 02.01.2009
Сообщений: 2,663
Записей в блоге: 1
14.01.2009, 22:54 #4
ну тогда вот етот участок кода
C++
1
2
3
4
5
6
7
8
9
const int n=5;   
int sum[n*2-2]={0};   
int **arr = arrCreate(n,n);   
//формируем массив...   
for(int i = 0; i < n; i++)   
        for(int j = 0; j < n; j++)   
        {   
            arr[i][j] = 1;//!или то шо надо   
        }
замените на
C++
1
2
3
4
5
6
7
8
int n;
cin>>n;
int *sum = new int [n*2-2];
for(int i = 0; i < (n*2-2); i++)
       sum[i] = 0;
int **arr = arrCreate(n,n);
//формируем массив...
arrInput(arr);
!не забудте удалить массив "sum".

код функции arrInput(...)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void arrInput(int **arr)
{
    if(arr != NULL)
    {
        int lenrow  = static_cast<int>(_msize(arr)/sizeof(int));
        int lencol  = static_cast<int>(_msize(arr[0])/sizeof(int));
        for(int i = 0; i < lenrow; ++i)
        {
            for(int j = 0; j < lencol; ++j)
            {
                cout<<"arr["<<i<<"]"<<"["<<j<<"] = ";
                cin>>arr[i][j];
            }
 
        }
    }
}
1
Умница++
0 / 0 / 0
Регистрация: 23.12.2008
Сообщений: 13
14.01.2009, 23:15  [ТС] #5
ISergey,
Пасибо большое за помощь, че-то намутила, вроде получилось.
Вы направили меня на истинный путь
0
14.01.2009, 23:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.01.2009, 23:15
Привет! Вот еще темы с ответами:

Переворот массива с помощью указателей - C++
Здрасте! Учусь на программера недавно. Вот задали перевернуть массив рекурсивно с использованием указателей. На рекурсию я пока решил...

Вызовы функций с помощью указателей - C++
Составить программу которая использует вызовы функций с помощью указателей ------------------------ первая функция double...

Непонятно условие задачи: Вывести исходную матрицу, преобразованную матрицу и вектор Х. - C++
Здравствуйте, помогите пожалуйста понять, что от меня хотят в этом условии: &quot;Строки вещественной матрицы упорядочить по возрастанию ее...

Задать одномерный массив с помощью указателей - C++
задать одномерный массив с помощью указателей))


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

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

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