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

Templejtski polinom i mnozenje

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

[ Pregleda: 1190 | Odgovora: 10 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Ivan Vasić
Ivan Vasić
Nis

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

Jabber: ivasic@elitesecurity.org


Profil

icon Templejtski polinom i mnozenje12.04.2004. u 13:55

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>.
12.04.2004. u 13:55 

Dragi Tata

Član broj: 1958
Poruke: 3880
199.171.112.*

Sajt: www.novetehnologije.com


Profil

icon Re: Templejtski polinom i mnozenje12.04.2004. u 16:19
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);

12.04.2004. u 16:19 

Reljam
Relja Markovic
Seattle, WA

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

Sajt: www.linkedin.com/in/relja..


Profil

icon Re: Templejtski polinom i mnozenje12.04.2004. u 16:44
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.
12.04.2004. u 16:44 

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
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.
12.04.2004. u 17:06 

Dragi Tata

Član broj: 1958
Poruke: 3880
199.171.112.*

Sajt: www.novetehnologije.com


Profil

icon Re: Templejtski polinom i mnozenje12.04.2004. u 17:09
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...
12.04.2004. u 17:09 

Ivan Vasić
Ivan Vasić
Nis

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

Jabber: ivasic@elitesecurity.org


Profil

icon Re: Templejtski polinom i mnozenje12.04.2004. u 17:30
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 ?
12.04.2004. u 17:30 

Ivan Vasić
Ivan Vasić
Nis

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

Jabber: ivasic@elitesecurity.org


Profil

icon Re: Templejtski polinom i mnozenje12.04.2004. u 17:44
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.
12.04.2004. u 17:44 

Dragi Tata

Član broj: 1958
Poruke: 3880
199.171.112.*

Sajt: www.novetehnologije.com


Profil

icon Re: Templejtski polinom i mnozenje12.04.2004. u 18:00
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.
12.04.2004. u 18:00 

Ivan Vasić
Ivan Vasić
Nis

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

Jabber: ivasic@elitesecurity.org


Profil

icon Re: Templejtski polinom i mnozenje12.04.2004. u 18:21
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 ??
12.04.2004. u 18:21 

Dragi Tata

Član broj: 1958
Poruke: 3880
199.171.112.*

Sajt: www.novetehnologije.com


Profil

icon Re: Templejtski polinom i mnozenje12.04.2004. u 18:49
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+
12.04.2004. u 18:49 

Ivan Vasić
Ivan Vasić
Nis

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

Jabber: ivasic@elitesecurity.org


Profil

icon Re: Templejtski polinom i mnozenje12.04.2004. u 19:03
Ok. Probaću da nabavim. Thnx
12.04.2004. u 19:03 

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

[ Pregleda: 1190 | Odgovora: 10 ]

Postavi temu Odgovori

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