1 / 1 / 1
Регистрация: 06.09.2015
Сообщений: 19
1

Память для динамического массива в классе

06.09.2015, 19:55. Показов 989. Ответов 20
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вариант 9. Создать класс MASS1, заданный последовательностью чисел. Реализовать следующие вычисления в виде методов класса:
" наибольшее число последовательности целых чисел,
" наименьшее число последовательности целых чисел,
" сумму чисел до первого наименьшего.
В главной программе Описать 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
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
using namespace std;
class MASS
{
public:
    double *a;
    int n;
    MASS(int m)
    { //конструктор
        n = m;
        a = new double [n];
    };
    ~MASS()
    {
        delete[] a;
    }
    int f1()
    {
        int z=0;
        for(int i=0; i<n; i++)
        {
            if ( a[i] == ceil(a[i]) )
                z++;
            else
                z = 0;
        }
        return z;
    }
};
int main()
{
    cout << "Input size of MASS1: ";
    int n; cin >> n;
    MASS MASS1(n);
    cout << "MASS1: ";
    srand(time(0));
    for(int i=0; i<MASS1.n; i++)
        {
            MASS1.a[1]=(rand()%101-50)/10.0;
            cout << " "<< MASS1.a[1];
        }
    cout << "\nf1 = " << MASS1.f1();
    getch();
}
не могу разобраться с выделением памяти
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.09.2015, 19:55
Ответы с готовыми решениями:

Память для динамического массива структур
Есть функция Insert, в которой я даю параметрами старый массив объектов структуры, его размер и...

Как выделить память для динамического массива?
Как выделить память для динамического массива? typedef TPrimitives *TPrimitive; //......

Как в отдельной функции выделить память для динамического массива, объявленного в main
Доброго времени суток. Передо мной стоит задача выделения памяти для динамического массива в...

Ввод динамического массива в классе
Не вводятся элементы массива. Как только ввожу второй элемент, пишет что Программа прервана. С...

20
7785 / 6553 / 2983
Регистрация: 14.04.2014
Сообщений: 28,621
06.09.2015, 20:15 2
Вроде всё верно с памятью. Что не работает?
0
1 / 1 / 1
Регистрация: 06.09.2015
Сообщений: 19
06.09.2015, 20:25  [ТС] 3
Цитата Сообщение от nmcf Посмотреть сообщение
Что не работает?
магическим образом появляется мусор...
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
using namespace std;
class MASS
{
public:
    double *a;
    int n;
    MASS(int m)
    { //конструктор
        n = m;
        a = new double [n];
    };
    ~MASS()
    {
        delete[] a;
    }
    int f1()
    {
        int z=0;
        cout << "\n\nMass1 from func: ";
        for(int i=0; i<n; i++)
        {
            cout << " " << a[i];
            if ( a[i] == ceil(a[i]) )
                z++;
            else
                z = 0;
        }
        return z;
    }
};
int main()
{
    cout << "Input size of MASS1: ";
    int n; cin >> n;
    MASS MASS1(n);
    cout << "MASS1: ";
    srand(time(0));
    for(int i=0; i<MASS1.n; i++)
        {
            MASS1.a[1]=(rand()%101-50)/10.0;
            cout << " "<< MASS1.a[1];
        }
    cout << "\nf1 = " << MASS1.f1();
    getch();
}

скрин тут:

Добавлено через 5 минут
Как в Visual Studio, так и в Code Blocks
Как из под winXP, Так и из-под win8
0
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
06.09.2015, 20:26 4
MASS1.a[1] - у вас тут в квадратных скобках единица вместо i.
0
805 / 532 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
06.09.2015, 20:31 5
да и сравнивать числа типа double таким образом, как у вас, тоже не очень хорошо
C++
1
if ( a[i] == ceil(a[i]) )
0
1 / 1 / 1
Регистрация: 06.09.2015
Сообщений: 19
06.09.2015, 20:53  [ТС] 6
Цитата Сообщение от Renji Посмотреть сообщение
MASS1.a[1] - у вас тут в квадратных скобках единица вместо i.
опс... накосячил ...

