M1102-TD3 Exercice1

Ecrire la fonction SaisirEntierSupX () qui renvoie un entier naturel saisi au clavier, supérieur à une valeur entière X passée en troisième paramètre – les deux premiers paramètres sont les chaînes de caractères représentant l’invite de la saisie et le message d’erreur si la valeur saisie n’est pas supérieure à X.

M1102-TD3 Exercice1 Corrigé

[Algo]
fonction SaisirEntierSupX (Invite : in string, MsgErr : in string, X : in entier_naturel) renvoie entier_naturel
debut
declarer N : entier_naturel;
boucle
afficher (Invite);
saisir(N);
si (N > X) sortie;
afficher (MsgErr);
ligne_suivante;
fboucle
renvoie N;
fin

algorithme TestSaisirEntierSupX
debut
declarer N : entier_naturel;
N <- SaisirEntierSupX ("Entrer une valeur supérieure à 10 : ", "Plus grande que 10 svp!", 10);
afficher ("Vous avez saisi : ", N);
ligne_suivante;
fin
[/Algo]

M1102-TD3 Exercice2

Ecrire la fonction find () de profil :
[Algo]fonction find (Val : in entier , TabInt : in tableau_de entier) renvoie entier_naturel;[/Algo]
Cette fonction renvoie l’indice de la première occurrence de Val dans TabInt. Pour cet exercice, on suppose que Val est présent dans TabInt.

En utilisant les sous-programmes que vous avez déjà vus, écrire un algorithme permettant de tester la fonction find (). Faire la trace de votre algorithme.

M1102-TD3 Exercice2 Corrigé

[Algo]
fonction find (TabInt : in tableau_de entier, Val : in entier) renvoie entier_naturel
debut
declarer Pos : entier_naturel;
Pos <- 0;
tant_que (TabInt[Pos] ne_vaut_pas Val)
faire
Pos <- Pos + 1;
ffaire
renvoie Pos;
fin

procedure GenereTabInt (TabInt : in_out tableau_de entier, Min : in entier, Max : in entier)
debut

declarer Val : entier;
pour (i variant_de 0 a taille (TabInt) – 1)
faire
Val <- Rand (Min, Max);
TabInt [i] <- Val;
ffaire
fin

procedure AfficheTabInt (TabInt : in tableau_de entier, Sep : in caractere, NbParLigne : in entier_naturel)
debut

//cpt designe le nombre d’affichage déjà effectué
declarer cpt :entier_naturel;
cpt <- 0;

pour (i variant_de 0 a taille(TabInt) – 1)
faire

afficher (TabInt [i]);
cpt <- cpt + 1;
si (modulo (cpt, NbParLigne) vaut 0)
ligne_suivante;
sinon
afficher (Sep);
fsi
ffaire
fin

algorithme TestDeFind
debut
declarer N : entier_naturel;
afficher ("entrer la taille du tableau : ");
saisir (N);

declarer TabInts : tableau_de N entier;

GenereTabInt (TabInts, -100, 100);

AfficheTabInt (TabInts, ‘\t’, 10);
ligne_suivante;

declarer ValCherchee : entier;
afficher ("entrer la valeur à trouver : ");
saisir (ValCherchee);

declarer Pos : entier_naturel;
Pos <- find (TabInts, ValCherchee);
afficher (ValCherchee, " apparait pour la première fois à la position ", Pos, " dans le tableau");
ligne_suivante;
fin[/Algo]

M1102-TD3 Exercice3

Ecrire la fonction find () de profil identique à celui de l’exercice 2. Pour cet exercice, on ne sait pas si Val est présente dans TabInt. Si Val est présente, on renvoie l’indice de la première occurrence. Dans le cas contraire, on renvoie la taille de TabInt.

En utilisant les sous-programmes que vous avez déjà vus, écrire un algorithme permettant de tester la fonction find (). Faire la trace de votre algorithme.

M1102-TD3 Exercice3 Corrigé

[Algo]
fonction find (Val : in entier, TabInt : in tableau_de entier) renvoie entier_naturel
debut
declarer Pos : entier_naturel;
Pos <- 0;
tant_que (Pos < taille (TabInt) ET_ALORS TabInt[Pos] ne_vaut_pas Val)
faire
Pos <- Pos + 1;
ffaire
renvoie Pos;
fin

