Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[C++] Klasa Liczb Zespolonych

michalekopalek 22 Kwi 2009 12:38 4917 14
  • #1 22 Kwi 2009 12:38
    michalekopalek
    Poziom 8  

    Mam problem ! Napisałem program liczacy układ rownan liniowych 4 zmiennych. Chce teraz aby współczynnikami były liczby zespolone .Dodałem klasę Liczby zespolonej, przeciązylem operatory, ale wyskakuje mi mnóstwo bledów . Domyślam sie, ze mam cos nie tak z konstruktorem klasy liczb zespolonych i cos z niejawna konwersja w nastpestwie.
    Byłbym bardzo wdzięczny, gdyby ktos podpowiedział, bo siedze nad tym juz kilka dni .

    Oto kod :

    Code:
    #include <iostream>
    
    #include <iomanip>
    #include <cctype>
    #include<cstdlib>
    #include<cmath>

    using namespace std;

    struct LZ
    {
    public:
     
      explicit LZ(float _re=0,float _im=0);s
     
     LZ operator +(LZ &Z2)const
      {
        LZ suma;
        suma._re=_re+Z2._re;
        suma._im=_im+Z2._im;
        return suma;
      }
      LZ operator -(LZ &Z2)const
      {
        LZ roznica;
        roznica._re=_re-Z2._re;
        roznica._im=_im-Z2._im;
        return roznica;
      }
      LZ operator *(LZ &Z2)const
      {
        LZ iloczyn;
        iloczyn._re=_re*Z2._re-_im*Z2._im;
        iloczyn._im=_re*Z2._im+_im*Z2._re;
        return iloczyn;
      }
     LZ operator /(LZ &Z2)const
      {
        LZ iloraz;
        iloraz._re=(_re*Z2._re+_im*Z2._im)/(_re*_re+Z2._re*Z2._re);
        iloraz._im=(Z2._re*_im-_re*Z2._im)/(_re*_re+Z2._re*Z2._re);
        return iloraz;
    }

    };


    struct URL
    {
    public:
      LZ ;
      LZ Macierz[16]; //tablica przechowujaca wspolczynniki
      LZ Wolne[4]; //tablica z wyrazami wolnymi
      LZ x,y,z,w; //zmienne do ktorych zostaja zapisywane koncowe wyniki
      friend ostream & operator <<(ostream &,URL&);
      friend istream & operator >>(istream &,URL&);

      /*po eliminacji gaussa metoda wynik wylicza niewiadome*/
      bool Wynik()
      {
        w=Wolne[3]/Macierz[15];
        z=Wolne[2]-Macierz[11]*w;
        y=Wolne[1]-Macierz[7]*w-Macierz[6]*z;
        x=Wolne[0]-Macierz[3]*w-Macierz[2]*z-Macierz[1]*y;
       
        cout<<"X1="<<x<<endl<<"X2="<<y<<endl<<"X3="<<z<<endl<<"X4="<<w<<endl;




        return true;
      }
      /*metoda blad wylicza blad obliczen jako norme Ax -b*/
      float Blad()
      {
        LZ blad;
        LZ WekBlad[3];   
        for(int i=0;i<4;i++){WekBlad[i]=0;}
     
        WekBlad[0]=x*Macierz[0]+ y*Macierz[1]+ z*Macierz[2] +w*Macierz[3]-Wolne[0];
       
        WekBlad[1]=x*Macierz[4]+ y*Macierz[5]+ z*Macierz[6] +w*Macierz[7]-Wolne[1];
     
        WekBlad[2]=x*Macierz[8]+ y*Macierz[9]+ z*Macierz[10] +w*Macierz[11]-Wolne[2];
       
        WekBlad[3]=x*Macierz[12]+ y*Macierz[13]+ z*Macierz[14] +w*Macierz[15]-Wolne[3];
     
        float bl=(pow(WekBlad[0],2))+(pow(WekBlad[1],2))+(pow(WekBlad[2],2))+(pow(WekBlad[3],2));
        float Blad=sqrt(bl);
        cout<<"Blad obliczen:"<<setprecision (2)<<Blad<<endl;
       
        return blad;
      }
    };

    /*metoda przeprowadzajaca eliminacje Gauss'a*/
    /*poszczegolne kroki opisalem ponizej*/
    URL:: URL Eliminacja(URL Wynik)
      {
        LZ pom,POM[10];
        //zamiana wiersza w momencie , gdy pojawia sie zero na przekatnej
        if(Wynik.Macierz[0]==0.0)
          {
       int n=4;
       int m=1;
       while(Wynik.Macierz[n]==0)
         {
           n+=4;
           m++;
         }
       pom=Wynik.Wolne[m];
       Wynik.Wolne[m]=Wynik.Wolne[0];
       Wynik.Wolne[0]=pom;
       for(int i=0;i<4;i++)
         {
           POM[i]=Wynik.Macierz[i];
           Wynik.Macierz[i]=Wynik.Macierz[n+i];
           Wynik.Macierz[n+i]=POM[i];
         }
          }
     
        //podzielenie pierwszego wiersza przez pierwszy element macierzy
        Wynik.Wolne[0]/=Wynik.Macierz[0];
        for(int i=3;i>=0;i--)
          {
       Wynik.Macierz[i]/=Wynik.Macierz[0];
          }
       
        //wyzerowanie  trzech

       
        Wynik.Wolne[1]-=(Wynik.Wolne[0]*Wynik.Macierz[4]); // W2-Tab[4]W1
        for(int i=7;i>=4;i--)
          {
       Wynik.Macierz[i]-=(Wynik.Macierz[i-4]*Wynik.Macierz[4]);
          }
       
        Wynik.Wolne[2]-=(Wynik.Wolne[0]*Wynik.Macierz[8]);//W3-Tab[8]W1
        for(int i=11;i>=8;i--)
          {
       Wynik.Macierz[i]-=(Wynik.Macierz[i-8]*Wynik.Macierz[8]);
         }   
       
        Wynik.Wolne[3]-=(Wynik.Wolne[0]*Wynik.Macierz[12]);//W4-Tab[12]W1
        for(int i=15;i>=12;i--)
          {
       Wynik.Macierz[i]-=(Wynik.Macierz[i-12]*Wynik.Macierz[12]);
          }
       //ponowne sprawdzenie, czy na przekatnej nie ma zera
       
        if(Wynik.Macierz[5]==0.0)
          {
       int n=8;
       int m=1;
       while(Wynik.Macierz[n]!=0)
         {
           n+=4;
           m++;
         }
       
       pom=Wynik.Wolne[m];
       Wynik.Wolne[m]=Wynik.Wolne[m+1];
       Wynik.Wolne[m+1]=pom;
       for(int i=n;i<n+4;i++)
         {
           POM[i]=Wynik.Macierz[i];
           Wynik.Macierz[i]=Wynik.Macierz[i+n];
           Wynik.Macierz[i+n]=POM[i];
         }
          }
       
    //zrobienie nastepnej 1
        Wynik.Wolne[1]/=Wynik.Macierz[5];//W2:Tab[5]
        for(int i=7;i>=5;i--)
          {
       Wynik.Macierz[i]/=Wynik.Macierz[5];
          }
        //wyzerowanie dwoch
        Wynik.Wolne[2]-=(Wynik.Wolne[1]*Wynik.Macierz[9]); //W3-Tab[9]W2
        for(int i=11;i>=9;i--)
          {
       Wynik.Macierz[i]-=(Wynik.Macierz[i-4]*Wynik.Macierz[9]);
          }
        Wynik.Wolne[3]-=(Wynik.Wolne[1]*Wynik.Macierz[13]);//W4-Tab[13]W2
        for(int i=15;i>=13;i--)
          {
       Wynik.Macierz[i]-=(Wynik.Macierz[i-8]*Wynik.Macierz[13]);
          }
        //znowu sprawdzenie czy nie ma zera na przekatnej
        if(Wynik.Macierz[10]==0.0)
          {
       int n=12;
       int m=2;
       while(Wynik.Macierz[n]!=0)
         {
           n+=4;
           m++;
         }
       
       pom=Wynik.Wolne[m];
       Wynik.Wolne[m]=Wynik.Wolne[m+1];
       Wynik.Wolne[m+1]=pom;
       for(int i=n;i<n+4;i++)
         {
           POM[i]=Wynik.Macierz[i];
           Wynik.Macierz[i]=Wynik.Macierz[i+n];
           Wynik.Macierz[i+n]=POM[i];
         }
          }   
     
        //nastepna 1
        Wynik.Wolne[2]/=Wynik.Macierz[10];//W3:Tab[10]
        for(int i=11;i>=10;i--)
          {
       Wynik.Macierz[i]/=Wynik.Macierz[10];
          }
        //wyzerowanie jednej
        Wynik.Wolne[3]-=(Wynik.Wolne[2]*Wynik.Macierz[14]); //W4 -Tab[14]W3
        for(int i=15;i>=14;i--)
          {
       Wynik.Macierz[i]-=(Wynik.Macierz[i-4]*Wynik.Macierz[14]);
          }
       
        //podanie wyniku
       
     
       
        return Wynik;
      }


    bool CzyLiczbaDoWczytania()
    {
      char  PierwszyZnak;
      bool  JestLiczba = false;

      while (isspace(PierwszyZnak = cin.get()) && PierwszyZnak != EOF) ;
      if (PierwszyZnak == EOF) exit(0);

      if (PierwszyZnak == '+' || PierwszyZnak == '-') {
        JestLiczba = isdigit(cin.get());
        cin.unget();
      } else JestLiczba = isdigit(PierwszyZnak);

      cin.putback(PierwszyZnak);
      return JestLiczba;
    }

    /*przeciazenie operatora wejsciowego dla liczb zespolonych*/

    istream&operator >> (istream&StrmWe,LZ &zespolona)
    {
      char Znak;
      StrmWe >> Znak;
      if(CzyLiczbaDoWczytania())
        {
          StrmWe>>zespolona._re;
        }
      else
        {exit(1);}
      StrmWe>> Znak;
      if(CzyLiczbaDoWczytania())
        {
          StrmWe>>zespolona._im;
        }
      else
        {exit(1);}
      return StrmWe;
    }

    /*przeciazenie operatora wyjsciowego dla liczb zespolonych*/

    ostream&operator<< (ostream&StrmWyj,LZ & zespolona)
    {
      cout<<zespolona._re;
      if(zespolona._im<0)
        {
          cout<<zespolona._im;
        }
      else
        {
          cout<<'+'<<zespolona._im;
        }
      return StrmWyj;
    }

    /*przeciazenia operatora wejsciowego dla URL*/

    istream & operator >> (istream & StrmWe,URL  & macierz) {
      char Znak;
      StrmWe >> Znak;
      if(Znak!='(')
        {   
          if(Znak !='|')exit(1);
          for (int i=0;i<4;i++)
       {
         cin>>macierz.Macierz[i];
       }
          StrmWe >> Znak;
          if (Znak!='|')exit(1);//koniec pierwszego wiersza
         
          StrmWe>>Znak;
          if(Znak !='|')exit(1);
          for (int i=4;i<8;i++)
       {
         cin>>macierz.Macierz[i];
       }
          StrmWe >> Znak;
          if (Znak!='|')exit(1);//koniec drugiego wiersza
         
          StrmWe>>Znak;
          if(Znak !='|')exit(1);
          for (int i=8;i<12;i++)
       {
         cin>>macierz.Macierz[i];
       }
          StrmWe >> Znak;
          if (Znak!='|')exit(1);//koniec trzeciego wiersza
         
          StrmWe>>Znak;
          if(Znak !='|')exit(1);
          for (int i=12;i<16;i++)
       {
        cin>>macierz.Macierz[i];
       }
          StrmWe >> Znak;
          if (Znak!='|')exit(1);//koniec czwartego wiersza
         
          return(StrmWe);
        }
      else //tu wczytywanie wektora wyrazow wolnych
        {
          if (CzyLiczbaDoWczytania()){ StrmWe>>macierz.Wolne[0];}
          StrmWe >> Znak;
          if (Znak!=',')exit(1);
          if (CzyLiczbaDoWczytania()) { StrmWe>>macierz.Wolne[1];}
          StrmWe >> Znak;
          if (Znak!=',')exit(1);
          if (CzyLiczbaDoWczytania()) {StrmWe>>macierz.Wolne[2];}
          StrmWe >> Znak;
          if (Znak!=',')exit(1);
          if (CzyLiczbaDoWczytania()) {StrmWe>>macierz.Wolne[3];}
          StrmWe >> Znak;
          if (Znak!=')')exit(1);
          return(StrmWe);
        }
    }

    /*przeciazenie operatora wyjsciowego dla URL*/

    ostream&operator << (ostream&StrmWyj,URL & DoWysw)
    {

      cout<<'|'<<DoWysw.Macierz[0]<<' '<<DoWysw.Macierz[1]<<' '<<DoWysw.Macierz[2]<<' '<<DoWysw.Macierz[3]<<'|'<<' '<<'|'<<"X1"<<'|'<<"   "<<'|'<<DoWysw.Wolne[0]<<'|'<<endl;
      cout<<'|'<<DoWysw.Macierz[4]<<' '<<DoWysw.Macierz[5]<<' '<<DoWysw.Macierz[6]<<' '<<DoWysw.Macierz[7]<<'|'<<' '<<'|'<<"X2"<<'|'<<" = "<<'|'<<DoWysw.Wolne[1]<<'|'<<endl;
      cout<<'|'<<DoWysw.Macierz[8]<<' '<<DoWysw.Macierz[9]<<' '<<DoWysw.Macierz[10]<<' '<<DoWysw.Macierz[11]<<'|'<<' '<<'|'<<"X3"<<'|'<<"   "<<'|'<<DoWysw.Wolne[2]<<'|'<<endl;
      cout<<'|'<<DoWysw.Macierz[12]<<' '<<DoWysw.Macierz[13]<<' '<<DoWysw.Macierz[14]<<' '<<DoWysw.Macierz[15]<<'|'<<' '<<'|'<<"X4"<<'|'<<"   "<<'|'<<DoWysw.Wolne[3]<<'|'<<endl;
     
     
      return StrmWyj;
    }


    int main()
    {
      URL a,b;
     
      cout<<"Witaj w programie rozwiazujacym URL"<<endl;
      cout<<"Podaj w postaci macierzy współczynniki URL"<<endl;
      cin>>a;
      cout<<"Teraz podaj wyrazy wolne URL"<<endl;
      cin>>a;
      cout<<"Rozwiazywane rowananie to: AX=B"<<endl;
      cout <<a;
      b=Eliminacja(a);
      b.Wynik();
      a.x=b.x;
      a.y=b.y;
      a.z=b.z;
      a.w=b.w;
     
      a.Blad();
      return 1;
    }

    0 14
  • #2 22 Kwi 2009 14:42
    lord_dagoth
    Poziom 25  

    No to wklej te błędy jeszcze.

    0
  • #3 22 Kwi 2009 15:31
    michalekopalek
    Poziom 8  

    Oto te błędy, na prawde sie tam zle dzieje :(


    rownania.cpp:13: error: ‘s’ does not name a type
    rownania.cpp: In member function ‘LZ LZ::operator-(LZ&) const’:
    rownania.cpp:25: error: ‘struct LZ’ has no member named ‘_re’
    rownania.cpp:25: error: ‘_re’ was not declared in this scope
    rownania.cpp:25: error: ‘struct LZ’ has no member named ‘_re’
    rownania.cpp:26: error: ‘struct LZ’ has no member named ‘_im’
    rownania.cpp:26: error: ‘_im’ was not declared in this scope
    rownania.cpp:26: error: ‘struct LZ’ has no member named ‘_im’
    rownania.cpp: In member function ‘LZ LZ::operator*(LZ&) const’:
    rownania.cpp:32: error: ‘struct LZ’ has no member named ‘_re’
    rownania.cpp:32: error: ‘_re’ was not declared in this scope
    rownania.cpp:32: error: ‘struct LZ’ has no member named ‘_re’
    rownania.cpp:32: error: ‘_im’ was not declared in this scope
    rownania.cpp:32: error: ‘struct LZ’ has no member named ‘_im’
    rownania.cpp:33: error: ‘struct LZ’ has no member named ‘_im’
    rownania.cpp:33: error: ‘struct LZ’ has no member named ‘_im’
    rownania.cpp:33: error: ‘struct LZ’ has no member named ‘_re’
    rownania.cpp: In member function ‘LZ LZ::operator/(LZ&) const’:
    rownania.cpp:39: error: ‘struct LZ’ has no member named ‘_re’
    rownania.cpp:39: error: ‘_re’ was not declared in this scope
    rownania.cpp:39: error: ‘struct LZ’ has no member named ‘_re’
    rownania.cpp:39: error: ‘_im’ was not declared in this scope
    rownania.cpp:39: error: ‘struct LZ’ has no member named ‘_im’
    rownania.cpp:39: error: ‘struct LZ’ has no member named ‘_re’
    rownania.cpp:39: error: ‘struct LZ’ has no member named ‘_re’
    rownania.cpp:40: error: ‘struct LZ’ has no member named ‘_im’
    rownania.cpp:40: error: ‘struct LZ’ has no member named ‘_re’
    rownania.cpp:40: error: ‘struct LZ’ has no member named ‘_im’
    rownania.cpp:40: error: ‘struct LZ’ has no member named ‘_re’
    rownania.cpp:40: error: ‘struct LZ’ has no member named ‘_re’
    rownania.cpp: At global scope:
    rownania.cpp:50: error: declaration does not declare anything
    rownania.cpp: In member function ‘bool URL::Wynik()’:
    rownania.cpp:61: error: no match for ‘operator-’ in ‘((URL*)this)->URL::Wolne[2] - ((URL*)this)->URL::Macierz[11].LZ::operator*(((LZ&)(&((URL*)this)->URL::w)))’
    rownania.cpp:22: note: candidates are: LZ LZ::operator-(LZ&) const
    rownania.cpp:62: error: no match for ‘operator-’ in ‘((URL*)this)->URL::Wolne[1] - ((URL*)this)->URL::Macierz[7].LZ::operator*(((LZ&)(&((URL*)this)->URL::w)))’
    rownania.cpp:22: note: candidates are: LZ LZ::operator-(LZ&) const
    rownania.cpp:63: error: no match for ‘operator-’ in ‘((URL*)this)->URL::Wolne[0] - ((URL*)this)->URL::Macierz[3].LZ::operator*(((LZ&)(&((URL*)this)->URL::w)))’
    rownania.cpp:22: note: candidates are: LZ LZ::operator-(LZ&) const
    rownania.cpp:65: error: no match for ‘operator<<’ in ‘std::operator<< [with _Traits = std::char_traits<char>](((std::basic_ostream<char, std::char_traits<char> >&)(& std::cout)), ((const char*)"X1=")) << ((URL*)this)->URL::x’
    /usr/include/c++/4.3/ostream:112: note: candidates are: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(std::basic_ostream<_CharT, _Traits>& (*)(std::basic_ostream<_CharT, _Traits>&)) [with _CharT = char, _Traits = std::char_traits<char>]
    /usr/include/c++/4.3/ostream:121: note: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(std::basic_ios<_CharT, _Traits>& (*)(std::basic_ios<_CharT, _Traits>&)) [with _CharT = char, _Traits = std::char_traits<char>]
    /usr/include/c++/4.3/ostream:131: note: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(std::ios_base& (*)(std::ios_base&)) [with _CharT = char, _Traits = std::char_traits<char>]
    /usr/include/c++/4.3/ostream:169: note: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(long int) [with _CharT = char, _Traits = std::char_traits<char>]
    /usr/include/c++/4.3/ostream:173: note: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(long unsigned int) [with _CharT = char, _Traits = std::char_traits<char>]
    /usr/include/c++/4.3/ostream:177: note: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(bool) [with _CharT = char, _Traits = std::char_traits<char>]
    /usr/include/c++/4.3/bits/ostream.tcc:97: note: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(short int) [with _CharT = char, _Traits = std::char_traits<char>]
    /usr/include/c++/4.3/ostream:184: note: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(short unsigned int) [with _CharT = char, _Traits = std::char_traits<char>]
    /usr/include/c++/4.3/bits/ostream.tcc:111: note: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(int) [with _CharT = char, _Traits = std::char_traits<char>]
    /usr/include/c++/4.3/ostream:195: note: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(unsigned int) [with _CharT = char, _Traits = std::char_traits<char>]
    /usr/include/c++/4.3/ostream:204: note: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(long long int) [with _CharT = char, _Traits = std::char_traits<char>]
    /usr/include/c++/4.3/ostream:208: note: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(long long unsigned int) [with _CharT = char, _Traits = std::char_traits<char>]
    /usr/include/c++/4.3/ostream:213: note: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(double) [with _CharT = char, _Traits = std::char_traits<char>]
    /usr/include/c++/4.3/ostream:217: note: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(float) [with _CharT = char, _Traits = std::char_traits<char>]
    /usr/include/c++/4.3/ostream:225: note: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(long double) [with _CharT = char, _Traits = std::char_traits<char>]
    /usr/include/c++/4.3/ostream:229: note: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(const void*) [with _CharT = char, _Traits = std::char_traits<char>]
    /usr/include/c++/4.3/bits/ostream.tcc:125: note: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(std::basic_streambuf<_CharT, _Traits>*) [with _CharT = char, _Traits = std::char_traits<char>]
    rownania.cpp: In member function ‘float URL::Blad()’:
    rownania.cpp:73: error: no match for ‘operator=’ in ‘WekBlad[i] = 0’
    rownania.cpp:10: note: candidates are: LZ& LZ::operator=(const LZ&)
    rownania.cpp:75: error: no match for ‘operator+’ in ‘((URL*)this)->URL::x.LZ::operator*(((LZ&)(&((URL*)this)->URL::Macierz[0]))) + ((URL*)this)->URL::y.LZ::operator*(((LZ&)(&((URL*)this)->URL::Macierz[1])))’
    rownania.cpp:77: error: no match for ‘operator+’ in ‘((URL*)this)->URL::x.LZ::operator*(((LZ&)(&((URL*)this)->URL::Macierz[4]))) + ((URL*)this)->URL::y.LZ::operator*(((LZ&)(&((URL*)this)->URL::Macierz[5])))’
    rownania.cpp:79: error: no match for ‘operator+’ in ‘((URL*)this)->URL::x.LZ::operator*(((LZ&)(&((URL*)this)->URL::Macierz[8]))) + ((URL*)this)->URL::y.LZ::operator*(((LZ&)(&((URL*)this)->URL::Macierz[9])))’
    rownania.cpp:81: error: no match for ‘operator+’ in ‘((URL*)this)->URL::x.LZ::operator*(((LZ&)(&((URL*)this)->URL::Macierz[12]))) + ((URL*)this)->URL::y.LZ::operator*(((LZ&)(&((URL*)this)->URL::Macierz[13])))’
    rownania.cpp:83: error: no matching function for call to ‘pow(LZ&, int)’
    /usr/include/bits/mathcalls.h:154: note: candidates are: double pow(double, double)
    /usr/include/c++/4.3/cmath:380: note: long double std::pow(long double, int)
    /usr/include/c++/4.3/cmath:376: note: float std::pow(float, int)
    /usr/include/c++/4.3/cmath:372: note: double std::pow(double, int)
    /usr/include/c++/4.3/cmath:367: note: long double std::pow(long double, long double)
    /usr/include/c++/4.3/cmath:363: note: float std::pow(float, float)
    rownania.cpp:83: error: no matching function for call to ‘pow(LZ&, int)’
    /usr/include/bits/mathcalls.h:154: note: candidates are: double pow(double, double)
    /usr/include/c++/4.3/cmath:380: note: long double std::pow(long double, int)
    /usr/include/c++/4.3/cmath:376: note: float std::pow(float, int)
    /usr/include/c++/4.3/cmath:372: note: double std::pow(double, int)
    /usr/include/c++/4.3/cmath:367: note: long double std::pow(long double, long double)
    /usr/include/c++/4.3/cmath:363: note: float std::pow(float, float)
    rownania.cpp:83: error: no matching function for call to ‘pow(LZ&, int)’
    /usr/include/bits/mathcalls.h:154: note: candidates are: double pow(double, double)
    /usr/include/c++/4.3/cmath:380: note: long double std::pow(long double, int)
    /usr/include/c++/4.3/cmath:376: note: float std::pow(float, int)
    /usr/include/c++/4.3/cmath:372: note: double std::pow(double, int)
    /usr/include/c++/4.3/cmath:367: note: long double std::pow(long double, long double)
    /usr/include/c++/4.3/cmath:363: note: float std::pow(float, float)
    rownania.cpp:83: error: no matching function for call to ‘pow(LZ&, int)’
    /usr/include/bits/mathcalls.h:154: note: candidates are: double pow(double, double)
    /usr/include/c++/4.3/cmath:380: note: long double std::pow(long double, int)
    /usr/include/c++/4.3/cmath:376: note: float std::pow(float, int)
    /usr/include/c++/4.3/cmath:372: note: double std::pow(double, int)
    /usr/include/c++/4.3/cmath:367: note: long double std::pow(long double, long double)
    /usr/include/c++/4.3/cmath:363: note: float std::pow(float, float)
    rownania.cpp:87: error: cannot convert ‘LZ’ to ‘float’ in return
    rownania.cpp: In function ‘URL Eliminacja(URL)’:
    rownania.cpp:97: error: no match for ‘operator==’ in ‘Wynik.URL::Macierz[0] == 0.0’
    rownania.cpp:101: error: no match for ‘operator==’ in ‘Wynik.URL::Macierz[n] == 0’
    rownania.cpp:118: error: no match for ‘operator/=’ in ‘Wynik.URL::Wolne[0] /= Wynik.URL::Macierz[0]’
    rownania.cpp:121: error: no match for ‘operator/=’ in ‘Wynik.URL::Macierz[i] /= Wynik.URL::Macierz[0]’
    rownania.cpp:127: error: no match for ‘operator-=’ in ‘Wynik.URL::Wolne[1] -= Wynik.URL::Wolne[0].LZ::operator*(((LZ&)(& Wynik.URL::Macierz[4])))’
    rownania.cpp:130: error: no match for ‘operator-=’ in ‘Wynik.URL::Macierz[i] -= Wynik.URL::Macierz[(i + -0x00000000000000004)].LZ::operator*(((LZ&)(& Wynik.URL::Macierz[4])))’
    rownania.cpp:133: error: no match for ‘operator-=’ in ‘Wynik.URL::Wolne[2] -= Wynik.URL::Wolne[0].LZ::operator*(((LZ&)(& Wynik.URL::Macierz[8])))’
    rownania.cpp:136: error: no match for ‘operator-=’ in ‘Wynik.URL::Macierz[i] -= Wynik.URL::Macierz[(i + -0x00000000000000008)].LZ::operator*(((LZ&)(& Wynik.URL::Macierz[8])))’
    rownania.cpp:139: error: no match for ‘operator-=’ in ‘Wynik.URL::Wolne[3] -= Wynik.URL::Wolne[0].LZ::operator*(((LZ&)(& Wynik.URL::Macierz[12])))’
    rownania.cpp:142: error: no match for ‘operator-=’ in ‘Wynik.URL::Macierz[i] -= Wynik.URL::Macierz[(i + -0x0000000000000000c)].LZ::operator*(((LZ&)(& Wynik.URL::Macierz[12])))’
    rownania.cpp:146: error: no match for ‘operator==’ in ‘Wynik.URL::Macierz[5] == 0.0’
    rownania.cpp:150: error: no match for ‘operator!=’ in ‘Wynik.URL::Macierz[n] != 0’
    rownania.cpp:168: error: no match for ‘operator/=’ in ‘Wynik.URL::Wolne[1] /= Wynik.URL::Macierz[5]’
    rownania.cpp:171: error: no match for ‘operator/=’ in ‘Wynik.URL::Macierz[i] /= Wynik.URL::Macierz[5]’
    rownania.cpp:174: error: no match for ‘operator-=’ in ‘Wynik.URL::Wolne[2] -= Wynik.URL::Wolne[1].LZ::operator*(((LZ&)(& Wynik.URL::Macierz[9])))’
    rownania.cpp:177: error: no match for ‘operator-=’ in ‘Wynik.URL::Macierz[i] -= Wynik.URL::Macierz[(i + -0x00000000000000004)].LZ::operator*(((LZ&)(& Wynik.URL::Macierz[9])))’
    rownania.cpp:179: error: no match for ‘operator-=’ in ‘Wynik.URL::Wolne[3] -= Wynik.URL::Wolne[1].LZ::operator*(((LZ&)(& Wynik.URL::Macierz[13])))’
    rownania.cpp:182: error: no match for ‘operator-=’ in ‘Wynik.URL::Macierz[i] -= Wynik.URL::Macierz[(i + -0x00000000000000008)].LZ::operator*(((LZ&)(& Wynik.URL::Macierz[13])))’
    rownania.cpp:185: error: no match for ‘operator==’ in ‘Wynik.URL::Macierz[10] == 0.0’
    rownania.cpp:189: error: no match for ‘operator!=’ in ‘Wynik.URL::Macierz[n] != 0’
    rownania.cpp:207: error: no match for ‘operator/=’ in ‘Wynik.URL::Wolne[2] /= Wynik.URL::Macierz[10]’
    rownania.cpp:210: error: no match for ‘operator/=’ in ‘Wynik.URL::Macierz[i] /= Wynik.URL::Macierz[10]’
    rownania.cpp:213: error: no match for ‘operator-=’ in ‘Wynik.URL::Wolne[3] -= Wynik.URL::Wolne[2].LZ::operator*(((LZ&)(& Wynik.URL::Macierz[14])))’
    rownania.cpp:216: error: no match for ‘operator-=’ in ‘Wynik.URL::Macierz[i] -= Wynik.URL::Macierz[(i + -0x00000000000000004)].LZ::operator*(((LZ&)(& Wynik.URL::Macierz[14])))’
    rownania.cpp: In function ‘std::istream& operator>>(std::istream&, LZ&)’:
    rownania.cpp:252: error: ‘struct LZ’ has no member named ‘_re’
    rownania.cpp:259: error: ‘struct LZ’ has no member named ‘_im’
    rownania.cpp: In function ‘std::ostream& operator<<(std::ostream&, LZ&)’:
    rownania.cpp:270: error: ‘struct LZ’ has no member named ‘_re’
    rownania.cpp:271: error: ‘struct LZ’ has no member named ‘_im’
    rownania.cpp:273: error: ‘struct LZ’ has no member named ‘_im’
    rownania.cpp:277: error: ‘struct LZ’ has no member named ‘_im’

    0
  • #4 22 Kwi 2009 16:21
    lord_dagoth
    Poziom 25  

    Jeeeeezu... trzeba czytać po kolei... od pierwszego... PRZEDE WSZYSTKIM:

    michalekopalek napisał:
    rownania.cpp:13: error: ‘s’ does not name a type

    michalekopalek napisał:
    explicit LZ(float _re=0,float _im=0);s

    Tego "s" tam nie powinno być... usuń ten błąd, skompiluj, i znowu zobacz co Ci pokaże pierwszy error. Jak nie wiesz co oznacza, wpisz go do googla...

    Sam napisałeś taki program, a nie jesteś w stanie usunąć prostych błędów? Z jakiego IDE korzystasz? Zazwyczaj wystarczy kliknąć w błąd który Ci wypisal kompilator, to automatycznie Cie przeniesie do tego miejsca w kodzie.

    0
  • #5 22 Kwi 2009 16:26
    michalekopalek
    Poziom 8  

    poprawilem te 's' , faktycznie to głupie bylo :) , nadal bledy mi wyskakuja

    0
  • #6 22 Kwi 2009 16:35
    lord_dagoth
    Poziom 25  

    Ja bym na Twoim miejscu ten program napisał jeszcze raz od nowa... skoro robisz to w C++ i przeciążasz operatory, to czemu nie zrobisz klasy liczby zespolonej, tylko próbujesz strukture?

    Tak szczerze mówiąc, to pierwszy raz się spotykam z przeciążaniem operatorów i pisaniem funkcji dla struktur w C++, nawet nie wiem czy tak można (ale nie gwarantuje że nie można! :P ). Zrób z tego klasę, będzie... naturalniej :P

    EDIT: Tak się przyglądam temu kodowi, i próbuje coś zmienić, ale tam jest mnóóóóóóstwo błędów. Począwszy od jakiś dziwnych operacji, deklarowaniu zmiennych poprzez samo podanie typu, bez nazwy, próby wydrukowania LZ przy pomocy operatora "<<" uprzednio go nie przeciążając... naprawde lepiej będzie napisać to od nowa :P

    0
  • #7 22 Kwi 2009 19:18
    michalekopalek
    Poziom 8  

    Ten program dzialal tak jak chciałem dla normalnych wspolczynnikow w rownaniach
    teraz namnozylo sie bledow jak próbuje zrobic na zespolone

    operatory zarowno wejsciowe jak i wyjsciowe sa przeciazone

    0
  • #8 22 Kwi 2009 19:29
    lord_dagoth
    Poziom 25  

    czemu mówisz o klasie, skoro zrobiłeś strukture?

    Code:
    struct URL
    
    {
    public:
      LZ ;
      LZ Macierz[16]; //tablica przechowujaca wspolczynniki

    I zastanawia mnie ten fragment... a dokładniej miejsce LZ ;

    0
  • #9 22 Kwi 2009 23:10
    michalekopalek
    Poziom 8  

    masz racje poprawilem juz to :)

    0
  • #10 22 Kwi 2009 23:57
    Dr.Vee
    VIP Zasłużony dla elektroda

    lord_dagoth: z tego co wiem w c++ struct od class różni się tylko tym, że w struct pola są domyślnie publiczne, a w class prywatne.

    Pozdrawiam,
    Dr.Vee

    0
  • #11 23 Kwi 2009 20:36
    michalekopalek
    Poziom 8  

    Poradzilem sobie juz prawie z wszystkimi bleadami . wynikaly przede wszystkim ze zle przeciazonych operatorów . Mam jednak jeszcze jedno pytanie : jak przeciazyc operator '==' i '!=' ??

    0
  • #12 23 Kwi 2009 21:18
    mykhaylo
    Poziom 14  

    Patrz przykład:

    Code:

    #include <iostream>

    using namespace std;

    class Point
    {
       private:
          int _x;
          int _y;
       public:
          Point(int x, int y);
          bool operator ==(Point &other);
          bool operator !=(Point &other);
    };

    Point::Point(int x, int y)
    {
       _x = x;
       _y = y;
    }

    bool Point::operator ==(Point &other)
    {
       return _x == other._x && _y == other._y;
    }

    bool Point::operator !=(Point &other)
    {
       return _x != other._x || _y != other._y;
    }

    int main(int argc, char* argv[])
    {
       Point p0(1, 1);
       Point p1(2, 1);
       Point p2(1, 1);
       if(p0 == p1)
          cout << "p0 i p1 sa identyczne !" << endl;
       else
          cout << "p0 i p1 sa rozne !" << endl;
       if(p0 != p2)
          cout << "p0 i p2 sa rozne !" << endl;
       else
          cout << "p0 i p2 sa identyczne!" << endl;
          
       return EXIT_SUCCESS;
    }

    0
  • #13 29 Kwi 2009 00:33
    michalekopalek
    Poziom 8  

    Przy podziale na moduly teog programu wyskakuje mi takie bledy :

    g++ rownania.o zesp.o
    rownania.o: In function `operator>>(std::basic_istream<char, std::char_traits<char> >&, URL&)':
    rownania.cpp:(.text+0x666): undefined reference to `operator>>(std::basic_istream<char, std::char_traits<char> >&, LZ const&)'
    rownania.cpp:(.text+0x6de): undefined reference to `operator>>(std::basic_istream<char, std::char_traits<char> >&, LZ const&)'
    rownania.cpp:(.text+0x756): undefined reference to `operator>>(std::basic_istream<char, std::char_traits<char> >&, LZ const&)'
    rownania.cpp:(.text+0x7ce): undefined reference to `operator>>(std::basic_istream<char, std::char_traits<char> >&, LZ const&)'
    rownania.cpp:(.text+0x827): undefined reference to `operator>>(std::basic_istream<char, std::char_traits<char> >&, LZ const&)'
    rownania.o:rownania.cpp:(.text+0x86d): more undefined references to `operator>>(std::basic_istream<char, std::char_traits<char> >&, LZ const&)' follow
    rownania.o: In function `Eliminacja(URL)':
    rownania.cpp:(.text+0x951): undefined reference to `LZ::LZ(int, int)'
    rownania.cpp:(.text+0x95c): undefined reference to `LZ::LZ()'
    rownania.cpp:(.text+0x982): undefined reference to `LZ::LZ()'
    rownania.o: In function `URL::URL()':
    rownania.cpp:(.text._ZN3URLC1Ev[URL::URL()]+0x1c): undefined reference to `LZ::LZ()'
    rownania.cpp:(.text._ZN3URLC1Ev[URL::URL()]+0x47): undefined reference to `LZ::LZ()'
    rownania.cpp:(.text._ZN3URLC1Ev[URL::URL()]+0x65): undefined reference to `LZ::LZ()'
    rownania.o:rownania.cpp:(.text._ZN3URLC1Ev[URL::URL()]+0x75): more undefined references to `LZ::LZ()' follow
    rownania.o: In function `URL::Blad()':
    rownania.cpp:(.text._ZN3URL4BladEv[URL::Blad()]+0x69): undefined reference to `LZ::LZ(int, int)'
    zesp.o: In function `LZ::operator/(LZ const&)':
    zesp.cpp:(.text+0x2b4): undefined reference to `LZ::LZ()'
    zesp.o: In function `LZ::operator*(LZ const&)':
    zesp.cpp:(.text+0x34a): undefined reference to `LZ::LZ()'
    zesp.o: In function `LZ::operator-(LZ const&)':
    zesp.cpp:(.text+0x3a4): undefined reference to `LZ::LZ()'
    zesp.o: In function `LZ::operator+(LZ const&)':
    zesp.cpp:(.text+0x3e0): undefined reference to `LZ::LZ()'
    collect2: ld returned 1 exit status
    make: *** [a.out] Błąd 1

    a tak wygladaja pliki
    zespo.cpp

    Code:
    #include <iostream>
    
    #include <iomanip>
    #include <cctype>
    #include <cstdlib>
    #include <cmath>
    #include "zesp.hh"

    using namespace std;

    LZ LZ:: operator +(const LZ &Z2)
      {
        LZ suma;
        suma._re=_re+Z2._re;
        suma._im=_im+Z2._im;
        return suma;
      }
     
     
    LZ LZ:: operator -(const LZ &Z2)
      {
        LZ roznica;
        roznica._re=_re-Z2._re;
        roznica._im=_im-Z2._im;
        return roznica;
      }
     
    LZ LZ:: operator *(const LZ &Z2)
      {
        LZ iloczyn;
        iloczyn._re=(_re*Z2._re)-(_im*Z2._im);
        iloczyn._im=(_re*Z2._im)+(_im*Z2._re);
        return iloczyn;
      }
    LZ LZ:: operator /(const LZ &Z2)
      {
        LZ iloraz;
        iloraz._re=((_re*Z2._re)+(_im*Z2._im))/((Z2._re*Z2._re)+(Z2._im*Z2._im));

        iloraz._im=((Z2._re*_im)-(_re*Z2._im))/((Z2._re*Z2._re)+(Z2._im*Z2._im));

        return iloraz;
      }

    LZ LZ::  operator +=(const LZ &Z2)
      {
        _re+=Z2._re;
        _im+=Z2._im;
        return*this;
      }

    LZ LZ ::  operator -=(const LZ &Z2)
      {
        _re-=Z2._re;
        _im-=Z2._im;
        return*this;
      }
     bool LZ::operator==(LZ &Z2)const
    {
        return (_re==Z2._re)&&(_im==Z2._im);
    }

    bool LZ::operator !=(const LZ &Z2)
     {
        return (_re!=Z2._re)||(_im!=Z2._im);
        return true;
      }


    /*przeciazenie operatora wejsciowego dla liczb zespolonych*/

    istream&operator >> (istream&StrmWe, LZ &zespolona)
    {
      char Znak;
     
      StrmWe>>zespolona._re;
      StrmWe>> Znak;
      if(Znak=='+')
        {StrmWe>>zespolona._im;}
      if(Znak=='-')
        {
          StrmWe.putback(Znak);
          StrmWe>>zespolona._im;
        } 
                                               
    StrmWe>>Znak;
    if(Znak!='i')
    {exit(1);}

      return StrmWe;
    }

    /*przeciazenie operatora wyjsciowego dla liczb zespolonych*/

    ostream&operator<< (ostream&StrmWyj,const LZ & zespolona)
    {
      cout<<zespolona._re;
      if(zespolona._im<0)
        {
          cout<<zespolona._im<<'i';
        }
      else
        {
          cout<<'+'<<zespolona._im<<'i';
        }
      return StrmWyj;
    }
     


    zesp.hh:
    Code:

    #ifndef ZESP_HH
    #define ZESP_HH
    #include "zesp.hh"

    using namespace std;


    class LZ
    {
    public:
      float _re;
      float _im;
      LZ();
      LZ(int r,int i);
      LZ operator +(const LZ &Z2);
      LZ operator -(const LZ &Z2);
      LZ operator *(const LZ &Z2);
      LZ operator /(const LZ &Z2);
      LZ  operator +=(const LZ &Z2);
      LZ  operator -=(const LZ &Z2);
      bool  operator ==( LZ &Z2) const;
      bool   operator != (const LZ &Z2);

      friend istream&operator >> (istream&StrmWe,const LZ &zespolona);
      friend ostream&operator<< (ostream&StrmWyj,const LZ & zespolona);
     // friend istream & operator >> (istream & StrmWe, const URL  & macierz);
     // friend ostream&operator << (ostream&StrmWyj, const URL & DoWysw) ;

    };
     
    #endif


    rownania.cpp:
    Code:

    #include <iostream>
    #include <iomanip>
    #include <cctype>
    #include <cstdlib>
    #include <cmath>
    #include "zesp.hh"


    using namespace std;


     
    class URL
    {
    public:
     
      LZ Macierz[16]; //tablica przechowujaca wspolczynniki
      LZ Wolne[4]; //tablica z wyrazami wolnymi
      LZ x,y,z,w; //zmienne do ktorych zostaja zapisywane koncowe wyniki

     
      /*po eliminacji gaussa metoda wynik wylicza niewiadome*/
      bool Wynik()
      {
        w=Wolne[3]/Macierz[15];
        z=Wolne[2]-Macierz[11]*w;
        y=Wolne[1]-(Macierz[7]*w)-(Macierz[6]*z);
        x=Wolne[0]-(Macierz[3]*w)-(Macierz[2]*z)-(Macierz[1]*y);
       
        cout<<"X1="<<x<<endl<<"X2="<<y<<endl<<"X3="<<z<<endl<<"X4="<<w<<endl;
        return true;
      }
      /*metoda blad wylicza blad obliczen jako norme Ax -b*/
        float Blad()
      {
        LZ blad;
        LZ WekBlad[3];
        LZ zero(0,0); 
        for(int i=0;i<4;i++){WekBlad[i]=zero;}
     
        WekBlad[0]=x*Macierz[0]+ y*Macierz[1]+ z*Macierz[2] +w*Macierz[3]-Wolne[0];
       
        WekBlad[1]=x*Macierz[4]+ y*Macierz[5]+ z*Macierz[6] +w*Macierz[7]-Wolne[1];
     
        WekBlad[2]=x*Macierz[8]+ y*Macierz[9]+ z*Macierz[10] +w*Macierz[11]-Wolne[2];
       
        WekBlad[3]=x*Macierz[12]+ y*Macierz[13]+ z*Macierz[14] +w*Macierz[15]-Wolne[3];


        float a= sqrt(WekBlad[0]._re*WekBlad[0]._re +WekBlad[0]._im*WekBlad[0]._im);
     
        float b=sqrt(WekBlad[1]._re*WekBlad[1]._re +WekBlad[1]._im*WekBlad[1]._im);
        float c= sqrt(WekBlad[2]._re*WekBlad[2]._re +WekBlad[2]._im*WekBlad[2]._im);
        float d=sqrt(WekBlad[3]._re*WekBlad[3]._re +WekBlad[3]._im*WekBlad[3]._im);
     
        float Blad=sqrt(a*a +b*b + c*c + d*d);
        cout<<"Blad obliczen:"<<setprecision (4)<<Blad<<endl;
       
        return Blad;
        }
    };

    /*metoda przeprowadzajaca eliminacje Gauss'a*/
    /*poszczegolne kroki opisalem ponizej*/
    URL:: URL Eliminacja(URL Wynik)
      {
          LZ zero(0,0);
        LZ pom,POM[10];
        //zamiana wiersza w momencie , gdy pojawia sie zero na przekatnej
        if(Wynik.Macierz[0]==zero)
          {
       int n=4;
       int m=1;
       while(Wynik.Macierz[n]==zero)
         {
           n+=4;
           m++;
         }
       pom=Wynik.Wolne[m];
       Wynik.Wolne[m]=Wynik.Wolne[0];
       Wynik.Wolne[0]=pom;
       for(int i=0;i<4;i++)
         {
           POM[i]=Wynik.Macierz[i];
           Wynik.Macierz[i]=Wynik.Macierz[n+i];
           Wynik.Macierz[n+i]=POM[i];
         }
          }
     
        //podzielenie pierwszego wiersza przez pierwszy element macierzy
        Wynik.Wolne[0]=(Wynik.Wolne[0]/ Wynik.Macierz[0]);
        for(int i=3;i>=0;i--)
          {
       Wynik.Macierz[i]=Wynik.Macierz[i]/Wynik.Macierz[0];
          }
       
        //wyzerowanie  trzech

       
        Wynik.Wolne[1]-=(Wynik.Wolne[0]*Wynik.Macierz[4]); // W2-Tab[4]W1
        for(int i=7;i>=4;i--)
          {
       Wynik.Macierz[i]-=(Wynik.Macierz[i-4]*Wynik.Macierz[4]);
          }
       
        Wynik.Wolne[2]-=(Wynik.Wolne[0]*Wynik.Macierz[8]);//W3-Tab[8]W1
        for(int i=11;i>=8;i--)
          {
       Wynik.Macierz[i]-=(Wynik.Macierz[i-8]*Wynik.Macierz[8]);
         }   
       
        Wynik.Wolne[3]-=(Wynik.Wolne[0]*Wynik.Macierz[12]);//W4-Tab[12]W1
        for(int i=15;i>=12;i--)
          {
       Wynik.Macierz[i]-=(Wynik.Macierz[i-12]*Wynik.Macierz[12]);
          }
       //ponowne sprawdzenie, czy na przekatnej nie ma zera
       
        if(Wynik.Macierz[5]==zero)
          {
       int n=8;
       int m=1;
       while(Wynik.Macierz[n]!=zero)
         {
           n+=4;
           m++;
         }
       
       pom=Wynik.Wolne[m];
       Wynik.Wolne[m]=Wynik.Wolne[m+1];
       Wynik.Wolne[m+1]=pom;
       for(int i=n;i<n+4;i++)
         {
           POM[i]=Wynik.Macierz[i];
           Wynik.Macierz[i]=Wynik.Macierz[i+n];
           Wynik.Macierz[i+n]=POM[i];
         }
          }
       
    //zrobienie nastepnej 1
        Wynik.Wolne[1]= Wynik.Wolne[1]/Wynik.Macierz[5];//W2:Tab[5]
        for(int i=7;i>=5;i--)
          {
       Wynik.Macierz[i]=Wynik.Macierz[i]/Wynik.Macierz[5];
          }
        //wyzerowanie dwoch
        Wynik.Wolne[2]-=(Wynik.Wolne[1]*Wynik.Macierz[9]); //W3-Tab[9]W2
        for(int i=11;i>=9;i--)
          {
       Wynik.Macierz[i]-=(Wynik.Macierz[i-4]*Wynik.Macierz[9]);
          }
        Wynik.Wolne[3]-=(Wynik.Wolne[1]*Wynik.Macierz[13]);//W4-Tab[13]W2
        for(int i=15;i>=13;i--)
          {
       Wynik.Macierz[i]-=(Wynik.Macierz[i-8]*Wynik.Macierz[13]);
          }
        //znowu sprawdzenie czy nie ma zera na przekatnej
        if(Wynik.Macierz[10]==zero)
          {
       int n=12;
       int m=2;
       while(Wynik.Macierz[n]!=zero)
         {
           n+=4;
           m++;
         }
       
       pom=Wynik.Wolne[m];
       Wynik.Wolne[m]=Wynik.Wolne[m+1];
       Wynik.Wolne[m+1]=pom;
       for(int i=n;i<n+4;i++)
         {
           POM[i]=Wynik.Macierz[i];
           Wynik.Macierz[i]=Wynik.Macierz[i+n];
           Wynik.Macierz[i+n]=POM[i];
         }
          }   
     
        //nastepna 1
        Wynik.Wolne[2]=Wynik.Wolne[2]/Wynik.Macierz[10];//W3:Tab[10]
        for(int i=11;i>=10;i--)
          {
       Wynik.Macierz[i]=Wynik.Macierz[i]/Wynik.Macierz[10];
          }
        //wyzerowanie jednej
        Wynik.Wolne[3]-=(Wynik.Wolne[2]*Wynik.Macierz[14]); //W4 -Tab[14]W3
        for(int i=15;i>=14;i--)
          {
       Wynik.Macierz[i]-=(Wynik.Macierz[i-4]*Wynik.Macierz[14]);
          }
       
        //podanie wyniku
       
     
       
        return Wynik;
      }


    bool CzyLiczbaDoWczytania()
    {
      char  PierwszyZnak;
      bool  JestLiczba = false;

      while (isspace(PierwszyZnak = cin.get()) && PierwszyZnak != EOF) ;
      if (PierwszyZnak == EOF) exit(0);

      if (PierwszyZnak == '+' || PierwszyZnak == '-') {
        JestLiczba = isdigit(cin.get());
        cin.unget();
      } else JestLiczba = isdigit(PierwszyZnak);

      cin.putback(PierwszyZnak);
      return JestLiczba;
    }




    /*przeciazenia operatora wejsciowego dla URL*/

    istream & operator >> (istream & StrmWe,URL  & macierz) {
      char Znak;
      StrmWe >> Znak;
      if(Znak!='(')
        {   
          if(Znak !='|')exit(1);
          for (int i=0;i<4;i++)
       {
         cin>>macierz.Macierz[i];
        
       }
          StrmWe >> Znak;
          if (Znak!='|')exit(1);//koniec pierwszego wiersza
         
          StrmWe>>Znak;
          if(Znak !='|')exit(1);
          for (int i=4;i<8;i++)
       {
         cin>>macierz.Macierz[i];
       }
          StrmWe >> Znak;
          if (Znak!='|')exit(1);//koniec drugiego wiersza
         
          StrmWe>>Znak;
          if(Znak !='|')exit(1);
          for (int i=8;i<12;i++)
       {
         cin>>macierz.Macierz[i];
       }
          StrmWe >> Znak;
          if (Znak!='|')exit(1);//koniec trzeciego wiersza
         
          StrmWe>>Znak;
          if(Znak !='|')exit(1);
          for (int i=12;i<16;i++)
       {
        cin>>macierz.Macierz[i];
       }
          StrmWe >> Znak;
          if (Znak!='|')exit(1);//koniec czwartego wiersza
         
          return(StrmWe);
        }
      else //tu wczytywanie wektora wyrazow wolnych
        {
          if (CzyLiczbaDoWczytania()){ StrmWe>>macierz.Wolne[0];}
          StrmWe >> Znak;
          if (Znak!=',')exit(1);
          if (CzyLiczbaDoWczytania()) { StrmWe>>macierz.Wolne[1];}
          StrmWe >> Znak;
          if (Znak!=',')exit(1);
          if (CzyLiczbaDoWczytania()) {StrmWe>>macierz.Wolne[2];}
          StrmWe >> Znak;
          if (Znak!=',')exit(1);
          if (CzyLiczbaDoWczytania()) {StrmWe>>macierz.Wolne[3];}
          StrmWe >> Znak;
          if (Znak!=')')exit(1);
          return(StrmWe);
        }
    }


    /*przeciazenie operatora wyjsciowego dla URL*/

    ostream&operator << (ostream&StrmWyj,URL & DoWysw)
    {

      cout<<'|'<<DoWysw.Macierz[0]<<' '<<DoWysw.Macierz[1]<<' '<<DoWysw.Macierz[2]<<' '<<DoWysw.Macierz[3]<<'|'<<' '<<'|'<<"X1"<<'|'<<"   "<<'|'<<DoWysw.Wolne[0]<<'|'<<endl;
      cout<<'|'<<DoWysw.Macierz[4]<<' '<<DoWysw.Macierz[5]<<' '<<DoWysw.Macierz[6]<<' '<<DoWysw.Macierz[7]<<'|'<<' '<<'|'<<"X2"<<'|'<<" = "<<'|'<<DoWysw.Wolne[1]<<'|'<<endl;
      cout<<'|'<<DoWysw.Macierz[8]<<' '<<DoWysw.Macierz[9]<<' '<<DoWysw.Macierz[10]<<' '<<DoWysw.Macierz[11]<<'|'<<' '<<'|'<<"X3"<<'|'<<"   "<<'|'<<DoWysw.Wolne[2]<<'|'<<endl;
      cout<<'|'<<DoWysw.Macierz[12]<<' '<<DoWysw.Macierz[13]<<' '<<DoWysw.Macierz[14]<<' '<<DoWysw.Macierz[15]<<'|'<<' '<<'|'<<"X4"<<'|'<<"   "<<'|'<<DoWysw.Wolne[3]<<'|'<<endl;
     
     
      return StrmWyj;
    }


    int main()
    {
      URL a,b;
      cin>>a;
      cin>>a;
      cout<<"Rozwiazywane rowananie to: AX=B"<<endl;
      cout <<a;
      b=Eliminacja(a);
      b.Wynik();
      a.x=b.x;
      a.y=b.y;
      a.z=b.z;
      a.w=b.w;
     
       a.Blad();
      return 1;
    }


    wiem , ze cos mi tu ze zla referncja wyskakuje i nie wiem dokladnie co . prosze o pomoc

    0
  • #14 30 Kwi 2009 08:19
    Chris_W
    Poziom 37  

    Undefined reference - to tak na chłopski rozum 'nieznane przywiązanie/wskazanie' - coś czego kompilator nie zna.
    BTW: jesteś pewien że te błędy dotyczą tych kodów co podałeś?
    Bo jak masz błąd:
    undefined reference to 'xxxxxxx'
    a tego xxxxxxx nie ma w kodzie to coś tu nie gra.

    0
  • #15 30 Kwi 2009 15:42
    Dr.Vee
    VIP Zasłużony dla elektroda

    Kompilator pisze wyraźnie:

    Cytat:
    undefined reference to `LZ::LZ()'
    Pokaż mi proszę gdzie w Twoim kodzie jest definicja konstruktorów LZ::LZ() oraz LZ::LZ(int, int).

    Co do operator>> i operator<<, to masz pomylone typy - w nagłówku masz argumenty typu LZ const&, a w implementacji masz typ LZ&.

    Kompilator wszystko ładnie pisze, tylko trzeba umieć to czytać :)

    Pozdrawiam,
    Dr.Vee

    0