IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Работа с классами в C++, Microsoft Visual Studio .Net 2003
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 30
Пол: Мужской
Реальное имя: Никита

Репутация: -  0  +


Короче у меня большие проблемы с ООП. Собственно, вопроса пока тока два - как вызвать из main метод add и правильно написана add?

void add() – создаем массив и добавляем в него элемент.
void sort() – сортировка массива
float mid() – среднее арифметическое всех элементов в массиве

Пользователь вводит количество векторов. Потом определяет тип вектора(1-integer,2-float), далее вызывается add и формируется массив. С этим массивом уже выполняем sort и mid.

Пример, как все это должно выглядеть:

Enter the number of vector: 2
Enter type of 1 vector (1-integer, 2-float): 1
Enter length of vector: 3
Enter the vector: 9 2 5
Enter type of 2 vector (1-integer, 2-float): 2
Enter length of vector: 4
Enter the vector: 1 5 3.079 0.5

After work:
2 5 9
Middle value: 5.33333
0.5 1 3.079 5
Middle value: 2.39475


Код

#include "stdafx.h"
#include <stdio.h>
#include <iostream>

using namespace std;

class Vector
{
protected:
    int n;
public:
    Vector(int nn) {n=nn}
    void virtual sort() {}
    void virtual add() {}
    float virtual mid() {}
    void virtual show();
};

class IntVector:public Vector
{
    int a[10];
public:
    intvector(int nn, int* na):vector(nn)
    {
        int i=0;
        while (i<n)
        {
            *(a+i)=*(na+i);
            i++;
        }
    }
    
    void add(int m)
    {
        int i=0,j,n,ia[10];
        while (i<m)
        {
            cout << "Enter the length of the " << i+1 << " vector: ";
            cin >> n;
            cout << "Enter the vector: ";
            for (j=0; j<n; j++)
                cin >> *(ia+j);
            *(mas+i)=new intvector(n,ia);
        }
    }

    void sort();
    
    float mid()
    {
    }

    void show()
    {
        int i=0;
        vector::show();
        while(i<n)
        {
            cout<<*(a+i)<<" ";
            i++;
        }
    }
};
void main
{
}


Класс FloatVector я так думаю будет похож на IntVector за исключением некоторых функций?

Сообщение отредактировано: Bo2nik -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






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

С++ - case-sensitive язык, и intvector совсем не то же самое, что IntVector. Просто vector-а это тоже касается... mas, к которому ты обращаешься в методе add, вообще нигде не описан.

Избавляйся хотя бы от явных синтаксических ошибок...

Цитата
Пользователь вводит количество векторов. Потом определяет тип вектора(1-integer,2-float), далее вызывается add и формируется массив. С этим массивом уже выполняем sort и mid.
Кстати, чего ты это вручную делаешь? Думаешь, получится красивее, чем в STL? Даже и без STL:

template <class T>
class Vector {
T arr[10]; // и работай с нужным типом
...
};

Все, что останется сделать в наследнике - правильно инстанцировать шаблон...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 30
Пол: Мужской
Реальное имя: Никита

Репутация: -  0  +


Цитата(volvo @ 28.05.2008 18:58) *

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


Да это был просто набросок. Вот я сделал по-другому(и вроде все работает):


#include <stdio.h>
#include <stdafx.h>
#include <iostream>


using namespace std;


class vector
{
protected:
int n;
public:
vector(int nn)
{
n=nn;
}
void virtual sort();
void virtual add()
{
n++;
}
float virtual mid()
{
return 0;
}
int virtual num()
{
return n;
}
void virtual show()
{
}
};

class intvector:public vector
{
int a[10];
public:
intvector(int nn, int* na):vector(nn)
{
int i=0;
while (i<n) *(a+i)=*(na+i++);
}
void add(int b)
{
vector::add();
*(a+n)=b;
}
void sort();
float mid()
{
int i=0;
float s=0;
vector::mid();
while (i<n)
s=s+*(a+i++);
return s/n;
}
int num()
{
return n;
}
void show()
{
int i=0;
vector::show();
while(i<n)
cout<<*(a+i++)<<" ";
}
};

class floatvector:public vector
{
float a[10];
public:
floatvector(int nn, float* na):vector(nn)
{
int i=0;
while (i<nn)
*(a+i)=*(na+i++);
}
void add(float b)
{
vector::add();
*(a+n)=b;
}
void sort();
int num()
{
return n;
}
float mid()
{
int i=0;
float s=0;
vector::mid();
while (i<n)
s=s+*(a+i++);
return s/n;
}
void show()
{
int i=0;
vector::show();
while(i<n)
cout<<*(a+i++)<<" ";
}
};
void vector::sort()
{}

void intvector::sort()
{
vector::sort();
int i,b,j;
for (i=0; i<n-1; i++)
for (j=i+1; j<n; j++)
if (*(a+i)>*(a+j))
{
b=*(a+i);
*(a+i)=*(a+j);
*(a+j)=b;
}
}

void floatvector::sort()
{
vector::sort();
int i,j;
float b;
for (i=0; i<n-1; i++)
for (j=i+1; j<n; j++)
if (*(a+i)>*(a+j))
{
b=*(a+i);
*(a+i)=*(a+j);
*(a+j)=b;
}
}

vector* mas[20];

void main()
{
int i=0,j,m,n,ia[10],c;
float fa[10];
cout << "Enter the number of vectors: ";
cin >> m;
while (i<m)
{
cout << "Enter the type of the " << i+1 << " vector(1-integer/2-float): ";
cin >> c;
cout << "Enter the length of the " << i+1 << " vector: ";
cin >> n;
cout << "Enter the vector: ";
if (c==1)
{
for (j=0;j<n;j++)
cin >> *(ia+j);
*(mas+i)=new intvector(n,ia);
}
else if (c==2)
{
for (j=0;j<n;j++)
cin >> *(fa+j);
*(mas+i)=new floatvector(n,fa);
}
else
{
cout << "Incorrect command!!!";
i--;
}
i++;
}
for (i=0; i<m; i++)
{
(*(mas+i))->show();
cout<<"\n";
}
cout << "After work: \n";
for (i=0; i<m; i++)
{
(*(mas+i))->sort();
(*(mas+i))->show();
cout<<"\n";
cout << "Middle value: " << (*(mas+i))->mid() << "\n";
}
getchar();
}




Теперь вопрос: у меня вставка элемента в массив происходит в main, а мне надо чтобы было в add, как это сделать вообще не представляю, подскажите.


Сообщение отредактировано: Bo2nik -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 28.01.2021 9:36
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name