Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2791 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Problemme sur fonction [debutant]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problemme sur fonction [debutant]

n°1532977
asie
Posté le 23-03-2007 à 19:21:44  profilanswer
 

Bonjour à tous les programmeurs C, j'ai un problemme avec mon programme, il affiche une erreur mais je ne sais pas de quoi comme problemme. Si parmi vous il y a un bon coeur qui veut me donner une astuce ce sera tres gentil.
Voici mon code et l'enoncé.
 

Code :
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <alloc.h>
  4. /*************************************************************************************************************************************
  5. * Enoncé:                                                                                                                           *
  6. * Faire un programme avec le prototype suivant:                                                                                     *
  7. * AddFloatToVect(float f, float *fVect, int iElem) qui permettre d'ajouter un meme nombre à tout les elements d'un tableau.         *
  8. /*************************************************************************************************************************************/
  9. /**************************************
  10. *             PROTOTYPES             *
  11. /**************************************/
  12. float AddFloatToVect(float fNbr, float *pVect, int iElem);
  13. /**************************************
  14. *             PROG. MAIN             *
  15. /**************************************/
  16. int main (void)
  17. {
  18.   /* Declaration */
  19.    float pVect;
  20.    int iElem = 0;
  21.   /* Donnees en entrees */
  22.    float fNbr;
  23.   /* Traitement */
  24.    printf("Definir la taille d'element: " );
  25.    scanf("%d",&iElem);
  26.    printf("Saisie d'un nombre: " );
  27.    scanf("%f",&fNbr);
  28.    pVect = new float[iElem];
  29.    delete[] fVect;
  30. }
  31. /**************************************
  32. *              FONCTIONS             *
  33. /**************************************/
  34. float AddFloatToVect(float fNbr, float *pVect, int iElem)
  35. {
  36.   int iI;
  37.   for (iI=0; iI<iElem; iI++)
  38.      {
  39.       pVect[iI] = fNbr;
  40.      }
  41. return(pVect);
  42. }

 

Merci d'avance  :)

mood
Publicité
Posté le 23-03-2007 à 19:21:44  profilanswer
 

n°1532978
Sve@r
Posté le 23-03-2007 à 19:34:59  profilanswer
 

asie a écrit :

Bonjour à tous les programmeurs C, j'ai un problemme avec mon programme, il affiche une erreur mais je ne sais pas de quoi comme problemme. Si parmi vous il y a un bon coeur qui veut me donner une astuce ce sera tres gentil.
Voici mon code et l'enoncé.
 

Code :
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <alloc.h>
  4. /*************************************************************************************************************************************
  5. * Enoncé:                                                                                                                           *
  6. * Faire un programme avec le prototype suivant:                                                                                     *
  7. * AddFloatToVect(float f, float *fVect, int iElem) qui permettre d'ajouter un meme nombre à tout les elements d'un tableau.         *
  8. /*************************************************************************************************************************************/
  9. /**************************************
  10. *             PROTOTYPES             *
  11. /**************************************/
  12. float AddFloatToVect(float fNbr, float *pVect, int iElem);
  13. /**************************************
  14. *             PROG. MAIN             *
  15. /**************************************/
  16. int main (void)
  17. {
  18.   /* Declaration */
  19.    float pVect;
  20.    int iElem = 0;
  21.   /* Donnees en entrees */
  22.    float fNbr;
  23.   /* Traitement */
  24.    printf("Definir la taille d'element: " );
  25.    scanf("%d",&iElem);
  26.    printf("Saisie d'un nombre: " );
  27.    scanf("%f",&fNbr);
  28.    pVect = new float[iElem];
  29.    delete[] fVect;
  30. }
  31.  
  32. /**************************************
  33. *              FONCTIONS             *
  34. /**************************************/
  35. float AddFloatToVect(float fNbr, float *pVect, int iElem)
  36. {
  37.   int iI;
  38.   for (iI=0; iI<iElem; iI++)
  39.      {
  40.       pVect[iI] = fNbr;
  41.      }
  42. return(pVect);  
  43. }


 
Merci d'avance  :)


 
Plusieurs problèmes dans ce code
1) pVect étant sensé être un tableau (ou un pointeur vers une zone mémoire allouée pour l'occasion ce qui revient au même qu'un tableau), il s'ensuit qu'il ne peut pas être de type "float" mais "float *"
2) les opérateurs "new" et "delete" sont des opérateurs de C++ et non de C. Si tu compiles ton code avec un compilo C, il est normal qu'il gueule. Remplace "pVect = new float[iElem]" par "pVect=malloc(iElem * sizeof(float))" et "delete[] pVect" par "free(pVect)"
3) ta fonction "addFloatToVect" renvoie pVect. C'est quoi "pVect" ? C'est un "float *". Donc ta fonction est de type "float *" et non "float" !!!
 