procedure GenereTabInt (TabInt : in_out tableau_de entier, Min : in entier, Max : in entier)
debut

declarer Val : entier;
pour (i variant_de 0 a taille (TabInt) – 1)
faire
Val <- Rand (Min, Max);
TabInt [i] <- Val;
ffaire
fin

procedure AfficheTabInt (TabInt : in tableau_de entier, Sep : in caractere, NbParLigne : in entier_naturel)
debut

//cpt designe le nombre d’affichage déjà effectué
declarer cpt :entier_naturel;
cpt <- 0;

pour (i variant_de 0 a taille(TabInt) – 1)
faire

afficher (TabInt [i]);
cpt <- cpt + 1;
si (modulo (cpt, NbParLigne) vaut 0)
ligne_suivante;
sinon
afficher (Sep);
fsi
ffaire
fin

algorithme TestDeFind
debut
declarer N : entier_naturel;
afficher ("entrer la taille du tableau : ");
saisir (N);

declarer TabInts : tableau_de N entier;

GenereTabInt (TabInts, -100, 100);

AfficheTabInt (TabInts, ‘\t’, 10);
ligne_suivante;

declarer ValCherchee : entier;
afficher ("entrer la valeur à trouver : ");
saisir (ValCherchee);

declarer Pos : entier_naturel;
Pos <- find (ValCherchee, TabInts);
si (Pos < taille (TabInts))
afficher (ValCherchee, " apparait pour la première fois à la position ", Pos, " dans le tableau");
sinon
afficher (ValCherchee, " n’apparait pas dans le tableau");
fsi
ligne_suivante;
fin[/Algo]

M1102-TD3 Exercice4 Corrigé

[Algo]
fonction find (Val : in entier, TabInt : in tableau_de entier) renvoie entier_naturel
debut
allonger (TabInt, 1);
TabInt [taille (TabInt) – 1] <- Val;

declarer Pos : entier_naturel;
Pos <- 0;
tant_que (TabInt[Pos] ne_vaut_pas Val)
faire
Pos <- Pos + 1;
ffaire
renvoie Pos;
fin

procedure GenereTabInt (TabInt : in_out tableau_de entier, Min : in entier, Max : in entier)
debut

declarer Val : entier;
pour (i variant_de 0 a taille (TabInt) – 1)
faire
Val <- Rand (Min, Max);
TabInt [i] <- Val;
ffaire
fin

procedure AfficheTabInt (TabInt : in tableau_de entier, Sep : in caractere, NbParLigne : in entier_naturel)
debut

//cpt designe le nombre d’affichage déjà effectué
declarer cpt :entier_naturel;
cpt <- 0;

pour (i variant_de 0 a taille(TabInt) – 1)
faire

afficher (TabInt [i]);
cpt <- cpt + 1;
si (modulo (cpt, NbParLigne) vaut 0)
ligne_suivante;
sinon
afficher (Sep);
fsi
ffaire
fin

algorithme TestDeFind
debut
declarer N : entier_naturel;
afficher ("entrer la taille du tableau : ");
saisir (N);

declarer TabInts : tableau_de N entier;

GenereTabInt (TabInts, -100, 100);

AfficheTabInt (TabInts, ‘\t’, 10);
ligne_suivante;

declarer ValCherchee : entier;
afficher ("entrer la valeur à trouver : ");
saisir (ValCherchee);

declarer Pos : entier_naturel;
Pos <- find (ValCherchee, TabInts);
si (Pos < taille (TabInts))
afficher (ValCherchee, " apparait pour la première fois à la position ", Pos, " dans le tableau");
sinon
afficher (ValCherchee, " n’apparait pas dans le tableau");
fsi
ligne_suivante;
fin[/Algo]

M1102-TD3 Exercice5

On souhaite écrire le sous-programme GenereTabInt (). Celui-ci doit générer un tableau de N entiers aléatoires distincts dans [1..M] (M > N). Dans cet exercice, à chaque itération, on va remplir un élément du tableau. L’algorithme de haut niveau est le suivant :
[Algo]

pour (Nb variant_de 0 a N – 1)
faire
GenererEntierAleatoireJusquACeQuIlNeSoitPasDejaStocke;
StockerLEntierAleatoireDansTabInt;
ffaire

[/Algo]

Ecrire l’algorithme qui teste GenereTabInt ().