Uncategorized

Apres tout votre que vous venez de decouvrir, Cela reste temps libre de faire une bri?ve pause et de mettre en pratique vos nouveaux acquis.

Apres tout votre que vous venez de decouvrir, Cela reste temps libre de faire une bri?ve pause et de mettre en pratique vos nouveaux acquis.

Pour votre faire, rien de tel qu’un exercice recapitulatif : confectionner une calculatrice basique.

Objectif

Votre objectif sera de realiser une calculatrice basique pouvant calculer une somme, une soustraction, une multiplication, une division, le reste d’une division entiere, une puissance, une factorielle, le PGCD et le PPCD.

Celle-ci attendra une entree formatee suivant la notation polonaise inverse. Autrement devoile, les operandes d’une operation vont i?tre entres avant l’operateur, par exemple comme ceci pour la somme de quatre et 5 : 4 5 + .

Elle devra egalement retenir le rendu de l’operation precedente et deduire l’utilisation de celui-ci en cas d’omission d’un operande. Plus precisement, si l’utilisateur entre comme 5 + , vous devrez deduire que le premier operande d’une somme est le rendu de l’operation precedente (ou zero s’il n’y en a pas encore eu).

Chaque operation sera identifiee via un symbole ou une lettre, comme suit :

Le programme devra s’arreter Quand la lettre « q » reste specifiee comme operation (avec ou sans operande).

Preparation

Precisions concernant scanf

Pourquoi utiliser Notre notation polonaise inverse et non l’ecriture habituelle ?

Parce qu’elle va vous permettre de beneficier d’une caracteristique interessante une fonction scanf() : sa valeur de renvoi. Nous anticipons un tantinet i  propos des chapitres suivants, mais sachez que la fonction scanf() retourne une valeur entiere correspondant au nombre de conversions reussies. Une conversion reste reussie si ce qu’entre l’utilisateur correspond a l’indicateur de conversion.

Ainsi, si nous souhaitons recuperer 1 entier a l’aide de l’indicateur d , la conversion est reussie si l’utilisateur entre un nombre (Prenons un exemple 2) alors qu’elle echouera s’il entre une lettre ou un signe de ponctuation.

Grace a i§a, vous pouvez detecter facilement s’il manque ou non votre operande pour une operation.

Lorsqu’une conversion echoue, la fonction scanf() arrete son execution. Aussi, s’il y avait d’autres conversions a effectuer apres celle qui a avorte, elles ne sont jamais accomplies.

Au code ci-dessus, si l’utilisateur entre 7 * , la fonction scanf() retournera 1 et n’aura lu que le nombre 7. Cela sera necessaire de l’appeler une seconde fois afin que le symbole * soit recupere.

Petit bemol tout ainsi : nos symboles + et – sont consideres comme des debuts de nombre valables (puisque vous pourrez notamment entrer -2). Des lors, si vous souhaitez additionner ou soustraire 1 nombre au service de l’operation precedente, vous devez doubler votre symbole. Pour ajouter 5 cela donnera donc : 5 ++ .

Les puissances

Cette derniere prend deux arguments : la base et l’exposant.

L’utilisation une bibliotheque mathematique requiert d’ajouter l’option -lm lors d’une compilation, comme ceci : zcc main.c -lm (faites beaucoup en sorte de placer -lm apres le ou des fichiers sources).

La factorielle

La factorielle d’un nombre reste egale au service des nombres entiers positifs et non nuls inferieurs ou egaux a votre nombre. J’ai factorielle de quatre equivaut donc a 1 * 2 * 3 * 4 , donc vingt-quatre. Cette fonction n’est jamais fournie par la bibliotheque standard, il vous faudra donc la programmer (pareil concernant le PGCD et le PPCD).

Par convention, la factorielle de zero est egale a un.

Le PGCD

Le plus grand commun diviseur de 2 entiers (abrege PGCD) est, parmi nos diviseurs communs a ces entiers, le plus grand d’entre eux. Entre autres, le PGCD de 60 https://datingmentor.org/fr/chatiw-review/ et 18 est 6.

Par convention, le PGCD de 0 et 0 reste 0 et le PGCD d’un entier non nul et de zero est cet entier non nul.

Le PPCD

Notre plus petit commun denominateur (ou le plus petit commun multiple), abrege PPCD, de deux entiers est le plus petit entier strictement positif qui soit multiple des deux nombres. Notamment, le PPCD de 2 et 3 reste 6.

Par convention, si l’un des deux entiers (ou les deux) sont nuls, le service est zero.

Exemple d’utilisation
Derniers recommandations

Nous vous conseillons de denicher les nombres sous forme de double . Cependant, gardez bien a l’esprit que la plupart operations ne peuvent s’appliquer qu’a des entiers : le est une division entiere, la factorielle, le PGCD et le PPCD. Cela sera donc utile d’effectuer des conversions.

Egalement, notez bien que la factorielle ne s’applique qu’a un seul operande a l’inverse de chacune des autres operations.

Correctement, vous avez a present l’integralite des cartes pose i  ci?te : au article !

Correction

Alors ? Manque trop secoue ? Correctement, voyons a present la correction.

Commencons par la fonction main() . Nous definissons plusieurs variables :

  • res , qui correspond au resultat en derniere operation realisee (ou zero s’il n’y en a pas encore eu) ;
  • a et b , qui representent nos eventuels operandes fournis ;
  • op , qui retient l’operation demandee ; et
  • n , qui reste utilisee Afin de retenir le retour d’la fonction scanf() .

Ensuite, nous entrons dans une boucle infinie (la condition etant forcement vraie puisque valant votre) ou nous demandons a l’utilisateur d’entrer l’operation a realiser et les eventuels operandes. Nous verifions ensuite si un seul operande est fourni ou pas de (ce qui se deduit, respectivement, d’un retour d’la fonction scanf() valant votre ou zero). Si c’est le cas, nous appelons une seconde fois scanf() pour recuperer l’operateur. Puis, la valeur de a est attribuee a b et la valeur de res a a .

Si l’operateur utilise est q , alors nous quittons la boucle et par la meme occasion le programme. Notez que nous n’avons pas pu effectuer votre verification dans le corps de l’instruction switch qui suit puisque l’instruction break nous aurait fait quitter celui-ci et non la boucle.

Enfin, nous realisons l’operation demandee dans l’instruction switch , nous stockons le service dans la variable res et l’affichons. Remarquez que l’utilisation de conversions explicites n’a ete important que concernant le calcul du reste en division entiere. Effectivement, au sein des autres cas (comme lors de l’affectation a J’ai variable res ), il y a des conversions implicites.

Nous avons utilise le type long long lors des calculs necessitants des nombres entiers pour disposer d’une plus grande capacite possible. Par ailleurs, nous avons employe le type unsigned long long pour la fonction factorielle puisque celle-ci n’opere que dans des nombres strictement positifs.

Ce chapitre nous aura permis de revoir bon nombre de notions des chapitres precedents. Dans le chapitre suivant, nous verrons De quelle fai§on decouper des projets en quelques fichiers.