Partage
  • Partager sur Facebook
  • Partager sur Twitter

pointeur

    15 mai 2007 à 11:17:31

    bonjour a tous;
    j'ai fait un petit programme pour manipuler une matrice alors j'ai un message d'erreur : floating point
    est ce que qulqu'un peut m'aider merci.

    #include<stdio.h>
    #include<conio.h>
    #include<math.h>
    #include<stdlib.h>
    void main()
    {
            float **pp_tab;

            int i,j,k,n;
            int x,y;

            clrscr();   

            printf("\ndonnez le degre n= ");
            scanf("%d",&n);fflush(stdin);

            pp_tab=(float**)malloc(n*sizeof(float*));
            if(pp_tab==NULL)
            printf("erreir");
            *pp_tab=(float*)malloc(n*n*sizeof(float));
            if(*pp_tab==NULL)
            printf("erreur2");
            for(i=1;i<n;i++)
            {
                    pp_tab[i]=*pp_tab+i*n;
            }                       
            x=wherex();y=wherey();
            for(i=0;i<n;i++)
            {

                    for(j=0;j<n;j++)
                    {
                            printf("\npp_tab[%d][%d]= ",i,j);
                    }
            }
            for(i=0;i<n;i++)
            {
                    for(j=0;j<n;j++)
                    {
                    gotoxy(x+14,y-(n*n)+1);
                    y++;

                    scanf("%f",&pp_tab[i][j]);fflush(stdin);



                    }
            }

            for(i=0;i<n;i++)
            {
                    for(j=0;j<n;j++)
                    {
          printf("\npp_tab [%d][%d]= %f",i,j,*(*(pp_tab+i)+j));

                    }
            }
           
            printf("\n%f",**pp_tab);
            printf("\n%f",*pp_tab);
           
    getch();
    • Partager sur Facebook
    • Partager sur Twitter
      15 mai 2007 à 15:43:53

      Alors tes malloc sont mal faits, déjà si c'est du C, pas beosin de (float**) et (float*) devant le malloc(), si c'est du C++ il faut utiliser new.
      Ensuite une allocation dynamique de tableau à deux dimensions se fait comme suit :

      float **tableau;
      size_t tailleTableau;
      tableau = malloc(tailleTableau * sizeof(float*)); // allocation du tableau de pointeur
      if(tableau != NULL)
      {
          int i;
          // pour chaque pointeur du tableau on alloue un nouveau tableau de float
          for(i = 0; i < tailleTableau; i++)
              tableau[i] = malloc(tailleTableau * sizeof(float));
      }
      • Partager sur Facebook
      • Partager sur Twitter
        16 mai 2007 à 10:25:28

        merci pour la reponse mais quand je travail avec les int sa marche tres bien
        • Partager sur Facebook
        • Partager sur Twitter
          16 mai 2007 à 15:59:56

          Bah oui, c'est normal, mais c'est un "hasard" ! C'est juste parce qu'en mémoire une adresse (donc un pointeur) c'est un entier, bien sûr ne va pas utiliser un entier comme pointeur ! Mais dans la RAM ils ont la même gueule, et l'ordinateur les considère comme équivalent, alors que les float et double ont une gueule spécifique. Toujours est-il que tu ne peux rien faire au hasard, donc, ton algorithme d'allocation dynamique de tableau à deux dimensions :
          TU L'OUBLIES


          Et je suis sincèrement sérieux, tu ne dois surtout pas procéder comme ça, et tu utilises celui que je t'ai montré, voici l'algorithme général, que tu peux utiliser avec n'importe quel type :

          TYPE **tableau;
          tableau = malloc(sizeof(TYPE*) * nbColonnes);
          if(tableau != NULL)
              for(int i =0; i < nbLignes; i++)
                  tableau[i] = malloc(sizeof(TYPE) * nbLignes);


          Et donc tu remplaces "TYPE", par le type que tu veux, ça peut être un type de base comme une structure, le principe étant que tu alloues un tableau de pointeur sur TYPE (donc TYPE*, il ne faut surtout pas oublier l'étoile), et pour chaque pointeur tu alloues un tableau de TYPE...
          • Partager sur Facebook
          • Partager sur Twitter
            17 mai 2007 à 0:30:23

            voila j'ai fait exactement ce que vous m'avez dit
            mais il donne le même message d'erruer.
            merçi psychoh 13.



            #include<stdio.h>
            #include<conio.h>
            #include<math.h>
            #include<stdlib.h>
            void main()
            {
                    float **pp_tab;

                    int i,j,k,n,l,c;
                    int x,y;

                    clrscr();

                    printf("\ndonnez le degre n= ");
                    scanf("%d",&n);fflush(stdin);

                    pp_tab=malloc(sizeof(float*)*n);
                    if(pp_tab==NULL)
                    printf("erreir");
                    for(i=0;i<n;i++)
                    {
                    pp_tab[i]=malloc(sizeof(float)*n);
                    }
                    if(*pp_tab==NULL)
                    printf("erreur");
                    for(i=1;i<n;i++)
                    {
                            pp_tab[i]=*pp_tab+i*n;
                    }
                    x=wherex();y=wherey();
                    for(i=0;i<n;i++)
                    {

                            for(j=0;j<n;j++)
                            {
                                    printf("\npp_tab[%d][%d]= ",i,j);
                            }
                    }
                    for(i=0;i<n;i++)
                    {
                            for(j=0;j<n;j++)
                            {
                            gotoxy(x+14,y-(n*n)+1);


                            scanf("%f",&pp_tab[i][j]);fflus(stdin);
                                    y++;



                            }
                    }

                    for(i=0;i<n;i++)
                    {
                            for(j=0;j<n;j++)
                            {
                                    printf("\npp_tab [%d][%d]= %f",i,j,*(*(pp_tab+i)+j));

                            }
                    }
                    printf("\n%f",*(*(pp_tab+0)+0));
                    printf("\n%f",**pp_tab);
                   
            getch();
            }
            • Partager sur Facebook
            • Partager sur Twitter
              17 mai 2007 à 0:39:32

              Est-ce que tu sais où l'erreur est produite ?

              Un petit conseille, tu mets avant et après chaque ligne "critique" un printf("point ..."); en remplaçant les 3 petits points ... par un nombre différent, comme ça ça te permettra de repérer la ligne fautive.

              Au fait j'ai deux question : que comptes-tu faire avec ce tableau ??
              Et aussi : qu'est-ce que cette ligne est censée faire ???
              for(i=1;i<n;i++)
                      {
                              pp_tab[i]=*pp_tab+i*n;
                      }
              • Partager sur Facebook
              • Partager sur Twitter
                17 mai 2007 à 11:29:50

                c'est un programme en c
                c'est juste pour manipuler un tableaux a 2 entrées
                • Partager sur Facebook
                • Partager sur Twitter
                  17 mai 2007 à 11:40:22

                  Citation : gcc -Wall

                  test.c:2:19: error: conio.h: Aucun fichier ou répertoire de ce type
                  test.c: In function ‘main’:
                  test.c:13: warning: implicit declaration of function ‘clrscr’
                  test.c:31: warning: implicit declaration of function ‘wherex’
                  test.c:31: warning: implicit declaration of function ‘wherey’
                  test.c:43: warning: implicit declaration of function ‘gotoxy’
                  test.c:45: warning: implicit declaration of function ‘fflus’
                  test.c:60: warning: implicit declaration of function ‘getch’
                  test.c:10: warning: unused variable ‘c’
                  test.c:10: warning: unused variable ‘l’
                  test.c:10: warning: unused variable ‘k’


                  What the fuck ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    17 mai 2007 à 14:57:00

                    REMRAM j'ai pas compris votre message
                    • Partager sur Facebook
                    • Partager sur Twitter
                      17 mai 2007 à 15:16:27

                      Donc davido, c'est normal que ton programme ne marche pas quand tu mets des trucs pareils :

                      for(i=1;i<n;i++)
                              {
                                      pp_tab[i]=*pp_tab+i*n;
                              }


                      pp_tab[i] c'est un pointeur sur float : "float *", ça veut dire que tu modifies la valeur du pointeur !!! En clair, tu alloues un espace au pointeur pp_tab[i] et ensuite tu le fait pointer autre part ! Je suis pas sûr que ça plaise à l'ordinateur !
                      Si tu veux modifier la valeur contenue dans le tableau il faut écrire : pp_tab[i][j], sinon ça ne peut pas marcher !
                      • Partager sur Facebook
                      • Partager sur Twitter
                        17 mai 2007 à 20:46:36

                        alors comment je fait
                        • Partager sur Facebook
                        • Partager sur Twitter
                          17 mai 2007 à 23:21:02

                          Si tu veux modifier la valeur d'une case de ton tableau tu utilises : tableau[i][j]
                          • Partager sur Facebook
                          • Partager sur Twitter

                          pointeur

                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                          • Editeur
                          • Markdown