Licence Sciences et technologies Informatique/Mathématiques

Transcription

Licence Sciences et technologies Informatique/Mathématiques
Licence Sciences et technologies
Informatique/Mathématiques/Mathématiques-Informatique
Algorithmes et Programmation
TD numéro 3 :itérations
Université de Provence
Année 2006-2007
Exercice 1 (itération simple)
Ecrire un programme C qui demande de rentrer un nombre entier nb et calcule la somme
des carrés des entiers entre 1 à nb. Ecrire une version avec while et une avec for.
Exercice 2 Ecrire le programme du jeu de devinette correspondant au cas général (l’humain a droit à plusieurs essais).
Rappel : la machine choisit au hasard un nombre entre 1 et N, et il s’agit de deviner ce
nombre. L’humain propose un nombre et la machine répond gagne si celui-ci est le même
que celui qu’elle a choisi. Sinon, elle répond trop grand ou trop petit et on recommence
tant que le nombre n’est pas trouvé.
1. Ecrire le programme C traduisant l’algorithme du TD 1.
2. Modifier le programme de manière à ce que l’utilisateur n’ait pas droit à plus de
⌊log2 (nb)⌋ + 1 essais ( ⌊x⌋ est la partie entière de x). Il est inutile de connaitre
comment calculer la fonction log en C pour répondre à cette question.
Exercice 3 Ecrire un programme qui demande à lire des caractères rentrés par l’utilisateur
sur stdin et
– si le caractère lu est ’#’ alors le programme affiche “termine” et s’arrête,
– si le caractère lu est un chiffre alors on affiche la valeur (par exemple on affiche l’entier
9 si on lit ’9’,
– si le caractère lu n’est pas un chiffre et n’est pas ’#’, le programme affiche “pas un
chiffre”.
Dans les deux derniers cas, le programme continue en demandant un nouveau caractère à
l’utilisateur.
Attention : pour que le programme fonctionne correctement en pratique, il faut que
le caractère retour charriot rentré par l’utilisateur soit consommé ce qui demande un
getchar() supplémentaire.
Exercice 4 (Jeu des 7 erreurs).
1. Des erreurs se sont glissées dans les programmes suivants. Certaines donneront soit
une erreur à la compilation, soit une erreur à l’exécution. Les trouver.
#include <stdlib.h>
#include <stdlib.h>
#include <math.h>
#include <math.h>
main () {
main () {
float a,b,c,delta,x1,x2;
float a,b,c,delta,x1,x2;
printf("entrer a,b,c\n");
printf("entrer a,b,c\n");
scanf("%f, %f, %f",&a,&b,&c);
scanf("%f, %f, %f",&a,&b,&c);
delta=b2-4ac;
a2=2*a; delta=b*b-4*(a*c);
if (delta <0)
if (delta <0)
{printf("pas de solution \n");
printf("pas de solution \n");
}
else if (delta == 0 )
else if (delta == 0 )
{x1=b /(a2);
{x1=b /(2*a);
printf("une solution : %f\n",x1)
printf("une solution : %f\n",x1);
else
}
{x1=-(b-sqrt(delta))/(a2);
else
x2=-(b+sqrt(delta))/(a2);
{x1=-(b-sqrt(delta))/(2a);
printf("racines %f\n",x1,x2);
x2=-(b+sqrt(delta))/(2a);
}
printf("racines %f\n%f\n",x1,x2);}
}
}
main () {
float a,b,c,delta,x1,x2;
printf("entrer a,b,c\n");
scanf("%c, %c, %c",&a,&b,&c);
delta=b*b-4*(a*c);
if (delta <0)
{printf("pas de solution \n");
}
else if (delta == 0 )
{x1=b /(2*a);
printf("une solution : %c\n",x1);
}
else
{x1=-(b-sqrt(delta))/(2*a);
x2=-b-sqrt(delta))/(2*a);
printf("racines %c\n%c\n",x1,x2);}
}
2. Ecrire un programme correct qui calcule les solutions réelles d’une équation du second
degré dont les coefficients sont demandés à l’utilisateur.
2