Cześć! Mam problem ze zrozumieniem co zrobiłam nie tak jak trzeba. Program dla pierwszego wywołania argumentu funkcji main wybiera wiersz trójkąta Pascala a dla następnych argumentów podaje m-ty element tego wiersza. W Javie wszystko działało, natomiast w C++ wychodzą jakieś śmieci. Chodzi mi o zwrócenie szczególnej uwagi na algorytm w konstruktorze. Będę wdzięczna za każdą pomoc!
#include <iostream>
#include <string>
#include <exception>
using namespace std ;
class WierszTrojkataPascala {
int* trojkat; //deklaracja tablicy dynamicznej, alokujemy pamiec
public:
WierszTrojkataPascala(int n) {
trojkat = new int[n + 1];//tworzymy tablice n+1 elementowa
trojkat[0] = 1;
for (int i = 0; i < n; i++) {
for (int j = i + 1; j > 0; j--)
trojkat[j] = trojkat[j] + trojkat[j - 1];
}
}
int wspolczynnik(int m) throw(string) {
if(m < 0) throw (string)"Nie moze byc numerem w wierszu";
return trojkat[m];
}
~WierszTrojkataPascala();//{ //nazwa destruktora jak nazwa klasy
};
WierszTrojkataPascala:: ~WierszTrojkataPascala(){
delete[] trojkat;
}
int main(int argc, char* argv[]){
int n, k; // n-pierwszy argument(wiersz), k-numer elementu danego wiersza
try {
n = stoi(argv[1]); //konwersja na int, wazna numeracja od 1!
if(n < 0)
cout << argv[1] << " nie moze byc numerem wiersza" << endl;
else {
WierszTrojkataPascala WierszTrojkataPascala(n); //tworzymy obiekt
for (int i = 2; i < argc; i++) {
try {
k = stoi(argv[i]);
cout << argv[i] << " -> " << WierszTrojkataPascala.wspolczynnik(k) << endl;
} catch (const invalid_argument ex) { cout << argv[i] << " nie jest liczba" << endl; }
catch (string ex) {
cout << ex << endl;
}
}
}
}
catch (const invalid_argument ex) {
cout << argv[1] << " -> nie moze byc numerem wiersza" << endl;
}