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 :

Fonction puissance ( X à la ppuissance y)


Sujet :

C

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2016
    Messages : 9
    Par défaut Fonction puissance ( X à la ppuissance y)
    Je suis un débutant qui s'exerce seul à travers le langage C. A parti du livre : langage C écrit par B.W.KERNIGHAN et D.M.RITCHIE 2ème édition Masson. J'ai pu faire les quatorze premiers exercices. Ce qui m'a permis d'aborder la parti 1.7 Les fonctions.
    Voici le programme dont la compréhension n'est pas encore totalement solide à mon niveau :

    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
    # include < stdio.h >
        int puiss ( int m , int n ) ; 
    /* essai de la fonction puiss */
    main ( )
    { 
      int i  ; 
       for ( i = 0  ;  i < 10  ;  ++i )                                             printf(  "  % d  % d  % d\n ", i , puiss (2 , i ) , puiss ( -3 , i )) ;   
    return 0 ; 
    }
    /*puiss  :  élève base à la puissance n ;  n >= 0 */
    int puiss ( int base , int n )
    {
    int. i , p  ; 
    p = 1  ; 
    for ( i = 1  ;  i  <= n  ;  ++i )
    p = p * base  ; 
    return p  ; 
    }
    Ainsi prend fin le programme.
    Voici mes préoccupations :
    1- Quelle est la première, deuxième,...., valeur que base prendra en tant que entier dans l'instruction p = p * base; est ce zéro ? un ? deux ?

    2- la fonction puiss( ) retournera une valeur ( p ) à la fonction main( ). J'aimerais savoir ou comprendre ce qui se passe après. C'est à dire après le retour de la première, deuxième,...., valeur de p à la fonction main( )

    Merci d'avance pour l'éclairage.

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    Bonjour,

    1) vois-tu quelque part quelque chose qui modifie base ? Non! base à donc toujours la même valeur à chaque itération de la boucle. Par contre, p lui change de valeur. Avant la boucle il faut 1, après une itération il vaut base, après 2 itérations il vaut base*base, après 3 itérations il vaut base*base*base, ...

    2) Un appel de fonction retourne une valeur, c'est ce qu'on appelle le résultat de la fonction. Pour avoir plusieurs valeurs, il faut appeler plusieurs fois la fonction, à chaque nouvel appel une nouvelle valeur est retournée.
    Dans ton exemple, la valeur retournée est directement transmise à la fonction printf() qui se charge de l'afficher.

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 794
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 794
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par agodafo Voir le message
    Voici le programme dont la compréhension n'est pas encore totalement solide à mon niveau :
    Déjà si tu indentes correctement ton programme, tu le reliras mieux ensuite, les autres le liront facilement et tu pourras aussi le modifier plus aisément.
    Les instructions d'un même bloc sont alignées sur la même indentation, et chaque nouveau bloc prend une indentation supplémentaire.

    Et puis trop d'espaces tuent l'espace. Tu mets un espace après la virgule, pas avant. Pas d'espace pour les affectations, ni avant et après les parenthèses ni avant le point-virgule. Mais tu peux espacer les comparaisons.

    Voici ton code réécrit selon ces principes

    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
    # include <stdio.h>
    int puiss(int, int);		/* prototype de la fonction puiss - pas besoin de nommer les paramètres */
     
    int main() { 
    	int i  ; 
    	for (i=0; i < 10; ++i)
    		printf("  % d  % d  % d\n", i, puiss(2, i), puiss(-3, i));
    	return 0; 
    }
     
    /*puiss  :  élève base à la puissance n ;  n >= 0 */
    int puiss(int base, int n) {
    	int i, p; 
    	p=1; 
    	for (i=1; i <= n; ++i)		// for (i=0; i < n; ++i) aurait fonctionné aussi de façon un peu plus rapide (tester une inégalité stricte est plus rapide qu'une inégalité ou une égalité)
    		p=p*base; 
    	return p; 
    }
    Citation Envoyé par agodafo Voir le message
    1- Quelle est la première, deuxième,...., valeur que base prendra en tant que entier dans l'instruction p = p * base; est ce zéro ? un ? deux ?
    Ben p commence à 1. Tu le multiplies par "base" donc tu dois être capable de calculer ce que ça fait (niveau primaire quand-même !!!). Puis tu le remultiplies encore par "base" donc pareil. Et etc...

    Citation Envoyé par agodafo Voir le message
    2- la fonction puiss( ) retournera une valeur ( p ) à la fonction main( ). J'aimerais savoir ou comprendre ce qui se passe après. C'est à dire après le retour de la première, deuxième,...., valeur de p à la fonction main( )
    C'est le principe de l'évaluation de l'expression. La fonction printf() doit afficher un nombre décimal. A ce moment elle appelle puiss() et attend son retour, retour qui prendra alors la place du nombre à afficher.

    C'est le même principe qui fait que ce genre d'expression int i=2*puiss(5, 2) calcule la bonne valeur au final.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2016
    Messages : 9
    Par défaut infiniment merci pour l'éclairage
    Merci infiniment pour la compréhension. Je comprend comment ça marche. Je l'ai expérimenté sous d'autre angle et ça marche.
    Une foi encore merci 😀😀😀

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

Discussions similaires

  1. Fonction puissance, avec des decimales
    Par n0o38 dans le forum Langage
    Réponses: 4
    Dernier message: 01/07/2007, 00h40
  2. la fonction puissance pow() ? entier, réel ?
    Par italiasky dans le forum C
    Réponses: 9
    Dernier message: 03/12/2006, 17h41
  3. Fonction Puissance en J2ME
    Par Vince1404 dans le forum Java ME
    Réponses: 4
    Dernier message: 22/08/2006, 16h28
  4. 8x11=0 !! problème fonction puissance
    Par Renesis57 dans le forum C
    Réponses: 18
    Dernier message: 26/11/2005, 14h54
  5. [LG]fonction puissance en pascal
    Par le 27 dans le forum Langage
    Réponses: 8
    Dernier message: 13/12/2003, 23h21

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