Вы находитесь на странице: 1из 4

Universit e de Savoie, UFR SFA L3 TR

INFO510 20112012

TD 1, structures de contr ole, fonctions, tableaux, boucles simples, conditionnelles

Exercices sur les structures de contr ole

Exercice 1 : Calcul de la valeur dune fonction Le programme suivant calcule ax + b pour des valeurs a, b saisies par lutilisateur et aux points 1, 0, et 1. Action Principale ; Var: a,b,x,y : r eel D ebut Lire( a, b ) ; x -1.0 ; y a*x+b ; Ecrire( a,*, x, +, b, =, y ) ; x 0.0 ; y a*x+b ; Ecrire( a,*, x, +, b, =, y ) ; x 1.0 ; y a*x+b ; Ecrire( a,*, x, +, b, =, y ) ; Fin 1. Les instructions y a x + b etaient-elles toutes n ecessaires ? 2. Modiez le programme pour que lutilisateur saisisse lui-m eme la valeur x o` u il veut evaluer ax + b. 3. Modiez le programme pour que la fonction evalu ee soit ax2 + bx + c. 4. Ajoutez une boucle pour que le programme evalue 10 points entre x et x + 1.0. Exercice 2 : Ann ee bissextile Depuis linstauration du calendrier gr egorien, sont bissextiles les ann ees : soit divisibles par 4 mais non divisibles par 100 soit divisibles par 400. Donc, inversement, ne sont pas bissextiles les ann ees : soit non divisibles par 4 soit divisibles par 100, mais pas par 400. 1. Ecrire un programme principal qui demande ` a lutilisateur un entier et ache oui ou non selon que lann ee est bissextile ou non. 2. Ecrire une fonction qui prend en entr ee un entier a et retourne vrai si lann ee a est bissextile et faux sinon. 1

3. En d eduire un programme qui compte le nombre dann ees bissextiles entre 2000 et 2100. Exercice 3 : Maximum Ecrire une fonction qui prend en entr ee deux nombres x et y et retourne la valeur maximale des deux. En d eduire une fonction qui prend trois nombres en entr ee et retourne la valeur maximale des trois. Exercice 4 : Element maximum Ecrire une fonction qui prend en entr ee deux nombres x et y et retourne 1 si le premier etait le plus grand, 2 sinon. En d eduire une fonction qui prend trois nombres en entr ee et retourne 1, 2, ou 3, selon que le premier, le deuxi` eme ou le trois` eme etait le plus grand.

Exercices sur les tableaux

On suppose que T est un tableau indic e de 0 ` a MAX-1 comportant des entiers. Exercice 5 : Ecrivez la suite dinstructions qui met ` a z ero tous les entiers du tableaux. Exercice 6 : Vous disposez de la fonction Random ci-dessous : /* Retourne une valeur enti` ere al eatoire entre 0 et n-1, o` u n est lentier positif donn e en entr ee. */ Fonction Random( E n : entier ) : entier ; Ecrivez la suite dinstructions qui met dans las case dindice i du tableau une valeur al eatoire entre 0 et 9. Exercice 7 : Ecrire une fonction qui retourne vrai si lentier e est dans le tableau T . Doit-on parcourir tout le tableau ? A votre avis, en moyenne, il faut parcourir combien de cases pour tomber sur une case contenant e (pour e entre 0 et 9) dans le tableau T rempli al eatoirement comme pr ec edemment ? Exercice 8 : On dispose maintenant dun tableau ` a 10 cases enti` eres. Ecrire une fonction qui v erie que les dix nombres de 0 ` a 9 sont dans ce tableau. Peut-il y avoir deux fois le m eme nombre ? Exercice 9 : Voil` a une action permettant de saisir des entiers tant quils sont di erents de 0 et de les placer dans un tableau. Action Saisie( ES tab : tableau[0..MAX-1] de entier, S nb : entier ) Var: i : entier ; ni: bool een d ebut i 0 ; ni faux ; Tant Que i < MAX et non ni Faire d ebut lire(tab[i]) ; si tab[i] = 0 alors ni vrai sinon i i+1 n n nb i; n

