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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [С++] Абстрактные классы, сумма прогрессии 
V
    Опции темы
Hihikin
  Дата 8.4.2007, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Создать абстрактный базовый класс с виртуальной функцией - Сумма прогрессии.
Создать производные классы : Арифметическая прогрессия и Геометрическая погрессия.
Каждый класс должен иметь 2-а поля типа double. Первое - первый членн прогрессии, второе - постоянная разность(для арифметической) или постоянное отношение для геометрической.
Определить функцию вычисления суммы, где параметром являетсяколичество элеметов прогресии.

Арифметическая прогрессия: 
aj=a0 + jd , j=0,1,2
a[j]=a[0] + j*d

Сумма Арифметической прогресии:
Sn=(n+1)*(a0+an) / 2

Геометрическая прогрессия:
aj=a0rj
aj=a0+jd

Сумма Геометр прогресси:
Sn=(a0 - anr) / 1-n
    
кто знает как реализовать, мне главное понять как описать классы и функции мейн догадаюсьsmile

PM MAIL   Вверх
Xenon
Дата 9.4.2007, 00:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Код

class progression
{
protected:
    virtual double sum (int count) = 0;
    virtual ~progression(){}
};

class arithmetical: public progression
{
private:
    double a1;
    double d;
public:
    void set_data()
    {
        std::cout << "Enter a1: ";
        std::cin >> a1;
        std::cout << "Enter d: ";
        std::cin >> d;
    }
    double sum (int count)
    {
        return ( count*(2*a1 + (count-1)*d) / 2);
    }
    arithmetical():a1(0.0),d(0.0){}
    arithmetical(int _a1, int _d):a1(_a1),d(_d){}
};

class geometric: public progression
{
private:
    double b1;
    double q;
public:
    void set_data()
    {
        std::cout << "Enter b1: ";
        std::cin >> b1;
        std::cout << "Enter q: ";
        std::cin >> q;
    }
    double sum (int count)
    {
        double q_n = q;
        for (int i = 1; i < count; ++i)
        {
            q_n *= q;
        }
        return ( (b1*(1-q_n)) / (1 - q) );
    }
    geometric():b1(0.0),q(0.0){}
    geometric(int _b1, int _q):b1(_b1),q(_q){}
};


Это сообщение отредактировал(а) Xenon - 9.4.2007, 00:37


--------------------
user posted image  
PM MAIL   Вверх
Hihikin
Дата 9.4.2007, 07:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



спасибо за помошь попробую реализовать smile!!!
а где кстати создаётсяя саса прогрессия? 

Это сообщение отредактировал(а) Hihikin - 9.4.2007, 08:05
PM MAIL   Вверх
zkv
Дата 9.4.2007, 08:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



Цитата(Hihikin @  9.4.2007,  07:59 Найти цитируемый пост)
а где кстати создаётсяя саса прогрессия? 

если имеете ввиду объекты классов прогрессии, то в main(), если что то другое, то непонятно о чем речь.
PM MAIL   Вверх
Hihikin
Дата 9.4.2007, 08:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ну поидее нужна ещё одна функция - входными параметрами которой будут являтся  - первый член прогрессии, разность для арифметической..
вот только незнаю в самом классе или в мейне, если в мейне то как она переадст прогрессию в функцию подсчёта суммы энтой прогрессии?
PM MAIL   Вверх
zkv
Дата 9.4.2007, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



Цитата(Hihikin @  9.4.2007,  08:34 Найти цитируемый пост)
ну поидее нужна ещё одна функция - входными параметрами которой будут являтся  - первый член прогрессии, разность для арифметической..

а это что?
1. есть конструктор
Цитата(Xenon @  9.4.2007,  00:36 Найти цитируемый пост)
    arithmetical(int _a1, int _d):a1(_a1),d(_d){}

2. еще и дополнительный метод нарисован:
Цитата(Xenon @  9.4.2007,  00:36 Найти цитируемый пост)
 void set_data()
    {
        std::cout << "Enter a1: ";
        std::cin >> a1;
        std::cout << "Enter d: ";
        std::cin >> d;
    }


PM MAIL   Вверх
Hihikin
Дата 9.4.2007, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



коструктор создаст прогрессию с определённым количеством чисел?(я должен сам указать сколько их будет - длинну прогрессии)
PM MAIL   Вверх
zkv
Дата 9.4.2007, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



