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

Создать функцию, где из квадратной матрицы S(m, m), m<=10 построить вектор Р - C++

Восстановить пароль Регистрация
 
I_Masha_I
2 / 2 / 0
Регистрация: 14.10.2012
Сообщений: 53
14.10.2012, 09:59     Создать функцию, где из квадратной матрицы S(m, m), m<=10 построить вектор Р #1
Помогите решить задачу:
Написать функцию, где из квадратной матрицы S(m, m), m<=10 построить вектор Р, элементы которого - суммы элементов диагоналей, параллельных главной диагонали. Первый элемент вектора в правом верхнем углу. Использовать составленную функцию для матриц Q(l, l), l<=10 и W(n, n) n<=8. Для ввода размеров матрицы и её элементов составить отдельную функцию. Обращение к функциям и вывод результатов по k элементов в строке выполнить в разделе операторов основной программы.

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
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include<iostream>
using namespace std;
 
int s[10][10];
int m;
void vvod_matrix()
{
    cout<<"m=";
    cin>>m;
    for(int i=0; i<m; i++)
    for(int j=0; j<m; j++)
        cin>>s[i][j];
}
void vector()
{
    int p, i, x;
    cout<<"Вектор Р = ";
    cout<<s[1][m]<<",";
 
    p = 0;
    for (int i = m-1; i < 2; i--) 
    {
        p = 0;
        x = 1;
        while(i+x<=m)
        {
            p+=s[i+x][i+x];
            x = x+1;
        }
        cout<<p<<",";
    }
    p = 0;
    for(int i = 2; i<m-1; i++)
    {
        p = s[i][1];
        x = 1;
        while(i+x<=m)
        {
            p+=s[i+x][i+x];
            x = x+1;
        }
        cout<<p<<",";
    }
    cout<<s[m][1]<<endl;
}
 
int main()
{
    
    setlocale(LC_ALL, "Russian");
    vvod_matrix();
    vector();
 
 
 
 
    system("PAUSE");
return 0;}
Вот мой код, но он работает не правильно.Пожалуйста помогите исправить, укажите на ошибки
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.10.2012, 09:59     Создать функцию, где из квадратной матрицы S(m, m), m<=10 построить вектор Р
Посмотрите здесь:

C++ построить вектор из элементов матрицы
написать функцию транспонирования квадратной матрицы C++
Создать функцию нахождения минимального элемента квадратной матрицы и сортировать её главную диагональ. C++
Написать функцию определителя квадратной матрицы A размера 3x3 C++
C++ Работа с матрицами (Получить элементы квадратной матрицы, где элементы матрицы зависят от параметров)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zitxbit
Master C/C++
 Аватар для zitxbit
86 / 738 / 75
Регистрация: 11.04.2012
Сообщений: 971
14.10.2012, 12:05     Создать функцию, где из квадратной матрицы S(m, m), m<=10 построить вектор Р #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
#include <stdio.h>
#include <conio.h>
 
void input(int** S, char c, int size)
{
    for (int i = 0; i < size; i++)
    {
        S[i] = new int[size];
        for (int j = 0; j < size; j++)
        {
            printf("%c[%d][%d] = ",c,i,j);
            scanf("%d",&S[i][j]);
        }
    }
 
    printf("\n");
}
 
void dsum(int** S, int* P, int size)
{
    for (int q = size-1, k = 0; q >= 0; q--)
    {
        int i = 0, j = q, sum = 0;
        while (i < size && j >= 0) sum+=S[i++][j--];
        if (sum > 0) P[k++] = sum; 
    }
}
 
