IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Appel de fonction


Sujet :

C

  1. #1
    Membre régulier Avatar de chicabonux
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    329
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Mai 2007
    Messages : 329
    Points : 73
    Points
    73
    Par défaut Appel de fonction
    Bonjour

    Je dois déclarer des fonctions dans le main mais le programme que j'ai écrit plante et je ne vois pas pourquoi ?
    (som2 me servira plus tard quand je devrais calculer la variance et l'écart type)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    #include<stdio.h>
    #include<math.h>
    #include<stdlib.h>
     
    long somme(int T[]);
     
    int main(int argc,char *argv[])
    {
    	/*déclarations des valeurs*/
    	int Tx[100],TX[100];
    	long som1,som2;
    	int i;
    	double moyenne,n;
     
    	/*saisie des données*/
    	printf("Dimension des 2 tableaux :");
    	scanf("%lf",&n);
    	for(i=0;i<n;i++)
    	{
    		printf("Element %i :",i);
    		scanf("%i",&Tx[i]);
    	}
     
    	/*Affichage des données*/
    	printf("Les deux tableaux :\n");
    	for(i=0;i<n;i++)	
    		printf("%i\n",Tx[i]);
    	for(i=0;i<n;i++)
    	{
    		TX[i]=Tx[i]*Tx[i];
    		printf("%i\n",TX[i]);
    	}
     
    	/*calcul des sommes */	
     
    	som1=somme(Tx[i]);
    	som2=somme(TX[i]);
     
    	moyenne=som1/n;
     
    	printf("moyenne : %lf\n",moyenne);
     
    	getch();
    	return 0;
     
    }
     
    long somme(int T[])
    {
    	/*Déclaration des données*/
     
    	int I,N;
    	long s;
     
    	/*affichage des données*/
    	printf("afficher N :");
    	scanf("%i",&N);
     
    	/*calcul des sommes*/
     
    	for(s=0,I=0;I<N;I++)
    	return s+=T[I];
     
    }

  2. #2
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par chicabonux Voir le message
    Bonjour

    Je dois déclarer des fonctions dans le main mais le programme que j'ai écrit plante et je ne vois pas pourquoi ?
    (som2 me servira plus tard quand je devrais calculer la variance et l'écart type)
    Ce programme ne compile pas :

    ||=== test_DVP, Release ===|
    E:\projet\test_DVP\main.c||In function `main'
    E:\projet\test_DVP\main.c|36|error: passing arg 1 of `somme' makes pointer from integer without a cast|
    E:\projet\test_DVP\main.c|37|error: passing arg 1 of `somme' makes pointer from integer without a cast|
    E:\projet\test_DVP\main.c|41|warning: ISO C90 does not support the `%lf' printf format|
    E:\projet\test_DVP\main.c|43|warning: implicit declaration of function `getch'|
    E:\projet\test_DVP\main.c||In function `somme'
    E:\projet\test_DVP\main.c|62|error: `i' undeclared (first use in this function)|
    E:\projet\test_DVP\main.c|62|error: (Each undeclared identifier is reported only once|
    E:\projet\test_DVP\main.c|62|error: for each function it appears in.)|
    E:\projet\test_DVP\main.c|7|warning: unused parameter 'argc'|
    E:\projet\test_DVP\main.c|7|warning: unused parameter 'argv'|
    ||=== Build finished: 5 errors, 4 warnings ===|
    Commences par corriger ces anomalies.

  3. #3
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,
    Le code ne compile même pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    09-03-14.c: In function 'main':
    09-03-14.c:36: warning: passing argument 1 of 'somme' makes pointer from integer without a cast
    09-03-14.c:37: warning: passing argument 1 of 'somme' makes pointer from integer without a cast
    09-03-14.c:43: warning: implicit declaration of function 'getch'
    09-03-14.c: At top level:
    09-03-14.c:7: warning: unused parameter 'argc'
    09-03-14.c:7: warning: unused parameter 'argv'
    09-03-14.c: In function 'somme':
    09-03-14.c:62: error: 'i' undeclared (first use in this function)
    09-03-14.c:62: error: (Each undeclared identifier is reported only once
    09-03-14.c:62: error: for each function it appears in.)
    09-03-14.c:64: warning: control reaches end of non-void function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    #include<stdio.h>
    #include<math.h>
    #include<stdlib.h>
     
    long somme (int T[100]);
     
    int main (int argc, char *argv[])
    {
      /*déclarations des valeurs */
      int Tx[100], TX[100];
      long som1, som2;
      int i;
      double moyenne, n;
     
      /*saisie des données */
      printf ("Dimension des 2 tableaux :");
      scanf ("%lf", &n);
      for (i = 0; i < n; i++)
        {
          printf ("Element %i :", i);
          scanf ("%i", &Tx[i]);
        }
     
      /*Affichage des données */
      printf ("Les deux tableaux :\n");
      for (i = 0; i < n; i++)
        printf ("%i\n", Tx[i]);
      for (i = 0; i < n; i++)
        {
          TX[i] = Tx[i] * Tx[i];
          printf ("%i\n", TX[i]);
        }
     
      /*calcul des sommes */
      /* appel des fonctions : Tx, pas Tx[i]*/
      som1 = somme (Tx);
      som2 = somme (TX);
     
      moyenne = som1 / n;
     
      printf ("moyenne : %lf\n", moyenne);
     
      /* getch : connais pas */
     
      return 0;
     
    }
     
    long somme (int T[100])
    {
      /*Déclaration des données */
     
      int I, N;
      /* penser à initialiser s à 0 */
      long s = 0;
     
      /*affichage des données */
      printf ("afficher N :");
      scanf ("%i", &N);
     
      /*calcul des sommes */
      /* Bien écrire T[ I ] et pas T[ i ] */
      for (s = 0, I = 0; I < N; I++)
        s += T[ I ];
     
      /* sortir le return de la boucle for, sinon le résultat est erroné */
      return s;
    }
    EDIT : l'erreur ligne 62 ne vient pas du programme mais d'un conflit avec la balise italique....

    Néanmoins, tu as deux erreurs graves corrigées et commentées dans ma réponse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      som1 = somme (Tx[i]);
      som2 = somme (TX[i]);
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      for (s = 0, I = 0; I < N; I++)
        return s += T[ I ];
    Dernière modification par Invité(e) ; 15/03/2009 à 10h09.

  4. #4
    Membre régulier Avatar de chicabonux
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    329
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Mai 2007
    Messages : 329
    Points : 73
    Points
    73
    Par défaut
    Avec visual studio ça compile

    Par contre j'ai édité le premier code . Peut être que ça marchera mieux pour la compilation chez vous ?

  5. #5
    Membre régulier Avatar de chicabonux
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    329
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Mai 2007
    Messages : 329
    Points : 73
    Points
    73
    Par défaut
    Je te remercie pour ton aide détaillée

    Par contre je trouve que faire taper au clavier n et N (qui doivent représenter la même valeur dans le programme ) par l'utilisateur n'est pas une très bonne solution

    Il n'y aurait pas une autre manière pour déclarer ces valeurs ?

  6. #6
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par chicabonux Voir le message
    Je te remercie pour ton aide détaillée

    Par contre je trouve que faire taper au clavier n et N (qui doivent représenter la même valeur dans le programme ) par l'utilisateur n'est pas une très bonne solution

    Il n'y aurait pas une autre manière pour déclarer ces valeurs ?
    Oui, il y a plein de méthodes...
    La plus simple est d'ajouter un paramètre à la fonction somme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    long somme (int T[100], int num)
    {
      /*Déclaration des données */
      int i;
      long s;
     
      /* vérification qu'on écrit pas n'importe quoi : */
      if((num < 1) || (num > 100)) 
      {
        fprintf(stderr, "parametre num incorrect.\n");
        return 0;
      }
     
     
      /*calcul de la somme */
      for (s = 0, i = 0; i < num; i++)
        s += T[i];
     
      return s;
    }
    et dans la main :

  7. #7
    Membre régulier Avatar de chicabonux
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    329
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Mai 2007
    Messages : 329
    Points : 73
    Points
    73
    Par défaut
    Je te remercie à nouveau et je commence à comprendre un peu mieux la manière pour arriver à maitriser le langage C.
    ça doit faire pas loin d'un mois et demi que j'ai commencé mon apprentissage et j'ai vraiment du mal mais je m'accroche

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Appeler une fonction avec "action" ds un
    Par drinkmilk dans le forum ASP
    Réponses: 4
    Dernier message: 20/04/2004, 14h54
  2. Réponses: 4
    Dernier message: 19/04/2004, 13h41
  3. [JSP] Appeler une fonction
    Par Patrick95 dans le forum Servlets/JSP
    Réponses: 10
    Dernier message: 23/12/2003, 13h44
  4. Appel à des fonctions incluses dans des DLL
    Par Greybird dans le forum Langage
    Réponses: 3
    Dernier message: 26/05/2003, 13h33
  5. Appeler une fonction avec/sans parenthèses
    Par haypo dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 29/12/2002, 18h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo