Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
I_Masha_I
2 / 2 / 0
Регистрация: 14.10.2012
Сообщений: 53
1

Составить вектор из сумм элементов диагоналей, параллельных главной диагонали

19.10.2012, 18:32. Просмотров 475. Ответов 4
Метки нет (Все метки)

Составить вектор из сумм элементов диагоналей, параллельных главной диагонали.
Первый элемент вектора - верхний правый
Вот мой код, всё работает, но не совсем правильно. Почему то первый выводится 0, и не выводятся суммы
самых ближних параллельных диагоналей к главной, то есть для матрицы 10х10
1 2 2 2 2 2 2 2 2 2
3 1 2 2 2 2 2 2 2 2
3 3 1 2 2 2 2 2 2 2
3 3 3 1 2 2 2 2 2 2
3 3 3 3 1 2 2 2 2 2
3 3 3 3 3 1 2 2 2 2
3 3 3 3 3 3 1 2 2 2
3 3 3 3 3 3 3 1 2 2
3 3 3 3 3 3 3 3 1 2
3 3 3 3 3 3 3 3 3 1
Результат: 0 2 4 6 8 10 12 14 16 24 21 18 15 12 9 6 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
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 "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include<iostream>
using namespace std;
 
 
void vvod_matrix(int **s, int m)
{
    cout<<"Введите матрицу:"<<endl;
    for(int i=0; i<m; i++)
        for(int j=0; j<m; j++)
        {
            cin>>s[i][j];
        }
}
void vector(int **s, int m)
{
    cout<<"Вектор P: ";
    int p , l;
    for (int i = m; i>1; i--)
    {
        p = 0;
        l = 1;
        for (int j = i; j< m; j++)
        {
            p += s[l][j];
        l++;
        }
    
    cout<<p<<" ";
    }
    for (int i = 2; i<m; i++)
    {
        p = 0;
        l = 1;
        for(int j = i; j<m;j++)
        {
            p +=s[j][l];
            l++;
        }
    cout<<p<<" ";
    }
 
}
int main()
{ 
    setlocale(LC_ALL, "Russian");
    int **s, m;
    cout<<"Введите размерность матрицы: ";
    cin>>m;
    s = (int**)malloc(m*sizeof(int));           
    for(int i=0; i<m; i++)
        s[i]=(int*)malloc(m*sizeof(int));
 
    
 
    vvod_matrix(s, m); 
    vector(s, m); 
       
 
    
    
    system("PAUSE");
    return 0;
}
Добавлено через 52 минуты
С первым нулём я разобралась, помогите пожалуйста с диагоналями!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.10.2012, 18:32
Ответы с готовыми решениями:

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

Максимум среди сумм элементов диагоналей, параллельных главной диагонали матрицы
надо короче чтоб прога искала максимум среди сумм элементов диагоналей,...

В матрице найти максимум среди сумм элементов диагоналей, параллельных главной диагонали
Здравствуйте! Помогите пожалуйста, вот задачка: 1) Найти максимальную сумму...

Определить максимум среди сумм элементов диагоналей, параллельных главной диагонали матрицы
Народ!!! Скиньте кто-нибудь код, завтра сдавать уже!!!

Найти максимум среди сумм элементов диагоналей, параллельных главной диагонали матрицы
Задана целочисленная квадратная матрица A(N x N). Найти максимум среди сумм...

4
zitxbit
89 / 741 / 279
Регистрация: 11.04.2012
Сообщений: 971
19.10.2012, 19:22 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
#include <stdio.h>
#include <conio.h>
#include <memory.h>
 
#define N 10
 
