Bonjour.
Effectivement, les deux erreurs que j'avais expliquées ont été corrigées.
Quant à l'erreur dans le calcul du produit scalaire, erreur que j'avais seulement évoquée, elle a aussi été corrigée !
En effet, l'instruction
prodscalaire:=prodscalaire +multiplication ;
qui figurait à la ligne 39 du premier listing, était en dehors de la boucle
1 2 3 4 5 6 7
| for i:=1 to cmax do
begin
multiplication:=1;
for j:=1 to vmax do
multiplication:=multiplication*tab[i,j];
writeln('multiplication vaut', multiplication);
end; |
Dans le deuxième listing, elle est bien à sa place comme dernière instruction de la boucle.
En résumé, votre programme actuel est correct.
Par contre, on peut l'améliorer en le simplifiant et en rendant l'interface utilisateur plus conviviale.
Remarquons que le produit scalaire n'a de sens que pour deux vecteurs.
La constante vmax sera donc toujours égale à 2, alors que la constante cmax est arbitaire.
Je propose donc de remplacer le tableau tab à deux indices par deux vecteurs à un seul indice.
Ce sera plus clair pour tout le monde.
Les coordonnées étant entières, j'ai opté pour un produit scalaire entier aussi.
Cela simplifie l'affichage du résultat.
Si vous avez vraiment besoin de réels, il suffira de modifier le type vecteur et le type de prodscalaire.
J'ai ensuite modifié l'entrée des coordonnées pour la rendre plus conviviale.
Pour finir, j'ai supprimé l'affichage des multiplications intermédiaires : c'est utile pour faire des vérifications dans la phase d'écriture du programme, mais sans intérêt quand le programme est validé.
Je vous propose donc cette version :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| Program produit_scalaire;
const
cmax = 10;
type
vecteur = array[1..cmax] of integer;
var
u,v : vecteur;
i,j : integer;
prodscalaire : integer;
begin
for i := 1 to cmax do
begin
write('entrez u[',i,'] : ');
readln(u[i]);
write('entrez v[',i,'] : ');
readln(v[i]);
writeln ;
end;
prodscalaire := 0;
for i := 1 to cmax do
prodscalaire := prodscalaire + u[i]*v[i];
writeln('Le produit scalaire de u et v est : ',prodscalaire);
readln;
end. |
Partager