C10. Programmation modulaire - Vecteurs - Programmation PASCAL Corrigé
Exercice 1 : VariétésConsidérons une liste de N nombres entiers ( N>1). On veut écrire un algorithme qui répond aux questions suivantes :
- déterminer le troisième nombre premier s'il existe,
- déterminer le deuxième carré parfait s'il existe,
- déterminer le nombre des diviseurs du premier nombre pair et du dernier nombre impair.
Pour le faire on définit les modules suivants :
a) PREM(Nbr, Bool) :
En entrée : un nombre quelconque Nbr.
En sortie : Bool <-- VRAI si Nbr est premier,
Bool <-- FAUX si Nbr est non premier.
Rôle : reconnaît si un nombre est premier ou non.
b) CARRE(Nbr, Bool) :
En entrée : un nombre quelconque Nbr.
En sortie : Bool <-- VRAI si Nbr est un carré parfait,
Bool <-- FAUX sinon.
Rôle : reconnaît si un nombre est carré parfait ou non.
c) PAIR ( Nbr) :
En entrée : un nombre quelconque Nbr.
en sortie : VRAI si Nbr est un carré parfait, FAUXsinon.
Rôle : reconnaît si un nombre est pair ou non.
NBDIV( Nbr, Ndiviseurs) :
En entrée : un nombre quelconque Nbr.
En sortie : le nombre des diviseurs de Nbr est rangé dans la variable Ndiviseurs.
Rôle : détermine le nombre de diviseurs d'un nombre donné.
QUESTIONS :
a) Ecrire séparément les 4 actions ainsi définies.
b) Utiliser ces actions pour écrire UN SEUL algorithme qui répond aux questions posées.
Remarques :
a) Ne pas utiliser 'opérateur "racine carrée".
b) Chaque nombre de la liste est délivré par un ordre de lecture.
c) Les questions a) et b) sont indépendantes.
Exercice 2 : Norme euclidienne Etant donnés P vecteurs (X1, X2, . . , XN) de dimension N. ( P et N donnés).Quel est le rang du vecteur qui possède la plus grande norme euclidienne ?Vous devez répondre à cette question :
a) en énonçant d'abord le principe que vous utilisez en langage naturel,
b) puis, en écrivant un algorithme.
Rappel : la norme euclidienne d'un vecteur est donnée par la formule :
Racine carré ( somme (X12+X22+ ....... XN2) ) Exercice 3 : Id ?Soit le programme PASCAL suivant :
PROGRAM Id;
VAR
N, X, I, P, K, W : INTEGER;
S : REAL;
PROCEDURE Y ( VAR A, B : INTEGER);
VAR L : INTEGER;
BEGIN
B := 1;
FOR L:=2 TO A DO B := B * L
END;
BEGIN
READ(X); READ(N);
S := 1;
FOR I:=1 TO N DO
BEGIN
Y(I, P);
W:= 1;
FOR K:=1 TO I DO W := W * X;
S := S + ( W/ P)
END
END.
Questions :
a) Dérouler le programme pour X=3 et N = 4
b) Donner les contenus des variables P, S et W.
c) Que fait le programme ?