int main()
{
    int A[N][N] = { { 1, 2, 2, 2, 2, 2, 2, 2, 2, 2 },
                    { 3, 1, 2, 2, 2, 2, 2, 2, 2, 2 },
                    { 3, 3, 1, 2, 2, 2, 2, 2, 2, 2 },
                    { 3, 3, 3, 1, 2, 2, 2, 2, 2, 2 },  
                    { 3, 3, 3, 3, 1, 2, 2, 2, 2, 2 },
                    { 3, 3, 3, 3, 3, 1, 2, 2, 2, 2 },
                    { 3, 3, 3, 3, 3, 3, 1, 2, 2, 2 },
                    { 3, 3, 3, 3, 3, 3, 3, 1, 2, 2 },
                    { 3, 3, 3, 3, 3, 3, 3, 3, 1, 2 },
                    { 3, 3, 3, 3, 3, 3, 3, 3, 3, 1 } };
 
    int* B = new int[2 * (N-1)];
    memset((void*)B, 0x00, 2 * (N-1) * sizeof(int));
 
    int s = 0;
    for (int q = N-1; q >= 1; q--, s++)
        for (int i = 0, j = q; i < N-q; i++)
            B[s]+=A[i][j++];
 
    for (int m = 1; m < N; m++, s++)
        for (int i = m, j = 0; j < N-m; j++)
            B[s]+=A[i++][j];
 
    for (int t = 0; t < s; t++)
        printf("%d ",B[t]);
    printf("\n");
 
    _getch();
}
http://liveworkspace.org/code/f3f7c55cea50012b0d55e81c6ddc4b34
1
Миниатюры
Составить вектор из сумм элементов диагоналей, параллельных главной диагонали  
I_Masha_I
2 / 2 / 0
Регистрация: 14.10.2012
Сообщений: 53
19.10.2012, 20:29  [ТС] 3
Спасибо!
А объясните пожалуйста вот эту строчку:
C++
1
memset((void*)B, 0x00, 2 * (N-1) * sizeof(int));
я понимаю что это выделение памяти под массив, а поконкретней, как??
И нельзя ли это заменить на что нибудь попроще?
0
zitxbit
89 / 741 / 279
Регистрация: 11.04.2012
Сообщений: 971
19.10.2012, 20:40 4
функция memset библиотеки memory.h заполняет буфер значением (присваевает каждому элементу массива B знач.), напр. 0x00:
C++
1
memset((void*)B, 0x00, 2 * (N-1) * sizeof(int));
заменить на (но это не в С++, а ANSI C):
C++
1
2
for (int r = 0; r < 2 * (N-1); r++)
     B[r] = 0x00;
или:
C++
1
int r = 0; while (r < 2 * (N-1)) B[r++]=0x00;
1
valeriikozlov
Эксперт С++
4686 / 2512 / 751
Регистрация: 18.08.2009
Сообщений: 4,550
20.10.2012, 10:31 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
#include <stdio.h>
#include <conio.h>
#include <memory.h>
 
#define N 10
 
int main()
{
    int A[N][N] = { { 1, 2, 2, 2, 2, 2, 2, 2, 2, 2 },
                    { 3, 1, 2, 2, 2, 2, 2, 2, 2, 2 },
                    { 3, 3, 1, 2, 2, 2, 2, 2, 2, 2 },
                    { 3, 3, 3, 1, 2, 2, 2, 2, 2, 2 },  
                    { 3, 3, 3, 3, 1, 2, 2, 2, 2, 2 },
                    { 3, 3, 3, 3, 3, 1, 2, 2, 2, 2 },
                    { 3, 3, 3, 3, 3, 3, 1, 2, 2, 2 },
                    { 3, 3, 3, 3, 3, 3, 3, 1, 2, 2 },
                    { 3, 3, 3, 3, 3, 3, 3, 3, 1, 2 },
                    { 3, 3, 3, 3, 3, 3, 3, 3, 3, 1 } };
 
    int* B = new int[2 * (N-1)];
    memset((void*)B, 0x00, 2 * (N-1) * sizeof(int));
 
    for (int q = N-1; q >= 1; q--)
        for (int i = 0; i+q<N; i++)
        {
            B[N-1-q]+=A[i][q+i];
            B[N-2 + q]+=A[N-1-i][N-1-q-i];
        }    
 
    for (int t = 0; t < 2 * (N-1); t++)
        printf("%d ",B[t]);
    printf("\n");
 
    _getch();
    return 0;
}
0
20.10.2012, 10:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.10.2012, 10:31

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

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

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


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

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

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