CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

ocaml type

tak9am5ura
tak9am5ura
Niveau 4
01 avril 2015 à 11:53:00

Bonjour!

Il y a un concept qui me chiffone: les types. En effet je comprends par exemple pour des choses simples tel un jeu de cartes (couleur, et chiffres,etc) mais pas le raisonnement a employer pour par exemple determiner le nombre de figure a 3 sommets dans une liste.

Ainsi

#

let rec avec3 f =
match f with
|Triangle |Generale 3-> true
|Hybride (f1,f2)-> avec3 f1 || avec3 f2
|_-> false;;

et

  1. let rec compte3 l match l with |[]-> 0

|h::-> if avec3 h then 1 + (compte3 t) else compte3 t
utilisés pour y parvenir ne m'évoque pas grand chose.. (bien que j'ai compris la deuxieme fonction car déja utilisée et caractéristique de lorsque que l'on veut determiner une occurence)

merci d'avance

tak9am5ura
tak9am5ura
Niveau 4
01 avril 2015 à 11:56:38

J'ai oublié de preciser la fonction de départ:

type t_figure3= |Carre |Triangle | Rond

|General of int

|Hybride of t_figure3*t_figure3;;

Lowenheim
Lowenheim
Niveau 10
01 avril 2015 à 21:32:09

Je comprends pas trop ce que tu veux faire, en particulier, que représente "Hybride" ? Si tu as "Hybride(Triangle, Triangle)" dans ta liste, tu veux le compter une seule fois, c'est bien ça ? (c'est ce que fait ton algorithme en tout cas).

type t_figure3 = | Carre | Triangle | Rond | General of int | Hybride of t_figure3*t_figure3;;