а вот еще как
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
да и сравнивать числа типа double таким образом, как у вас, тоже не очень хорошо
как тогда?
0
805 / 532 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
06.09.2015, 21:07 7
Цитата Сообщение от км Посмотреть сообщение
как тогда?
прочти на эту тему:
https://rsdn.ru/forum/cpp/2640596.1
Грубо говоря, может возникнуть ситуация, когда из-за погрешности результат подобного сравнения может стать ложным.
0
1 / 1 / 1
Регистрация: 06.09.2015
Сообщений: 19
06.09.2015, 21:12  [ТС] 8
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
Сообщение от км
как тогда?
прочти на эту тему:
https://rsdn.ru/forum/cpp/2640596.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
40
41
42
43
44
45
46
47
48
49
50
51
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
using namespace std;
class MASS
{
public:
    double *a;
    int n;
    MASS(int m)
    { //конструктор
        n = m;
        a = new double [n];
    };
    ~MASS()
    {
        delete[] a;
    }
    int f1()
    {
        int y=0,z=0;
        for(int i=0; i<n; i++)
        {
            if ( a[i]/1 == a[i]/1. )
                y++;
            if (y>z)
            {
                z = y;
                y = 0;
            }
        }
        return z;
    }
};
int main()
{
    cout << "Input size of MASS1: ";
    int n; cin >> n;
    MASS MASS1(n);
    cout << "MASS1: ";
    srand(time(0));
    for(int i=0; i<MASS1.n; i++)
        {
            MASS1.a[i]=(rand()%101-50)/2.0;
            cout << " "<< MASS1.a[i];
        }
    cout << "\nf1 = " << MASS1.f1();
    getch();
}
0
Эксперт PHP
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
06.09.2015, 21:18 9
Цитата Сообщение от км Посмотреть сообщение
C++
1
a[i]/1 == a[i]/1.
все равно все приведется к double, и сравнение будет неточным
0
1 / 1 / 1
Регистрация: 06.09.2015
Сообщений: 19
06.09.2015, 21:20  [ТС] 10
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
все равно все приведется к double, и сравнение будет неточным
эм.. как тогда?
0
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
06.09.2015, 21:30 11
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
Грубо говоря, может возникнуть ситуация, когда из-за погрешности результат подобного сравнения может стать ложным.
Конкретно у ТС - не может. Он сравнивает число с результатом его округления до целого. Погрешности здесь полезут только тогда, когда это самое число в мантиссу не влезет. То есть, пока число не начинает приближаться к двум в 52 степени (мантисса double), можно не беспокоиться.
0
Эксперт PHP
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
06.09.2015, 21:30 12
км, а зачем Вы сравниваете число с самим собой? Да и, судя по заданию, это здесь не нужно. А еще задание требует, чтобы последовательность была целочисленной. Может я что-то упустил?
0
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
06.09.2015, 21:31 13
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
км, а зачем Вы сравниваете число с самим собой?
Судя по всему, чтобы отделить целые числа от дробных.
0
805 / 532 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
06.09.2015, 21:32 14
Цитата Сообщение от км Посмотреть сообщение
эм.. как тогда?
не заморачивайся на этот счет, для кода твоей программы это некритично, но такие подводные камни просто нужно держать в уме.
0
1 / 1 / 1
Регистрация: 06.09.2015
Сообщений: 19
06.09.2015, 21:32  [ТС] 15
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
а зачем Вы сравниваете число с самим собой?
не с самим собой... а с его округленным значение
вот я исправил:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int f1()
    {
        int y=0,z=0;
        for(int i=0; i<n; i++)
        {
            if ( a[i] == (int)a[i] )
                y++;
            else
                y = 0;
            if ( y > z ) z = y;
        }
        return z;
    }
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
А еще задание требует, чтобы последовательность была целочисленной.
как же тогда проверить первое задание?
0
Эксперт PHP
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
06.09.2015, 21:35 16
Это которое
Цитата Сообщение от км Посмотреть сообщение
наибольшее число последовательности целых чисел,
???
0
1 / 1 / 1
Регистрация: 06.09.2015
Сообщений: 19
06.09.2015, 21:53  [ТС] 17
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
Это которое
Сообщение от км
наибольшее число последовательности целых чисел,
???
эммм...
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
using namespace std;
class MASS
{
public:
    int *a;
    int n;
    MASS(int m)
    { //конструктор
        n = m;
        a = new int [n];
    }
    ~MASS()
    {
        delete[] a;
    }
    int f(bool m=1)
    {
        int z = a[0];
        for(int i=1; i<n; i++)
            if ( (a[i] > z) == m )
                z = a[i];
        return z;
    }
    int s()
    {
        int p=0;
        for(int i=1; i<n; i++)
            if (a[i] < a[p]) p = i;
        int s = 0;
        for(int i=0; i<p; i++)
            s += a[i];
        return s;
    }
};
int main()
{
    cout << "Input size of MASS1: ";
    int n; cin >> n;
    MASS MASS1(n);
    cout << "MASS1: ";
    srand(time(0));
    for(int i=0; i<MASS1.n; i++)
        {
            MASS1.a[i]=rand()%21-10;
            cout << " "<< MASS1.a[i];
        }
    cout << "\nMax = " << MASS1.f();
    cout << "\nMin = " << MASS1.f(0);
    cout << "\nSum_to_Min = " << MASS1.s();
    getch();
}
0
Эксперт PHP
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
06.09.2015, 21:55 18
км, я так понимаю, у Вас проблема с пониманием задания?
1) Найти максимальное значение
2) Найти минимальное значение
3) Сумму значений до первого минимального
Так должно проясниться.
0
1 / 1 / 1
Регистрация: 06.09.2015
Сообщений: 19
06.09.2015, 21:57  [ТС] 19
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
км, я так понимаю, у Вас проблема с пониманием задания?
1) Найти максимальное значение
2) Найти минимальное значение
3) Сумму значений до первого минимального
Так должно проясниться.
0
Kerry_Jr
06.09.2015, 22:48     Память для динамического массива в классе
  #20

Не по теме:

Цитата Сообщение от км Посмотреть сообщение
:-/
вот так взрослые мужики решают конфликты :p

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.09.2015, 22:48

Создание динамического массива в классе
Помогите, пожалуйста, разобраться . Пыталась реализовать ввод и вывод элементов динамического...

Определение динамического массива в классе
Добрый день всем гуру! Очевидно очень глупый вопрос, сложно даже сформулировать. Необходимо...

Создание динамического массива в классе
помогите пожалуйста написать задачу используя конструктор и деструктор(надо создать динамический...

Удаление динамического массива в классе
при удаление динамического массива в классе зависает программа... хотя в инете нашел кучу примеров,...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru