D11: Corrigés des exercices d'algorithmique ( Sujet dans D10_Algo1_Suj.rtf ) 1) Algorithme produitScalaire( nelem,t1,t2, Variables locales: n1 , n2 : réels, carrés des normes de v1 et v2 s : réel, produit scalaire de v1 et v2 ier : entier, indicateur d'erreur (norme "nulle") scal ) Calcule le produit scalaire de deux vecteurs Interface d'entrée: nelem : entier, taille des deux vecteurs t1 , t2 : tableaux de réels, contenant les valeurs des composantes des vecteurs Nb : On suppose disponible la fonction racineCarrée d'un réel. Début produitScalaire (taille,v1,v1, n1) Si ( n1 <= eps ) alors | ier <-- 1 Sinon | produitScalaire (taille,v2,v2, n2) | Si ( n2 <= eps ) alors | | ier <-- 1 | Sinon | | produitScalaire (taille,v1,v2, s) | | valcos <-- s / racineCarrée( n1 ) / racineCarrée( n2 ) | | ier <-- 0 | Fin Si Fin Si Retourner la valeur de ier Fin de l'Algorithme Interface de sortie: scal : réel, produit scalaire des deux vecteurs Variables locales: i : entier, compteur de boucles Début scal <-- 0.0 Pour i variant de 0 à (nelem-1) répéter | scal <-- scal + t1[ i ] * t2[ i ] Fin pour Fin de l'algorithme 2) Fonction entière cosinusVecteurs (taille,v1,v2,eps, valcos) Calcule le cosinus de l'angle de deux vecteurs. 3) Programme de test Interface d'entrée: taille : entier, nombre de composantes des vecteurs v1 , v2 : tableaux de réels, contenant les valeurs des composantes des vecteurs eps : réel, précision du zéro (valeur en dessous de laquelle on pourra considérer le carre de la norme d'un vecteur comme nulle). Ecrire un programme principal permettant de vérifier le bon fonctionnement des algorithmes précédents. Variables locales nt : constante entière valant 2 v1 , v2 : tableaux de nt réels n1 , n2 : réels, carrés des normes des vecteurs v1 et v2 cos1 : réel, cosinus de l'angle de ces deux vecteurs Début v1[ 0 ] = 1.0 v1[ 1 ] = 0.0 v2[ 0 ] = 1.0 v2[ 1 ] = 1.0 Interface de sortie: valcos : réel, cosinus de l'angle de v1 et v2. Cette valeur n'est définie que lorsque la fonction retourne une valeur nulle. Valeur de retour : un entier, valant 0 si le calcul a été fait, et 1 sinon (une des normes a un carre inférieur ou égal à eps). 841060333 A. Bolopion 28/05/2017 11:26:00 I.E.G. 1 produitScalaire (nt,v1,v1, n1) produitScalaire (nt,v2,v2, n2) Ecrire(à l'écran) "Norme de v1 : ", racineCarrée( Ecrire(à l'écran) "Norme de v2 : ", racineCarrée( Si ( cosinusVecteurs (nt,v1,v2,1.0e-3, cos1) = 0 alors | Ecrire(à l'écran) "Cosinus de leur angle : " , Sinon | Ecrire (à l'écran) "Cosinus pas défini" Fin Si Variables locales nt : constante entière valant 4 v1 , v2 : tableaux de nt réels n1 , n2 : réels, carrés des normes des vecteurs v1 et v2 cos1 : réel, cosinus de l'angle de ces deux vecteurs Début lireVecteur (nt, v1) lireVecteur (nt, v2) produitScalaire (nt,v1,v1, n1) produitScalaire (nt,v2,v2, n2) Ecrire(à l'écran) "Norme de v1 : ", racineCarrée( n1 ) Ecrire(à l'écran) "Norme de v2 : ", racineCarrée( n2 ) Si ( cosinusVecteurs (nt,v1,v2,1.0e-3, cos1) = 0 ) alors | Ecrire(à l'écran) "Cosinus de leur angle : " , cos1 Sinon | Ecrire (à l'écran) "Cosinus pas défini" Fin Si Fin de l'Algorithme n1 ) n2 ) ) cos1 v1[ 0 ] = 0.0 Si ( cosinusVecteurs (nt,v1,v2,1.0e-3, cos1) = 0 ) alors | Ecrire(à l'écran) "Cosinus de leur angle : " , cos1 Sinon | Ecrire (à l'écran) "Cosinus pas défini" Fin Si Fin de l'Algorithme 4) Utilisation d’un algorithme fourni: 5) Algorithme transposer (taille, En utilisant l’algorithme lireVecteur spécifié ci-dessous, écrire un programme principal qui calcule et affiche à l’écran le cosinus de deux vecteurs de taille au plus égale à 4 éléments. Algorithme lireVecteur (n, Interface d'entrée: taille : (entier) taille de la matrice carrée a) Interface d'entrée-sortie: a : tableau de réels en entrée: contient les éléments de la matrice donnée en sortie: contient les éléments de la matrice transposée Interface d'entrée: n : ( entier ) nombre de valeurs à lire Variables locales i , j : entiers, indices de boucles. aux : réel auxiliaire, utilisé pour l'échange des termes de la matrice. Début Pour i variant de 0 à ( taille - 1 ) répéter | Pour j variant de 0 à ( i-1 ) répéter | | aux <-- a[ i , j ] | | a[ i , j ] <-- a[ j , i ] | | a[ j , i ] <-- aux | Fin Pour Fin Pour Fin de l'algorithme Interface de sortie: a : tableau de réels, contenant les valeurs lues i : entier, compteur de boucles Début Ecrire (à l'écran) "Entree du tableau" Pour i variant de 0 à (n-1) répéter | Ecrire (à l'écran) "Composante N0. " , (i+1) | Lire (au clavier) a[ i ] Fin Pour Fin de l'Algorithme Programme principal 841060333 A. Bolopion 28/05/2017 11:26:00 I.E.G. ) Calcule la transposée de la matrice carrée a . Lecture au clavier de nombres réels, et rangement dans le tableau a Variables locales: a 2