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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 25, средняя оценка - 4.92
Novij
3 / 3 / 0
Регистрация: 12.12.2010
Сообщений: 99
#1

Шаблон задаваемого с клавиатуры динамического массива - C++

15.12.2010, 22:35. Просмотров 3437. Ответов 24
Метки нет (Все метки)

Обязательно с использованием классов
Есть задача. Дан массив вещественных чисел.
а) Ко всем отрицательным элементам прибавить элемент с номером
а1 ,из всех нулевых элементов вычесть вПоложительные элементы оставить без изменения

б)из всех положительных элментов вычесть а , из всех отрицательных вычесть в , ко всем нулевым элементам прибавить с.
Есть задумка по решению задачи. Создать класс и в нем осуществить ф-ию ввода динамичного массива с клавиатуры. Ну а далее просто ...Главная трудность в том что не могу додуматься как сделать массив динамичным да и произвести ввод с клавиатуры?????
Кто может напишите шаблон буду очень благодарен.

Добавлено через 15 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include<cstdlib>
include<iostream>
using namespase std;
class massiv
{public: 
 int vvodmassiva();
}
 vvodmassiva()
  {cout<<"vvedite razmer massiva n= "<<endl;
    int n;
    cin>>n;
// Далее возникает трудность как сделать, что бы значения вводились с клавиатуры, и он был //динамичный
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.12.2010, 22:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Шаблон задаваемого с клавиатуры динамического массива (C++):

Как написать функцию суммирования двумерного массива, задаваемого с клавиатуры? - C++
Требуется ввести с клавиатуры массив, к примеру, 2Х3 и посчитать его сумму с помощью функции. Не могу понять, как правильно написать эту...

Шаблон динамического массива - C++
//================================================================================================= template &lt;class BaseType&gt; class...

Как создать шаблон класса одномерного динамического массива? - C++
Нужно решить задачу(консольное приложение(совместимое с visual studio 2005)): Со-здать ша-блон кл-асса од-номерного ди-намического...

Как ввести с клавиатуры элементы динамического массива? - C++
int *mass=new int; for(int i=0;i&lt;10;i++) { } Как ввести в цикле элементы массива , а потом вывести их на экран? Подскажите...

Создать шаблон динамического списка - C++
спроектировать шаблон для класса динамический список Создать конструкторы: по умолчанию, с параметрами и копирования и продемонстрировать...

Реализовать шаблон класса для хранения динамического списка - C++
Нужно реализовать: 1.Операции вставки элемента в начало списка 2.Операцию удаления первого элемента 3.Деструктор высвобождающий всю...

24
caliper
10 / 10 / 0
Регистрация: 07.12.2010
Сообщений: 131
15.12.2010, 22:45 #2
Заполнение динамического массива:
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
using namespace std;
int main()
{
    int n;
    cin >> n;
    double *mas = new double[n];
    for(int i=0; i<n; i++)
        cin >> mas[i];
    delete [] mas;
        return 0;
}
1
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
15.12.2010, 22:56 #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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#include <iostream>
#include <exception>
#include <stdexcept>
 
using namespace std;
 
template <class _Tp>
class Vector
{
public:
        typedef _Tp value_type;
        typedef value_type* pointer;
protected:
        pointer* _data_start;
        pointer* _data_finish;
        pointer* _data_end_of_storage;
 
        void quickSort(int left, int right, bool (*compare)(const _Tp&, const _Tp&))
        {
                int i = left, j = right;
                value_type pivot = at((left + right) / 2);
 
                /* partition */
                while (i <= j)
                {
                        while (compare(at(i), pivot))
                                i++;
                        while (compare(pivot, at(j)))
                                j--;
                        if (i <= j)
                        {
                                pointer tmp = _data_start[i];
                                _data_start[i] = _data_start[j];
                                _data_start[j] = tmp;
                                i++;
                                j--;
                        }
                };
 
                /* recursion */
                if (left < j)
                        quickSort(left, j, compare);
                if (i < right)
                        quickSort(i, right, compare);
}
 
 
 
public:
        Vector(int n, unsigned int max_capacity = 0) : _data_start(0), _data_finish(0), _data_end_of_storage(0)
        {
                if (n > max_capacity)
                        max_capacity = n+1;
                _data_start = new pointer[max_capacity];
                _data_finish = _data_start + n;
                _data_end_of_storage =_data_start + max_capacity;
 
                for (int i = 0; i<size(); i++)
                        _data_start[i] = new value_type;
        }
        Vector(void) : _data_start(new pointer[1]), _data_finish(_data_start), _data_end_of_storage(_data_start+1) {}
        Vector(const Vector<_Tp>& other)
        {
                _data_start = new pointer[other.capacity()];
                _data_finish = _data_start + other.size();
                _data_end_of_storage =_data_start + other.capacity();
 
                for (int i = 0; i<size(); i++)
                        _data_start[i] = new value_type(other[i]);
        }
 
        virtual value_type& push_back(const value_type value)
        {
                if (!(_data_finish < _data_end_of_storage))
                        reserve(capacity()+2);
                *_data_finish = new value_type(value);
                _data_finish++;
        }
 
        void sort(bool (*compare)(const _Tp&, const _Tp&))
        {
                quickSort(0, size()-1, compare);
        }
 
        void reserve(int new_capacity)
        {
                pointer* _new_data_start = new pointer[new_capacity];
                int new_size = (size()>new_capacity)?new_capacity:size();
 
                for (int i = 0; i<new_size; i++)
                        _new_data_start[i] = _data_start[i];
 
                delete [] _data_start;
 
                _data_start = _new_data_start;
                _data_finish = _data_start + new_size;
                _data_end_of_storage = _new_data_start + new_capacity;
        }
 
        Vector<_Tp> operator= (const Vector<_Tp>& other)
        {
                if (this!=&other)
                {
                        if (_data_start!=0)
                                delete _data_start;
                        _data_start = new pointer[other.capacity()];
                        _data_finish = _data_start + other.size();
                        _data_end_of_storage =_data_start + other.capacity();
                        for (int i = 0; i<size(); i++)
                                _data_start[i] = new value_type(other[i]);
                }
                return *this;
        }
 
        virtual value_type& operator[](unsigned int n) const { return *(_data_start[n]); }
        virtual value_type& operator[](unsigned int n) { return *(_data_start[n]); }
 
        virtual value_type& at(int n) const { return *(_data_start[n]); }
        virtual value_type& at(int n) { return *(_data_start[n]); }
 
        unsigned int size() const { return (_data_finish - _data_start); }
        unsigned int capacity() const { return (_data_end_of_storage - _data_start); }
 
        ~Vector()
        {
                for (int i=0; i<size(); i++)
                        delete _data_start[i];
                delete [] _data_start;
        }
};
 
int main()
{
     Vector<int> A;
     A.push_back(5);
     A[0] = 3;
     return 0;
}
1
Novij
3 / 3 / 0
Регистрация: 12.12.2010
Сообщений: 99
15.12.2010, 22:59  [ТС] #4
Благодарю
0
Novij
3 / 3 / 0
Регистрация: 12.12.2010
Сообщений: 99
15.12.2010, 23:28  [ТС] #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
#include <cstdlib>
#include <iostream>
 
using namespace std;
 
class massiv
{ public:
    int vvodmassiva();
};
int vvodmassiva()
{
    cout<<"vvedite razmer massiva n= "<<endl;
    int n;
    cin>>n;
    cout<<"vvedite massiv"<<endl;
    double *mas=new double[n];
    for(int i=0;i<n;i++)
    cin>>mas[i];
    delete [] mas;
    return 0;
}    
int main(int argc, char *argv[])
{
    massiv levayaPeremennaya;
    levayaPeremennaya.vvodmassiva();
    system("PAUSE");
    return EXIT_SUCCESS;
}
Народ стал я проверять программу, как работет ввод массива динамического с клавиатуры, но к сожалению ошибок не высвечивает и не компилирует. Среда Дев Си++. А вот что пишет в компиляторе.
Взгляните на скриншот
0
Миниатюры
Шаблон задаваемого с клавиатуры динамического массива  
Novij
3 / 3 / 0
Регистрация: 12.12.2010
Сообщений: 99
15.12.2010, 23:55  [ТС] #6
Ошибка найдена. Но не компилируется все равно в Дев Си
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
#include "stdafx.h"
#include <cstdlib>
#include <iostream>
using namespace std;
 
  class massiv 
{ public:
     int vvodmassiva();
};
int massiv::vvodmassiva()
{
    cout<<"vvedite razmer massiva n= "<<endl;
    int n;
    cin>>n;
    cout<<"vvedite massiv"<<endl;
    double *mas=new double[n];
    for(int i=0;i<n;i++)
    cin>>mas[i];
    delete [] mas;
    return 0;
}    
int main(int argc, char *argv[])
{
    massiv levayaPeremennaya;
    levayaPeremennaya.vvodmassiva();
    system("PAUSE");
    return EXIT_SUCCESS;
}
0
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
16.12.2010, 00:00 #7
Вместо
C++
1
2
3
4
5
6
7
8
9
10
11
12
int vvodmassiva()
{
    cout<<"vvedite razmer massiva n= "<<endl;
    int n;
    cin>>n;
    cout<<"vvedite massiv"<<endl;
    double *mas=new double[n];
    for(int i=0;i<n;i++)
    cin>>mas[i];
    delete [] mas;
    return 0;
}
надо
C++
1
2
3
4
5
6
7
8
9
10
11
12
int massiv::vvodmassiva()
{
    cout<<"vvedite razmer massiva n= "<<endl;
    int n;
    cin>>n;
    cout<<"vvedite massiv"<<endl;
    double *mas=new double[n];
    for(int i=0;i<n;i++)
    cin>>mas[i];
    delete [] mas;
    return 0;
}
Не пригодился мой шаблончик? )
1
Novij
3 / 3 / 0
Регистрация: 12.12.2010
Сообщений: 99
16.12.2010, 00:32  [ТС] #8
Сложный очень шаблончик, я чуть проще сделал
0
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
16.12.2010, 09:27 #9
Молодец. А теперь чего не компилируется? У меня это компилируется.

