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

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

Войти
Регистрация
Восстановить пароль
 
Dread1
7 / 7 / 2
Регистрация: 16.10.2012
Сообщений: 61
#1

Вычислить Z = (S1 + S2)/ 2 - C++

05.11.2012, 15:56. Просмотров 325. Ответов 6
Метки нет (Все метки)

Вычислить Z = (S1 + S2)/ 2; где S1 сумма положительных элементов массива X(9x6), а S2 - сумма отрицательных элементов массива А(60).Суммы вычислять в одной функции.

Не могу понять в чём ошибка...

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
#include <iostream>
#include <fstream>
#define SIZE_i 9
#define SIZE_j 6
#define SIZE_A 60
#define N 2
using namespace std;
 
int sum_1, sum_2 = 0;
 
void random(int **arr, int *mas, int k)
{
    int i, j = 0;
    int t = -1;
    if(k == 0)
    {
        cout << "A[60]: " << endl;
        for(i = 0;i < SIZE_A;i++){
            mas[i] = t * (rand()%1000);
            t *= -1;
            cout.width(N);
            cout << mas[i] << ", ";
        }
    }
    else
    {   
        cout << "X[9][6]: " << endl;
        for(i = 0;i < SIZE_i;i++)
            for(j = 0;j < SIZE_j;j++){
                arr[i][j] = t * (rand()%1000);
                t *= -1;
                cout.width(N);
                cout << arr[i][j] << ", ";
            }
    }
    
}
 
 
void sum(int **arr, int *mas, int k)
{
    int i, j = 0;
    if(k == 0)
        for(i = 0;i < SIZE_A;i++)
            if(mas[i] < 0)
                sum_2 += mas[i];
    else
        for(i = 0;i < SIZE_i;i++)
            for(j = 0;j < SIZE_j;j++){
                arr[i] = new int [SIZE_j];
                if(arr[i][j] > 0);
                    sum_1 += arr[i][j];
            }
}
 
int main()
{
    int i, j = 0;
    
    int **X = new int *[SIZE_i];
    for(int i = 0; i < SIZE_i; i++) 
        X[i] = new int[SIZE_j];
    int *A = new int [SIZE_A];
    random(X, 0, 1);
    cout << endl;
    random(0, A, 0);
    cout << endl;
    sum(0, A, 0);//sum_2
    sum(X, 0, 1);//sum_1
    cout << "Z = " << (sum_1 + sum_2)/2 << endl;;
    system("PAUSE");
    return 0;
}
выдает ошибку в функции sum при выполнении операции sym_1 += a[I][j];
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
denys_l
51 / 51 / 4
Регистрация: 26.09.2011
Сообщений: 186
05.11.2012, 16:19     Вычислить Z = (S1 + S2)/ 2 #2
в функции sum(...)
для вычисления sum_1 во вложенном цикле for ошибочно выделяется память
C++
1
arr[i] = new int [SIZE_j];
Dread1
7 / 7 / 2
Регистрация: 16.10.2012
Сообщений: 61
05.11.2012, 16:28  [ТС]     Вычислить Z = (S1 + S2)/ 2 #3
denys_l, а подскажи, как исправить, если не трудно.

Изначально делал без этой строки, но всё равно выдавал ошибку- написал её от безысходности
denys_l
51 / 51 / 4
Регистрация: 26.09.2011
Сообщений: 186
05.11.2012, 16:36     Вычислить Z = (S1 + S2)/ 2 #4
ааа... тут ещё
9-я строка
C++
1
int sum_1, sum_2 = 0;

переменной sum_1 надо тоже присваивать значение, иначе там находится "мусор" кажется там будет находится ноль
в функции sum() в 47 строке, else какому if принадлежит? Расставь скобки.
Выделение памяти надо удалить
C++
1
arr[i] = new int [SIZE_j];
Добавлено через 43 секунды
C++
1
2
3
4
5
6
if(k == 0) {
        for(i = 0;i < SIZE_A;i++)
            if(mas[i] < 0)
                sum_2 += mas[i];
}
    else...
Issues
430 / 365 / 37
Регистрация: 06.08.2012
Сообщений: 961
05.11.2012, 16:45     Вычислить Z = (S1 + S2)/ 2 #5
int sum_1 = 0, sum_2 = 0;
denys_l
51 / 51 / 4
Регистрация: 26.09.2011
Сообщений: 186
05.11.2012, 16:46     Вычислить Z = (S1 + S2)/ 2 #6
Цитата Сообщение от SeregaC++ Посмотреть сообщение
int sum_1 = 0, sum_2 = 0;
глобальные переменные инициализируются нулем, я тоже сначала подумал, что тут ошибка
Issues
430 / 365 / 37
Регистрация: 06.08.2012
Сообщений: 961
05.11.2012, 17:08     Вычислить Z = (S1 + S2)/ 2 #7
Цитата Сообщение от denys_l Посмотреть сообщение
глобальные переменные инициализируются нулем, я тоже сначала подумал, что тут ошибка
блин. Сам протупил.
Yandex
Объявления
05.11.2012, 17:08     Вычислить Z = (S1 + S2)/ 2
Ответ Создать тему
Опции темы

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