Précédent   Forum du club des développeurs et IT Pro > Autres langages > Langages fonctionnels > Caml
Caml Forum d'entraide sur la programmation avec les langages fonctionnels Caml-Light et OCaml
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 26/08/2012, 17h25   #1
Wenneguen
Invité de passage
 
Maths Spé : MP
Inscription : août 2012
Messages : 12
Détails du profil
Informations professionnelles :
Activité : Maths Spé : MP

Informations forums :
Inscription : août 2012
Messages : 12
Points : 0
Points : 0
Par défaut Fonction : produit matriciel

Bonjour,

je dois créer une fonction effectuant le produit de 2 matrices mais j'avoue que j'ai un peu de mal. Voilà ce que j'ai fait :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
let produit_matriciel A B =

 let resultat = make_vect (vect_length A) (make_vect (vect_length B.(0)) 0) 
 in
	let r = ref 0
	in
 	
	for i=0 to vect_length A 
	for j=0 to vect_length A.(0)
	for k=0 to vect_length A.(0)
	do
	  r:= !r + A.(i).(k)*B.(k).(j)
	done;
	resultat.(i).(j) <- !r

	resultat
;;
Évidemment ça ne marche pas, caml me met l'erreur suivant :


Code :
1
2
3
4
5
Entrée interactive:
>	for j=0 to vect_length A.(0)
>	^^^
Erreur de syntaxe.
#

Quel est le problème ?

Merci.
Wenneguen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/08/2012, 18h25   #2
gorgonite
Rédacteur/Modérateur

 
Avatar de gorgonite
 
Homme Nicolas Vallée
Ingénieur d'études
Inscription : décembre 2005
Messages : 9 966
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Vallée
Âge : 28
Localisation : France

Informations professionnelles :
Activité : Ingénieur d'études
Secteur : Transports

Informations forums :
Inscription : décembre 2005
Messages : 9 966
Points : 18 162
Points : 18 162
la syntaxe du for... il faut des do ?
__________________
Evitez les MP pour les questions techniques... il y a des forums
Contributions sur DVP : Mes Tutos | Mon Blog
gorgonite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/08/2012, 20h15   #3
Wenneguen
Invité de passage
 
Maths Spé : MP
Inscription : août 2012
Messages : 12
Détails du profil
Informations professionnelles :
Activité : Maths Spé : MP

Informations forums :
Inscription : août 2012
Messages : 12
Points : 0
Points : 0
Oui en effet merci ! J'ai changé quelques trucs, mais le produit calculé n'est pas le bon ( de plus toutes les lignes de la matrice rendue sont les mêmes... )


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
let produit_matriciel a b =

 let resultat = make_vect (vect_length a) (make_vect (vect_length b.(0)) 0) 
 in
 	
	for i=0 to vect_length a -1 do
	 for j=0 to vect_length b.(0) -1 do
	  for k=0 to vect_length a.(0) -1 do
	    resultat.(i).(j) <- resultat.(i).(j) + a.(i).(k)*b.(k).(j)
	  done; 
	 done;
	done;
	
	resultat
;;
Wenneguen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2012, 00h45   #4
Ptival
Membre actif
 
Avatar de Ptival
 
Homme Valentin Robert
Étudiant
Inscription : juin 2004
Messages : 70
Détails du profil
Informations personnelles :
Nom : Homme Valentin Robert
Âge : 24
Localisation : Etats-Unis

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2004
Messages : 70
Points : 172
Points : 172
Code :
let resultat = make_vect (vect_length a) (make_vect (vect_length b.(0)) 0)
Le problème, c'est qu'ici tu crées un vecteur de taille "taille de a", dont chaque élément est le même vecteur. Du coup quand tu modifies une ligne, tu modifies toutes les lignes.

Le problème et la solution sont expliqués dans la FAQ du débutant.
Ptival est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2012, 15h41   #5
Wenneguen
Invité de passage
 
Maths Spé : MP
Inscription : août 2012
Messages : 12
Détails du profil
Informations professionnelles :
Activité : Maths Spé : MP

Informations forums :
Inscription : août 2012
Messages : 12
Points : 0
Points : 0
En effet c'est exactement ça, merci beaucoup !
Wenneguen est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 09h44.


 
 
 
 
Partenaires

Hébergement Web