int main()
{
    int **Q = new int*[10], **W = new int*[8];
    int *P1 = new int[10], *P2 = new int[8];
 
    input(Q, 'Q', 10); input(W, 'W', 8);
    dsum(Q, P1, 10); dsum(W, P2, 8);
 
    for (int m1 = 0; m1 < 10; m1++)
        printf("%d ",P1[m1]);
    printf("\n");
 
    for (int m1 = 0; m1 < 8; m1++)
        printf("%d ",P2[m1]);
    printf("\n");
 
    _getch();
}
I_Masha_I
2 / 2 / 0
Регистрация: 14.10.2012
Сообщений: 53
14.10.2012, 12:21  [ТС]     Создать функцию, где из квадратной матрицы S(m, m), m<=10 построить вектор Р #3
Спасибо большое!
А можете немного подправить, чтобы матрица вводилась не поэлементно, а сразу вся, в таком виде например
m = 10
1 9 8 7 6 5 4 3 2 1
9 1 9 8 7 6 5 4 3 2
8 9 1 9 8 7 6 5 4 3
7 8 9 1 2 3 4 5 6 4
6 7 8 9 1 9 8 7 6 5
5 6 7 8 9 1 9 8 7 6
3 5 6 7 8 9 1 9 8 7
4 3 5 6 7 8 9 1 9 8
1 4 3 5 6 7 8 9 1 3
2 1 4 3 5 6 7 8 9 1

и чтобы в начале функции ввода ещё вводилась размерность матрицы.
zitxbit
Master C/C++
 Аватар для zitxbit
86 / 738 / 75
Регистрация: 11.04.2012
Сообщений: 971
14.10.2012, 12:30     Создать функцию, где из квадратной матрицы S(m, m), m<=10 построить вектор Р #4
Могу сделать так, чтобы матрица загружалась из файла.
I_Masha_I
2 / 2 / 0
Регистрация: 14.10.2012
Сообщений: 53
14.10.2012, 12:41  [ТС]     Создать функцию, где из квадратной матрицы S(m, m), m<=10 построить вектор Р #5
А подскажите пожалуйста, что выдаёт ваша программа например для матрицы 10х10, по-моему она выдаёт сумму элементов диагоналей, которые выше главной, а где, которые ниже?? или я что-то не поняла?
zitxbit
Master C/C++
 Аватар для zitxbit
86 / 738 / 75
Регистрация: 11.04.2012
Сообщений: 971
14.10.2012, 12:57     Создать функцию, где из квадратной матрицы S(m, m), m<=10 построить вектор Р #6
да, действительно. сейчас доработаю.

Добавлено через 15 минут
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
79
80
81
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
 
void input(int** S, char c, int size)
{
    for (int i = 0; i < size; i++)
    {
        S[i] = new int[size];
        for (int j = 0; j < size; j++)
        {
            printf("%c[%d][%d] = ",c,i,j);
            scanf("%d",&S[i][j]);
        }
    }
 
    printf("\n");
}
 
void file_input(int** S, const char* filename, int size)
{
    FILE* fp = NULL;
    if ((fp = fopen(filename,"r")) == NULL)
    {
        printf("Unable to open file %s for reading\n",filename);
        return;
    }
 
    char* str = new char[80];
    for (int i = 0; fgets(str, 80, fp) != NULL; i++)
    {
        S[i] = new int[size]; int j = 0;
        for (char* token = strtok(str," "); 
            token != NULL; token = strtok(NULL," "))
            S[i][j++] = atoi(token);
    }
 
    fclose(fp);
}
 
void dsum(int** S, int* P, int size)
{
    int k = 0;
    for (int q = size-1; q >= 0; q--)
    {
        int i = 0, j = q, sum = 0;
        while (i < size && j >= 0) sum+=S[i++][j--];
        if (sum > 0) P[k++] = sum; 
    }
 
    for (int t = 1; t < size; t++)
    {
        int i = t, j = size-1, sum = 0;
        while (i < size && j >= t) sum+=S[i++][j--];
        if (sum > 0) P[k++] = sum; 
    }
}
 
int main()
{
    int **Q = new int*[10], **W = new int*[8];
    int *P1 = new int[20], *P2 = new int[16];
 
//  input(Q, 'Q', 10); input(W, 'W', 8);
 
    file_input(Q, "in1.txt", 10);
    file_input(W, "in2.txt", 8);
 
    dsum(Q, P1, 10); dsum(W, P2, 8);
 
    for (int m1 = 0; m1 < 20; m1++)
        printf("%d ",P1[m1]);
    printf("\n");
 
    for (int m1 = 0; m1 < 16; m1++)
        printf("%d ",P2[m1]);
    printf("\n");
 
    _getch();
}
Yandex
Объявления
14.10.2012, 12:57     Создать функцию, где из квадратной матрицы S(m, m), m<=10 построить вектор Р
Ответ Создать тему
Опции темы

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