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 :

probleme avec des fonctions


Sujet :

C

  1. #1
    Nouveau candidat au Club
    Inscrit en
    Décembre 2008
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 1
    Par défaut probleme avec des fonctions
    bonjours a tous
    voila j'ai essayé de faire un programme mais comme tous ceux que j'essai de fiare depuis le début de la journée ca ne marche pas! mais pourquoi!!!
    quelqu'un aurait il la solution pour celui ci
    merci

    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
    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>
     
    float carre(float x)
    { return (x*x);}
     
    float cube(float x)
    {return (x*x*x);}
     
    float somel(float p,float N)
    {
          float c,S;
          S=0;
          if (p=2)
             {for (c=1;c<=N;c+2)
                  {S=S+carre(c);}}
          if(p=3)
                 {for (c=2;c<=N;c=c+2)
                      {S=S+cube(c);}}
           if((p!=2)&&(p!=3))
           {S=-99;}
           if (N=0)
           {S=-99;}
           return S;}
     
        int main()
          {int p,N;
          printf("\nvaleur de p ");
          scanf("%d",&p);
          printf("\nvaleur de n=");
          scanf("%d",&N);
          printf("\n\n p=%d, n=%d", p,N);
         system("pause");
          printf("\n le resultat est %f",somel(p,N);
          system("pause");
          return 0;}

    voici le but de l'exo
    1/ Ecrivez une fonction typée nommée carre de type float permettant de renvoyer le carré dʼun entier
    transmis en paramètre.
    2/ Ecrivez une fonction typée nommée cube de type float permettant de renvoyer le cube dʼun entier envoyé
    en paramètre.
    On se propose à présent de faire une fonction typée nommée sommeI, permettant, suivant la valeur dʼun
    paramètre p, (2 ou 3) de renvoyer la somme des carrés des N premiers entiers impairs positifs (cas p=2) ou
    la somme des cubes des N premiers entiers pairs positifs (cas p=3).
    N et p sont transmis en paramètres à la fonction, ils doivent être saisis dans la fonction principale. La valeur
    « 0 » nʼest pas comptée comme un entier pair.
    Le type de la fonction sommeI est laissé à votre libre choix. Vous devez impérativement utiliser dans la
    fonction sommeI les fonctions que vous avez créées lors des questions 1 et 2.
    La fonction sommeI doit renvoyer la valeur -99 si toutefois N ou p ne permettaient pas le calcul des sommes.
    Dans la fonction main(), calculez la somme des carrés 10 premiers entiers impairs, puis celle du cube des
    20 premiers entiers pairs.

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par begeloud Voir le message
    bonjours a tous
    voila j'ai essayé de faire un programme mais comme tous ceux que j'essai de fiare depuis le début de la journée ca ne marche pas! mais pourquoi!!!
    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
     
     
    -------------- Build: Debug in hello ---------------
     
    Compiling: main.c
    Linking console executable: bin\Debug\hello.exe
    C:\dev\hello\main.c: In function `somel':
    C:\dev\hello\main.c:15: warning: suggest parentheses around assignment used as truth value
    C:\dev\hello\main.c:18: warning: suggest parentheses around assignment used as truth value
    C:\dev\hello\main.c:23: warning: suggest parentheses around assignment used as truth value
    C:\dev\hello\main.c:16: warning: statement with no effect
    C:\dev\hello\main.c:24: warning: will never be executed
    C:\dev\hello\main.c: At top level:
    C:\dev\hello\main.c:28: warning: function declaration isn't a prototype
    C:\dev\hello\main.c: In function `main':
    C:\dev\hello\main.c:35: error: syntax error before ';' token
    Process terminated with status 1 (0 minutes, 0 seconds)
    1 errors, 6 warnings
    C'est ça que tu n'arrives pas à corriger ?

    Ce sont quand même des choses très basiques.

    - Tu confonds = et ==.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
          for (c = 1; c <= N; c + 2)
    c + 2 ? Tu veux dire c += 2 ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf ("\n le resultat est %f", somel (p, N);
    - Il manque une ')'

    Après correction de ces bugs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    valeur de p 2
     
    valeur de n=3
     
     
     p=2, n=3Appuyez sur une touche pour continuer...
     
     le resultat est 10.000000Appuyez sur une touche pour continuer...
     
    Process returned 0 (0x0)   execution time : 19.879 s
    Press any key to continue.
    Tu devrais pouvoir améliorer la présentation. Je rappelle qu'une ligne de texte doit être terminée par '\n'.

  3. #3
    Membre éprouvé Avatar de bobmidou
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2008
    Messages : 121
    Par défaut
    salut

    Essaye ça :
    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
    69
    70
    71
     
    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>
     
    int carre(int x)
    { 
        return (x*x);
    }
     
    int cube(int x)
    {
        return (x*x*x);
    }
     
    int somel(int p,int N)
    {
        int i = 0;
        int S = 0;
     
        if (p == 2)
        {
    	 if (N == 0)
    	 {
    		S = -99;
    	 }
    	 else
    	 {
    		 for (i = 1; i <= N; i=i+2)
    		 {
    			 S = S + carre(i);
    		 }
    	 }
        }
     
        if(p == 3)
        {
    	 if (N <= 1)
    	 {
    		 S = -99;
    	  }
    	  else
    	  {
    		 for (i = 2; i <= N; i = i+2)
    		 {
    			 S = S + cube(i);
    		 }
    	  }
         }
     
         if ((p != 2) && (p != 3 ))
        {
    	 S = -99;
         }
     
         return S;
    }
     
    int main()
    {
        int p,N;
        printf("\nvaleur de p = ");
        scanf("%d",&p);
        printf("\nvaleur de n = ");
        scanf("%d",&N);
        printf("\n\n p = %d, n = %d\n\n", p,N);
        system("pause");
        printf("\n\n le resultat est %d \n\n",somel(p,N));
        system("pause");
        return 0;
    }
    Bonne chance

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    D'après l'énoncé, je verrais plutôt ça :

    1/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    float carre(int)
    {
    ...
    }
    2/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    float cube(int)
    {
    ...
    }
    3/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    int somme1(int,int)
    {
    ...
    }
     
    ou (?) :
     
    float somme1(int,int)
    {
    ...
    }
    Par contre, ce genre d'énoncé pose, à mon avis, plusieurs problèmes :

    * Le carré et le cube d'un entier est toujours un entier. Donc passer un entier en paramètre dans une fonction pour ressortir le résultat en float, c'est plutôt moyen. Sans compter le problème de la précision du codage : au lieu d'un -par exemple- 10, on peut se retrouver avec un 9.999999999. A partir de là, quel est le mieu : mettre un paramètre en float ou en int ? Aucune idée.

    * la fonction 'somme1' doit retourner -99 si impossibilité de calcul. Or, on se retrouve avec le même problème : précision de l'encodage de la variable. Au lieu d'un -99, on peut aussi se retrouver avec un -99.0000000001 ou un -98.9999999999. Enfin, je suppose. Donc, le plus logique serait que la fonction retourne un int, car pour tester la valeur de retour, c'est chaud. Mais alors, dans ce cas, quel est l'intérêt de calculer des sommes en float sachant qu'on ne calcule que des entiers et que la valeur de retour à tester est un entier (-99) ?

    C'est pas cohérent du tout comme exo, avec tous ces mélanges de types.

    Enfin, c'est mon avis, en tout cas.

Discussions similaires

  1. [LibreOffice][Tableur] Toujours des problemes avec la fonction Recherche V
    Par fransix dans le forum OpenOffice & LibreOffice
    Réponses: 5
    Dernier message: 01/12/2014, 11h21
  2. Réponses: 26
    Dernier message: 16/07/2009, 10h41
  3. Probleme avec des fonctions de finance
    Par Byakuya dans le forum VBA Access
    Réponses: 5
    Dernier message: 21/03/2007, 18h01
  4. [LG]Probleme avec une fonction
    Par xavier1936 dans le forum Langage
    Réponses: 7
    Dernier message: 08/02/2005, 22h48
  5. Problemes avec des cellules vides
    Par arsgunner dans le forum ASP
    Réponses: 7
    Dernier message: 14/06/2004, 08h42

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