Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Templejtski polinom i mnozenje

[es] :: C/C++ programiranje :: Templejtski polinom i mnozenje

[ Pregleda: 4207 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Ivan Vasić

Član broj: 14756
Poruke: 631
*.EUnet.yu

Jabber: ivasic@elitesecurity.org


Profil

icon Templejtski polinom i mnozenje12.04.2004. u 13:55 - pre 243 meseci
Imam templejtsku klasu

Polinom<Tip,Stepen>

Kako u okviru nje da definišem operator za množenje 2 polinoma ?

Problem je u tome što novonastali polinom treba da bude stepena StepenPrvog+StepenDrugog što zadaje probleme ako probam:

Code:

template <class Tip, int Stepen>
class Polinom {
...
Polinom<Tip,Stepen1+Stepen2>& operator* (Polinom<Tip,Stepen1> P1, Polinom<Tip,Stepen2> P1);


ovo naravno nije moguće ... (ni Stepen1 ni Stepen2 nisu def.)

Kako da izvedem ovo pod uslovom da templejt MORA da bude definisan sa <Tip,Stepen>.
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
199.171.112.*



+6 Profil

icon Re: Templejtski polinom i mnozenje12.04.2004. u 16:19 - pre 243 meseci
Ako već hoćeš da ti operator * bude član klase, onda ga deklariši kao:

Code:

    template<int Stepen1>
        Polinom <Tip, Stepen+Stepen1> operator * (const Polinom<Tip,Stepen1>& P1);

 
Odgovor na temu

Reljam
Relja Markovic
San Francisco

Član broj: 531
Poruke: 1793
*.client.comcast.net



+18 Profil

icon Re: Templejtski polinom i mnozenje12.04.2004. u 16:44 - pre 243 meseci
Da li si siguran da polinom treba da ima stepen kao parametar templejta? To mi nekako zvuci kao string koji ima 'duzinu' template parametar. Cak i da resis ovaj problem, imaces posle gomilu problema at run time jer ces imati gomilu potpuno istih klasa koja se razlikuju samo za 'stepen' - nemoj da zaboravis da kompajler mora da napravi klasu za svaki slucaj templatea koj koristis.

Takodje svi parametri za templateove moraju da budu poznati at compile time. Tako da cak ni teoretski ne mozes da koristis stepen kao parametar templatea osim ukoliko unapred ne znas da ces imati samo dva ili tri razliticita polinoma.

Drugim recima, neces moci da uradis ovo:
Code:

int stepen;
for (stepen = 1; stepen < 10; stepen++)
{
    Polinom<float, stepen> MojPolinom;
}


Dakle probaj da redizajniras celu stvar, jer template parametri se ne koriste za to sto ti pokusavas da uradis.
 
Odgovor na temu

Mrav
Aleksandar Mraović
.net programer u Wireless Media
Beograd

Član broj: 6532
Poruke: 279
*.smin.sezampro.yu.

ICQ: 197419540


Profil

icon Re: Templejtski polinom i mnozenje12.04.2004. u 17:06 - pre 243 meseci
Reljam je naj u pravu.

Mislim da bi trebalo da imaš nešto ovako;

template <class tip>
class Polinom{
public:
Polinom (int stepen);

// deklaracija operatora *

private:
int stepen;

}

pa da deklarišeš:

Polinom<float> pol(neki stepen);

Lepota je u jednostavnosti.

Cis.
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
199.171.112.*



+6 Profil

icon Re: Templejtski polinom i mnozenje12.04.2004. u 17:09 - pre 243 meseci
U principu je moguće koristiti šablone u takve svrhe - to se zove template metaprogramming. E sad, da li on to hoće ili jednostavno ne razume prirodu šablona, to već ne znam...
 
Odgovor na temu

Ivan Vasić

Član broj: 14756
Poruke: 631
*.50.EUnet.yu

Jabber: ivasic@elitesecurity.org


Profil

icon Re: Templejtski polinom i mnozenje12.04.2004. u 17:30 - pre 243 meseci
Svi ste vi u pravu

Razumem ja prirodu šablona i da sam ja pravio to onako kako ja to želim takodje bi u templejtu imalo samo jedan parametar ali tako se od mene traži u zadatku
što bi značilo da tako mora ! Šta da radim kad me maltretiraju glupostima ...

E sad, ja mogu da definišem int u okviru klase koji će da bude stepen i da zanemarim templejtski stepen ali čemu onda ...

Uostalom onaj kod koji je napisao Nemanja mi se čini najbliže rešenju. Probaću.
Bitno je samo da ipak ovo nije baš "uobičajeno" što se traži tako da me to hrabri.

Jel ima možda još nekih ideja ?
 
Odgovor na temu

Ivan Vasić

Član broj: 14756
Poruke: 631
*.50.EUnet.yu

Jabber: ivasic@elitesecurity.org


Profil

icon Re: Templejtski polinom i mnozenje12.04.2004. u 17:44 - pre 243 meseci
Trebaće mi još malkice pomoći oko ovoga:

operatorsku funkciju sam morao da definišem "inline" jer nisam umeo drugačije i to ovako izgleda:
Code:
template<int Stepen1>
        Polinom <Tip, Stepen+Stepen1> operator* (const Polinom<Tip,Stepen1>& P1)
        {
            Polinom<Tip,Stepen+Stepen1> Rezultat;

            Mnozi(P1,Rezultat);

            return Rezultat;
        };


pod pretpostavkom da Mnozi() radi kako treba, kako da pozovem ovaj operator u main-u ??

Pitam jer ne znam gde da smestim templejtske argumente tj. <Stepen1>

ako stavim : (imam copy constructor)
Code:

Polinom<int,5> Proizvod(P1 * P2) ;


dobijem INTERNAL COMPILER ERROR.
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
199.171.112.*



+6 Profil

icon Re: Templejtski polinom i mnozenje12.04.2004. u 18:00 - pre 243 meseci
Pre svega, koji kompajler imaš? Stari kompajleri se slabo snalaze sa ovakvim egzibicijama.

Uglavnom, meni ovako nešto radi na MSVC 7.1 (sam operator je "šupalj" - ne vrši nikakvo množenje već samo vraća nov objekat):

Code:

    Polinom<double, 2> p;
    Polinom<double, 3> q;
    Polinom<double, 5> r = p * q;


Obrati pažnju da je stepen rezultujućeg polinoma jednak zbiru stepeni množilaca. U suprotnom, dobiješ compile-time error.
 
Odgovor na temu

Ivan Vasić

Član broj: 14756
Poruke: 631
*.43.EUnet.yu

Jabber: ivasic@elitesecurity.org


Profil

icon Re: Templejtski polinom i mnozenje12.04.2004. u 18:21 - pre 243 meseci
Imam MSVC 6.

Inače i ona moja fja mnozi() je takodje prazna tako da i ja dobijam samo novi objekat.

Sve regularno evo:

Code:

    Polinom<int,3> Po;
    Polinom<int,2> Po1;
    Polinom<int,5> Po3 = Po1 * Po;


možda bi trebalo da odradim :
Po3 = Po1.operator*<2> Po ????
Nešto ovako ako je uopšte moguće ??
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
199.171.112.*



+6 Profil

icon Re: Templejtski polinom i mnozenje12.04.2004. u 18:49 - pre 243 meseci
Ako ćeš da radiš nešto ozbiljnije sa šablonima, savetujem ti da nađeš neki noviji kompajler. Najbolji u tom pogledu je Comeau 4.3.3, a od popularnijih, dobri su i VC 7.1 i gcc 3.2+
 
Odgovor na temu

Ivan Vasić

Član broj: 14756
Poruke: 631
*.eunet.yu

Jabber: ivasic@elitesecurity.org


Profil

icon Re: Templejtski polinom i mnozenje12.04.2004. u 19:03 - pre 243 meseci
Ok. Probaću da nabavim. Thnx
 
Odgovor na temu

[es] :: C/C++ programiranje :: Templejtski polinom i mnozenje

[ Pregleda: 4207 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.