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

Наследование классов - вычисление скользящих средних значений котировок

25.04.2016, 09:53. Показов 685. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
я пытаюсь написать задание к курсовому проекту. суть программы - принимает котировки различных финансовых инструментов из текстового файла и создает объект класса quotes выбрав соответствующий пункт пользователь может их просмотреть (весь список или период или на конкретную дату) следующий класс - наследник от класса quotes - moving_average должен был бы вычислять скользящие средние (ну у меня будут простые мувинги по котировке закрытия, без экспоненты или средневзвешенных), но я ни как не могу разобраться как мне это реализовать. теоретически еще у меня будет еще один класс - macd так же наследник от класса quotes (схож с movieng_average) и класс analysis который будет наследником всех трех классов (это будет множественное наследование) который будет производить простейший анализ на основе данных macd и moving_average и выдавать рекомендации.


main.cpp
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#include <iostream>
#include <fstream> // for open and read file
#include <vector> // for use vector STL
#include <map> // for use map STL
#include "quotes.h"
#include "moving_average.h"
#include "macd.h"
 
std::string for_start(std::string*, int);
bool check (std::string &, std::string *, int);
inline void star(){std::cout<<"\n";for (int i=0;i<80;i++){std::cout<<"*";}}
 
int main(){
 
   std:: string array_quotes[] =  {"GBPUSD","EURUSD","GOLDUSD"};//if you need a new qoute add here
   int size_of_str = sizeof(array_quotes)/sizeof(array_quotes[0]); /* i do it couse have problem with (sizeof(str)/sizeof(str[0])) in func. it retun 0*/
 
   std::map<const std::string, int>for_case;
   for_case["1"]=1;
   for_case["1.1"]=11;
   for_case["2"]=2;
   for_case["2.1"]=21;
 
   std:: string instr = for_start(array_quotes,size_of_str);
   std:: string choise;
   std:: string array_choise[] = {"1","1.1","2","2,1"};
 
   int size_of_choise = sizeof(array_quotes)/sizeof(array_quotes[0]);
 
   while (!check(choise,array_choise,size_of_choise)){
       std::cout<<"Whould you like to see quotes or take some analysis:\n";
       std::cout<<"1 - To see quotes(all quotes we have in our base)\n";
       std::cout<<" 1.1 - To see some period or date (for date just input nothing for end)\n";//
       std::cout<<"2 - Take some analysis( macd + moviend average)\n";
       std::cout<<" 2.1 - Take some analysis for some period\n";
       getline(std::cin,choise);
 
   }
 
   star();
 
   switch(for_case[choise])
   {
   case (1):
       {quotes obj1(instr);//need use {} in case if use variable
       obj1.show_quotes();
       break;}
   case (11):
       {quotes obj1(instr);
       obj1.show_quotes(true);
       break;}
   case (2):
       {
        moving_average obj1();
       break;
       }
   case (21):
       {
 
       break;
       }
   }
 
    std::cin.get();
    return 0;
}
 
bool check (std::string &answer, std::string *str, int SIZE){
   for ( int i = 0; i < SIZE;++i){
        if (str[i] == answer){
            return true;
        }
    }
   std::cout<<"you should choise only i have in my base please.\n";
   return false;
}
 
std::string for_start(std::string *array_quotes, int SIZE){
    std::string txt_begin = "/home/dima/QT_CPP/quotes/"; // change the directory if use in another dir
    std::string txt_end = ".txt";
    /*i use txt_begin and txt_end for write full adress for file*/
    std::string answer;
    while (!check(answer,array_quotes,SIZE)){
       std::cout<<"what instrument you are look for? in my base we are have:\n";
       for (int i = 0; i < SIZE;++i){
           std::cout<<array_quotes[i]<<", ";
       }
       star();
       //std::cout<<"\n";
       std::getline(std::cin,answer);
    }
    txt_begin.append(answer);
    txt_begin.append(txt_end);
    return txt_begin;
}
quotes.h
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
//use doble guard pragma and ifndef
#pragma once
#ifndef QUOTES_H
#define QUOTES_H
#include<iostream>
#include <vector>
#include <string>
 
class quotes {
    private:
    struct my_struct {
        double open,close,high,low;
        std::string date;
    }my_quotes_struct;
    std::vector<my_struct>my_quotes;
 
