Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Luther_
0 / 0 / 0
Регистрация: 26.06.2018
Сообщений: 13
1

Нужно разделить конструктор на две части, первая - инициализации массива, вторая - сумма положительных элементов

16.05.2019, 11:59. Просмотров 966. Ответов 10

Вся суть в том, что для конструктора суммы мне нужна переменная size, которая вводится с клавиатуры, но если я ее инициализирую в конструкторе 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
#include "pch.h"
#include <iostream>
#include <ctime>
using namespace std;
 
class Mas {
public:
    void ini_sum(); //конструктор инициализации массива и суммы положительных элементов массива
};
 
void Mas::ini_sum() {
    int size, temp=0, j;
    cout << "Введите размер массива: ";
    cin >> size;
    int *arr = new int[size];
    for (int i = 0; i < size; i++) {
        arr[i] = rand() % 50 - 25;
    }
    cout << "{ ";
    for (int i = 0; i < size; i++) {
        cout << arr[i] << " ";
    }
    cout << "}" << endl;
    for (int i = 0; i < size; i++) {
        if (arr[i] > 0) {
            j = arr[i];
            temp = temp + j;
        }
    }
    cout << "Сумма положительных элементов: " << temp << endl;
}
 
int main()
{
    setlocale(LC_ALL, "rus");
    srand(time(NULL));
    Mas M;
    M.ini_sum();
}
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.05.2019, 11:59
Ответы с готовыми решениями:

Разделить каждый элемент массива на две части (подстроки)
есть массив, string imena; который принимает примерно следующие значения: imena = &quot;Вася -...

Если строка из загруженного файла содержит больше, чем 50 символов, то нужно разделить её на две части
Помогите дополнить программу. В программу загрузить text файл, обработать его и вывести результат в...

Найти разницу R = M-L, где M - сумма положительных элементов массива A (7), а L - сумма положительных элементо
Найти разницу R = M-L, где M - сумма положительных элементов массива A (7), а L - сумма...

Разделить массив на две равные части, суммы элементов которых наиболее близки к равности
Мне нужно разделить массив на две равные части, суммы элементов которых наиболее близки к равности....

Разделить текст на строки следующим образом: первая строка содержит 5 символов, вторая 7, третья 9
Ввести текст из 50-60 символов без пробелов. Разделить текст на строки следующим образом: первая...

10
n1b1ru
235 / 92 / 45
Регистрация: 22.01.2017
Сообщений: 357
16.05.2019, 14:17 2
Luther_, вы что-то путаете. Это не конструктор, а метод класса.
0
Luther_
0 / 0 / 0
Регистрация: 26.06.2018
Сообщений: 13
16.05.2019, 18:59  [ТС] 3
Извините, я просто только недавно начал учить классы и еще не во всем разобрался, но суть вопроса это не меняет
0
plzvtl
19 / 14 / 5
Регистрация: 27.10.2018
Сообщений: 227
Завершенные тесты: 2
16.05.2019, 19:39 4
Цитата Сообщение от Luther_ Посмотреть сообщение
но если я ее инициализирую в конструкторе 1, то во втором ее не будет видно, что здесь не так?
Как уже было сказано , у вас имеется метод класса.У вас внутри данного метода есть 3 функции for. И в каждой из них переменная size .Вы хотите сказать что в строках 20 и 24 переменная size подчеркнута красным из за того что не определена?
И кроме того у вас INT main которая не возврщает никакого значения , почему так ?Данный код компилируется?
0
16.05.2019, 19:39
Luther_
0 / 0 / 0
Регистрация: 26.06.2018
Сообщений: 13
16.05.2019, 19:50  [ТС] 5
Он компилируется и полностью работает, сейчас ничего не подчеркивается, я не могу из 1 метода сделать 2. Забыл дописать в конце return 0;
И кстати, я не особо еще понимаю, для чего return вообще, ну тип пишут его, когда инт мейн, а не войд

Добавлено через 4 минуты
Мне вот примерно вот так нужно, чтобы методы были раздельно, size в методе sum() подчеркивает, если size объявить в классе, то оно вообще работать перестает.
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 "pch.h"
#include <iostream>
#include <ctime>
using namespace std;
 
class Mas {
public:
    Mas() {
        int size;
        cin >> size;
        int *arr = new int[size];
        cout << "Введите размер массива: ";
    }
    void ini(); 
    void sum();
};
 
void Mas::ini() {
    int size, temp = 0, j;
    cout << "Введите размер массива: ";
    cin >> size;
    int *arr = new int[size];
    for (int i = 0; i < size; i++) {
        arr[i] = rand() % 50 - 25;
    }
    cout << "{ ";
    for (int i = 0; i < size; i++) {
        cout << arr[i] << " ";
    }
    cout << "}" << endl;
}
 
