Witam.
Mój problem polega na tym że kod źródłowy się kompiluje ale w trakcie jego wykonywania otrzymuje błąd z którym nie mogę sobie poradzić.
#include <stdio.h>
#include <iostream>
#include <random>
#include <cmath>
#include "chartdir.h"
#include <cstdio>
using namespace std;
char *os_x_wykres[100];
double os_y_wykres[100];
double proba_losowa_we[200];
double proba_referencyjan1[200];
double proba_referencyjna2[200];
double proba_referencyjna3[200];
int wybor, liczebnosc_proby,wartosc_oczekiwana,odchylenie;
int liczebnosc_referencyjnej1,war_odch_referencyjna1,war_ocz_referencyjna1;
int liczebnosc_referencyjnej2,war_odch_referencyjna2,war_ocz_referencyjna2;
int liczebnosc_referencyjnej3,war_odch_referencyjna3,war_ocz_referencyjna3;
void wyswietl(double tab[], int liczebnosc);
void sortowanie(double tab[], int ilosc_elementow);
void zaokraglanie(double tab[],int ilosc_elementow);
void standardowa_metoda_opracowan_wynikow(double tab[],int liczebnosc);
void gen_prob_ref(double tab[],int liczebnosc,int oczekiwana,int odchylenie);
void createChart(int img, const char *filename,double data[],char* labels[],int liczba1, int liczba2);
void main()
{
for(int rep=0;rep<200;rep++)
{
cout<<"Wybierz odpowiednią opcje \n";
cout<<"1. Wygeneruj próbe losową nie większą niż 100 \n";
cout<<"2. Przeprowadz opracowanie wyników standardową metodą \n";
cout<<"3. Wygeneruj próby referencyjne \n";
cout<<"4. Przeprowadz opracowanie wyników przybliżoną metodą prób referencyjnych \n";
cin >>wybor;
switch(wybor)
{
case 1: {
cout<<"Podaj liczebnosc proby nie wieksza niz 200 \n";
cin >> liczebnosc_proby;
if (liczebnosc_proby <0)
{cout<<"Zbyt mała liczebnosc próby losowej podaj inna \n"; wybor=1;}
if (liczebnosc_proby >200)
{cout<<"Zbyt duza liczebnosc próby losowej podaj inna \n"; wybor=1;}
cout<<"Podaj maximum i minimum rozkldadu \n";
cout <<"wartosc oczekiwana \n";
cin>> wartosc_oczekiwana;
cout <<"odchylenie \n";
cin>> odchylenie;
random_device rd; // non-deterministic generator
mt19937 gen(rd()); // to seed mersenne twister.
normal_distribution<> dist(wartosc_oczekiwana,odchylenie); // distribute results between 1 and 6 inclusive.
for (int i = 0; i < liczebnosc_proby; ++i) {
proba_losowa_we[i]=dist(gen);}// pass the generator to the distribution.
sortowanie(proba_losowa_we,liczebnosc_proby);
zaokraglanie(proba_losowa_we,liczebnosc_proby);
wyswietl(proba_losowa_we,liczebnosc_proby);
cout<<" \n";
break;
}
case 2: {standardowa_metoda_opracowan_wynikow(proba_losowa_we,liczebnosc_proby); cout<<" \n";break;}
case 3: {cout<<"Podaj liczebnosc próby referencyjnej \n";
cin>>liczebnosc_referencyjnej1;
cout<<"Podaj wartość oczekiwaną próby oraz odchylenie \n"<<"Wartosc oczekiwana \n";
cin>>war_ocz_referencyjna1;
cout<<"Odchylenie próby";
cin>>war_odch_referencyjna1;
gen_prob_ref(proba_referencyjan1,liczebnosc_referencyjnej1,war_ocz_referencyjna1,war_odch_referencyjna1);
wyswietl(proba_referencyjan1,liczebnosc_referencyjnej1);
cout<<" \n";
//II próba
cout<<"Podaj liczebnosc próby referencyjnej \n";
cin>>liczebnosc_referencyjnej2;
cout<<"Podaj wartość oczekiwaną próby oraz odchylenie \n"<<"Wartosc oczekiwana \n";
cin>>war_ocz_referencyjna2;
cout<<"Odchylenie próby";
cin>>war_odch_referencyjna2;
gen_prob_ref(proba_referencyjna2,liczebnosc_referencyjnej2,war_ocz_referencyjna2,war_odch_referencyjna2);
wyswietl(proba_referencyjna2,liczebnosc_referencyjnej2);
cout<<" \n";
//III próba
cout<<"Podaj liczebnosc próby referencyjnej \n";
cin>>liczebnosc_referencyjnej3;
cout<<"Podaj wartość oczekiwaną próby oraz odchylenie \n"<<"Wartosc oczekiwana \n";
cin>>war_ocz_referencyjna3;
cout<<"Odchylenie próby";
cin>>war_odch_referencyjna3;
gen_prob_ref(proba_referencyjna3,liczebnosc_referencyjnej3,war_ocz_referencyjna3,war_odch_referencyjna3);
wyswietl(proba_referencyjna3,liczebnosc_referencyjnej3);
cout<<" \n";
break;
}
}
}
}
void sortowanie(double tab[], int ilosc_elementow)
{ double pomocnicza;
for(int i=0;i<ilosc_elementow;i++)
for(int j=0;j<ilosc_elementow;j++)
if(tab[i]<tab[j])
{pomocnicza=tab[i];
tab[i]=tab[j];
tab[j]=pomocnicza;}
}
void zaokraglanie(double tab[],int ilosc_elementow)
{
for(int i=0;i<ilosc_elementow;i++)
tab[i]=floor(tab[i]);
}
void standardowa_metoda_opracowan_wynikow(double tab[],int liczebnosc)
{int suma,j,k;
int pomocnicza1[200];
double pomocnicza2[200];
double srednia,odchylenie,wariancja;
srednia=0;
suma=0;
odchylenie=0;
wariancja=0;
//średnia
for(int i=0;i<liczebnosc;i++)
suma=suma+tab[i];
srednia=suma/liczebnosc;
cout<<"Srednia="<<srednia<<" \n";
//wariancja
suma=0;
for(int i=0;i<liczebnosc;i++)
suma=suma+((tab[i]-srednia)*(tab[i]-srednia));
wariancja=suma/liczebnosc;
cout<<"wariancja="<<wariancja<<" \n";
//odchylenie stand
odchylenie=sqrt(wariancja);
cout<<"Odchylenie standardowe="<<odchylenie<<" \n";
//dystrybuanta
j=-1;
for(int i=0;i<liczebnosc;i++)
if(pomocnicza1[j]!=tab[i])
{ j++;
pomocnicza1[j]=tab[i];
}
j++;
pomocnicza1[j]=tab[liczebnosc];
//zliczanie
k=0;
for(int i=0;i<j;i++)
pomocnicza2[i]=0;
for(int i=0;i<liczebnosc;i++)
if(pomocnicza1[k]==tab[i])
pomocnicza2[k]++;
else
{
k++;
pomocnicza2[k]++;
}
for (int i =0; i<j;i++)
cout<<pomocnicza1[i]<<" ";
cout<<" \n";
for (int i = 0; i < j; i++)
cout<<pomocnicza2[i]<<" ";
for (int i=0;i<j;i++)
if(tab[i]<0)
{
//pomocnicza1[i]=sqrt(pomocnicza1[i]*pomocnicza1[i]);
sprintf(os_x_wykres[i], "%d", pomocnicza1[i]);}
else
sprintf(os_x_wykres[i], "%d", pomocnicza1[i]);
createChart(0,"wykres.bmp",pomocnicza2,os_x_wykres,j,liczebnosc);
}
void wyswietl(double tab[], int liczebnosc)
{
for (int i = 0; i < liczebnosc; ++i)
cout<<tab[i]<<" ";
cout<" \n";
}
void gen_prob_ref(double tab[],int liczebnosc,int oczekiwana,int odchylenie)
{
random_device rd; // non-deterministic generator
mt19937 gen(rd()); // to seed mersenne twister.
normal_distribution<> dist(oczekiwana,odchylenie); // distribute results between 1 and 6 inclusive.
for (int i = 0; i < liczebnosc; ++i) {
tab[i]=dist(gen);}// pass the generator to the distribution.
sortowanie(tab,liczebnosc);
zaokraglanie(tab,liczebnosc);
}
void createChart(int img, const char *filename,double data[],char* labels[],int liczba1, int liczba2)
{
char buffer[256];
double bargap = img * 0.25 - 0.25;
// The data for the bar chart
// The labels for the bar chart
// const char *labels[] = {"Mon", "Tue", "Wed", "Thu", "Fri"};
// Create a XYChart object of size 150 x 150 pixels
XYChart *c = new XYChart(150, 150);
// Set the plotarea at (27, 20) and of size 120 x 100 pixels
c->setPlotArea(27, 20, 120, 100);
// Set the labels on the x axis
c->xAxis()->setLabels(StringArray(labels,liczba2));
if (bargap >= 0) {
// Add a title to display to bar gap using 8 pts Arial font
sprintf(buffer, " Bar Gap = %g", bargap);
c->addTitle(buffer, "arial.ttf", 8);
} else {
// Use negative value to mean TouchBar
c->addTitle(" Bar Gap = TouchBar", "arial.ttf", 8);
bargap = Chart::TouchBar;
}
// Add a bar chart layer using the given data and set the bar gap
c->addBarLayer(DoubleArray(data,liczba1))->setBarGap(bargap);
// Output the chart
c->makeChart(filename);
//free up resources
delete c;
}
a to błąd
Bez tytułu.png