"Abbi buona cura del tuo corpo, è l’unico posto in cui devi vivere."

Apres tout ce que vous venez de decouvrir, Il semble temps de faire une rapide pause ainsi que mettre en pratique vos nouveaux acquis.

Apres tout ce que vous venez de decouvrir, Il semble temps de faire une rapide pause ainsi que mettre en pratique vos nouveaux acquis.

Apres tout ce que vous venez de decouvrir, Il semble temps de faire une rapide pause ainsi que mettre en pratique vos nouveaux acquis.

Apres tout ce que vous venez de decouvrir, Il semble temps de faire une rapide pause ainsi que mettre en pratique vos nouveaux acquis.

Pour ce Realiser, rien de tel qu’un travaux recapitulatif : concevoir une calculatrice basique.

Objectif

Votre objectif sera de realiser une calculatrice basique pouvant calculer une somme, une soustraction, une multiplication, une division, le est 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 dit, des operandes d’une operation seront entres avant l’operateur, notamment tel ceci pour la somme de quatre et 5 : 4 5 + .

Elle doit egalement retenir le resultat de l’operation precedente et deduire l’utilisation de celui-ci en cas d’omission d’un operande. Plus precisement, si l’utilisateur entre pourquoi pas 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 toujours pas eu).

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

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

Preparation

Precisions pour scanf

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

Parce qu’elle va vous permettre de beneficier d’une caracteristique interessante en 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 est reussie si votre 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 va etre reussie si l’utilisateur entre un nombre (par exemple 2) alors qu’elle echouera s’il entre une lettre ou un signe de ponctuation.

Grace a ce qui, vous pouvez detecter facilement s’il manque ou non un operande Afin de 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 possi?de avorte, elles ne seront gui?re realisees.

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

Petit bemol tout de meme : des symboles + et – sont consideres comme des debuts de nombre valables (puisque vous pourrez par exemple entrer -2). Des lors, si vous souhaitez additionner ou soustraire 1 nombre au rendu de l’operation precedente, vous devez doubler ce symbole. Pour ajouter 5 i§a donnera donc : 5 ++ .

Mes puissances

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

L’utilisation de la bibliotheque mathematique requiert d’ajouter l’option -lm lors une compilation, comme ceci : zcc main.c -lm (faites bien en fai§on de placer -lm apres le ou les fichiers sources).

La factorielle

J’ai factorielle d’un nombre reste egale au bien des nombres entiers positifs et non nuls inferieurs ou egaux a ce 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.

Notre PGCD

Le plus grand commun diviseur de 2 entiers (abrege PGCD) est, parmi des diviseurs communs a ces entiers, le plus grand d’entre eux. Comme, le PGCD de 60 et 18 est 6.

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

Notre PPCD

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

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

Exemple d’utilisation
Derniers recommandations

Nous vous conseillons de recuperer les nombres sous forme de double . Cependant, gardez bien a l’esprit que quelques operations ne peuvent s’appliquer qu’a des entiers : le demeure de la 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 l’ensemble des autres operations.

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

Correction

Aussi ? Manque trop secoue ? Bien, voyons a present la correction.

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

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

Ensuite, nous entrons dans une boucle infinie (la condition dit forcement vraie puisque valant 1) 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 aucun (ce qui se deduit, respectivement, d’un retour d’une 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 chantier. Notez que nous n’avons nullement pu effectuer votre verification dans le corps de l’instruction switch qui suit puisque l’instruction break nous aurait fera quitter celui-ci et non la boucle.

Enfin, nous realisons l’operation demandee dans l’instruction switch , nous stockons le rendu dans la variable res et l’affichons. Remarquez que l’utilisation de conversions explicites n’a ete utile que pour le calcul du reste en division entiere. Effectivement, en autres cas (comme lors de l’affectation a J’ai variable res ), on voit des conversions implicites.

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

Ce chapitre nous aura permis de revoir bon nombre de notions des chapitres precedents. Dans le chapitre suivant, nous verrons comment decouper les projets en plusieurs fichiers.

Author Info

Gianni

No Comments

Post a Comment