Retour à l'index

Le langage C comme petite calculette scientifique


Nous venons de voir que le langage C peut jouer le rôle de calculette quatre opérations (bien que plus diffcile à manipuler qu'une vraie calculette). Nous allons voir qu'il peut aussi jouer le rôle d'une petite calculette scientifique.

Utilisation de la bibliothèque mathématique


Il faut utiliser la bibliothèque mathématique et donc utiliser le fichier inclus correspondant. Tous les programmes suivants commenceront donc par :

	#include <math.h> 
Dans ce cas, lors de la compilation, il faut indiquer explicitement d'utiliser la bibliothèque mathématique :
	gcc -lm -o nom nom.c 

Nouvelles opérations sur les entiers

Deux autres opérations sont implémentées en langage C pour les entiers (relatifs) : la valeur absolue et la division euclidienne. Par contre, et cela est volontaire, l'exponentiation n'est pas implémentée.

Valeur absolue

Syntaxe La syntaxe de la valeur absolue, représentée par abs(.), qui est une opération unaire, c'est-à-dire une application, se comprend sur l'exemple suivant : printf("%d",abs(-3));

Division euclidienne

Introduction. La division n'est une opération totale ni sur N ni sur Z. Rappelons cependant qu'il existe une autre sorte de division, la division euclidienne, qui est une opération totale avec deux résultats. Pour un entier a et un entier non nul b, il existe un unique couple (q, r) d'entiers tels que :
				a = b.q + r et 0 <= r < |b|. 
			
L'entier q est appelé le quotient (exact) et l'entier r le reste dans la division euclidienne de a par b.
Syntaxe Cette opération existe en C, en fait sous la forme de deux opérations : une pour obtenir le quotient et une pour obtenir le reste. Le symbole pour obtenir q est ``/'', celui pour obtenir r est ``%''.
Ainsi :
  • 22 / 7 = 3
  • 22 % 7 = 1.

Formatage de l'affchage des réels

Introduction Il faut bien dire que l'affchage par défaut des réels, sous forme scientifique, n'est pas très élégant. On peut heureusement obliger l'affchage à être sous une forme voulue, en indiquant le nombre de chiffres désiré ainsi que le nombre de chiffres après la virgule (l'exposant étant alors recalculé pour qu'il s'agisse bien du même nombre).
Syntaxe La syntaxe du format est la suivante. Au lieu de %f on indique le format :
				%<entier1>.<entier2>f
			
où Entier1 et Entier2 sont des entiers naturels. On peut aussi l'utiliser avec %e, %E, %g et %G.
Sémantique <entier1> indique le nombre de chiffres total à affcher et <entier2> le nombre de chiffres à affcher après la virgule (c'est donc un entier inférieur à <entier1>). Si nécessaire les valeurs sont arrondies ou les chiffres après la virgule sont complétés par des 0.
Attention! <entier1> représente bien le nombre total de chiffres et non le nombre de chiffres avant la virgule, comme la syntaxe du format pourrait le laisser entendre.
	#include<stdio.h>
	
	int main (void) 
	{
		printf("%9.8f",23.0/30); 
	}
	

Fonctions prédéfinies sur les réels

Introduction Vous connaissez un certain nombre de fonctions de R dans R, par exemple les fonctions trigonométriques (sinus, cosinus, tangente, cotangente) et les fonctions logarithmiques, exponentielle, logarithme népérien, logarithme décimal). Il faut pouvoir manipuler ces fonctions, en particulier les calculer de façon approchée.
Problème de l'implémentation Il n'est pas question d'implémenter ces fonctions sur un ordinateur de façon exacte, puisque la valeur d'une telle fonction, même pour un argument décimal, n'est pas nécessairement un décimal. Mais il est intéressant d'en obtenir une valeur approchée.
Dans un langage de programmation tel que le langage C, le calcul approché (avec une précision non dominée) d'un certain nombre de ces fonctions est implémenté, tout au moins en faisant appel au fichier inclus <math.h>
Liste de quelques fonctions Dans le tableau ci-dessous, l'écriture de ce qui est dans la colonne de gauche permet de calculer une valeur approchée de ce qui est indiqué dans la colonne de droite :
log(x)logarithme (népérien) de x
cos(x)cosinus de x
sin(x)sinus de x
tan(x)tangente de x
exp(x)exponentielle de x
log10(x)logarithme décimal de x
pow(x, y)x à la puissance y, pour des réels
ceil(x)plus petit entier supérieur ou égal à x, considéré comme réel
floor(x)partie entière de x, considérée comme un réel
sqrt(x)racine carrée de x (pour squareroot)
Remarque.
Il y a moins de fonctions implémentées en langage C que sur une calculette scientifique. Une raison est que l'on peut programmer d'autres fonctions (en fait toutes celles qui sont calculables).

Partie entière de R dans N

On aura pu remarquer que, parmi les fonctions prédéfinies, s'il existe bien une fonction partie entière dont le résultat est un réel, nous n'avons pas donné de fonction partie entière dont le résultat est un entier. Il existe en langage C une façon de convertir des entités de types cohérents d'un type à l'autre que nous verrons dans le chapitre suivant, qui permettra de résoudre le problème.


Cours, éxercices ou graphismes libre de droit. Un mail est souhaitable | Webmestre : Aublet Bastien (bastien.aublet@hotmail.fr)