Mam do zrobienia program "Statystyczna analiza danych finansowych". Program już prawie zrobiłam zostało mi tylko narysowanie wykresów dla poszczególnych firm. Jednak nie mam pojęcia jak to zrobić, dlatego proszę o pomoc. Tu jest kod który posiadam
#include <iostream>
#include <string>
#include <math.h>
#include <stdlib.h>
#include <fstream>
using namespace std;
//procedura wyswietlania menu wyboru obliczen
void show_choice_menu(void) {
cout << "Co chcialbys obliczyc?" << endl << \
"1) srednia" << endl << \
"2) odchylenie standardowe" << endl << \
"3) mediane" << endl << \
"4) dominante" << endl << \
"5) kurtoze" << endl << \
"6) wszystko" << endl;
}
//Funkcja sortujaca tablice przez sortowanie babelkowe
void bubblesort(float *table, int size)
{
int i, j;
float temp;
for (i = 0; i<size; i++)
for (j=0; j<size-1; j++)
{
if (table[j] > table[j+1])
{
temp = table[j+1];
table[j+1] = table[j];
table[j] = temp;
}
}
}
//funkcja oblicza mediane jako element srodkowy
float mediana(double* tab[] , long start_date, long end_date) {
int ile = 0;
int liczba = 0;
//zliczanie na ilu elementach bedziemy operowac
for(int i=0;i<53;i++) {
if(long(tab[i][0]) >= start_date && long(tab[i][0]) <= end_date)
{
liczba++;
}
}
//tworzymy tablice o takim rozmiarze
float *tablica = new float[liczba];
//wrzucamy do tej tablicy tylko wartosci elementow z zakresow dat
//ktore nas interesuja
for(int i=0;i<53;i++) {
if(long(tab[i][0]) >= start_date && long(tab[i][0]) <= end_date)
{
tablica[ile] = tab[i][1];
ile++;
}
}
//sortujemy ta tablice babelkowo
bubblesort(tablica,liczba);
//jesli liczba elementow jest nieparzysta to bierzemy element srodkowy
//jesli parzysta to srednia dwoch srodkowych elementow
if(liczba%2 != 0)
return tablica[int(liczba/2)];
else
return (tablica[int(liczba/2)]+tablica[int(liczba/2)-1])/2;
}
//funkcja oblicza dominante jako element wystepujacy najczesciej w probce
float dominanta(double* tab[] , long start_date, long end_date) {
int ile = 0;
int liczba = 0;
int licz = 0;
int max = 0;
int index = 0;
//zliczanie na ilu elementach bedziemy operowac
for(int i=0;i<53;i++) {
if(long(tab[i][0]) >= start_date && long(tab[i][0]) <= end_date)
{
liczba++;
}
}
//tworzymy tablice o takim rozmiarze
float *tablica = new float[liczba];
//wrzucamy do tej tablicy tylko wartosci elementow z zakresow dat
//ktore nas interesuja
for(int i=0;i<53;i++) {
if(long(tab[i][0]) >= start_date && long(tab[i][0]) <= end_date)
{
tablica[ile] = tab[i][1];
ile++;
}
}
//sortujemy ta tablice babelkowo
bubblesort(tablica,liczba);
//poniwaz mamy posortowana tablice to sprawdzamy ktora wartosc wystepuje
//pod rzad najwiecej razy i mamy nasza dominante
for(int i=0;i<liczba;i++)
{
if(tablica[i]==tablica[i+1])
licz++;
if(licz>max)
{
max=licz;
index=i;
}
}
return tablica[index];
}
//funkcja obliczajaca srednia
float srednia(double* tab[] , long start_date, long end_date) {
double sum = 0;
int ile = 0;
for(int i=0;i<53;i++) {
if(long(tab[i][0]) >= start_date && long(tab[i][0]) <= end_date)
{
sum += tab[i][1];
ile++;
}
}
return sum/ile;
}
//funkcja obliczajaca odchylenie standardowe
float odchylenie_std(double* tab[] , long start_date, long end_date) {
float sr = srednia(tab,start_date,end_date);
double sum = 0;
int ile = 0;
double wariancja;
//najpierw musimy obliczyc wariancje
for(int i=0;i<53;i++) {
if(long(tab[i][0]) >= start_date && long(tab[i][0]) <= end_date)
{
sum += pow(tab[i][1]-sr,2);
ile++;
}
}
wariancja = sum/ile;
//zwracamy odchylenie standardowe jako pierwiastek kwiadratowy wariancji
return sqrt(wariancja);
}
float kurtoza(double* tab[] , long start_date, long end_date) {
float sr = srednia(tab,start_date,end_date);
float od = odchylenie_std(tab, start_date, end_date);
double sum = 0;
int ile = 0;
for(int i=0;i<53;i++) {
if(long(tab[i][0]) >= start_date && long(tab[i][0]) <= end_date)
{
sum += pow(tab[i][1]-sr,4);
ile++;
}
}
return sum/pow(od,4);
}
int main(){
int company_choice, calculation_choice;
long start_date, end_date;
string plik;
string company[21] = {"","ASSECOPOL","BOGDANKA","BRE","CEZ","GETIN","HANDLOWY","KERNEL","KGHM", \
"LOTOS","PBG","PGE","PGNIG","PKNORLEN","PZU","PKOBP","GTC","TAURON","TPSA","TVN","PEKAO"};
do {
cout << " \n\n STATYSTYCZNA ANALIZA DANYCH FINANSOWYCH" << endl<<endl << \
"*******************************************************************************"<< endl <<endl<< \
"Notowania ciagle dla firm z WIG20 w okresie od 09-03-2011r. do 23-05-2011r."<< endl << \
"Wybierz firme dla ktorej chcesz wykonac statystyczna analize danych"<< endl<<endl;
for(int i=1;i<21;i++) {
cout << i << " - " << company[i] << endl;
}
cout << endl << "Podaj nr: " << endl ;
cin >> company_choice;
if (company_choice < 1 || company_choice > 20 )
cout << endl << "Niepoprawny numer firmy, podaj jeszcze raz: ";
} while(company_choice < 1 || company_choice > 20);
//nazwa pliku to nazwa indeksu (firmy) plus rozszerzenie .txt
plik = company[company_choice] + ".txt";
//otwieramy plik, jesli wystapi blad (nie mozna otworzyc pliku, plik nie istnieje)
//to przerywamy program
ifstream F(plik.c_str());
if (!F)
{
cout << endl << endl << "BLAD OTWARCIA PLIKU" << endl ;
system("PAUSE");
return 0;
}
//wrzucamy elementy z pliku do tablicy
double **tab;
tab=new double *[53];
for (int i=0;i<53;i++)
{
tab[i]=new double[2];
F >> tab[i][0];
F >> tab[i][1];
}
//wybieramy co chcemy obliczyc
do {
show_choice_menu();
cout << "Podaj liczbe: ";
cin >> calculation_choice;
if(calculation_choice < 1 || calculation_choice > 6)
cout << endl << "Niepoprawny wybor, sprobuj";
} while(calculation_choice < 1 || calculation_choice > 6);
//wybieramy zakres dat w jakich chcemy liczyc
do {
cout << endl << "Podaj date poczatkowa w formacie YYYYMMDD z zakresu od 09-03-2011r. do 23-05-2011r.: " << endl ;
cin >> start_date;
cout << endl << "Podaj date koncowa w formacie YYYYMMDD z zakresu od 09-03-2011r. do 23-05-2011r.: " << endl ;
cin >> end_date;
if (start_date < 20110309 || start_date > 20110523 || end_date < 20110309 || \
end_date > 20110523 || end_date - start_date < 0)
cout << endl << "Niepoprawna data!!!" << endl << endl;
} while(start_date < 20110309 || start_date > 20110523 || end_date < 20110309 || \
end_date > 20110523 || end_date - start_date < 0);
cout << endl << endl << "Wybrales firme " << company[company_choice] << " oraz okres od " << \
start_date << " do " << end_date << endl;
switch( calculation_choice )
{
case 1:
cout << endl << "Srednia arytmetyczna: " << srednia(tab,start_date,end_date) << endl;
cout << endl ;
break;
case 2:
cout << endl << "Odchylenie standardowe: " << odchylenie_std(tab,start_date,end_date) << endl;
cout << endl ;
break;
case 3:
cout << endl << "Mediana: " << mediana(tab,start_date,end_date) << endl;
cout << endl ;
break;
case 4:
cout << endl << "Dominanta: " << dominanta(tab,start_date,end_date) << endl;
cout << endl ;
break;
case 5:
cout << endl << "Kurtoza: " << kurtoza(tab,start_date,end_date) << endl;
cout << endl ;
break;
case 6:
cout << endl << "Srednia arytmetyczna: " << srednia(tab,start_date,end_date) << endl;
cout << "Odchylenie standardowe: " << odchylenie_std(tab,start_date,end_date) << endl;
cout << "Mediana: " << mediana(tab,start_date,end_date) << endl;
cout << "Dominanta: " << dominanta(tab,start_date,end_date) << endl;
cout << "Kurtoza: " << kurtoza(tab,start_date,end_date) << endl;
cout << endl ;
break;
}
//czekamy na nacisniecie dowolnego klawisza od uzytkownika
system("PAUSE");
return 0;
}