[ Igor_022 @ 25.01.2007. 22:37 ] @
Pozdrav! Imam problem - treba da napravim klasu koja ce uzeti neke podatke [tacnije stepen trazenog polinoma i dva niza, koja su rezulata nekog ispitivanja] i da na te podatke primenim, u klasi, metod najmanjih kvadrata - polinomalna varijanta. E sada, kod nije kompletan - odradjen je do tacke kada se formiraju matrice MatS [matrica stepena], MatX i MatY [odnosno red rezultata]. Do sada sredjen program odradi posao, ali samo u slucaju da je stepen trazenog polinoma veci ili jednak 3, inace, ako se stavi 1 ili 2 prijavljuje gresku. Gde gresim? BTW, tek sam poceo da se "igram" sa C++, tako da...sve grdnje, korekcije, savete velikodusno ocekujem ![]() Code: // MNK.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <iostream.h> #include <math.h> #include <stdio.h> #include <cstdlib> //using namespace std; class MetNK { private: int n; //stepen trazenog polinoma int X, Y; //ulazni podaci int **elMatS; //pokazivac na int za smestanje elemenata matrice stepena int redMatS, kolMatS; int **elMatX;//pokazivac na int za smestanje elemenata matrice MatX int redMatX, kolMatX; int *elMatY;//pokazivac na int za smestanje elemenata matrice MatY, koja je red! int redMatY; int *elNizX; int *elNizY; int ulNizX, ulNizY; int *uNizX; int *uNizY; int *nizX, *nizY; int brojIsp; public: MetNK(int n,/* int X, int Y,*/ int brIsp);//konstruktor sa: n ~MetNK(); //destruktor // int &elemMatS(int redMatS, int kolMatS);//vraca referencu na trazeni element matrice stepena void UzmiUlPod(int brIsp, int *nizX, int *nizY); //uzima podatke ulazne podatke void FormMatS(); void VratiPodatak(); }; MetNK::MetNK(int n,/* int X, int Y*/ int brIsp) { // dinamicki niz pokazivaca u koji se smeste adrese dinamickih nizova // od kojih svaki predstavlja po jedan red elemenata matrice redMatS = redMatX = n; kolMatS = kolMatX = n; redMatY = brojIsp = brIsp; elMatS = new int*[redMatS]; elMatX = new int*[redMatX]; elMatY = new int[redMatY]; elNizX = new int[brojIsp]; uNizX = new int[brojIsp]; // nizX = new int[brojIsp]; uNizY = new int[brojIsp]; // nizY = new int[brojIsp]; for (int i(0); i < n; i++) { elMatS[i] = new int[redMatS]; elMatX[i] = new int[redMatX]; } this->redMatS = redMatS; this->kolMatS = kolMatS; this->redMatX = redMatX; this->kolMatX = kolMatX; this->brojIsp = brojIsp; this->redMatY = redMatY; } MetNK::~MetNK() { for (int i(0); i < redMatS; i++) delete[] elMatS[i]; delete[] elMatX[i]; // brisanje svih nizova za redove elemenata delete[] elMatS; // brisanje niza koji je cuvao adrese tih redova elMatS = 0; // postavljanje na NULL pokazivac elMatX = 0; redMatS = kolMatS = 0; redMatX = kolMatX = 0; } void MetNK::UzmiUlPod(int brIsp, int *nizX, int *nizY) { // brojIsp = brIsp; int index (0); for (int i(0); i < brojIsp; i++) { uNizX[i]=nizX[i]; uNizY[i]=nizY[i]; } } void MetNK::VratiPodatak() { cout << elMatX[3][3]+1; } void MetNK::FormMatS() { // formiranje matrice stepena: for (int red(0); red < redMatS; red++) { int suma = red; int rezsuma = suma; for (int kol(0); kol < kolMatS; kol++) { suma = suma + kol; elMatS[red][kol] = suma; suma = rezsuma; cout << elMatS[red][kol] << "\n"; //visak } } // formiranje matrice MatX: for (int red1(0); red1 < redMatX; red1++) { for (int kol1(0); kol1 < kolMatS; kol1++) { int suma = 0; int stepen = elMatS[red1][kol1]; for (int redx(0); redx < brojIsp; redx++) { suma = suma + pow(uNizX[redx],stepen); } elMatX[red1][kol1] = suma; cout << elMatX[red1][kol1] << "\n"; //visak } } //formiranje matrice MatY: for (int red2(0); red2 < redMatY; red2++) { int sumY = 0; for (int kol2(0); kol2 < brojIsp; kol2++) { sumY = sumY + uNizY[kol2]*pow(uNizX[kol2],red2); } elMatY[red2] = sumY; cout << elMatY[red2] << "\n"; //visak } } int main()//int argc, char* argv[]) { int step; int DNizX, DNizY; int UlazX[]={1,2,3,4,5,6}; int UlazY[]={2,6,8,15,28,50}; DNizX = sizeof(UlazX)/sizeof(UlazX[0]); DNizY = sizeof(UlazY)/sizeof(UlazY[0]); if (DNizX != DNizY) //kontrola broja ispitivanja { cout << "Nije isti broj ispitivanja i rezulata! \n"; return 0; }; cout << "Unesi stepen aproksimacionog polinoma: "; cin >> step; step = step + 1; MetNK *M = new MetNK(step, DNizX); M->UzmiUlPod(DNizX, UlazX, UlazY); M->FormMatS(); M->VratiPodatak(); return 0; } |