IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Caml Discussion :

Compter les occurrences


Sujet :

Caml

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2014
    Messages : 14
    Points : 8
    Points
    8
    Par défaut Compter les occurrences
    Bonjour à tous,

    J'ai un projet scolaire à faire qui me demande de faire une compression de fichier.
    Mais avant tout je dois pouvoir ouvrir le fichier, lire chaque mot du fichier mais par lettre et ensuite compter les occurrences de chaque lettre afin de pouvoir faire un arbre de huffmann.
    par exemple si dans mon fichier j'ai : "Je suis une étudiante " .
    Je dois avoir J = 1, é = 1, d = 1, a = 1, s = 2, i = 2, n = 2, t = 2, e = 3, u = 3, " " = 4 ce qui va me permettre de faire l'arbre de huffmann.

    Voici ce que j'ai pu faire jusque là,
    j'arrive a ouvrir le fichier et a lire chaque ligne ..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Let lire mon_fichier =
      let f = open_in mon_fichier in 
      let rec lire_rec () =
        try 
          print_string (input_line f); print_newline(); lire_rec ();
        with End_of_file -> close_in f
      in lire_rec ();;
     
    lire "fichier.txt" ;;

  2. #2
    Membre du Club
    Homme Profil pro
    Chercheur en maths appli
    Inscrit en
    Novembre 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Chercheur en maths appli
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2013
    Messages : 29
    Points : 46
    Points
    46
    Par défaut
    Commence par stocker le contenu de chaque ligne, plutôt que de l'afficher.
    Grâce aux fonctions du module String, tu peux ensuite parcourir chaque ligne et compter le nombre d'occurrences de chaque lettre.

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2014
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Merci pour la suggestion ..

  4. #4
    Membre du Club
    Homme Profil pro
    Chercheur en maths appli
    Inscrit en
    Novembre 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Chercheur en maths appli
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2013
    Messages : 29
    Points : 46
    Points
    46
    Par défaut
    Je te sens moyennement emballée par ma réponse :p

    Ecris ne fonction qui prend en paramètres :
    - la liste courante des (lettre, nombre d'occurrences)
    - la lettre lue
    et qui renvoie la nouvelle liste, où le nombre d'occurrences de la lettre a été incrémenté.

    Ecris une fonction qui prend en paramètres :
    - une chaîne de caractères (= une ligne)
    - la liste courante des (lettre, nombre d'occurrences)
    et qui renvoie la nouvelle liste des (lettre, nombre d'occurrences).

    Ensuite, grâce à la fonction String.length et l'accès au ième caractère (chaine.[i]), tu peux facilement appeler la 1e fonction dans la 2e.

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2014
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    c'est vrai que j'étais un peu perdu mais bon..
    En fait je ne suis pas du tout bonne en ocaml, c'est pour ça que j'ai un peu de mal.

    pour la 1ere fonction, si je fais :
    let rec fonction1 liste x = function ..
    comment est ce que je sais ce qu'il y'a dans liste ? et comment savoir a chaque fois que je rencontre la lettre..?

    En java je sais que je n'ai qu'a faire un "if" pour voir s'il y'a la lettre et l'incrémenter mais en ocaml je ne vois vraiment pas.

  6. #6
    Membre du Club
    Homme Profil pro
    Chercheur en maths appli
    Inscrit en
    Novembre 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Chercheur en maths appli
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2013
    Messages : 29
    Points : 46
    Points
    46
    Par défaut
    Pareil en OCaml... Le plus dur à écrire, c'est le pseudo-code (la partie algorithmique), pas la partie Caml.

    Tu peux écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    let rec fonction lettre_lue liste =
      match liste with
        | [] -> ...
        | (lettre, occurrences) :: reste -> (* je décompose ma liste en une tête et une queue *)
          if lettre = lettre_lue then ...
          else ...
    dont le filtrage s'abrège en :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    let rec fonction lettre_lue = function
      | [] -> ...
      | (lettre, occurrences) :: reste -> ...

Discussions similaires

  1. Compter les occurrences dans une chaine de caractères
    Par moraze dans le forum Débuter
    Réponses: 2
    Dernier message: 10/04/2011, 10h23
  2. compter les occurrences sur des plages non contiguës
    Par docjo dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/10/2009, 11h08
  3. [ATL] Compter les occurrences de balises dans un XML
    Par Pikouse dans le forum Eclipse Platform
    Réponses: 2
    Dernier message: 31/07/2009, 08h22
  4. Compter les occurrences dans VBA-Word
    Par theosoft dans le forum VBA Word
    Réponses: 1
    Dernier message: 20/03/2009, 16h37
  5. Compter les occurrences d'une chaîne dans une feuille
    Par Daejung dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 13/11/2008, 08h59

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