Cours de Programmation Impérative Université Paris – Nord 1ère année Licence Sc

Cours de Programmation Impérative Université Paris – Nord 1ère année Licence Sciences, Technologies, Santé Institut Galilée Année Universitaire 2006-2007 TD 5.1 Exercice 1. 1. Ecrire un programme C, qui saisit N entiers (N est une constante symbolique), les stocke dans un tableau puis les affiche. #include <stdio.h> #define N 10 int main() { int tab[N]; int i; for (i = 0; i < N;i++) { printf("faites entrer l'entier numero %d :", i); scanf("%d", &tab[i]); } printf("tab = {"); for (i = 0; i< N; i++) printf("%d ", tab[i]); printf ("}"); return 0; } 2. Compléter le premier programme pour calculer et afficher le minimum des entiers saisis. #include <stdio.h> #define N 4 int main() { int tab[N]; int i,min; for (i = 0; i < N;i++) { printf("faites entrer l'entier numero %d :", i); scanf("%d", &tab[i]); } printf("tab = {"); for (i = 0; i< N; i++) printf("%d ", tab[i]); printf ("} \n"); min = tab[0]; for (i =0; i< N; i++) if (min > tab[i]) min = tab[i]; printf("le minimum est : %d\n", min); return 0; } Cours de Programmation Impérative Université Paris – Nord 1ère année Licence Sciences, Technologies, Santé Institut Galilée Année Universitaire 2006-2007 3. Ecrire un programme qui inverse le contenu d'un tableau de N entiers (les N entiers sont saisis au clavier) #include <stdio.h> #define N 4 int main() { int tab[N],inv[N]; int i; for (i = 0; i < N;i++) { printf("faites entrer l'entier numero %d :", i); scanf("%d", &tab[i]); } printf("tab = {"); for (i = 0; i< N; i++) printf("%d ", tab[i]); printf ("} \n"); for (i =0; i< N; i++) inv[N-i-1] = tab[i]; printf("inv = {"); for (i = 0; i< N; i++) printf("%d ", inv[i]); printf ("} \n"); return 0; } 4. Ecrire un programme qui saisit un tableau d'entiers de taille N (constante symbolique) et qui le affiche de telle sorte que tous les entiers pairs se retrouvent avant les entiers impairs. 7 4 7 8 4 6 3 9 6 Par exemple, le programme affichera pour un tableau contenant en 4 8 4 6 6 7 7 3 9 #include <stdio.h> #define N 4 int main() { int tab[N]; int i; for (i = 0; i < N;i++) { printf("faites entrer l'entier numero %d :", i); scanf("%d", &tab[i]); } printf("tab = {"); for (i = 0; i< N; i++) printf("%d ", tab[i]); printf ("} \n"); printf("le tableau apres : {"); for (i =0; i< N; i++) if(tab[i]%2 == 0) printf ("%d ", tab[i]); for (i =0; i< N; i++) if(tab[i]%2 != 0) printf ("%d ", tab[i]); printf ("} \n"); return 0; } Cours de Programmation Impérative Université Paris – Nord 1ère année Licence Sciences, Technologies, Santé Institut Galilée Année Universitaire 2006-2007 Exercice 2. Rédiger un programme C qui permet: a. La saisie des valeurs de N entiers dans un tableau (N est une constante symbolique) b. L’affichage des valeurs saisies c. La saisie d’une valeur à rechercher d. La recherche de cette valeur dans le tableau e. La saisie de la valeur que l'on va substituer à cette dernière si celle-ci a été trouvée (au moins une fois) dans le tableau. f. La substitution de la valeur trouvée (de toutes les occurrences) et l’affichage du « nouveau » tableau. #include <stdio.h> #define N 4 int main() { int tab[N]; int i, val,sub, trouve = 0; printf("Entrer %d nombres: ", N); for (i = 0; i < N;i++) { scanf("%d", &tab[i]); } printf("tab = {"); for (i = 0; i< N; i++) printf("%d ", tab[i]); printf ("} \n"); printf ("Entrez une valeur a trouver dans le tableau :"); scanf("%d", &val); for (i = 0; i< N; i++) if (tab[i] == val) { printf("valeur trouvee au rang %d\n", i); trouve = 1; } if (trouve) { printf ("entrez une valeur de substitution :"); scanf ("%d", &sub); for (i = 0; i< N; i++) if (tab[i] == val) { tab[i] = sub; } } else { printf ("aucun element dans le tableau est egal a %d\n", val); return 0; } printf("le tableau apres substitution: {"); for (i =0; i< N; i++) printf ("%d ", tab[i]); printf ("} \n"); return 0; } Cours de Programmation Impérative Université Paris – Nord 1ère année Licence Sciences, Technologies, Santé Institut Galilée Année Universitaire 2006-2007 Exercice 3. Ecrire un programme qui permet de jouer au jeu du pendu. Le principe du jeu est le suivant : • Le joueur 1 entre le mot, l'ordinateur l'enregistre et affiche une série de lignes blanches pour que le joueur 2 ne puisse pas lire le mot, il affiche ensuite une série d'étoiles qui correspond au nombre de lettres du mot à trouver. • Le joueur 2 propose des caractères jusqu'à ce qu'il ait trouvé le mot, ou qu'il ait perdu (nombre de coups > 10). À chaque fois que le joueur 2 propose un caractère l'ordinateur affiche le mot avec des * et les caractères déjà trouvés Un exemple d’exécution est le suivant : Entrez un mot : bonjour ******* caractere ? a ******* caractere ? o *o**o** | | | bonjou* caractere ? r bonjour VOUS AVEZ GAGNE Notes : • Saisir le mot à deviner dans une variable de type tableau de caractères ayant pour taille NMAX (constante symbolique). • Créer un deuxième tableau de caractère (de taille NMAX) initialisé à des étoiles • Utiliser la fonction strlen pour calculer la longueur d’une chaine de caractères (ajouter #include <string.h> au début du programme) • Arrêter le jeu si l’utilisateur dépasse le nombre de tentatives (10 par exemple) ou s’il est arrivé à trouver le mot (on choisira comme critère que le nombre de caractères trouvés soit égal à la longueur du mot à deviner). Cours de Programmation Impérative Université Paris – Nord 1ère année Licence Sciences, Technologies, Santé Institut Galilée Année Universitaire 2006-2007 // un programme de pendu qui autorise 10 essais. // le cas ou le nombre de lettres a trouver est > a 10 #include <stdio.h> #include <string.h> #include <stdlib.h> #define VRAI 1 #define FAUX 0 #define NBC 30 int main (void) { int nb_lettres; // nb de lettres du mot a trouver char mot [NBC]; // mot a trouver char masque [NBC]; // masque pour affichage char lettre ; // lettre proposee int nbcoups,j; // indices pour boucles int trouve; // booleen // saisie du mot printf("Entrez un mot : "); scanf("%s", mot); // calcul du nb de lettres du mot nb_lettres = strlen(mot); // initialisation du masque avec des etoiles j = 0; while (j < nb_lettres){ masque[j] = '*'; j++; } masque[j] = '\0'; // effacer l'ecran avec un appel systeme a clear system("cls"); // affichage du nombre d'etoiles representant le mot a trouver printf("%s", masque); // ********* DEBUT DU JEU POUR LE JOUEUR 2 ********** trouve = FAUX; nbcoups = 0; // compteur d'essais while ((nbcoups < 10) && !trouve){ // on autorise 10 essais de 0 a 9 // demande d'un caractere printf ("\ncaractere ? "); scanf (" %c", &lettre); //recherche du caractere dans le mot j = 0; // indice du caractere teste dans le mot a trouver while ((j < nb_lettres) && !trouve) //recherche dans tout le mot { if (mot[j] == lettre) // comparaison jeme car. mot/lettre { //si lettre trouvee on met a jour le masque masque[j]=lettre; if (strchr(masque,'*') == NULL) // si mot complet... trouve = VRAI; } j++; } // affichage du masque printf("%s", masque); nbcoups++; // indice pour boucle "nombre d'essais" } if (!trouve) // on est sorti parce que nb coups > 10 printf("\nVOUS AVEZ PERDU\n"); else printf("\nVOUS AVEZ GAGNE\n"); return 0;} Cours de Programmation Impérative Université Paris – Nord 1ère année Licence Sciences, Technologies, Santé Institut Galilée Année Universitaire 2006-2007 TD 5.2 Exercice 1. Écrire une fonction int somme(int x, int y) qui retourne l'addition de x et y. int somme (int x,int y) { return x + y; } Exercice 2. a. Écrire une fonction factorielle(n) qui affiche la factorielle du nombre n. Rappel : factorielle(n) = n! = n (n−1) (n−2) …1. int factorielle (int n) { int factorielle = 1; for (int i = 1; i <=n; i++) factorielle = factorielle *i; return factorielle; } b. Déterminer expérimentalement (en TP) la plus grande valeur que peut prendre l'argument de factorielle. il faut que les eleves remarquent que la valeur de retour doit etre double ou long pour permettre de calculer l factorielle de nombre plus grand. nombre max en cas de valeur de retour en entier est 23 c. Utiliser la fonction précédente pour écrire une fonction combinaison (int n, int p) qui retourne la valeur )! ( ! ! p n p n C p n − = double combinaison (int n , int p) { return (factorielle(n) / (factorielle(p) * factorielle(n-p))); } Exercice 3. a. Écrire une fonction EstDivisible( a, b ) qui retourne 1 si a est divisible par b, et 0 sinon. int EstDivisible(int a, int b) { if (a%b == 0) return 1; else return 0; } Cours de Programmation Impérative Université Paris uploads/Science et Technologie/ td5-corrige.pdf

  • 25
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager