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

Сложить два массива поэлементно - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.65
Abbat_90
0 / 0 / 0
Регистрация: 11.10.2011
Сообщений: 26
13.10.2011, 00:45     Сложить два массива поэлементно #1
Необходимо базовый класс Array: массив и поле для хранения количества элементов массива... реализовать перегрузку оператора [] и поэлементное сложение массивов.
Хотелось бы методом класса создать ещё один объект класса и присвоить ему значение поэлементного сложения.
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
#include <iostream.h>
#include <conio.h>
#include <math.h>
 
class Array
    {
private:
     int mas[100];
     const static int a = 100;
 
 
 
public:
        int kol;
        Array();
    void Set_elements();
        void virtual Add (Array, Array);
    int operator[] (int);
    void show();
    };
 
 
Array::Array()
    {
     cout<<"Insert number of elements ";
     cin>>kol;
     for (int i = 0; i <kol; i++)
        {
         mas[i]=0;
        }
    }
 
void Array::Add(Array a, Array b)
        {
        Array N;
    
         if (a.kol>=b.kol) {
        for (int i=0; i<b.kol; i++) {N[i]=a[i]+b[i]; }
                for(int i=b.kol; i<a.kol; i++) {N[i]=a[i];}
                         }
        else {for (int i=0; i<a.kol; i++) {N[i]=a[i]+b[i]; }
                for(int i=a.kol; i<b.kol; i++) {N[i]=b[i];}}
 
 
 
     //   if (a.kol>=b.kol) {
      //  for (int i=0; i<b.kol; i++) {cout<<" "<<a[i]+b[i]<<endl; }
        //        for(int i=b.kol; i<a.kol; i++) {cout<<" "<<a[i]<<endl;}
          //               }
       // else {for (int i=0; i<a.kol; i++) {cout<<" "<<a[i]+b[i]<<endl; }
         //       for(int i=a.kol; i<b.kol; i++) {cout<<" "<<b[i]<<endl;}}
        //}
 
void Array::Set_elements()
    {
     for (int i = 0; i <kol; i++)
        {
        cout<<"Insert #"<<i<<" of massiv ";
        cin>>mas[i];
        }
    }
 
void Array::show()
    {
     for (int i = 0; i < kol; i++)
        {
         cout<<" Array "<<mas[i];
        }
    }
 
int Array::operator[](int i)
    {
     if (i>kol)
        {
         cout<<endl<<"illegal number of array";
               //  break;
        }
     else
     return mas[i];
    }
 
 
 
 
 
 
 
int main()
{
 
Array A, B;
//cout<<endl<<A.kol<<endl;
 
A.Set_elements();
//A.show();
 
B.Set_elements(); cout<<endl;
//B.show(); cout<<endl;
//cout<<"result"<<endl;
A.Add(A,B);
 
//cout<<endl<<A[2];
 
//Y.Set_elements();
//cout<<endl<<A[2];
//cout<<endl<<B[2];
getch();
}
Заранее примного благодарен!!!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ree.exe
56 / 56 / 4
Регистрация: 01.08.2011
Сообщений: 141
13.10.2011, 01:04     Сложить два массива поэлементно #2
Цитата Сообщение от Abbat_90 Посмотреть сообщение
Хотелось бы методом класса создать ещё один объект класса и присвоить ему значение поэлементного сложения.
А как насчёт организации этого в виде дружественной функции?
Abbat_90
0 / 0 / 0
Регистрация: 11.10.2011
Сообщений: 26
13.10.2011, 01:08  [ТС]     Сложить два массива поэлементно #3
Цитата Сообщение от Ree.exe Посмотреть сообщение
А как насчёт организации этого в виде дружественной функции?
А можно узнать чуть подробнее как именно, просто никогда не пользовался таковыми
aeshes
 Аватар для aeshes
437 / 200 / 13
Регистрация: 07.10.2011
Сообщений: 462
13.10.2011, 01:21     Сложить два массива поэлементно #4
Abbat_90, можно вопрос: почему у вас массив в классе статический, а не динамический? С динамическим было бы лучше. И почему функция Add имеет тип void, если сумма двух массивов есть массив?
Abbat_90
0 / 0 / 0
Регистрация: 11.10.2011
Сообщений: 26
13.10.2011, 01:31  [ТС]     Сложить два массива поэлементно #5
Цитата Сообщение от aeshes Посмотреть сообщение
можно вопрос: почему у вас массив в классе статический, а не динамический? С динамическим было бы лучше. И почему функция Add имеет тип void, если сумма двух массивов есть массив?
Не спорю что динамический лучше, но он и сложнее в реализации, покрайней мере для меня, тут хоть бы так сделать для начала... в плане void, думал просто присвоить значения сложенных массивов третьему массиву и тут же в этом методе класса вывести его на экран. Но основная проблема в этом коде:
C++
1
2
3
4
5
6
7
8
9
10
void Array::Add(Array a, Array b)
        {
        Array N;
        
         if (a.kol>=b.kol) {
        for (int i=0; i<b.kol; i++) {N[i]=a[i]+b[i]; }
                for(int i=b.kol; i<a.kol; i++) {N[i]=a[i];}
                         }
        else {for (int i=0; i<a.kol; i++) {N[i]=a[i]+b[i]; }
                for(int i=a.kol; i<b.kol; i++) {N[i]=b[i];}}
Для каждого N[i] выводится ошибка "Lvalue required" или что-то в этом роде...
aeshes
 Аватар для aeshes
437 / 200 / 13
Регистрация: 07.10.2011
Сообщений: 462
13.10.2011, 01:50     Сложить два массива поэлементно #6
надо писать не N[i], а N.mas[i]
Также для a и b

Но работать все равно будет странно, потому что функция сложения должна возвращать результат сложения (объект класса Массив), а не печатать его на экране

Ввод данных в конструкторе тоже не лучшая идея, потому что написав в Add строку Array N ты заставляешь пользователя делать лишнюю работу - вводить зачем-то числа в него

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

public-член kol тоже должен быть private

Динамические массивы совсем не сложные. Главное выделить под них память в конструторе, а потом не забыть удалить в деструкторе. А так при работе они ничем не отличаются от статических. Так что советую переделать, пока не поздно - все равно заставят

В общем, еще есть, к чему стремиться. Дерзай
Abbat_90
0 / 0 / 0
Регистрация: 11.10.2011
Сообщений: 26
13.10.2011, 02:04  [ТС]     Сложить два массива поэлементно #7
Спасибо огромное. Только тогда ещё такой вопросик. Если создавать дочернии классы, тоже с полями массив и количество эллементов массива, то можно как то сделать отдельный конструктор для объектов этого класса или лучше сделать один унивеверсальный в родительском классе???
Спасибо.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.10.2011, 02:05     Сложить два массива поэлементно
Еще ссылки по теме:

C++ Найти среднее арифметическое элементов массива, сравнить два массива поэлементно
C++ Сравнить поэлементно два одномерных массива, и через if определить, равны эти элементы или нет
C++ Сложить поэлементно два массива I и J. Результат в массиве I

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

Или воспользуйтесь поиском по форуму:
aeshes
 Аватар для aeshes
437 / 200 / 13
Регистрация: 07.10.2011
Сообщений: 462
13.10.2011, 02:05     Сложить два массива поэлементно #8
у дочерних классов будут свои конструкторы. Они будут вызывать конструкторы базовых классов и делать что-то еще, присущее только дочернему классу
Yandex
Объявления
13.10.2011, 02:05     Сложить два массива поэлементно
Ответ Создать тему
Опции темы

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