[PDF] [PDF] Algorithmes et structures de données : TD 4 Corrigé - LaBRI

Exercice 4 2 Je constate que la somme des n premiers nombres impairs est égale `a n2, c'est `a dire que 1+3+5+ + (2n − 1) = n2



Previous PDF Next PDF





[PDF] Langage C : énoncé et corrigé des exercices IUP GéniE - LAMSADE

Les exercices 1 à 1 6, 20 à 2 5 , 2 9 à 33, 4 2 à 43 sont corrigés de structure de l iste cha î née dont l es é l é m ents sont des entiers On suppose q ue l a l iste est donnée par l'adresse de l a pre m iè re ce ll u l e , et q ue l'a j out d 'un nou-



[PDF] Programmation en C - Sommaire - ENSA Agadir

VI) SOLUTIONS DES EXERCICES DU CHAPITRE 4 : LIRE ET ÉCRIRE DES DONNÉES : 1) Déclaration statique de données : bien que C soit un langage de programmation structuré, il ne nous force pas à adopter un certain style de 



[PDF] Programmation C Corrige du TD#7: Structures - IGM

Exercice 4 1 Fiche • Ecrire des fonctions de lecture et d'écriture d'une variable de type Date Dans un premier temps, on ne se préocupera pas de la validité de 



[PDF] Langage C : énoncé et corrigé des exercices - Talib24

Vous pouvez découper ce programme en plusieurs sous-fonctions Les exercices qui suivent sont corrigés Exercice 29 Soit un fichier de données structuré en 



[PDF] LANGAGE C Exercices corrigés 1

