p
u
b
l
i
c
i
t
é
publicité

Discussion: Les vecteurs creux

  1. #1
    Invité de passage
    Femme Profil pro
    Étudiant
    Inscrit en
    juin 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juin 2012
    Messages : 6
    Points : 1
    Points
    1

    Par défaut Les vecteurs creux

    Bonjour,

    Des vecteurs creux sont des vecteurs de grande taille avec beaucoup de coordonnées nulles. Par exemple V = (0, 0, 3.1, 0, 0, 4.2, 0, 0, 0, 0). On ne veut stocker que les infos non nulles, donc ici 3.1 et 4.2 ainsi que leur position.

    Il fallait definir un type vectcreu, j'ai donc fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    type couple ={place : int; composante:float}
    type vectcreu = {taille :int; position : couple list}
    Maintenant le problème c'est que je dois calculer la norme (sqrt(somme(coordonnées²))).
    J'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    let rec calc l =
         match l with
         |[] -> 0.0
         |(i, v)::t -> sqrt (v*.v+.calc t);;
    Et ensuite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    let norme v=
         calc v.position;;
    Cela ne fonctionne pas mais je ne vois pas pourquoi (je débute...).

    Merci pour votre aide.

  2. #2
    Membre Expert
    Inscrit en
    avril 2007
    Messages
    831
    Détails du profil
    Informations forums :
    Inscription : avril 2007
    Messages : 831
    Points : 1 130
    Points
    1 130

    Par défaut

    Dans ta fonction récursive, tu utilises les éléments comme des couples `int * float`, ce qui est incompatible avec la définition de type que tu donnes. Il faut que tu choisisses soit d'utiliser des couples ainsi, soit d'utiliser le type `couple` que tu as défini.

    Pour manipuler un type produit comme le type `couple` que tu as défini, tu peux utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    | c :: t -> ... c.place ... c.composante ...
    ou bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    | { place = i; composante = v } :: t -> .... i ... v ....
    Par ailleurs l'algorithme utilisé est faux, puisque tu prends la racine récursivement: si tu as une liste [(i1,v1); (i2,v2); (i3,v3)] tu vas calculer sqrt(v1^2 + sqrt(v2^2 + sqrt(v^3 + 0))), ce qui est faux.

  3. #3
    Invité de passage
    Femme Profil pro
    Étudiant
    Inscrit en
    juin 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juin 2012
    Messages : 6
    Points : 1
    Points
    1

    Par défaut

    Ca marche! Merci.

    Finalement j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    let rec somme l =
       match l with
       |[] -> 0.0
       |{ place = i; composante = v } :: t -> v*.v+.somme t;;
    puis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    let norme v=
       sqrt (somme v.position);;

Discussions similaires

  1. Les vecteurs creux
    Par rikudou dans le forum Débuter
    Réponses: 22
    Dernier message: 23/04/2012, 02h34
  2. Probleme avec les vecteurs.
    Par Fred2209 dans le forum C++
    Réponses: 5
    Dernier message: 13/11/2006, 18h06
  3. travailler avec les images et les vecteurs
    Par susimido dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 24/04/2006, 15h02
  4. [Swing]remplissage d'un JTable avec les vecteur
    Par 3adoula dans le forum Tables
    Réponses: 7
    Dernier message: 15/06/2004, 16h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo