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é

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

M1102-TD3 Exercice2

Ecrire la fonction find () de profil :

fonction find (Val : in entier , TabInt : in tableau_de entier) renvoie entier_naturel;

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é

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

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é

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

M1102-TD3 Exercice4 Corrigé

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

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 :

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

Ecrire l’algorithme qui teste GenereTabInt ().