    public:
    quotes();//i need it for subclasses is not it? (derived classes)
    quotes(std::string&); // constructor with paramerts
    void pars_file(std::string &);// pars file
    void show_quotes();
    void show_quotes(bool);//overload show_quotes
    bool check_period (std::string&,std::string&,int &,int&);
    inline void star(){std::cout<<"\n";for (int i=0;i<80;i++){std::cout<<"*";}}
    ~quotes();//i needn't use it couse i don't use dinamic memmory
};
 
#endif //QUOTES_H
quotes.cpp
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#include "quotes.h"
#include <fstream>//use it for open and read and write in file
#include <iostream>
#include <cstring> // for use substr
#include <cstdlib> //for use atof
#include <iomanip> // for use setw
 
quotes::quotes(std::string& value){
    std::string str;
    std::ifstream file;
    file.open(value.c_str());//try to open file. we need use c_str() couse in standart open take char* but not std::string
    if (!file){
        std::cout<<"somthing wrong chek file's name and restart program\n";
    } else {
        while (file){//while not end of file or we can use file_open.good() or file_open
            file>>str;
            pars_file(str);
        }
    }
    my_quotes.pop_back();//need delite last element of my vector array couse last element write uncorrect
    file.close();
}
 
quotes::~quotes(){};
 
void quotes::pars_file(std::string &str){
   /* catch expression trully i don't see any oversize in my substr construction my catch is crutch*/
   try {
   /* here is i dont want to write some one method for my class and write it's ritgh here*/
    my_quotes_struct.date = str.substr(0,10);//substr method for string
    str = str.substr(17);//do it couse i needn't time data
    my_quotes_struct.open = atof(str.substr(0,str.find(',')).c_str());
    //use atof for take double from char*. but i try use c++ type string that's whay i use c_str();
    str = str.substr(str.find(',')+1);
    my_quotes_struct.close = atof(str.substr(0,str.find(',')).c_str());
    str = str.substr(str.find(',')+1);
    my_quotes_struct.high = atof(str.substr(0,str.find(',')).c_str());
    str = str.substr(str.find(',')+1);
    my_quotes_struct.low = atof(str.substr(0,str.find(',')).c_str());
    }
    catch (const std::exception& out_of_range ) {
    //do nothing
          }
    my_quotes.push_back(my_quotes_struct);
  //std::cout<<my_quotes_struct.date<<" "<<my_quotes_struct.open<<" "<<my_quotes_struct.close<<" "<<my_quotes_struct.high<<" "<<my_quotes_struct.low<<"\n";
}
 
void quotes::show_quotes(){
    if (my_quotes.empty()){ //check vector for emptry. i hope it's will never empty
        std::cout<<"We have some problem, sorre, please restart programm";
    }else {
      for (unsigned int i=0;i<my_quotes.size();++i) {
          std::cout<<std::setw(6)<<my_quotes[i].date<<std::left<<" ";
          std::cout<<std::setw(6)<<my_quotes[i].open<<std::left<<" ";
          std::cout<<std::setw(6)<<my_quotes[i].close<<std::left<<" ";
          std::cout<<std::setw(6)<<my_quotes[i].high<<std::left<<" ";
          std::cout<<std::setw(6)<<my_quotes[i].low<<std::left<<"\n";
      }
    }
}
 
void quotes::show_quotes(bool){
    int begin_index, end_index;
    std::string begin,end;
    std::cout<<"We have quotes from "<<my_quotes[0].date<<" to "
    <<my_quotes[my_quotes.size()-1].date<<
    " to select period set begin and end of period\n";
    while(!check_period(begin,end,begin_index,end_index)) {
        std::cout<<"Please set the date of begin: \n";
        getline(std::cin,begin);
        std::cout<<"Please set the date of end: \n";
        getline(std::cin,end);
    }
    star();
 
    std::cout<<std::setw(10)<<"date"<<std::left<<" ";
    std::cout<<std::setw(6)<<"open"<<std::left<<" ";
    std::cout<<std::setw(6)<<"close"<<std::left<<" ";
    std::cout<<std::setw(6)<<"high"<<std::left<<" ";
    std::cout<<std::setw(6)<<"low"<<std::left<<"\n";
 
    for(int i = begin_index; i<= end_index;i++){
        std::cout<<std::setw(6)<<my_quotes[i].date<<std::left<<" ";
        std::cout<<std::setw(6)<<my_quotes[i].open<<std::left<<" ";
        std::cout<<std::setw(6)<<my_quotes[i].close<<std::left<<" ";
        std::cout<<std::setw(6)<<my_quotes[i].high<<std::left<<" ";
        std::cout<<std::setw(6)<<my_quotes[i].low<<std::left<<"\n";
    }
 
 
}
 