Цитата(Hihikin @  9.4.2007,  18:14 Найти цитируемый пост)
коструктор создаст прогрессию с определённым количеством чисел?(я должен сам указать сколько их будет - длинну прогрессии) 

прогрессия задается двумя значениями - первый член и разность/отношение. 
Про какие числа вы говорите? про члены прогрессии? А кто сказал, что нам надо их вычислять?

Когда вам надо посчитать сумму первых n членов вы вызываете sum( n ), сумма будет рассчитана на основе ранее введенных данных (первый член и разность/отношение).
PM MAIL   Вверх
Hihikin
Дата 9.4.2007, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



понтяно, спасибо вам, попробую реализовать =)...как получится отпишусьsmile
PM MAIL   Вверх
Xenon
Дата 9.4.2007, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Hihikin, а чего пытаться?
Код

arithmetical arth; //Создали объект класса
arth.set_data(); // Указали первый член прогрессии и разность
arth.sum(n);  // Вычислим сумму n элементов

Я сделал метод set_dat() для наглядности, но, вобще, через конструктор задаются параметры:
Код

arithmetical arth(a1, d); //Создаем объект класса и сразу же устанавливаем первый член прогрессии и разность
arth.sum(n); //Сумма n элементов прогрессии

С геометрической аналогично.


--------------------
user posted image  
PM MAIL   Вверх
Hihikin
Дата 12.4.2007, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

#include <iostream.h>
#include <math.h> //sqrt()
#include <stdlib.h>// exit()


// áàçîâûé êëàññ
class progression
{
protected:
    virtual double sum (int count) = 0;
    virtual ~progression(){}
};

class arithmetical: public progression
{
private:
    double a1;
    double d;
public:
    void set_data()
    {
        cout << "Enter a1: ";
        cin >> a1;
        cout << "Enter d: ";
        cin >> d;
    }
    double sum (int count)
    {
        return ( count*(2*a1 + (count-1)*d) / 2);
    }
    arithmetical():a1(0.0),d(0.0){}
    arithmetical(int _a1, int _d):a1(_a1),d(_d){}
};

class geometric: public progression
{
private:
    double b1;
    double q;
public:
    void set_data()
    {
        cout << "Enter b1: ";
        cin >> b1;
        cout << "Enter q: ";
        cin >> q;
    }
    double sum (int count)
    {
        double q_n = q;
        for (int i = 1; i < count; ++i)
        {
            q_n *= q;
        }
        return ( (b1*(1-q_n)) / (1 - q) );
    }
    geometric():b1(0.0),q(0.0){}
    geometric(int _b1, int _q):b1(_b1),q(_q){}
};
//******************M A i N******************
void main ()
{
    int n;

    arithmetical arth; //Ñîçäàëè îáúåêò êëàññà
    arth.set_data(); // Óêàçàëè ïåðâûé ÷ëåí ïðîãðåññèè è ðàçíîñòü
    cout << "Arifmeticheskaya Symma";
    cout << "Vvedite n - chislo chlenov progressii";
    cin >> n;
    arth.sum(n);  // Âû÷èñëèì ñóììó n ýëåìåíòîâ

    geometric geo;
    geo. set_data();
    cout <<"Geometricheskaya symma";
    geo.sum(n);
Код


}


странно он не выводит сумму прогрессии, которая получается(((

Это сообщение отредактировал(а) Alexeis - 14.4.2007, 20:05
PM MAIL   Вверх
Xenon
Дата 12.4.2007, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Ну так блин, а ты чего хочешь? Сумма возвращается ПО ЗНАЧЕНИЮ. Никаких телодвижений в сторону вывода на экран в фунции суммы нет.
Код

void main ()
{
    int n;

    arithmetical arth;
    arth.set_data();
    cout << "Vvedite n - chislo chlenov progressii";
    cin >> n;
    cout << "Arifmeticheskaja Symma: " << arth.sum(n);
    geometric geo;
    geo. set_data();
    cout <<"Geometricheskaya symma: " <<  geo.sum(n);
}


Это сообщение отредактировал(а) Xenon - 12.4.2007, 19:20


--------------------
user posted image  
PM MAIL   Вверх
Hihikin
  Дата 12.4.2007, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



спасибо вам!!
завтра понесу сдаватьsmile))
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

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

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


 




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


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

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