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 :

Caml win/ opérations sur des séquences d'entiers


Sujet :

Caml

  1. #21
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 17
    Points : 1
    Points
    1
    Par défaut
    Bon c'est bien gentil... toi tu as étudié ça 4ans... moi c'est mon premier semestre la dessus... je connais ça depuis seulement quelques semaines, et je me dis que si les profs nous ont donné ces outils en particulier c'est pas pour rien... En plus dans tous les étudiants de niveaux différents qu'il y a dans mon parcours, tous sont bloqués... et tous s'inquiètent grave devant l'échéance qui arrive... ça veut bien dire quelque chose...
    Je suis bien d'accord qu'il faut savoir être curieux... je le suis pour d'autres trucs... mais pas là parce que c'est mes études et que si y a des outils particuliers et une façon de faire dictés par les profs, je préfère les suivre. Ils ne nous auraient pas donné des trucs faux ou inutiles rien que pour nous planter...

    Bref, tout ça ne résoud pas mon problème...
    Voici mon programme actuellement pour la multiplication:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    let rec (Multi : int_inf * int_inf -> int_inf) = function
    ([],[]) -> []
    | ([],s) -> s
    | (s,[]) -> s
    | ([e],[f]) -> if e*f>=10000	then let x=(float_of_int(e)*.float_of_int(f))/.10000.0 in [int_of_float(x);e*f-int_of_float(x)*10000]
    			else [e*f]
    | ([e],[f;g]) -> if e*g>=10000	then let x=(float_of_int(e)*.float_of_int(g))/.10000.0 in [f+int_of_float(x);e*g-int_of_float(x)*10000]
    				else [f;e*g]
    |([e;f],[g]) -> if f*g>=10000	then let x=(float_of_int(f)*.float_of_int(g))/.10000.0 in [e+int_of_float(x);f*g-int_of_float(x)*10000]
    				else [e;f*g]
    | (s1,s2)  -> if (dernier(s1)*dernier(s2))>=10000	then let x=(float_of_int(dernier(s1))*.float_of_int(dernier(s2)))/.10000.0 in ajd(Multi(ajd(debut(debut(s1)),dernier(debut(s1))+int_of_float(x)),debut(s2)),dernier(s1)*dernier(s2)-int_of_float(x)*10000)
    						else ajd(Multi(debut(s1),debut(s2)),dernier(s1)*dernier(s2));;
    Quand je prend le cas simple type Multi([e;f],[g]) avec un exemple simple comme Multi([5],[213;12]) il trouve bien :[213; 60]
    Mais avec Multi([3456;7890],[67]) il me trouve [3508;8630] ce qui est faux, il devrait trouver [23;1604;8630]... le problème viens que ici f*g=7890*67=528630 soit [52;8630]. je fais quoi de ce 52 pour qu'il s'intègre à l'opération suivante... l'additionner ça marche pas, le multiplier ça marche pas... je ne trouve pas de relation entre ce [52] et la séquence que je dois avoir [23;1604]...

    Je sais pas si tout est clair... je sais pas exactement comment présenter la chose...

  2. #22
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Tu ne sais plus poser une multiplication ? Tu ne te rappelles plus qu'on additionne les résultats de la multiplication par chacun des digits du multiplieur ?
    Et puis c'est quoi tous ces float_of_int ? Tu n'en a pas besoin, tu travailles avec des entiers et les seules opérations dont tu ais besoin c'est la multiplication, l'addition et la division euclidienne (par 10000, cf mon rnr), aucune de ces opérations n'a besoin de réels.

    --
    Jedaï

  3. #23
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 17
    Points : 1
    Points
    1
    Par défaut
    on peut ajouter un élément à droite/gauche d'une séquence...

    mais est-ce qu'on peut ajouter une séquence à droite/gauche d'une autre séquence et comment?

  4. #24
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 17
    Points : 1
    Points
    1
    Par défaut
    Je crois que je tiens quelque chose... mais comment faire pour en caml pour qu'un élément d'une séquence d'entiers aille se multiplier avec les éléments d'une autre séquence... comme dans une multiplication normale... ?

    jedai: mon problème c'est pas les maths... autrement je serais pas là, c'est d'arriver à traduire ce que je fais en maths dans ce langage informatique... avec ces séquences qu'on me donne.

  5. #25
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par Sophie_26
    jedai: mon problème c'est pas les maths... autrement je serais pas là, c'est d'arriver à traduire ce que je fais en maths dans ce langage informatique... avec ces séquences qu'on me donne.
    C'est pourtant pas bien compliqué, tu es en base 10^4, toutes les opérations sont les mêmes qu'en base 10.

    Citation Envoyé par Sophie_26
    Je crois que je tiens quelque chose... mais comment faire pour en caml pour qu'un élément d'une séquence d'entiers aille se multiplier avec les éléments d'une autre séquence... comme dans une multiplication normale... ?
    Et bien par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    let multiplier = 10
    in let prim_res = List.map (fun x -> x * multiplier) [9000;9000;9000]
    in let (ret,res) = List.fold_right 
      (fun x (ret,res) -> let (nret,nres) = rnr (x+ret) in (nret, nres :: res)) 
      prim_res 
      (0,[])
    in ret :: res;;
    (C'est du OCaml, mais les fonctions sont pratiquement les mêmes en CamlLight)

    --
    Jedaï

  6. #26
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 17
    Points : 1
    Points
    1
    Par défaut
    j'avance j'avance...
    mais ça veut dire quoi quand il me dit Uncaught exception: Out_of_memory ?

  7. #27
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 681
    Points
    18 681
    Par défaut
    ben qu'il n'a plus de place...

    exception Out_of_memory
    Raised by the garbage collector, when there is insu cient memory to complete the computation.

    probablement une boucle infinie (itérative ou récursive )

  8. #28
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 17
    Points : 1
    Points
    1
    Par défaut
    ok merci je vais voir ça...


    EDIT
    C'est bon j'ai trouvé... j'ai résolu ma multiplication.
    reste ma division... je vais plancher

  9. #29
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 17
    Points : 1
    Points
    1
    Par défaut
    je sais pas si je dois éditer encore le message précédent comme tu la fais gorgonite...

    enfin bref
    j'ai du mal sur ma division entière...
    j'ai réussi à faire mes cas de base, c'est un peu long mais ça marche, ùais j'arrive pas à généraliser à 2 séquences quelconques...
    je sais pas trop quoi faire...

  10. #30
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 17
    Points : 1
    Points
    1
    Par défaut
    j'essaie d'appliquer ceci:
    On cherche Q de degré 3 tel que -4 x² -x+2=(x-2)Q(x).

    On ne s'occupe que du terme de plus haut degré.

    Ainsi, on a Q(x)=x³ +R(x) avec degré R=2

    D'où - 4 x² -x+2=(x-2)(x³+ R(x))
    En développant, on obtient x -4 x² -x+2-(x-2)x³=(x-2)R(x)
    Soit 2x³-4x²-x+2=(x-2)R(x)

    De nouveau on examine les termes de plus haut degré(ici 3) de cette nouvelle égalité,
    On a alors R(x)=2x²+S(x) et degré S = 1.

    On itère le processus suivant le même procédé…

    En pratique, on adopte une disposition analogue à celle utilisée dans la division des nombres.



    Ainsi Q(x)=x³+2x²-1
    avec ces séquence:
    [213;4;7653;67] soit 213x^3+4x^2+7653x+67 et [12;3456;7890] soit 12x^2+3456x+7890. Mais j'y arrive pas... je trouve des trucs bizarres, je crois que je comprend mal...
    Normalement 213000476530067/1234567890=172530. je suis très loin du compte en ce moment...

Discussions similaires

  1. Opération sur des entiers codés dans un tableau
    Par Nurza dans le forum Langage
    Réponses: 7
    Dernier message: 28/09/2012, 13h57
  2. Probleme de dépassement sur des calculs d'entiers
    Par Sébastien THEVOT dans le forum C
    Réponses: 21
    Dernier message: 06/09/2006, 11h02
  3. opération sur des champs déjà manipulés
    Par fred23195 dans le forum SQL Procédural
    Réponses: 10
    Dernier message: 23/08/2006, 17h16
  4. [Dates] Question pour opérations sur des heures
    Par Sangdrax1604 dans le forum Langage
    Réponses: 7
    Dernier message: 23/08/2006, 12h07
  5. Opération sur des heures dans Excel
    Par mirascheat dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 15/12/2005, 11h34

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