Добавлено через 6 минут
Кстати, довольно бессмысленный код. Наверно, объявление double *mas надо бы вынести в поля класса, оформить конструктор, который создавал бы массив, деструктор, который бы его удалял и пару методов для установки и получения значений.
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 <cstdlib>
#include <iostream>
using namespace std;
 
class massiv
{
private:
        double *mas;
        int size;
public:
        massiv(): mas(0) {}
        explicit massiv(int asize) : size(asize), mas(new double[asize]) {}
        int vvodmassiva();
        int GetSize() const { return size; }
        ~massiv() { delete [] mas; }
};
 
 
int massiv::vvodmassiva()
{
    cout<<"vvedite massiv"<<endl;
    for(int i=0;i<size;i++)
    cin>>mas[i];
    return 0;
}
 
int main(int argc, char *argv[])
{
    cout<<"vvedite razmer massiva n= "<<endl;
    int n;
    cin>>n;
    massiv levayaPeremennaya(n);
    levayaPeremennaya.vvodmassiva();
    system("PAUSE");
    return EXIT_SUCCESS;
}
1
Novij
3 / 3 / 0
Регистрация: 12.12.2010
Сообщений: 99
17.12.2010, 19:23  [ТС] #10
Все равно пишет проект не откомпилирован , хотя в Майкрософт вижуал студио 2010 компилируется и работает вполне нормально. Что ж Дев си не нравится в моем коде
0
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
17.12.2010, 19:42 #11
Не забывайте, что телепаты в отпуске. Прикладывайте саму ошибку.
1
Novij
3 / 3 / 0
Регистрация: 12.12.2010
Сообщений: 99
20.12.2010, 10:31  [ТС] #12
Та ошибки в дев си вообще не выскакивает посто возникает надпись проект неоткомпилирован
0
MILAN
886 / 780 / 86
Регистрация: 21.02.2009
Сообщений: 1,722
20.12.2010, 11:26 #13
Цитата Сообщение от Novij Посмотреть сообщение
include<iostream>
C++
1
#include <iostream>
Цитата Сообщение от Novij Посмотреть сообщение
// Далее возникает трудность как сделать, что бы значения вводились с клавиатуры, и он был //динамичный
Используйте new delete!!!!
1
Novij
3 / 3 / 0
Регистрация: 12.12.2010
Сообщений: 99
20.12.2010, 11:42  [ТС] #14
Пытаюсь сделать задание хотя бы под а)Дан массив вещественный чисел. Ко всем отрицательным элементам прибавит a1,от всех нулевых вычесть b, а положительные оставить без изменения

