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:
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]
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));;
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...
Partager