Funkcja i zwracanie tablicy

0

Cześć!

Mam problem z napisaną przez siebie funkcją:

void x_sr(int n)

Chciałbym, aby nie tylko wyświetlała ona wyniki (tak jak to obecnie robi), ale bym mógł je w jakiś sposób "przechwycić" - i nie mam tu na myśli plików. Dobrym rozwiązaniem byłoby, żeby zwracała tablicę, którą obecnie zapełnia, tak, bym mógł z niej później korzystać. Innym rozwiązaniem mogłoby być operowanie na zadanej jako parametrze tablicy "po referencji" (wskaźniki?).

Niestety, mimo usilnych prób, nie potrafię sobie poradzić z tym problemem. Najwidoczniej nie do końca rozumiem wskaźniki... Czy moglibyście mi pomóc?

Kod zamieszczam poniżej:

 
#include <iostream>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <fstream>

using namespace std;

void losujPomiary(int n)
{
    double a, b;

    cout << "Podaj interesujacy Cie zakres pomiarow <A, B> (mm) (liczby zmiennoprzecinkowe podajemy z '.'): " << endl;
    cout << "A = ";
    cin >> a;
    cout << endl << "B = ";
    cin >> b;

    ofstream plik("wyniki_pomiarow.txt");

    //nizej: do pliku!
    plik << "Wymiar A: " << endl;

    srand(time(NULL));

    for(int i = 0; i < n; i++)
    {
        plik << (double)rand()/RAND_MAX*(b-a)+a << endl;
    }

    plik << "Wymiar B: " << endl;

    srand(time(NULL));

    for(int i = 0; i < n; i++)
    {
        plik << (double)rand()/RAND_MAX*(b-a)+a << endl;
    }

    plik << "Wymiar C: " << endl;

    srand(time(NULL));

    for(int i = 0; i < n; i++)
    {
        if(i == n-1)
        {
            plik << (double)rand()/RAND_MAX*(b-a)+a;
        }
        else{
            plik << (double)rand()/RAND_MAX*(b-a)+a << endl;
        }
    }

    plik.close();

}

bool czyLiczba(string napis)
{
    bool stan;

    int dlugosc = napis.size();

    for(int i = 0; i < dlugosc; i++)
    {
        if((napis[i] >= '0' && napis[i] <= '9') || (napis[i] == '.'))
        {
            stan = 1;
        }
        else
        {
            stan = 0;
            break;
        }
    }

    return stan;
}

void x_sr(int n)
{
    double tab[3];
    string linia;
    double suma = 0;
    int i = 0;

    ifstream plik("wyniki_pomiarow.txt");

/*    if(plik.good())
    {
        cout << "Plik otworzono." << endl;
    }   */

    //getline(plik, linia);

    for(int k = 0; k < 3; k++)
    {
        while(i != n)
        {
            getline(plik, linia);

            if(czyLiczba(linia) == 1)
            {
                suma += atof(linia.c_str());
                i++;
            }
        }

        tab[k] = suma/n;

        suma = i = 0;

    }

    plik.close();

    cout << "Wartosci srednie (odpowiednio dla A, B, C): " << endl;

    for(int a = 0; a < 3; a++)
    {
        cout << tab[a] << "     ";
    }

    //return tab;
}

int main()
{
    int n;
    char decyzja;
//    double tab_srednie[3];

    cout << "PEM-1" << endl;
    cout << "W pewnym laboratorium mierzono objetosc aluminiowej plytki. Suwmiarka dokonano po " << endl;
    cout << "(ile? - podaj n) ";

    cin >> n;

    cout << " pomiarow, dla wymiarow A, B i C." << endl;

    losujPomiary(n);

    cout << "Pomiary zostaly dokonane. Znajdziesz je w pliku 'wyniki_pomiarow.txt'" << endl;

    cout << "Czy pokazac wyniki? [T/N]" << endl;
    cin >> decyzja;

    if(decyzja == 'T' || decyzja == 't')
    {
        x_sr(n);
    }
    else if(decyzja == 'N' || decyzja == 'n')
    {
        cout << endl << "Koniec pracy programu.";
    }

    return 0;
}
0

Wystarczy zmienić tablicę o stałym rozmiarze na dynamiczną i zmienić typ zwracany przez funkcję:

double* x_sr(int n)
{
    double* tab = new double[3];
    (...)
    return tab;
}

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