в вижуал студио х че получается ну что не нравится и так и так уже с десяток всяких вариантов перепробовал

Это первоначальный текст ясно дело он не катит
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
#include "stdafx.h"
#include <cstdlib>
#include <iostream>
using namespace std;
 
  class massiv 
{ public:
     int vvodmassiva();
};
int massiv::vvodmassiva()
{
    cout<<"Vvedite razmer massiva N=";
    int n;
    cin>>n;
    cout<<endl<<"Razmer massiva N="<<n<<endl<<endl;
    cout<<"Vvedite massiv"<<endl;
    int *mas=new int[n];
    for(int i=0;i<n;i++)
    cin>>mas[i];
   
    
 
    
    
    delete [] mas;
    return 0;
 
}    
int main(int argc, char *argv[])
{
    massiv Levaya_Peremennaya;
    Levaya_Peremennaya.vvodmassiva();
    
    int p,d;
    
    cout<<endl<<"ZADANIE a)"<<endl;
    cout<<"Vvedite b="<<endl;
    int b;
    cin>>b;
    for( int i=0;i<n;i++)
    {
        if(mas[i]<0)
        { 
        p=mas[i];
         mas[i]=p+mas[1];
            cout<<mas[i]<<endl;
        }
        else
        {
            for(i=0;i<n;i++)
            {
                if(mas[i]=0)
        {
            d=mas[i];
            mas[i]=d-b;
            cout<<mas[i]<<endl;
                }
        else{cout>>mas[i];}
        }
        }
    }
 
    system("PAUSE");
    return EXIT_SUCCESS;
}