Je crois que c'est tout. Faudra quand-même que tu nous dises à quoi sert la fonction "addFloatToVect" qui est créée mais non utilisée...


Message édité par Sve@r le 23-03-2007 à 19:38:32

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1532986
asie
Posté le 23-03-2007 à 19:52:45  profilanswer
 

La fonction AddFloatToVect sert à ajouter un même nombre à tout les éléments d'un vecteur.
PS: Merci Sve@r.

n°1532999
Sve@r
Posté le 23-03-2007 à 20:15:50  profilanswer
 

asie a écrit :

La fonction AddFloatToVect sert à ajouter un même nombre à tout les éléments d'un vecteur.
PS: Merci Sve@r.


J'avais compris. Mais comme elle n'est pas utilisée... Au fait, pourquoi elle renvoie un "float *" ? A quoi te servira cette valeur renvoyée dans l'appelant ?
A mon avis, tu peux la mettre de type "void" sans soucis...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1533013
xilebo
noone
Posté le 23-03-2007 à 20:54:56  profilanswer
 

si tu fais  

Code :
  1. pVect[iI] = fNbr;


 
tu vas remplacer la valeur de ton vecteur par fNbr. Si tu souhaites l'ajouter, fais plutot :  
 

Code :
  1. pVect[iI] += fNbr;


 
 