bool quotes::check_period(std::string&begin,std::string&end,int &begin_index, int & end_index){
    bool start;
    bool the_end;
    for(unsigned int i = 0;i<my_quotes.size();++i){
        if (begin == my_quotes[i].date){
            begin_index = i;
            start = true;
            break;
        }
    }
    for(unsigned int i = 0;i<my_quotes.size();++i){
        if (end == my_quotes[i].date || end == ""){//if we want take some date press enter for have no end of period
            end_index = i;
            the_end = true;
            break;
        }
    }
    if(start && the_end){
        return true;
    }else {
        return false;
    }
}
moving_average.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#ifndef MOVING_AVERAGE_H
#define MOVING_AVERAGE_H
#include "quotes.h"
 
 
class moving_average:public quotes{
    private:
    float slow_ma;
    float fast_ma;
 
    public:
    moving_average(int,int,std::string&);
 
};
 
#endif // MOVING_AVERAGE_H
moving_average.cpp
C++
1
2
3
4
5
6
#include "moving_average.h"
 
moving_average::moving_average(int s_ma,int f_ma,std::string&value){
    quotes::quotes(std::string&value);
 
}
вообще ругается на файл moving_average.cpp
/home/dima/QT_CPP/quotes/moving_average.cpp:4: ошибка: expected primary-expression before '&' token
quotes::quotes(std::string&value);
^

/home/dima/QT_CPP/quotes/moving_average.cpp:4: ошибка: cannot call constructor 'moving_average::quotes' directly [-fpermissive]
quotes::quotes(std::string&value);
^

у меня просьба посмотреть, возник вопрос
а) правильно ли я вообще понимаю назначение конструктора (если исходить из его реализации в quotes.h и quotes.cpp).
б) как же мне в классе moving_average эм.. сейчас попробую сформулировать... как же мне создать там объект quotes, чтоб на его основе получить данные для класса movie_average.

п.с. комментарии я не стал удалять, хоть они и на кривом английском.
у нас было очень мало занятий по программированию, совсем мало (да да и по английскому то же), знакомых из этой сферы у меня совсем мало (хм, вообще то их нет, а если и есть, то я не знаю что они из этой области) так, что форум это моя единственный помощник, ну да, за исключением книг и google но я их за сегодня уже затер... и сдался на сегодня самостоятельно понимать. пните в нужном направление пожалуйста.
Спасибо всем, кто дочитал )))

Добавлено через 15 часов 31 минуту
совсем говнокод да? что ни кто не хочет помочь разобраться? )))
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.04.2016, 09:53
Ответы с готовыми решениями:

вычисление средних значений положительных элементов массива
помогите!!!!составтье программу для вычисления средних значений положительных элементов массивов А(5),В(4),С(7) и вывода на экран

Вычисление средних значений среди отрицательных чисел массивов
Даны 5 двумерных массивов A, B, C, D, E разной длины. Разработать процедуру ввода массивов и вычисления средних значений среди...

Вычисление средних значений отрицательных элементов каждого столбца матрицы
подскажите пожалуйсто как решить мне необходимо составить программу для вычисления средних значений отрицательных элементов каждого...

1
0 / 0 / 1
Регистрация: 05.02.2014
Сообщений: 141
26.04.2016, 20:20  [ТС]
хе хе ))) кажись разобрался )
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.04.2016, 20:20
Помогаю со студенческими работами здесь

Вычисление средних значений положительных элементов каждой строки матриц
Помогите, пожалуйста, составить поцедуру. Вот задачка: Составбте программу для вычисления средних значений положительных элементов...

Вычисление средних арифметических значений каждой строки и каждого столбца матрицы
Здравствуйте! Помогите пожалуйста написать программу на Паскале, буду очень благодарен. Программы работы с файлами, подпрограммами,...

Ввод матрицы и вычисление средних арифметических значений каждой строки и каждого столбца
Напишите программу для ввода матрицы и вычисления средних арифметических зна-чений каждой строки и каждого столбца. на языке паскаль

Автоматическая генерация классов С ++ с UML диаграмм классов. Наследование в с++. Абстрактные классы. WhiteStarUML
Создать классовую модель(желательно в WhiteStarUML), которая включает в себя абстрактный класс CGraphicsObject, его наследник - базовый...

Заменить наследование классов на наследование интерфейсов
#include &lt;iostream&gt; #include &lt;assert.h&gt; using namespace std; int people_on_base = 100; int vehicles_on_base = 100; double...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru