Program działa ale nie kompiluje się

0

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

1
char *os_x_wykres[100];
...
sprintf(os_x_wykres[i], "%d", pomocnicza1[i]);

Mażesz po pamięci.

0

jakaś podpowiedzi jak to naprawić?

1

Podać do sprintf przydzieloną pamięć.

0

dzięki za szybką odpowiedz:)

1 użytkowników online, w tym zalogowanych: 0, gości: 1