Это уже более менее исправленный
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
#include "stdafx.h"
#include <cstdlib>
#include <iostream>
using namespace std;
 
  class massiv 
{ public:
     int vvodmassiva();
};
int massiv::vvodmassiva()
{
    cout<<"Vvedite razmer massiva N=";
    int n;
    cin>>n;
    cout<<endl<<"Razmer massiva N="<<n<<endl<<endl;
    cout<<"Vvedite massiv"<<endl;
    int *mas=new int[n];
    for(int i=0;i<n;i++)
    cin>>mas[i];
   
    int p,d;
    
    cout<<endl<<"ZADANIE a)"<<endl;
    cout<<"Vvedite b="<<endl;
    int b;
    cin>>b;
    for( int i=0;i<n;i++)
    {
        if(mas[i]<0)
        { 
        p=mas[i];
         mas[i]=p+mas[1];
            cout<<mas[i]<<endl;
        }
        else
        {
            for(i=0;i<n;i++)
            {
                if(mas[i]=0)
        {
            d=mas[i];
            mas[i]=d-b;
            cout<<mas[i]<<endl;
                }
        else{cout>>mas[i];}
        }
        }
    }
 
    
    
    delete [] mas;
    return 0;
 
}    
int main(int argc, char *argv[])
{
    massiv Levaya_Peremennaya;
    Levaya_Peremennaya.vvodmassiva();
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
ну никак
0
Novij
3 / 3 / 0
Регистрация: 12.12.2010
Сообщений: 99
20.12.2010, 11:49  [ТС] #15
Теперь возникает ошибка после else
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
//#include "stdafx.h"
#include <cstdlib>
#include <iostream>
using namespace std;
 
  class massiv 
{ public:
     int vvodmassiva();
};
int massiv::vvodmassiva()
{
    cout<<"Vvedite razmer massiva N=";
    int n;
    cin>>n;
    cout<<endl<<"Razmer massiva N="<<n<<endl<<endl;
    cout<<"Vvedite massiv"<<endl;
    int *mas=new int[n];
    for(int i=0;i<n;i++)
    cin>>mas[i];
   
    int p,d;
    
    cout<<endl<<"ZADANIE a)"<<endl;
    cout<<"Vvedite b="<<endl;
    int b;
    cin>>b;
    for( int i=0;i<n;i++)
    {
        if(mas[i]<0)
        { 
        p=mas[i];
         mas[i]=p+mas[1];
            cout<<mas[i]<<endl;
        }
        else
        {
            for(i=0;i<n;i++)
            {
                if(mas[i]=0)
        {
            d=mas[i];
            mas[i]=d-b;
            cout<<mas[i]<<endl;
                }
        else{cout>>mas[i];} //Вот здесь возникает ошибка 
        }
        }
    }
 
    
    
    delete [] mas;
    return 0;
 
}    
int main(int argc, char *argv[])
{
    massiv Levaya_Peremennaya;
    Levaya_Peremennaya.vvodmassiva();
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
0
Миниатюры
Шаблон задаваемого с клавиатуры динамического массива  
20.12.2010, 11:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.12.2010, 11:49
Привет! Вот еще темы с ответами:

Создайте класс динамического массива, в котором реализована проверка выхода за границы массива - C++
Народ подскажите такую вещь я написал программку для вставки элементов в массив при этом осуществляется проверка границ массива ! ...

Создайте класс динамического массива, в котором реализована проверка выхода за границы массива - C++
Создайте класс динамического массива, в котором реализована проверка выхода за границы массива. Перегрузите операторы: , =, +, -,++ ...

Функция с применением динамического массива, чтобы размер массива увеличивался по мере необходимости - C++
Ребята, подскажите, кто может, каким образом создать функцию с применением динамического массива, но так, чтобы размер массива увеличивался...

Создайте класс динамического массива, в котором реализована проверка выхода за границы массива - C++
Создайте класс динамического массива, в котором реализована проверка выхода за границы массива. Перегрузите операторы: , =, +, -,++...


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

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

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