Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Массив дробей и вычисление среднего, Использование массивов и класов 
V
    Опции темы
NeuZeitgeist
Дата 19.4.2009, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 24.11.2007

Репутация: нет
Всего: нет



Решаю задачу из учебника Лафоре "ООП в С++" (Глава 7. Массивы и строки, з. №5, с. 308). Задача формулируется следующим образом:
Напишите программу, которая получает случайные дробные числа от пользователя, сохраняет их в массив, вычисляет среднее значение, выводит результат. Дроби должны быть представлены как класс.

Моя программа работает, но в ней все время появляется одно "мусорное" значение, т.е. в цикле выходит за границу массива. На результат это влияет, прога считает верно, но не нравится, что этот "мусор" выползает. Как правильно определить цикл, чтобы этого не было? Заранее спасибо. 
Код

//вычисление среднего арифметического массива дробей
#include <iostream>

using namespace std;
const int M = 3;
class fraction
{
    private:
        int a, b; //поля класса
    public:
        fraction() : a(0), b(0) {}//конструктор без аргументов
        fraction(int aa, int bb) : a(aa), b(bb) {}//конструктор с двумя аргументами

        void input()//метод ввода данных
        {   char ch;    cin >> a >> ch >> b;    }

        void output()//метод вывода данных
        {   cout << a << '/' << b;  }

        fraction fadd(fraction, fraction, fraction&);//прототип сложения
        fraction fdiv(fraction, fraction, fraction&);//прототип деления
};

int main()
{
    fraction d[M];//массив дробей
    fraction znam(M, 1);//знаменатель для вычисления среднего значения
    fraction rez(0, 0);//результат, среднее значение массива
    cout << "Vvedite " << M << " drobei" << endl;
    for(int i = 0; i < M; i++)
        d[i].input();
    cout << "\nVi vveli: ";
    for(int i = 0; i < M; i++)
    {
        d[i].output();
        cout << " ";
    }
    cout << endl;
    for(int i = 0; i < M; i++)
        d[i].fadd(d[i], d[i+1], d[i+1]);
    d[M-1].fdiv(d[M-1], znam, rez);
    cout << "Srednee ravno "; rez.output();
    return 0;
}

fraction fraction::fadd(fraction frac1, fraction frac2, fraction& frac3) //сложение
{
    frac3.a = frac1.a*frac2.b+frac2.a*frac1.b;
    frac3.b = frac1.b*frac2.b;
    return frac3;
}

fraction fraction::fdiv(fraction frac1, fraction frac2, fraction& frac3)//деление
{
    frac3.a = frac1.a*frac2.b;
    frac3.b  = frac1.b*frac2.a;
    cout << "a/b/c/d = " << frac3.a << '/' << frac3.b << endl;
    return frac3;
}




Это сообщение отредактировал(а) NeuZeitgeist - 19.4.2009, 17:13
PM   Вверх
susanin
Дата 19.4.2009, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 587
Регистрация: 7.10.2006
Где: Санкт-Петербург

Репутация: 2
Всего: 7



хм...странно...у меня никакого мусора не появилось...ввел 1/2 1/2 1/2...вывел среднее 12/24...все правильно...мусора не увидел нигде
PM MAIL   Вверх
NeuZeitgeist
Дата 19.4.2009, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 24.11.2007

Репутация: нет
Всего: нет



Цитата(susanin @ 19.4.2009,  16:52)
хм...странно...у меня никакого мусора не появилось...ввел 1/2 1/2 1/2...вывел среднее 12/24...все правильно...мусора не увидел нигде

Да, верно, все работает как надо. Что-то меня уже переклинивает...
Сначала была ошибка, видимо исправил и даже не заметил smile
Все равно спасибо за внимание и ответ.
PM   Вверх
sdukshis
Дата 19.4.2009, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 23.3.2009

Репутация: нет
Всего: 1



Возможно проблема в том, что Вы инициализируете b нулевым значением, хотя дробей с нулевым знаменателем быть не может.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0428 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.