Const: MAX=50 Type: Etudiant = Entit e: nom : cha ne de caract` eres; note : entier Type: TabEtd = Entit e: etds : tableau[0..MAX-1] de Etudiant ; nb : entier Var: T : TabEtd Modier cette action pour quelle permette de saisir les notes des etudiants donn es en entr ee sous forme de la variable T . Exercice 10 : Dans le tableau pr ec edent, ecrire une fonction qui calcule lindice de l el ement le plus grand. En d eduire une fonction qui ache le major de la promotion ainsi que sa note moyenne. Exercice 11 : On consid` ere maintenant un simple tableau dentiers. Ecrire une fonction qui recherche si un entier appartient au tableau donn e en entr ee. Si il le trouve, retourne son indice, sinon retourne -1. Exercice 12 : Ecrire une fonction qui calcule combien de fois un entier est pr esent dans un tableau (ou nombre doccurence). Exercice 13 : Supposez maintenant que le tableau a ses el ements tri es dans lordre croissant. Peut-on am eliorer lalgorithme de recherche pr ec edent ? Ecrire une version it erative de lalgorithme r ecursif de recherche dichotomique donn e dans le cours. Combien de comparaisons sont eectu ees ? Pire cas et cas moyen ? Comparez avec la simple recherche par parcours. Exercice 14 : Extraire le plus petit el ement dun tableau est facile. Quid du 2` eme plus petit, 3` eme plus petit, n-` eme plus petit ? Exercice 15 : On cherche ` a reconna tre si un mot appartient ` a une cha ne de caract` eres, et si oui, quelle est la position du mot. On rappelle quune cha ne de caract` eres est en fait cod e sous forme dun tableau de caract` eres. La question pr ec edente se traduit donc de fa con plus g en erale. On cherche sainsi i une s equence d el ements (repr esent ee par un tableau de taille N) est une sous-s equence dune autre s equence d el ements (repr esent ee par un tableau de taille M > N ). Commencez par mettre en uvre un algorithme na f pour le faire, qui n ecessitera deux boucles imbriqu ees. Exercice 16 : Optimisation du probl` eme pr ec edent. Supposez maintenant que les el ements sont additionnables (des entiers par exemple). Imaginez un autre algorithme qui v erie dabord que la somme des el ements est bien correcte avant de tester vraiment el ements par el ements.

Un premier type abstrait de donn ees : la cha ne de caract` eres

On va mod eliser une cha ne de caract` eres de taille maximale donn ee MAX (par exemple 100). On utilisera donc le type suivant pour repr esenter une cha ne de taille inf erieure ` a 100. Type: String = Entit e: car : Tableau[0..MAX-1] de caract` eres; nb : entier LAction suivante initialise une cha ne de carat` eres S compos ee de n caract` eres identique a. Exercice 17 : Ecrire laction Reset qui initialise une cha ne S ` a la cha ne vide.

Action init( S S : String, E a : caract` ere, E n : entier) ; Var: i : entier; D ebut pour i de 0 ` a n 1 faire S .car[i] a; n S .nb n; Fin Exercice 18 : Ecrire la fonction LireCar qui retourne le i-` eme caract` ere de la cha ne S donn ee, si il existe, et retourne ! sinon. Exercice 19 : Ecrire laction EcrireCar qui modie le i-` eme caract` ere de la cha ne S donn ee en le caract` ere a, si il existe, et ne fait rien sinon. Exercice 20 : Ecrire laction Concat` ene qui fusionne ` a la cha ne S 1 la cha ne S 2. Exercice 21 : Modiez laction pr ec edente pour quelle v erie que la concat enation est bien possible et si elle ne lest pas, laction ne doit alors pas modier les cha nes S 1 et S 2. Exercice 22 : Ecrire laction Ins` ere qui ins` ere la cha ne S 2 dans la cha ne S 1 ` a partir de la position i. Exercice 23 : Ecrire une fonction qui v erie si une cha ne S 1 est une sous-cha ne de S 2 et si oui retourne lindice de la position de la premi` ere sous-cha ne. (Tr` es similaire ` a un des exos pr ec edents).

Algorithmes pour des probl` emes math ematiques

Exercice 24 : Ecrire un algorithme pour d eterminer si un entier donn e est premier. Pour aller un peu plus loin, on pourra parler du crible dErathost` ene.

R ecursivit e

Exercice 25 : Le probl` eme du sac-` a-dos ou de lappoint. Exercice 26 : Acher toutes les combinaisons possibles de dominos (de taille 2x1) sur une bande de taille 2xn. On note quil y en a autant que la suite de Fibonacci. Exercice 27 : Acher toutes les combinaisons de k el ements parmi n el ements.

Вам также может понравиться