s'attend à ce que les données soient séparées par */ /* une virgule lors de l' entrée */ printf("Entrez les coordonnées du point A : XA,YA "); scanf(" d, d", &XA, 



[PDF] Exercices en langage C++: 150 exercices corrigés (Noire) (French

Résumé 150 exercices corrigés pour maîtriser la langage C++ dérivés (il s' agira des types structurés comme les tableaux, les structures, les unions et succession de notes (nombres entiers entre 0 et 20) fournies en données, ainsi que le



[PDF] Programmation en C – Exercices - Pages Perso - UPVD

5 exécuter le programme sur différents jeux de données bien choisis, 6 identifier ainsi les ensuite des versions qui utilisent des structures itératives différentes : for, while, PhL version du 18 dans le langage C Types prédéfinis



[PDF] Le C en 20 heures - Framabook

Nous verrons par la suite qu'un programme écrit en Langage C doit res- pecter certaines est possible de lire le contenu de cette boîte ou d'écrire des données dans celle-ci Corrigé de l'exercice n°3 1 — Introduction à une calculatrice # include Une structure est un objet composé de plusieurs champs qui sert à 



[PDF] Algorithmes et structures de données : TD 4 Corrigé - LaBRI

Exercice 4 2 Je constate que la somme des n premiers nombres impairs est égale `a n2, c'est `a dire que 1+3+5+ + (2n − 1) = n2

[PDF] exercices corrigés suites 1ere es

[PDF] exercices corrigés suites 1ere s

[PDF] exercices corrigés suites arithmético géométriques terminale es

[PDF] exercices corrigés suites arithmétiques géométriques pdf

[PDF] exercices corrigés suites numériques bac pro pdf

[PDF] exercices corrigés suites terminale s pdf

[PDF] exercices corrigés sur fichierprogrammation c

[PDF] exercices corrigés sur l état de rapprochement bancaire pdf

[PDF] exercices corrigés sur l ordonnancement des processus

[PDF] exercices corrigés sur l'échantillonnage des signaux

[PDF] exercices corrigés sur l'état de rapprochement bancaire pdf

[PDF] exercices corrigés sur la fonction de production pdf

[PDF] exercices corrigés sur la loi de khi deux pdf

[PDF] exercices corrigés sur la masse salariale

[PDF] exercices corrigés sur la ponctuation pdf

Universit´e Bordeaux 2 Licence MASS/Scico 5`eme semestre (2006/2007) Algorithmes et structures de donn´ees : TD 4 Corrig´e Types - Enregistrements - Temps d"un algorithme T(n)

Exercice 4.1Types

D´eclarer des types qui permettent de stocker :

1. Un joueur de basket characteris´e par son nom, sa date de naissance, sa nationalit´e, et son

sexe type t_sexe = (masculin, feminin); type t_joueur = RECORD nom : string; nation : string; sexe : t_sexe; END;

2. Une association de joueurs de basket

type t_assoc = array[1..N] of t_joueur; Remarque :Pour permettre `a l"association de croitre, c"est-`a-direavoir plus de N joueurs, il faudra allouer un tableau dynamique ou une liste...

3. Une equipe de basket avec son nom, ses joueurs, ainsi que les points gagn´es et les basket

marqu´es et encaiss´es dans la saison courante. type t_equipe = RECORD nom : string; joueurs : array[1..N] of t_joueur; points : integer; basketmarque : integer; basketencaisse : integer; END; Remarque :Pour les joueurs, il vaudrait mieux allouer un tableau dynamique ou une liste...

4. Un tableau de 18 equipes de basket

type t_tableau = array[1..18] of t_equipe; Exercice 4.2Je constate que la somme desnpremiers nombres impairs est ´egale `an2, c"est `a dire que1 + 3 + 5 +...+ (2n-1) =n2.

1. Ecrivez lafunction sommeImpairs(n : integer) : integer;qui calcule la somme

desnnombres impairs. function sommeImpairs(n : integer) : integer;var i, somme : integer;begin somme := 0; for i := 1 to n do begin somme := somme + (2*i)-1; end; result := somme; end;

2. Ecrivez lafunction carre(n : integer) : integer;qui calculen2

function carre(n : integer) : integer; begin result := n*n; end;

3. Faites tourner l"appel de fonctionresultat := sommeImpairs(3);

n sommeiresult 3 0 1 1 2 4 3 9

4. Faites tourner l"appel de fonctionresultat := carre(3);

n result 3 9

5. Faites tourner l"appel de fonctionresultat := sommeImpairs(6);

2 nsommeiresult 6 0 1 1 2 4 3 9 4 16 5 25
6 36

6. Faites tourner l"appel de fonctionresultat := carre(6);

n result 6 36

7. Quelle algorithme est plus efficace? (Rappel: Si on double la valeur d"entr´ee, comment va

´evoluer le temps d"´execution de l"algorithme). Bien evidemment c"est ce dernier algorithme qui est plus efficace. On dit qu"il est de complexit´e constante - aussi appel´e O(1) - car le temps d"´ex´ecution n"est pas influenc´e par la valeur d"entr´ee de la fonction. Le premier algorithme est de

complexit´e lin´eaire - aussi appel´e O(N) car le temps d"´ex´ecution est lin´eaire en

fonction de la la valeur d"entr´ee de la fonction.

Exercice 4.3Complexit´e

1. Consid´erer le tableau suivant :

type t_tableau = array[1..15] of integer;

2. Ecrire la fonction

function dedans(quoi : integer) : integer; qui renvoie la position dans le tableau de l"´elementquois"il est dedans, et 0 sinon. function dedans(quoi : integer) : integer; var position : integer; var i : integer; var entree : integer; d´ebut position := 0; i := 1; tant que (i<=15 ET position = 0) faire 3 entree = tab[i];si (quoi = entree) alors position := i; fin si i := i + 1; fin tant que result := position; fin

3. Faites tourner l"algorithmeresultat := dedans(31)avec le vecteur

1,3,3,7,8,12,17,18,18,26,29,31,40,44,46.

quoi positionientreeresult 31
0 1 1 2 3 3 3 4 7 5 8 6 12 7 17 8 18 9 18 10 26
11 29
12 31
12 13 12

4. D´eterminer la fonction de temps maximale ("worst case")T(n) pour un tableau de taille

n.

T(n) = 6n + 3

Remarque :Pour etre d´emonstrative, j"avais introduit la variableentr´ee, elle n"est pas forc´ement n´ecessaire. De plus, la comparaisonposition = 0dans la condition de la boucle tant queest optionnel. Si on la met pas, le meilleur cas est aussi le pire de cas, c"est-`a-dire 4 dans tout les cas les 15 it´erations de la boucletant queseront effectu´e. 5

Exercice 4.4Complexit´e

1. Vous pouvez maitenant supposer que levecteurest tri´e d"ordre croissant, c"est `a dire que

Consid´erer la fonction suivant :

function enigme(quoi : integer, n : integer) : integer; begin var inf, sup, milieu : integer; var trouve : boolean; inf := 1; sup := n; trouve := FAUX; tant que (sup >=inf ET trouve = FAUX) milieu := (inf + sup) DIV 2; si (quoi = tab[milieu]) alors trouve := VRAI; sinon si (quoi < tab[milieu]) sup := milieu -1; sinon inf := milieu + 1; fin si fin si fin tant que if (trouve = FAUX) result := 0; sinon result := milieu; fin si end

2. Faites tourner cette fonctionresultat := enigme(31,15);dans un tableau avec les

valeur de1,3,3,7,8,12,17,18,18,26,29,31,40,44,46. . quoi ninfsupmilieutrouveresult 31
15 1 15 FAUX 8 9 12 VRAI 12

3. Que fait cet algorithme? Est-ce qu"il est mieux que celui dessus? Pourquoi? Avez-vous

une id´ee de sa complexit´e asymptotique? 6 C"est un algorithme de recherche dichotomique. En algorithmique, la dichotomie (du grec <>) est un processus it´eratif de recherche o`u `a chaque ´etape l"espace de recherche est restreint `a l"une de deux parties. Pour desgrands valeur de longuer de donn´eesn, cet algorithme est mieux que celui dessus. Son temps maximal d"ex´ecution est T(n) = 7log2n+ 5?O(logn), sa complexit´e asymptotique est doncO(logn). 7

Exercice 4.5BONUS

Une solution compr´ehensible se trouve par exemple sur elevesg/lecon8/lecon.html

Exercice 4.6Puissance4

1. D´eclarer un type qui permet de stocker un damier du jeu "Puissance4" du typetype

t champ = (vide, jaune, rouge);. type t_puissance4 = array[1..6] of array[1..7] of t_champ; var puissance4 : t_puissance4;

2. D´eclarer un type qui permet de stocker 2 joueurs avec leurs noms et leurs couleurs de pion

t champrespectives. type t_joueur = record nom : string; couleur : t_champ; end; var joueur : array[1..2] of t_joueur;

3. Ecrire la proc´edure

procedure initialiser; qui initialise le jeu de Puissance4 (tous les champs sont vides). procedure initialiser; var i,j : integer; d´ebut pour i de 1 `a 6 faire pour j de 1 `a 7 faire puissance4[i][j] := vide; fin pour fin pour fin 8

4. Ecrire la fonctionfunction possible(var c : integer) : boolean;

qui teste si un jeueur peut mettre un pion la colonnec.

5. Ecrire la proc´edure

function possible(var c : integer) : boolean; d´ebut si puissance4[1][c] := vide alors { si 1 est la ligne la plus haute, sinon [6][c] } result := VRAI; sinon result := FAUX; fin procedure poserPion(var c : integer, var couleur : t_champ); var i : integer; var ligne : integer; d´ebut ligne := 0; i := 0; tant que i<=6 ET ligne :=0 faire { si 1 est la ligne la plus haute} si puissance4[i][c] NOT = vide alors ligne := i; i:=i + 1; fin tant que fin qui pose un pion de couleurcouleurdans la colonnec.

6. Consid´erer les fonctions

function maxSuiteLigne(var l : integer, couleur : t_champ): integer; begin max_longueur := 0; longueur := 0; i := 1; tant que i<=7 faire si puissance4[l][i] = couleur alors longueur := longueur + 1; si longueur > max_longueur alors max_longueur := longueur; fin si sinon longueur := 0; fin si i := i +1; fin tant que result := max_longueur; end 9 function maxSuiteColonne(var c : integer, couleur : t_champ) : integer; begin max_longueur := 0; longueur := 0; i := 1; tant que i<=6 faire si puissance4[i][c] = couleur alors longueur := longueur + 1; si longueur > max_longueur alors max_longueur := longueur; fin si sinon longueur := 0; fin si i := i +1; fin tant que result := max_longueur; end qui renvoie la longueur maximale d"une suite d"entr´ees decouleurcons´ecutive dans une lignel(resp. colonnesc).

Ecrire la fonction

function maxSuite(var couleur : t_champ) : integer; qui utilise ces deux fonctions et qui renvoie la longueur maximale d"une suite d"entr´ees de couleurcons´ecutive dans toutes les lignes et colonnes. function maxSuite(var couleur : t_champ) : integer; var longueur : integer var max_longueur : integer; d´ebut max_longueur := 0; pour i de 1 `a 7 faire longueur := maxSuiteColonne(i,couleur); si longueur>max_longueur alors max_longueur := longueur; fin si fin pour pour i de 1 `a 6 faire longueur := maxSuiteLigne(i,couleur); si longueur>max_longueur alors max_longueur := longueur; fin si fin pour fin

7. Le jeu de puissance4 se r´esume d´esormais `a l"algorithme suivant.

10 joueur := 1; fini := FAUX;tant que fini = FAUX faire afficher le damier faire afficher Demander au joueur quelle choix; lire la colonne du clavier dans la variable colonne; tant que possible(colonne); poserPion(colonne,joueur[i].couleur); si maxSuite(joueur[i].couleur = 4 ou maxSuiteDiagonales(joueur[i].couleur = 4) afficher que le joueur a gagn´e; fini := VRAI; fin si si joueur = 1 alors joueur = 2 sinon joueur = 1 fin si fin tant que

Exercice 4.7BONUS

function maxSuiteDiagonales(var couleur : t_champ) : integer; qui renvoie la longueur maximale d"une suite d"entr´ees decouleurcons´ecutive dans les diag- onales. function maxSuiteDiagonales(var couleur : t_champ) : integer; var longueur1, longueur2 : integer var max_longueur : integer; var ligne,colonne : integer; d´ebut max_longueur := 0; pour ligne de 1 `a 12 faire colonne := 1; si ligne > 6 alors colonne := colonne + (i - 6); ligne := 6; fin si longueur1 := 0; { Compteur pour la diagonale "du bas `a gauchevers le haut `a droite" } longueur2 := 0; { Compteur pour l"autre diagonale } tant que colonne <= 7 et ligne <= 6 faire si damier[ligne][colonnne] = couleur alors 11 longueur1 := longueur1 + 1; sinon longueur1 := 0; fin si; si damier[ligne][8-colonnne] = couleur alors longueur2 := longueur2 + 1; sinon longueur2 := 0; fin si; colonne := colonne + 1; ligne := ligne + 1; fin tant que si longueur1 > max_longueur alors max_longueur := longueur1; fin si si longueur2 > max_longueur alors max_longueur := longueur2; fin si fin 12quotesdbs_dbs14.pdfusesText_20