cours2

publicité
Rappels
Un algorithme est une suite finie d’opérations logiques
ordonnées
Un ordinateur effectue la suite d’opérations logiques, c’est
une machine de stockage et de traitement de l’information:
BÊTE et RAPIDE
L’ordinateur ne se trompe jamais!
C’est le rôle du programmeur de mettre au point les
algorithme et donc de définir de façon efficace la suite
d’opérations.
Structure d’un programme C
#include <stdio.h>
Commandes préprocesseur (#)
float aplusb(float a, float b);
Déclaration des fonctions
Programme principal
int main ()
{
float a,b,c;
Déclaration des variables
a=1.5;
b=3.1; c=0.;
Initialisation des variables
c=aplusb(a,b);
printf(“a+b=%f”,c);
Appel des modules/fonctions
return 0;
}
float aplusb(float a,float b)
{
return a+b;
}
Définition des fonctions/modules
Les types d’algorithmes
Iteratif
Démontrabilité
difficile
Récursif
Récursif croisé
Démontrabilité aisée (par récurrence)
Les types courants de variables en C
Type
Octets
Portée
char
1
-128 a 127
short int
2
-32768 a +32767
int
4
-2147483648 a +2147483647
long int
8
-4294967296 a +4294967295
unsigned char
1
0 a +255
unsigned short int
2
0 a +65535
unsigned int
4
0 a + 4294967295
unsigned long int
8
…
float
4
…
double
8
…
void
0
NULL
Exemple de cast:
int z;
float x;
z=1;
x=(float) z;
Les opérations en C
Attention les opérations ont des priorités
1
primaire
(),[]
-->
2
unaire
!,++,--,(type),*,&,sizeof
<--
3
multiplication
*,/,%
-->
4
addition
+,-
-->
5
décalage
<<,>>
-->
6
relationnel
<,<=,>,>=
-->
7
égalité
==,!=
-->
8
Logique binaire
&,^,|
-->
9
conditionnel
&&,||,?:
-->
10
affectation
=,+=,-=,/=,…
<--
Il faut penser à mettre des parenthèses comme pour
les opérations mathématiques:
1+2*3 n’est pas égal a (1+2)*3
Les conditionnelles
Pour effectuer des opérations dans certains cas et d’autres
opérations autrement, il faut utiliser des opérations de
test:des structures équivalentes au si,sinon
If ([condition1])
{
instruction1;
instruction2;
…;
} else if ([condition2]){
instructionN;
…;
} else {
instructionX;
…;
}
Block d’instructions à effectuer
si [condition1] est vrai
Block d’instructions à effectuer
si [condition2] est vrai
Block d’instructions à effectuer
si [condition1] sinon
Les conditionnelles
Une condition est une opération relationnelle de test qui
retourne un vrai ou faux (0 ou 1):
Syntaxe :
(expr1 <opérateur logique> expr2)
Par exemple:
X=1 se traduit par
X>Y
(X==1), vaut 1 si X=1 et 0 sinon.
(X>Y)
Les conditions peuvent être combinées à l’aide des opérateurs
Logiques ET (&&), OU (||) et de négation (!).
La logique suit l’algèbre de Bool.
Elements d’algèbre de Bool
ET logique
OU logique
NON logique
A B A && B
A B
A || B
A !A
0 0
0
0 0
0
0
1
0 1
0
0 1
1
1
0
1 0
0
1 0
1
1 1
1
1 1
1
Les opérations
logiques se combinent
avec des () comme les
opérations algébriques
standardes
Les conditionnelles
Lorsque les opérations à effectuer dépendent de valeurs
prédéfinies d’une variable ou d’une expression, on peut soit
combiner les conditions si-sinon si soit utiliser une
instruction de switch:
Switch (expr){
case val1 :
block d’instruction1;
break;
case val2 :
block d’instruction2;
break;
…
default :
block d’instruction par defaut;
}
Expression dont la valeur
est testée
Si expr vaut val1
Attention : ne pas oublier
Si expr ne vaut aucune des
valeurs proposées
Les conditionnelles
Utiliser des conditions sur des variables logiques ou entières
n’est pas un problème.
Lorsque l’on travaille sur les réels, le problème est plus
compliqué:
- les réels ont des problèmes de troncature dus à
l’encodage (cf cours précèdent)
- si l’on veut comparer deux réels (ou doubles) entre eux, il
faut se fixer une limite de précision et tester la différence:
Ex: float a,b;
if (a==b){
…
}
float a,b;
Syntaxe correcte mais
if (abs(a-b)<0.0001){
a de grandes chances de …
ne pas fonctionner
}
Exercices:
Ex 1: binaire et algèbre binaire
1) Ecrivez la représentation binaire de 7 et 15.
2) Additionnez les deux représentations binaires et
vérifiez a posteriori que le nombre binaire obtenu
correspond à 7+15
3) Quel est le plus grand entier que l’on peut coder sur
2 octets (signé et non signé)
Ex 2: algèbre de Bool
Construisez le tableau de valeur de l’expression suivante:
C = (!A && B) || (A && !B)
Exercices:
#include <stdio.h>
int main()
{
float a=0.4,b=1.7,c=2.5,d;
int x=2,y;
d=a+b;
printf("a+b=%f\n",d);
d=x+a;
printf("d=x+a=%f\n",d);
y=x+a;
printf("y=x+a=%i\n",y);
d=c+(a+b)*x;
printf("d=c+(a+b)*x=%f\n",d);
y=c+(a+b)*x;
printf("y=c+(a+b)*x=%i\n",y);
return 0;
}
Ex 3: variables et types
Le programme sur la gauche
effectue des opérations
arithmétiques de bases sur
les entiers et les réels.
Quelles sont les valeurs
affichées par le programme
pour ces différentes
opérations?
Exercices:
Ex 4: parité d’un nombre
Ecrivez un programme C qui pour un entier donné indique
sa parité.
Le nombre sera passé par argument avec le prototype
suivant pour la fonction main:
int main(int argc, char *argv)
{
int i=atoi(argv[1]);
…
}
Exercices:
Ex 5: racines d’un polynôme du second ordre
Ecrivez un programme qui permet de calculer les racines d’un
polynôme du second ordre. P(x)=a x2+b x+c
Commencer par définir vos variables.
Pour entrer les variables vous utiliserez la commande C scanf:
scanf(“%d %d %d”,&a,&b,&c) qui permet de saisir au clavier
les paramètres.
Téléchargement