Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 12
1

Нужна головная программа для класса Array

15.11.2012, 13:54. Показов 1960. Ответов 29
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вот код
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
#include "stdafx.h" 
#include "conio.h" 
#include "stdio.h" 
#include "math.h" 
#include "time.h" 
#include "iostream" 
 
using namespace std; 
class Array 
{int *a,m; 
public: 
Array(int nm=1, int t=1, int d=10); 
Array(int *, int ); 
Array(Array &); 
~Array(){ 
if(a)delete []a; 
} 
Array operator +(Array&); 
Array operator =(Array&); 
int&operator[](int k); 
bool operator==(Array&); 
void vivod(); 
}; 
Array::Array(int nm, int t, int d) 
{ 
int i; 
a=new int[m=nm]; 
switch(t) 
{ 
case 1: a[0]=rand(); 
for(i=1;i<m;i++)>=a[i-1]+rand(); break; 
case 2: a[m-1]=rand(); 
for(i=m-2;i>=0;i--) 
a=a[i+1]+rand(); break; 
case 3: for(i=0;i<m;i++)>=rand(); break; 
} 
} 
Array::Array(Array&b) 
{a = new int [m=b.m]; 
for(int i=0; i<m;>=b.a; 
} 
Array::Array(int *b, int k){ 
a = new int [m=k]; 
int i; 
for(i=0; i<m;> = b; 
} 
Array Array::operator+(Array&b) 
{ 
Array c(m+b.m,0); 
int i,j,k; 
for(i=0, j=0, k=0; i<m><=b[j]) c[k]=a[i++]; 
else c[k]=b[j++]; 
c[k++]=a[i++]; 
while(j<b.m)>=b.a; 
return *this; 
} 
int &Array::operator[] (int k) 
{ 
if(k<0 || k>=m){ 
printf("Index %d za granicami massiva",k); 
exit(1); 
} 
return a[k]; 
} 
bool Array::operator ==(Array&b) 
{ 
int i; 
if(m=b.m){ 
for(i=0;i<m;i++)>!=b.a){ 
return 0; 
} 
if(i==m) 
return 1; 
} 
return 0; 
} 
void Array::vivod(){ 
 
printf("\n"); 
for(int i=0; i<m;>); 
}
осталось дописать головную программу, но ничего в голову не идет, помогите пожалуйста!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.11.2012, 13:54
Ответы с готовыми решениями:

как пишется головная программа?
Ребят,нужно написать головную программу с использованием модуля(в который входит функция и...

Перегрузка операторов для класса Array
Здравствуйте, у меня есть созданный класс array, для него нужно перегрузить операторы &lt;&lt;. &gt;&gt;, =,...

Перегрузки операторов для класса Array
Здравствуйте.Помогите разобраться с перегрузками,пожалуйста. Перегрузки: 1)операции ++ (– –):...

Нужна программа с использованием класса String
Здравствуйте, нужна ваша помощь. Требуется написать программу, используя только пункты 3,5,8 и 12 ...

29
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 12
15.11.2012, 18:29  [ТС] 21
Author24 — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void main() {
    srand (time(0));
    Array a(4,13),b(5,6),c;
    b=a;
    c=a+b;
    a.vivod();
    b.vivod();
    c.vivod();
    if(a==b)
        printf("massivy ravny\n");
    else printf("massivy raznye\n");
    exit(0);
}
вот такой мэйн получился, но когда программу запускаю-она открывается и сразу же закрывается.. в чем может быть проблема?
0
Антикодер
1804 / 869 / 48
Регистрация: 15.09.2012
Сообщений: 3,081
15.11.2012, 18:46 22
ну вот смотрите на строку
C++
1
c = a + b;
(попробуйте её для начала за комментировать должно заработать)
просто у меня вообще не компилируется с этой строкой.

что мы получим на выходе
a + b
0
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 12
15.11.2012, 18:54  [ТС] 23
Цитата Сообщение от XRuZzz Посмотреть сообщение
ну вот смотрите на строку
C++
1
c = a + b;
(попробуйте её для начала за комментировать должно заработать)
просто у меня вообще не компилируется с этой строкой.
все равно..(( я даже когда другой main пробовала, у меня все равно программа эта вылетала..

Добавлено через 5 минут
сейчас за комментировала сложение и сравнение в мэйне, и попросила просто мне вывести на экран массив а, но все так же вылетает
0
Обитатель форума
201 / 184 / 54
Регистрация: 28.10.2012
Сообщений: 543
15.11.2012, 18:59 24
void main() писать неграмотно. Принято int main().
Все верно, программа закрывается после выполнения всех ф-ций.
Добавьте в конец кода system("pause");
0
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 12
15.11.2012, 19:05  [ТС] 25
Цитата Сообщение от Afflicted Посмотреть сообщение
Добавьте в конец кода system("pause");
все равно..
0
Антикодер
1804 / 869 / 48
Регистрация: 15.09.2012
Сообщений: 3,081
15.11.2012, 19:16 26
так весь класс за комментируйте, и оставьте только
int main()
{
return 1;
}

и по одной строчке раскрывайте, потому что у меня все работает без c = a + b;

Добавлено через 6 минут
Кстати у Дейтела на 509 странице рассматривается этот класс. Но там нет перезагруженной операции +
0
Обитатель форума
201 / 184 / 54
Регистрация: 28.10.2012
Сообщений: 543
15.11.2012, 19:16 27
Anna1993, тогда смотрите с каким кодом завершается программа. Если не 0x0, значит она не доходит до конца и прерывается из-за ошибки.
0
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 12
15.11.2012, 19:19  [ТС] 28
странно что-то.. сделала все, как сказали, он все равно вылетает..
0
Антикодер
1804 / 869 / 48
Регистрация: 15.09.2012
Сообщений: 3,081
15.11.2012, 19:55 29
ну вот вы шломали студию оператором + нельзя было его перегружать
ставьте нормальный компилятор (gcc)
вы читали эту тему Шаблоны классов ?

Добавлено через 31 минуту
лано пойду домой...
ему оператор = не нравится, когда объекты складываем
C++
1
2
3
4
array_test.cpp:159:13: error: no match for 'operator=' in 'd = Array::operator+(Array&)((* & b))'
array_test.cpp:159:13: note: candidate is:
array_test.cpp:104:8: note: Array& Array::operator=(Array&)
array_test.cpp:104:8: note:   no known conversion for argument 1 from 'Array' to 'Array&'
0
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
15.11.2012, 22:22 30
Anna1993, как я уже и сказал, помимо синтаксических ошибок из первого поста, у вас имеется целый ряд другого рода ошибок. Для начала неплохо было бы оформить сам класс следующим образом
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Array
{
private:
    int* a;
    int m;
    
public:    
    explicit Array(int nm = 1, int t = 1, int d = 10); 
    Array(const int* b, int k);
    Array(const Array& b);
    
    ~Array();
    
    Array operator + (const Array& b) const;
    Array& operator = (const Array& b);
    
    int& operator [] (int k);
    const int& operator [] (int k) const;
    
    bool operator == (const Array& b) const;
    void print() const;
};
Добавлено через 1 час 0 минут
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
Array::~Array()
{
    delete[] a; // проверка на NULL не нужна
}
 
// т.к. перменная d у вас не используется вообще, рискну предположить, что это верхняя граница используемая при генерации случ. чисел)
Array::Array(int nm, int t, int d)
{    
    a = new int[nm];
    m = nm;
    
    switch(t)
    {
    case 1:
        a[0] = rand() % d;
        for(int i = 1; i < m; i++)                    
            a[i] = a[i - 1] + rand() % d;        
        break;
        
    case 2:
        a[m - 1] = rand() % d;
        for(int i = m - 2; i >= 0; i--)                    
            a[i] = a[i + 1] + rand() % d;        
        break;
        
    default: // вариант по умолчанию
        for(int i = 0; i < m; i++)
            a[i] = rand() % d;    
    }
}
 
Array::Array(const Array& b)
{    
    a = new int[b.m];
    m = b.m;
    
    for(int i = 0; i < m; i++)
        a[i] = b.a[i];
}
 
Array::Array(const int* b, int k)
{    
    a = new int[k];
    m = k;
    
    for(int i = 0; i < m; i++)
        a[i] = b[i];
}
Добавлено через 1 час 0 минут
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
Array& Array::operator = (const Array& b)
{
    // проверяем не происходит ли попытка присвоить объект самому себе
    if(&b != this)
    {    
        delete[] a;
 
        // обнуляем указатель(если этого не сделать, то при возникновении исключения, 
        // (которое в случае нехватки памяти, может быть сгенерировано в следующей строке)
        // в деструкторе объекта память освободится повторно
        a = NULL;
        
        a = new int[b.m];
        m = b.m;
        
        for(int i = 0; i < m; i++)
            a[i] = b.a[i];       
    }
 
    return *this;
}
 
int& Array::operator [] (int k)
{
    if(k < 0 || k >= m) 
    {
        char error_msg[100];
        sprintf(error_msg, "Index %d za granicami massiva", k);
        throw std::out_of_range(error_msg);
    }
 
    return a[k];
}
 
const int& Array::operator [] (int k) const
{
    if(k < 0 || k >= m) 
    {
        // exit при работе с классами и спользовать нельзя, генерируем исключение
        char error_msg[100];
        sprintf(error_msg, "Index %d za granicami massiva", k);
        throw std::out_of_range(error_msg);
    }
 
    return a[k];
}
 
bool Array::operator == (const Array& b) const
{       
    if(m == b.m)
    {
        for(int i = 0; i < m; i++)
            if(a[i] != b.a[i])            
                return false;
        
        return true;
    }
    
    return false;
}
 
void Array::print() const
{        
    for(int i = 0; i < m; i++)
        printf("%d ", a[i]);
    printf("\n");
}
Цитата Сообщение от Anna1993 Посмотреть сообщение
Array Array::operator+(Array&b)
{
* * Array c(m+b.m,0);
* * int i,j,k;
* * for(i=0, j=0, k=0; i<m && j<b.m; k++)
* * * * if(a[i]<=b[j]) c[k]=a[i++];
* * * * else c[k]=b[j++];
* * * * c[k++]=a[i++];
* * while(j<b.m)
* * * * c[k++]=b[j++];
* * return c;
}
здесь не совсем понятно, что происходит...
0
15.11.2012, 22:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.11.2012, 22:22
Помогаю со студенческими работами здесь

Нужна любая программа с использованием собственного класса
Не слишком большая. Класс треугольник, комплексное число, любая геометрическая фигура да все равно...

программа для вычисления среднего геометрического элементов массива array[15] удовлетворяющих условию
Вот моя программа для вычисления среднего геометрического элементов массива array удовлетворяющих...

Какая нужна комплектация для Учебного класса института на 10 мест для комфортной работы на лабораторных по информатике?
Посоветуйте какая нужна комплектация(наиболее частые применяемые программы,и исходя из этого...

Для чего нужна частичная специализация шаблона класса?
Доброго времени суток объясните пожалуйста зачем нужна частичная специализация шаблонов класса


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

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