void Mas::sum() {
    int temp, j;
    for (int i = 0; i < size; i++) {
        if (arr[i] > 0) {
            j = arr[i];
            temp = temp + j;
        }
    }
    cout << "Сумма положительных элементов: " << temp << endl;
}
int main()
{
    setlocale(LC_ALL, "rus");
    srand(time(NULL));
    Mas M;
    M.ini();
    M.sum();
    return 0;
}
0
plzvtl
19 / 14 / 5
Регистрация: 27.10.2018
Сообщений: 227
Завершенные тесты: 2
16.05.2019, 20:00 6
В данном коде вы сначала инициализируете переменную для класса одним значением ,которым будет оперировать второй метод , а в первом методе еще раз инициализируете size и два метода работают с разными значениями.

Добавлено через 3 минуты
Как я это вижу .
0
Luther_
0 / 0 / 0
Регистрация: 26.06.2018
Сообщений: 13
16.05.2019, 20:02  [ТС] 7
Я не знаю как работает return, но может ли он возвращать значение size во второй метод из первого? Если да, то как это реализовать?
0
plzvtl
19 / 14 / 5
Регистрация: 27.10.2018
Сообщений: 227
Завершенные тесты: 2
16.05.2019, 20:10 8
Если функция main имеет тип возвращаемого значение , как не странно необходимо его возвращать.
Void соответственно не имеет и не возвращает ничего.

Добавлено через 1 минуту
Сначала стоит убрать переопределение size.

Добавлено через 1 минуту
И скомпилировать и от результата оттолкнутся.

Добавлено через 3 минуты
this ->size = size;

Добавлено через 58 секунд
Думаю изучение "this " и использовании в данном классе поможет.
0
zayats80888
1752 / 979 / 419
Регистрация: 07.02.2019
Сообщений: 2,654
16.05.2019, 20:14 9
Luther_,
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 <iostream>
 
class mas
{
    size_t size{};
    int* arr{ nullptr };
public:
    mas() {}
    mas(size_t sz) : size(sz), arr(new int[sz]) {}
    mas(const mas&) = delete;
    mas& operator=(const mas&) = delete;
    ~mas() { delete[] arr; }
 
    void init()
    {
        for (size_t i{}; i < size; ++i)
        {
            std::cout << "mas[" << i << "] = ";
            std::cin >> arr[i];
        }
    }
 
    int sum()
    {
        int res{};
        for (size_t i{}; i < size; ++i)
            if (arr[i] > 0) res += arr[i];
        return res;
    }
};
int main()
{
    mas m(5);
    m.init();
    std::cout << m.sum();
}
1
plzvtl
19 / 14 / 5
Регистрация: 27.10.2018
Сообщений: 227
Завершенные тесты: 2
16.05.2019, 20:15 10
Лучший ответ Сообщение было отмечено Luther_ как решение

Решение

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
#include "pch.h"
#include <iostream>
#include <ctime>
using namespace std;
 
class Mas {
public:
    int size;
    Mas(int size) {
        this->size = size;
    }
    
       
    
    void ini(); 
    void sum();
};
 
void Mas::ini() {
    int size, temp = 0, j;
    cout << "Введите размер массива: ";
    cin >> size;
    int *arr = new int[size];
    for (int i = 0; i < size; i++) {
        arr[i] = rand() % 50 - 25;
    }
    cout << "{ ";
    for (int i = 0; i < size; i++) {
        cout << arr[i] << " ";
    }
    cout << "}" << endl;
}
 
void Mas::sum() {
    int temp, j;
    for (int i = 0; i < size; i++) {
        if (arr[i] > 0) {
            j = arr[i];
            temp = temp + j;
        }
    }
    cout << "Сумма положительных элементов: " << temp << endl;
}
int main()
{
    setlocale(LC_ALL, "rus");
    srand(time(NULL));
    int size;
    cin >> size;
    int *arr = new int[size];
    cout << "Введите размер массива: ";
    Mas M(size);
    M.ini();
    M.sum();
    return 0;
}
Добавлено через 1 минуту
про масив забыл
0
Luther_
0 / 0 / 0
Регистрация: 26.06.2018
Сообщений: 13
16.05.2019, 20:26  [ТС] 11
В методе sum() вижуал ругается на этот фрагмент кода:
C++
1
2
3
4
5
6
7
8
9
10
void Mas::sum() {
    int temp, j;
    for (int i = 0; i < size; i++) {
        if (arr[i] > 0) { // именно вот тут подчеркивает, мол он не определен
            j = arr[i];
            temp = temp + j;
        }
    }
    cout << "Сумма положительных элементов: " << temp << endl;
}
0
16.05.2019, 20:26
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.05.2019, 20:26

Разделить массив на две части,поместив в первую элементы,большие среднего арифметического массива, а во вторую-меньшие
Объясните пожалуйста,что не так,короче,задачу решил решать так:сначала создам массив,где элементы...

Разделить массив на две половины так, чтобы сумма значений элементов были максимально близки
Здравствуйте!!! :help::help:Помогите мне ... :help::help:У меня ЗАВТРА экзамен.... В морском...

Является ли сумма элементов левой части последовательности больше, чем сумма элементов правой части
Вводиться последовательность из N целых чисел. Является ли сумма элементов левой части...


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

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

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