Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.05.2012, 20:04   #1
zeich
Новичок
Джуниор
 
Регистрация: 03.05.2012
Сообщений: 2
По умолчанию Получение значения из float* массива

Всем привет!
Задание следующее: написать класс с float-массивом, к нему 2 функции на добавление и получение значений. Вроде бы значения в память складываются, а как их получить - не знаю. Значение нужно получать по индексу. Заранее спасибо=)

Цитата:
#include <iostream>

using namespace std;

class FloatMass
{
public:
FloatMass(): l1(-12.5),l2(12.5) {}

void add(float x)
{

float *p = &x; //указываем на х
float* pmass=new float; //выделяем память из кучи 4б
if (*p<l1 || *p>l2)
{
cout << "Wrong value:" << *p << endl;
}
else
{
*pmass= *p; //запихиваем х в память
}
}

void get()
{
cout << *pmass<< endl; //?????
}
~FloatMass(){};
private:
const float l1;
const float l2;
float* pmass[];
};


int main()
{
FloatMass e1;
e1.add(1);
e1.add(5);
e1.add(1);
e1.get();

return 0;
}
zeich вне форума Ответить с цитированием
Старый 04.05.2012, 10:12   #2
Kaela
Пользователь
 
Регистрация: 29.04.2012
Сообщений: 36
По умолчанию

не с компьютера
не могу полно ответить
но.....
судя по твоему коду у тебя любое значение записывается в первый элемент массива
для добавления нового элемента со следующим индексом,если я не ошибаюсь, надо писать так *(pmass + i),так как *pmass это адрес первого элемента

конечно нужен цикл for(int i=0;i<n;i++)
n - количество элементов в массиве

Последний раз редактировалось Kaela; 04.05.2012 в 10:16.
Kaela вне форума Ответить с цитированием
Старый 04.05.2012, 10:27   #3
Krok27
Форумчанин
 
Аватар для Krok27
 
Регистрация: 08.07.2010
Сообщений: 505
По умолчанию

Дааа.... Все плохо. Где у тебя массив?
Код:
float* pmass[];
Это не массив флоатов. Вернее это указатель на флоат, один единственный.
Если выделять память под массив, следует
Код:
pmass = new float[размер];
и не забыть его удалить где нить в деструкторе
Код:
delete [] pmass;
Нужно еще завести переменную, которая будет содержать количество элементов массива.


Получить элемент:
Код:
float get(int Index)
{
if(Index > количества элеменотов)
     throw std::out_of_range;
return pmass[Index]; 
}
Ну и так далее.
Знающий не говорит, говорящий не знает (С) Лао Цзы
Krok27 вне форума Ответить с цитированием
Старый 08.05.2012, 18:21   #4
zeich
Новичок
Джуниор
 
Регистрация: 03.05.2012
Сообщений: 2
По умолчанию

Krok27, спасибо, все переделала, только теперь с перегрузкой операторов присвоения и сложения мучаюсь..
Цитата:
#include <iostream>

using namespace std;

class FloatMass {
public:
FloatMass() : limit1(-12.5f), limit2(12.5f), pmass(NULL), total(0) {}
virtual int Add(float);
void RelocateMemory(int);
float Get(size_t);
float* operator+ (const FloatMass&) const;
FloatMass operator= (const FloatMass&);
~FloatMass(){
if (pmass != NULL)
delete[] pmass;
}
protected:
const float limit1;
const float limit2;
float* pmass;
size_t total;
float p;

};

int FloatMass :: Add(float x) {
if (x < limit1 || x > limit2) return 0;
total++;
RelocateMemory(total);
pmass[total-1] = x;
return 0;
}

void FloatMass :: RelocateMemory(int count) {
if (pmass == NULL) {
pmass = new float[count];
} else {
float* tmp = pmass;
pmass = new float[count];
int i = 0;
while (i < count-1) {
pmass[i] = tmp[i];
i++;
}
delete[] tmp;
}
}

float FloatMass :: Get(size_t i) {
if (i <= total) return pmass[i];
return 0.0f;
}

float* FloatMass :: operator+ (const FloatMass& right) const {
float* tmp = pmass;
size_t i = 0;
size_t j = 0;
float* pmass1;
pmass1 = new float[total+right.total];
while (i < total) {
pmass1[i] = tmp[i];
i++;
}
delete[] tmp;
while(i<total+right.total) {
pmass1[i]=right.pmass[j];
i++;
j++;
}
return pmass1;
}

FloatMass FloatMass :: operator= (const FloatMass& right) { //???????
if(this == &right) return *this; //???????
pmass=right.pmass; //???????
return *this; //???????
}

int main() {
FloatMass e;

e.Add(5);
e.Add(6);
e.Add(7);
e.Get(1);

FloatMass e1;

e1.Add(10);
e1.Add(8);
e1.Add(11);
e1.Get(0);

FloatMass e2;
e2=e+e1;
return 0;
}
zeich вне форума Ответить с цитированием
Старый 10.05.2012, 11:43   #5
Krok27
Форумчанин
 
Аватар для Krok27
 
Регистрация: 08.07.2010
Сообщений: 505
По умолчанию

Цитата:
Код:
FloatMass FloatMass :: operator= (const FloatMass& right) { //???????
if(this == &right) return *this; //???????
pmass=right.pmass; //???????
return *this; //???????
}
Код:
FloatMass& FloatMass :: operator= (const FloatMass& right) 
{ //???????
        if(this == &right) return *this; //проверка на присвоение самому себе
pmass=right.pmass; // это ворох Access Violation в будущем.
надо поменять на
Код:
pmass = new float[right.total];
for(int i=0; i<right.total;i++)
   pmass[i] = right.pmass[i];
Код:
return *this; //возвращаем ссылку.
}
Знающий не говорит, говорящий не знает (С) Лао Цзы
Krok27 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск по дампу памяти 32 битного float значения coNsept Общие вопросы C/C++ 1 25.12.2011 03:12
Получение значения при вводе определенного значения armanmal Microsoft Office Excel 6 21.11.2011 17:30
сохранение массива float в файл alvahtin Общие вопросы C/C++ 1 11.10.2011 12:55
Сумма и произведение элементов массива, удовлетворяющих условию (генерация float массива) felodese Помощь студентам 1 11.11.2010 20:52
Получение значения по адрессу Matr1x Общие вопросы C/C++ 4 09.02.2010 05:55