+ Répondre à la discussion
Affichage des résultats 1 à 2 sur 2

Discussion: aide caml types

  1. #1
    Invité de passage
    Homme Profil pro
    Inscrit en
    octobre 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : octobre 2012
    Messages : 1
    Points : 0
    Points
    0

    Par défaut aide caml types

    Bonjour, je suis actuellement nouveau en programmation j'apprends le language Caml. Je cherche à créer un script capable de vérifier si une date est valide ou non, puis à rendre une chaine de caractères contenant la date. Ceci est mon code. Je reçois un message d'erreur à la compilation; comme quoi "est_bissextile" est une booléenne alors qu'un entier est attendu. Je ne comprends pas comment je pourrais modifier ça pour que ça puisse marcher...

    Et puis j'ai un deuxième problème. Je dois écrire une fonction "string_of_date" qui, à partir d’un élement de type date rend une chaîne de
    caractère contenant la date en utilisant l’opérateur "^".

    Ci-dessous un de mes essais, qui n'est pas concluent...

    Quelqu'un pourrait-il m'aider?
    Merci d'avance

    Code :
    let string_of_date date(jour:date) (mois:date) (annee:date) = jour^mois^annee;;


    Code :
    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
    let nb_de_jours est_biss num_mois =  match num_mois with
    							| 1 -> 31
    							| 2 -> if est_biss then 29 else 28
    							| 3 -> 31
    							| 4 -> 30
    							| 5 -> 31
    							| 6 -> 30
    							| 7 -> 31
    							| 8 -> 31
    							| 9 -> 30
    							| 10 -> 31
    							| 11 -> 30
    							| 12 -> 31
    							| _ -> failwith "Numero de mois errone";;
    							
    let bissextile a = ( a mod 4 = 0) && ( a mod 100 <> 0 || a mod 400 = 0);;
    
    type date = { jour:int ; mois:int ; annee:int };;
    
    let date_valide j m a = let est_bissextile = bissextile a in
    				let nb_jour_max_mois = nb_de_jours m est_bissextile in
    					if m > 12 || m < 1
    						then failwith "Numero de mois errone"
    						else if j < 1 || j > nb_jour_max_mois              
    							then failwith "Numero de jour errone"
    							else { jour=j; mois=m ; annee= a};;

  2. #2
    Membre Expert
    Avatar de Cacophrene
    Profil pro Phrene Caco
    Inscrit en
    janvier 2009
    Messages
    533
    Détails du profil
    Informations personnelles :
    Nom : Phrene Caco

    Informations forums :
    Inscription : janvier 2009
    Messages : 533
    Points : 1 031
    Points
    1 031

    Par défaut

    Bonsoir,

    Tu travailles avec Caml light ou OCaml ? Si c'est OCaml, nous sommes nombreux ici à pouvoir t'aider. Sinon, on peut essayer quand même, car ces deux dialectes sont proches, mais il faut savoir qu'on ne l'utilise pas.

    Donc, pour ta fonction nb_de_jours, tu peux essayer de condenser un peu l'écriture, en partant du principe que tu lui donneras toujours une valeur comprise entre 1 et 12 :
    Code :
    1
    2
    3
    4
    5
    let nb_de_jours est_biss = function
      | 1 | 3 | 5 | 7 | 8 | 10 | 12 -> 31
      | 2 -> if est_biss then 29 else 28
      | _ -> 30
    Ensuite, pour ton problème de compilation, je pense que cela vient de l'appel let nb_jour_max_mois = nb_de_jours m est_bissextile. En effet, dans ce code, tu as inversé les deux arguments : il faut mettre est_bissextile en premier, et m en second ! Regarde la signature de ta fonction nb_de_jours :

    val nb_de_jours : bool -> int -> int

    Ta fonction string_of_date : si tes trois éléments sont des entiers, il faut faire des conversions. Regarde du côté de int_of_string et du module Printf si tu travailles avec OCaml.

    Tiens-nous au courant.

    Cordialement,
    Cacophrène

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •