+ Responder ao Tópico



  1. #1
    Noia
    Visitante

    Padrão C e ponteiros

    Pessoal,

    Estou fazendo um programa em C++ para solucionar problemas utilizando o metodo simplex.

    E estou tendo uma dificuldade com os ponteiros...rs tenho um ponteiro de ponteiro A (matriz) e um ponteiro B (vetor)

    Quando altero o valor de B esta alterando alguns valores de A.

    Abaixo segue o meu fonte, alguém sabe onde estou errando?


    Obrigado,

    Marcelo Gomes

    -----------

    #include <conio.h>
    #include <alloc.h>
    #include <iostream.h>
    class poo{
    private:
    int li,co;
    float *x, *c, *x0, *c0 ,*b, **a;
    public:
    poo(int l, int c);
    void recebedados();
    };
    void main(){
    poo *p;
    clrscr();
    p=new poo(2,4);
    p->recebedados();
    getch();
    }

    poo:oo(int l, int c){
    int m;

    this->li=l;
    this->co=c;

    this->x= (float *) malloc(sizeof(float *) * co);
    this->c= (float *) malloc(sizeof(float *) * co);
    this->x0=(float *) malloc(sizeof(float *) * li);
    this->c0=(float *) malloc(sizeof(float *) * li);
    this->b= (float *) malloc(sizeof(float *) * li);
    this->a= (float **) malloc(sizeof(float *) * li);
    for(m=0;m<li;m++)
    a[m]=(float *) malloc(sizeof(float) * co);
    }
    void poo::recebedados(){
    int m,n;
    cout << "\nEntre com o valor de x0";
    for(m=0;m<li;m++){
    cout << "\nEntre com o valor de X0 na posicao " << m;
    cin >> x0[m];
    }
    cout << "\nEntre com o valor de c0";
    for(m=0;m<li;m++){
    cout << "\nEntre com o valor de c0 na posicao " << m;
    cin >> c0[m];
    }
    for(m=0;m<li;m++){
    cout << "\nEntre com o valor de b na posicao " << m;
    cin >> b[m];
    }
    for(m=0;m<co;m++){
    cout << "\nEntre com o valor de X na posicao " << m;
    cin >> x[m];
    }
    for(m=0;m<co;m++){
    cout << "\nEntre com o valor de C na posicao " << m;
    cin >> c[m];
    }
    for(m=0;m<li;m++){
    for(n=0;n<co;n++){
    cout << "\nEntre com o valor de a na posicao " << m << "x" << n;
    cin >> a[m][n];
    }
    }
    }

  2. #2

    Padrão C e ponteiros

    ola,
    Seu codigo eh pra ser compilado no TurboC++, nao? Vi pelo conio.h declarado e pelo seu post feito depois deste.

    Bem... vc esta alocando varias matrizes de ponteiros e nao float´s.
    Vc deve declarar matrix de ponteiro apenas pra variavel a.
    (sizeof(float *) para sizeof(float) para c, c0,x, x0 e b)

    Essa modificacao TALVEZ nao resolva seu problema (uma vez q ponteiro PROVAVELMENTE tem o mesmo tamaho do float na sua maquina), nas tente (nao duvido q comece a fucnionar).

    Nao vi problemas graves no seu codigo (nao compilei) E tb desconfio
    MUITO do TurboC. Jah pastei muito com ele. Teste seu programa no gcc (remova o conio.h e use getchar() ou invez de getch() (ou use com ncurses(3))).

    Sempre faça um memset(var, 0, size_var) nas variaveis dinamicas alocadas (ou calloc()): ha erro em alguns compiladores em pegar um endereco de uma variavel declarada mas nao inicializada.

    (outra coisa, use as tags {code} {/code} para postar codigo. Assim nao perde a identacao)

    Já q vc tah usando C++ e nao C, pq nao usa um conteiner (list, vector, sei la) de <float> em vez de alocar e gerenciar memoria dinamica??

  3. #3
    Noia
    Visitante

    Padrão C e ponteiros

    Eh o meu prog foi feito em TurboC, estou iniciando o uso do gcc, mas tive algumas dificudades,(que já postei no forum!!! ) e foram respondidas... ainda vou testar.

    Vou tentar fazer as modificações sugeridas, depois eu posto o que aconteceu...

    Obrigado, pela dica do post no forum...nos próximos vou usar...

    Bom eu não usei esses caras pq eu não os conhecia... eu comecei aprendendo C na faculdade e aos poucos estou aprendendo C++, ainda estou misturando tudo C e C++...rs

    Obrigado,

    Marcelo Gomes