Jump to content

seaza

Members
  • Posts

    18
  • Joined

  • Last visited

Posts posted by seaza

  1. sall.

    am o inmultire d matrici reprezentate ca vectori, si incercam sa gasesc o "regula" ptr inmultire.

    matrice operator*(matrice x)
    {
    matrice u;
    u.setLC(x.linii, coloane);
    int aux1=linii;
    int aux2=x.coloane;
    int aux3=coloane;
    int i, l, c;

    if(x.coloane==linii){
    for(l=0; l<aux3; l++)
    {
    for(c=0; c<aux1; c++)
    {
    complex sum;
    for(i=0; i<aux2; i++)
    sum=sum+(v[l*aux2+i])*(x.v[i*aux1+c]);
    u.v[l*aux1+c]=sum;
    }
    }
    }else cout<<"EROARE";

    return u;
    }

    unde v este: complex v[nrlin*nrcol], intr o clasa mostenita din complex, by default nrlin si nrcol sunt date cu #define nrlin 10, respc. #define nrcol 10

    doar ca nu merge chiar asa bine...are cnva vreo mica idee unde e greseala ?:-/

  2. am o clasa complex ptr nr complexe, cu constructori, supraincarcarea op. +, -, *,<<, >>, cu de toate:D.

    treb' sa +, -, *, matrici de nr complexe memorate ca vectori.

    imi mai trebuie o clasa nush vector sa zicem, in care vreau din nou o supraincarcare a operatorilor >> si <<, sa apara cv de genul:

    linia1 coloana1

    partea reala:

    partea imag:

    linia1 coloana2

    ..................

    iar in main am cv de genul:


    vector A, B;
    A.setLinii(3); //metoda din clasa mostenita, vector
    A.setColoane(3); //metoda din clasa mostenita, vector
    cin>> A;
    cout<<A<<endl;
    B.setLinii(3);
    B.setColoane(3);
    cin>> B;
    cout<<B<<endl;
    vector C;
    C=A+B;
    cout<<C<<endl;
    //----------------

    si la partea asta imi cam da cu virgula:-s

    o idee ar fi cv d genul:


    //la inceput am:
    //#define nrlin 1000
    //#define nrcol 1000
    class vector: public complex{
    complex v[nrlin*nrcol];
    int linii, coloane;
    public:

    vector(int n=0, int m=0){linii=n; coloane=m;}
    void setLinii(int L){linii=L;}
    void setColoane(int C){coloane=C;}
    int getLinii(){return linii;}
    int getColoane(){return coloane;}
    //metodele ptr +, - etc..
    friend istream& operator >>(istream& , vector& );
    friend ostream& operator <<(ostream& , vector );
    ...........
    istream& operator>>(istream& IN, vector& W)
    {
    .......................
    {
    cout<<"Linia "<<linii<<" Coloana "<<coloane<<" : "<<endl;
    ........................
    }
    return IN;
    }

    nu prea am priceput cu "mostenirea ", so i need help, ce ar trebui in locul punctelor........

    sau ma rog, alta idee daca are cineva?:-S

  3. pai la o lista, poti efectua urmatoarele operatii:

    -accesul la oricare nod al listei in scopul citii sau modificarii informatiei continute de acesta

    -adaugarea unui nod, indiferent de pozitia pe care o ocupa in lista

    -stergerea unui element, indiferent de pozitia pe care o ocupa in lista

    -schimbarea pozitiei unui nod in cadrul listei.

    ex1: creaza o lista simplu inlantuita recursiv, si afieaza nodurile in ordinea in care au fost introduse


    #include<iostream>
    struct nod{
    int info;
    nod* adr_urm;
    };
    nod* v;
    nod* adaug()
    {

    nod* c;
    int nr;
    cout<<"dati numarul: ";
    cin>>nr;
    if(nr)
    {

    c=new nod;
    c->adr_urm=adaug();
    c->info=nr;
    return c;
    }
    else
    return 0;
    }
    void tiparire(nod* v)
    {

    nod* c=v;
    while(c)
    {
    cout<<c->info<<endl;
    c=c->adr_urm;
    }
    }
    int main()
    {

    v=adaug();
    tiparire();
    }

    pentru listele dublu inlantuite, avantajul este ca le poti parcurge in ambele sensuri;

    operatii:

    -creare; adaugare la stanga, la dreapta, in interiorul listei; stergere la stanga, la dreapta, din interiorul listei,; listare de la stanga la dreapta, si invers.

    o coada este o lista pentru care toate inserarile sunt facute la unul din capete, toate stergerile la celalalt capat.

    #include<iostream.h>
    struct nod
    {int info;
    nod *next;
    }nod *v, *sf; //v=retine adresa elementului ce urmeaza a fi scos, iar sf=va retine adresa ultimului element introdus in coada

    int n;
    void push(nod *&v, nod *&sf, int n)
    {
    nod *c;
    if(!v)
    {
    v=new nod;
    v->info=n;
    v->next=0;
    sf=v;
    }
    else
    {
    c=new nod;
    sf->next=c;
    c->info=n;
    c->next=0;
    sf=c;
    }
    }
    void pop(nod *&v)
    {
    nod *c;
    if(!v)
    cout<<"coada este vida";
    else
    {
    cout<<"am scos "<<v->info;
    c=v;
    v=v->next;
    delete c;
    }
    }
    void listare(nod *c)
    {
    nod *c=v;
    while(c)
    {cout<<c->info<<" ";
    c=c->next; //trec la urmatorul
    }
    cout<<endl;
    }
    main()
    {
    push(v, sf, 3;
    push(v, sf, 5);
    push(v, sf, 7);
    listare(v);
    pop(v);
    listare(v);
    //s.a.m.
    }

  4. am urmatoarea eroare la build solution:


    error LNK2019: unresolved external symbol "public: class multime __thiscall multime::operator+(class multime &)" (??Hmultime@@QAE?AV0@AAV0@@Z) referenced in function _main

    codul este:


    //se genereaza doua multimi si se afiseaza reuniunea lor
    #include<iostream>
    #include "incapsulare_multimi.cpp"
    using namespace std;
    int main()
    {
    multime m, m1, m2;
    int i;
    m=m+15;
    m=m+7;
    m=m+23;
    m=17+m;
    m=m+799;
    m1=m1+11;
    m1=7+m1;
    m1=0+m1;
    m1=1+m1;
    m=m+m1;
    for(i=0; i<800; i++)
    if(m.in(i))
    cout<<i<<" ";
    system("PAUSE");
    return 0;
    }

    "incapsulare_multimi.cpp"


    class multime
    {
    char mult[100];
    public:
    int i;
    multime();
    int in(int n);
    multime operator+(multime& m);
    multime operator-(multime& m);
    multime operator*(multime& m);
    friend multime operator+(multime& m, int n);
    friend multime operator+(int n, multime& m);
    };
    multime::multime()
    {
    for(i=0; i<100; i++)
    mult[i]=0;
    }
    int multime::in(int n)
    {
    unsigned char nr_bit=7-n%8, masca=1;
    int nr_octet=n/8;
    masca=masca<<nr_bit;
    if(mult[nr_octet] && masca)
    return 1;
    else
    return 0;
    }
    multime operator+(multime& m, int n)
    {
    multime m1=m;
    unsigned char nr_bit=7-n%8, masca=1;
    int nr_octet=n/8;
    masca=masca<<nr_bit;
    m1.mult[nr_octet]=m1.mult[nr_octet]|masca;
    return m1;
    }
    multime operator+(int n, multime& m)
    {
    multime m1=m;
    unsigned char nr_bit=7-n%8, masca=1;
    int nr_octet=n/8;
    masca=masca<<nr_bit;
    m1.mult[nr_octet]=m1.mult[nr_octet]|masca;
    return m1;
    }

    multime multime::operator-(multime& m)
    {
    multime m1;
    int i;
    for(i=0; i<100; i++)
    m1.mult[i]=m1.mult[i]& (mult[i]^m.mult[i]);
    return m1;
    }
    multime multime::operator*(multime& m)
    {
    multime m1;
    int i;
    for(i=0; i<100; i++)
    m1.mult[i]=mult[i] & m.mult[i];
    return m1;
    }

    any ideas?:-S

  5. lucrez in visual studio, iar strcpy nu merge daca nu incluzi si header.ele d care zice @cmiN, si anume: #include <cstring>

    #include <cstdlib>

    ...de care eu uitasem:D

    iar in visual studio nu mai ai <__.h>, d asta folosisem strcpy_s..

    greetings @cmiN!;)

  6. am urmatorul progr:


    #include<iostream>
    #include<string>
    using namespace std;
    class persoana
    {
    int varsta;
    public:
    char *pnume;
    persoana(char *n,int v):varsta(v)
    {
    pnume=new char[strlen("Anonim")+1];
    strcpy_s(pnume, n);
    }
    int spune_varsta()
    {
    return varsta;
    }
    };
    int main()
    {
    persoana p1("vasilache",45);
    persoana p2=p1;//apel constructor de copiere
    cout<<"\n"<<p1.pnume<<"are"<<p1.spune_varsta()<<"ani";
    cout<<"\n"<<p2.pnume<<"are"<<p2.spune_varsta()<<"ani";
    strcpy(p2.pnume,"Gigi");
    cout<<"\n"<<p1.pnume<<"are"<<p1.spune_varsta()<<"ani";
    cout<<"\n"<<p2.pnume<<"are"<<p2.spune_varsta()<<"ani";
    system("PAUSE");
    return 0;
    }

    am o eroare la linia 12.. ma ajuta cnva?:-S

×
×
  • Create New...