Cela signifie que tu définis un type appelé t_figure3, et tu le spécifies en disant la forme que peuvent prendre ses éléments. Carre, Triangle et Rond sont tous les trois des figures ; si n est un entier, General(n) est une figure (intuitivement, il représente un polygone à n sommets), et si f et f' sont des figures, Hybride(f, f') est une figure (je ne sais pas trop ce qu'elle est sensée représenter).

Ta première fonction avec3 prend en argument un f de type t_figure3. La syntaxe match f with [...] permet de dire ce que ta fonction renvoie, suivant de quelle forme est f. Si c'est un triangle ou un "general(3)" (donc, un polygone à 3 sommets), tu renvoies "vrai". Si c'est un carré, un rond, ou un "général(n)" avec n différent de 3, tu renvoies "faux" (tout ceci est traité par le | _ -> false qui est un raccourcis pour dire "dans tous les autres cas, faire ci". Dans le cas de Hybride, ça renvoie "vrai" si l'une des deux figures contient un triangle / un general(3)...

tak9am5ura
tak9am5ura
Niveau 4
01 avril 2015 à 22:28:18

Je ne comprend pas l'utilité du Generale3 e fait, car i n'y a que le triangle ( a ma connaissance) qui dispose de 3 sommets donc pourquoi ne pas tout simplement avoir fixé true à Triangle, sans la présence du Generale 3?

Et le hybride[..] si je comprend bien le t_figure3*t_figure3 indique qu'il s'agit d'un couple à utiliser?
Mais le ou ( || ) devrait plutot dire que si il y a un false parmi les deux c'est false qui "l'emporte" non? A moins que le true est prioritaire?

Message édité le 01 avril 2015 à 22:29:59 par tak9am5ura
Lowenheim
Lowenheim
Niveau 10
01 avril 2015 à 22:58:43

Le 01 avril 2015 à 22:28:18 Tak9am5ura a écrit :
Je ne comprend pas l'utilité du Generale3 e fait, car i n'y a que le triangle ( a ma connaissance) qui dispose de 3 sommets donc pourquoi ne pas tout simplement avoir fixé true à Triangle, sans la présence du Generale 3?

Et le hybride[..] si je comprend bien le t_figure3*t_figure3 indique qu'il s'agit d'un couple à utiliser?
Mais le ou ( || ) devrait plutot dire que si il y a un false parmi les deux c'est false qui "l'emporte" non? A moins que le true est prioritaire?

le "ou" est vrai si l'un des deux est vrai, donc oui en effet "le true est prioritaire" comme tu dis.
Et pour "triangle" et "generale(3)" c'est redondant oui, mais on s'en fiche un peu c'est juste un exemple pas très bien fait je pense. Tu as trouvé ça où ?

Quant au "Hybride of t_figure3*t_figure3 oui, le * représente bien un couple. Tout comme "generale" prend un int en argument, Hybride prend deux figures en argument.

Message édité le 01 avril 2015 à 23:00:19 par Lowenheim
tak9am5ura
tak9am5ura
Niveau 4
01 avril 2015 à 23:16:09

J'ai un prof de td qui nous a donné cette manière de déterminer le nombre de figures comportant rois sommets dans une liste.
Ne sachant pas vraiment s'exprimer en français, il n'a fourni aucune explication..

Ce serait possible de savoir comment toi tu t'y serais pris d'une manière mieux faite(plus intuitive que celle ci)?

tak9am5ura
tak9am5ura
Niveau 4
01 avril 2015 à 23:25:05

Qui plus est quand on met "if avec3 h then.." cela vaut 1 + compt3 que dans le cas où on a obtenu "true" mais pourquoi cela ne prend pas en compte le "false" ( pourquoi cela n'est pas l'inverse, style si on a "false" obtenu par avec3 h on entre dans le "then")?

Lowenheim
Lowenheim
Niveau 10
01 avril 2015 à 23:42:12

"déterminer le nombre de figures comportant trois sommets dans une liste", ce n'est pas bien défini comme problème, qu'est-ce que tu appelles une figure ? Le type t_figure3, c'est justement la définition de ce qu'est une "figure". J'avoue qu'elle est un peu bizarre, mais c'est la façon qu'il a choisi pour représenter la notion de "figure".
Si tu comprends vraiment pas, te prends pas trop trop la tête avec ça, et si ton prof de TD est si mauvais cherche un cours de caml sur internet de ton côté et éventuellement plains toi (gentiment) auprès du prof si vraiment y'a un problème.

Par contre la fonction compte3 est parfaitement standard et je pige pas trop ton problème. C'est juste le sens de l'instruction if b then v1 else v2", tu as dû la rencontrer dans d'autres langages de programmation. b est une condition booléenne qui vaut soit true soit false (ici c'est avec3 h ou encore "est-ce que h''' a 3 sommets ?') ; si la condition vaut "true" on renvoie v1, si elle vaut 'false" on renvoie v2.
Le if dit juste "si h a trois sommets alors je le compte, sinon je le compte pas". C'est bien ce que tu veux faire non ?

Message édité le 01 avril 2015 à 23:43:46 par Lowenheim
tak9am5ura
tak9am5ura
Niveau 4
02 avril 2015 à 09:16:45

Oui c'est exactement ce que je veux faire mais c'est juste que j'etais assez embrouillé :/

C'est bizarre car après avoir pigé les foncions recursives et treminales recursives, je passe aux types, et la je vois des utilisations simples pour determiner une carte d'un jeu par exemple, mais le prof avec ses résolutions farfelues arrive a me perdre alors que cela a l'air a priori plus simple que la recursivité..

En gros la deuxieme foncion c'est sur le même modele que par exemple determiner le nombre d'apparation d'un element x dans une liste style

let rec compte x l= match l with |[]->0
|h::t-> if x=h then 1 + compte x t else compte x t;;

Sauf que la on regarde pas si x=h mais si la figure a 3 sommets ?

tak9am5ura
tak9am5ura
Niveau 4
02 avril 2015 à 09:34:55

Ok, donc pour bien comprendre le concept, si j'avais voulu determiner le nobre de figures a 4 sommets j'aurais pu faire:

type t_figure4= |Triangle
|Rond
|Parallélogramme
|Trapèze
|Generale of int
|Hybride of t_figure4 * t_figure4;;

ainsi que

let rec avec4 x= match x with |Parallélogramme|Trapèze|Generale 4 -> true
|Hybride (x1,x2)-> avec4 (x1)|| avec4 (x2)
|_->false ;;
et pour finir

let rec compt4 l= match l with |[]->0
|h::t-> if avec4 h then 1 + compt4 t else compt4 t;;

?

Lowenheim
Lowenheim
Niveau 10
02 avril 2015 à 10:55:07

Ouais, c'est bien ça, t'as l'air d'avoir pigé :ok: Après comme je disais c'est pas un super exemple, te prends pas trop la tête dessus. Ce qu'il faut retenir c'est que tu peux définir un type en donnant la "forme" de ses éléments (on appelle ça des constructeurs, dans ton exemple Rond, Triangle, Generale, etc), et ensuite définir une fonction sur ce type avec l'instruction "match ... with ..." qui te permet de faire une disjonction de cas "s'il est de telle forme je renvoie ci, s'il est de telle autre forme je renvoie ça, etc..."

tak9am5ura
tak9am5ura
Niveau 4
02 avril 2015 à 11:00:24

D'accord merci beaucoup et bonne journeé !

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment