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;
}