Program działa ale nie kompiluje się

Odpowiedz Nowy wątek
2014-12-30 15:00
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

edytowany 1x, ostatnio: Qwr2, 2014-12-30 15:01
co to robi ? - Laflx 2014-12-30 16:19
cały program po zakończeniu prac ma symulować opracowywanie wyników przybliżoną metodą prób referencyjnych - Qwr2 2014-12-30 16:26
czyli co? ze porownuje cos do czegos? - Laflx 2014-12-30 16:29

Pozostało 580 znaków

2014-12-30 15:07
char *os_x_wykres[100];
...
sprintf(os_x_wykres[i], "%d", pomocnicza1[i]);

Mażesz po pamięci.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2014-12-30 15:16
0

jakaś podpowiedzi jak to naprawić?

Pozostało 580 znaków

2014-12-30 15:21
1

Podać do sprintf przydzieloną pamięć.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2014-12-30 16:14
0

dzięki za szybką odpowiedz:)

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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