Ton code ici présente une erreur et est inutile (en plus du fait qu'on n'utilise pas new et delete en C comme l'a expliqué sve@r.
 

Code :
  1. #
  2. pVect = new float[iElem];
  3. #
  4.   delete[] fVect;


 
ce n'est pas fVect, mais pVect. De plus, pVect est de type float, or il devrait être de type float *.  
Tu alloues de la mémoire, puis tu la désalloues juste derrière. Ca ne sert à rien, il faut au moins faire des choses entre les 2. Peut-être ton code n'est pas complet ? Tu peux appeler ta fonction AddFloatToVect après ton allocation par exemple. Mais n'oublie pas que dès que du désalloues, tu ne pourras plus accéder à cette mémoire allouée.

n°1533085
Emmanuel D​elahaye
C is a sharp tool
Posté le 24-03-2007 à 01:45:14  profilanswer
 

asie a écrit :

Bonjour à tous les programmeurs C, j'ai un problemme avec mon programme,  

Code :
  1. pVect = new float[iElem];
  2.    delete[] fVect;




Tu m'étonnes...
 
Alors C ou C++ ?
 
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1533097
asie
Posté le 24-03-2007 à 08:39:29  profilanswer
 

Emmanuel Delahaye a écrit :

Tu m'étonnes...

 

Alors C ou C++ ?


 
Je sais, j'ai beaucoup fais des erreurs veuillez m'excusez pour tous mes erreurs  :jap: .
j'ai reussi à resoudre mes erreurs "grace à vous" mais il y a queque chose que je ne comprendre pas. Vous-voulez bien m'expliquer S.V.P, voici mon code

 

 

Code :
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <alloc.h>
  4. /*************************************************************************************************************************************
  5. * Enoncé:                                                                                                                                                                *
  6. * Faire un programee avec les prototypes suivants:                                                                                                         *
  7. * AddFloatToVect(float f, float *fVect, int iElem) qui permettre d'ajouter un meme nombre à tout les elements d'un tableau.         *
  8. *************************************************************************************************************************************/
  9. /**************************************
  10. *             PROTOTYPES                                  *
  11. **************************************/
  12. void AddFloatToVect(float fNbr, float *pVect, int iElement);
  13. /**************************************
  14. *             PROG. MAIN                                    *
  15. **************************************/
  16. int main (void)                             
  17. {
  18.   /* Declaration */
  19.    float *pVect=0;
  20.    int iElement = 0;
  21.    int iI;
  22.   /* Donnees en entrees */
  23.    float fNbr;
  24.   /* Traitement */
  25.    printf("Definir la taille d'element: " );
  26.    scanf("%d",&iElement);
  27.    printf("Saisie d'un nombre: " );
  28.    scanf("%f",&fNbr);
  29.    pVect = (float *)malloc(iElement * sizeof(float));   //Creation du tableau dans un malloc et met dans pVect
  30.    AddFloatToVect(fNbr, pVect, iElement);
  31.    /* Affichage des elements du tableau */
  32.    for (iI=0;iI<iElement;iI++)
  33.       {
  34.        printf("element du tab[%d]= %lf\n",iI,pVect[iI]);
  35.       } 
  36. }
  37. /**************************************
  38. *              FONCTIONS             *
  39. **************************************/
  40. void AddFloatToVect(float fNbr, float *pVect, int iElement)
  41. {
  42.   int iI;
  43.   for (iI=0; iI<iElement; iI++)
  44.      {
  45.       pVect[iI] += fNbr;
  46.      }
  47. }

 

dans la partie de l'appele "AddFloatToVect(fNbr,pVect,iElement); je n'ai pas indiqué le type de chaque variable dans le parametre et si je les mis il affiche une erreur, pourquoi? Expliquer moi S.V.P.

n°1533107
Sve@r
Posté le 24-03-2007 à 09:58:37  profilanswer
 

asie a écrit :

dans la partie de l'appele "AddFloatToVect(fNbr,pVect,iElement); je n'ai pas indiqué le type de chaque variable dans le parametre et si je les mis il affiche une erreur, pourquoi? Expliquer moi S.V.P.


Quand on appelle une fonction, on lui donne juste le ou les paramètres (ou valeurs) qui seront passés à la fonction. La fonction reçoit ces valeurs et les stocke dans des variables du type qui est précisé dans les paramètres.
Mais t'as pas besoin de préciser ces types lors de l'appel. D'ailleurs, quand tu appelles "printf()", tu ne précises pas lors de l'appel quel est le type de valeur que tu lui passes ? Tu le lui passes et puis c'est tout. printf() se débrouille par lui-même...
 
Donc ta fonction "AddFloatToVect()" doit recevoir comme premier paramètre un "float". Tu lui passes "fNbr" qui est "float" donc pas de problème. La fonction reçoit la valeur de "fNbr" (du main) et la stocke dans une seconde variable nommée aussi "fNbr" (mais tu aurais pu aussi l'appeler "toto" car cette variable n'est connue que de ta fonction) de type "float". Et ce principe s'applique à tout paramètre de toute fonction en C.
 


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1533318
asie
Posté le 25-03-2007 à 10:12:22  profilanswer
 

Voilà, j'ai terminé mon code et j'ajoute quelque prototype.
 

Code :
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <alloc.h>


/*************************************************************************************************************************************
 * Enoncé:                                                                                                                                                                *
 * Faire un programee avec les prototypes suivants:                                                                                                         *
 * AddFloatToVect(float f, float *fVect, int iElem) qui permettre d'ajouter un meme nombre à tout les elements d'un tableau.         *
 * MultipleVectByFloat() qui permettre de multiplier tous les elements d'un vecteur.                                                                 *
 * VectSumElem() qui permettre d'additionner des éléments d'un vecteur et renvoie la somme des éléments d'un vecteur.              *
 * VectSumSquarElem() qui permettre de faire la somme des carres des elements d'un tableau.                                                 *
 * ShowElemVect(float *pVect, int iElement) affichage des éléments d'un vecteur.                                                                  *
 *************************************************************************************************************************************/
/**************************************
 *             PROTOTYPES                                  *
 **************************************/
 void  AddFloatToVect(float fNbr, float *pVect, int iElement);
 void  MultipleVectByFloat(float fNbr, float *pVect, int iElement);
 float VectSumElem(float *pVect, int iElement);
 float VectSumSquarElem(float *pVect, int iElement);
 void  ShowElemVect(float *pVect, int iElement);

 

/**************************************
 *             PROG. MAIN                                    *
 **************************************/
 int main (void)                              
 {
  /* Declaration */
   float *pVect=0;
   int iElement = 0;
   float fSomme;
   float fSommeCarree;
  /* Donnees en entrees */
   float fNbr;
  /* Traitement */
   printf("Definir la taille d'element: " );
   scanf("%d",&iElement);
   printf("Saisie d'un nombre: " );
   scanf("%f",&fNbr);
 
   pVect = (float *)malloc(iElement * sizeof(float));   //Creation du tableau dans un malloc et met dans pVect
 
   AddFloatToVect(fNbr, pVect, iElement);
   ShowElemVect(pVect, iElement);    // Affichage des éléments d'un vecteur
   printf("\nSaisie d'un nombre pour multiplier des éléments d'un vecteur: " );
   scanf("%f",&fNbr);
   MultipleVectByFloat(fNbr, pVect, iElement);
   ShowElemVect(pVect, iElement);    // Affichage des éléments d'un vecteur
   fSomme = VectSumElem(pVect, iElement);
   printf("\nRésultats d'additionne des éléments d'un vecteur: %f\n", fSomme);
   fSommeCarree = VectSumSquarElem(pVect, iElement);
   printf("Résultats somme des carrées: %f", fSommeCarree);
   
   free(pVect);
}
/**************************************
 *              FONCTIONS             *
 **************************************/
void AddFloatToVect(float fNbr, float *pVect, int iElement)
{
  int iI;
  for (iI=0; iI<iElement; iI++)
     {
      pVect[iI] += fNbr;
     }
}
/****************************************************************/
void MultipleVectByFloat(float fNbr, float *pVect, int iElement)
{
 int iI;
 for (iI=0; iI<iElement; iI++)
    {
     pVect[iI] *= fNbr;
    }
}
/*****************************************************************/
float VectSumElem(float *pVect, int iElement)
{
 int iI;
 float fSomme = 0;
 for (iI=0; iI<iElement; iI++)
    {
     fSomme += *(pVect +1);
    }
 return(fSomme);
}
/*****************************************************************/
float VectSumSquarElem(float *pVect, int iElement)
{
 int iI;
 float fSomCarree = 0;
 for (iI=0; iI<iElement; iI++)
    {
     pVect[iI] = *(pVect +1) * *(pVect +1);
     fSomCarree += pVect[iI];
    }
 return(fSomCarree);
}
/*****************************************************************/
void ShowElemVect(float *pVect, int iElement)
{
 int iI;
 for (iI=0; iI<iElement; ++iI)
    {
     printf("Elément du Tab[%d] = %f\n",iI+1, *(pVect +1));
    }
}
Merci à vous tous specialement à Sve@r de m'avoir aider.  :hello:  à bientot.

 

n°1533333
Sve@r
Posté le 25-03-2007 à 13:01:49  profilanswer
 

asie a écrit :

Code :
  1. /*****************************************************************/
  2. float VectSumElem(float *pVect, int iElement)
  3. {
  4. int iI;
  5. float fSomme = 0;
  6. for (iI=0; iI<iElement; iI++)
  7.     {
  8.      fSomme += *(pVect +1);
  9.     }
  10. return(fSomme);
  11. }
  12. /*****************************************************************/
  13. float VectSumSquarElem(float *pVect, int iElement)
  14. {
  15. int iI;
  16. float fSomCarree = 0;
  17. for (iI=0; iI<iElement; iI++)
  18.     {
  19.      pVect[iI] = *(pVect +1) * *(pVect +1);
  20.      fSomCarree += pVect[iI];
  21.     }
  22. return(fSomCarree);
  23. }
  24. /*****************************************************************/
  25. void ShowElemVect(float *pVect, int iElement)
  26. {
  27. int iI;
  28. for (iI=0; iI<iElement; ++iI)
  29.     {
  30.      printf("Elément du Tab[%d] = %f\n",iI+1, *(pVect +1));
  31.     }
  32. }



 
Hum... si tu utilises à chaque fois "pVect + 1" dans ta boucle, tu ne traiteras pas les "n" éléments de ton tableau mais "n" fois le même élément. Peut-être voulais-tu écrire "*(pVect + iI)" ???
Par ailleurs, bien que "*(pVect + iI)" soit correct, t'as aussi le droit de l'écrire "pVect[iI]". C'est plus lisible et tout aussi rapide à l'exécution.
Sinon ta fonction "VectSumSquarElem" est mal conçue. Son rôle est de renvoyer la somme des carrés mais pas de modifier le contenu du tableau. Or, toi tu écris "pVect[iI] = *(pVect +1) * *(pVect +1);" => il y a affectation donc modification !!!


Message édité par Sve@r le 25-03-2007 à 13:04:42

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
mood
Publicité
Posté le 25-03-2007 à 13:01:49  profilanswer
 

n°1533349
asie
Posté le 25-03-2007 à 14:18:01  profilanswer
 

Encore merci Sve@r.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Problemme sur fonction [debutant]

 

Sujets relatifs
aide pour creation annuaire (débutant)fonction setInterval
fonction changer nom fichier[PHP] Fonction include dreamweaver
[Ajax] fonction synchrone (onreadystatechange) marche pas sur mozilla?Probleme fonction mail
trier le contenu de mon répertoire en fonction du type de fichierAméliorer la vitesse du fonction donnant un nombre aléatoire
[PHP]Problème fonctionSSH, serveur dédié pour débutant, comment?
Plus de sujets relatifs à : Problemme sur fonction [debutant]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR