Previous Up Next
Version pdf - Version archive

4.4  Le carré qui rend fou

fichier source

(* Affichage de carrés *) (* exercice 1 *) let rec ligne n = ". " ^ ( if (n > 1) then ligne (n - 1) else "\n" );; (* exercice 2 *) let rec carre n = let rec carre_aux = function 0 -> "\n" | k -> ligne n ^ (carre_aux (k - 1)) in carre_aux n;; (* Affichage de carrés d'étoiles*) (* exercice 3 *) let rec etoiles a b n = if (n = 0) then "\n" else ( if (a <= 1 && b >= 1) then "* " else ". " ) ^ (etoiles (a-1) (b-1) (n-1));; (* exercice 4 *) let carre_etoiles (lhaut, lbas, cgauche, cdroite) n = let rec carre_aux lhaut lbas k = if (k > n) then "\n" else ( ( if (lhaut <= 1 && lbas >= 1) then etoiles cgauche cdroite n else ligne n ) ^ (carre_aux (lhaut - 1) (lbas - 1) (k + 1)) ) in carre_aux lhaut lbas 1;; (* Enumération des carrés *) (* exercice 5 *) let rec couples_coordonnees_a_fixe a b = if (a > b) then [] else (couples_coordonnees_a_fixe a (b-1))@[(a, b)];; (* exercice 6 *) let couples_coordonnees n = let rec couples_coordonnees_aux a = if (a > n) then [] else couples_coordonnees_a_fixe a n@(couples_coordonnees_aux (a+1)) in couples_coordonnees_aux 1;; (* exercice 7 *) let rec coordonnees_carres_colonnes_fixees (cgauche, cdroite) n = if (n <= cdroite - cgauche) then [] else coordonnees_carres_colonnes_fixees (cgauche, cdroite) (n-1) @[(n - (cdroite - cgauche), n, cgauche, cdroite)];; (* exercice 8 *) let coordonnees_carres n = let colonnes = couples_coordonnees n in let rec complete_coordonnees colonnes = match colonnes with [] -> [] | h::t -> coordonnees_carres_colonnes_fixees h n @(complete_coordonnees t) in complete_coordonnees colonnes;; (* exercice 9 *) let tous_les_carres n = let rec liste_carres l = match l with [] -> [] | coord::t -> carre_etoiles coord n::(liste_carres t) in liste_carres (coordonnees_carres n);; (* exercice 10 *) let rec print_str_list = function [] -> print_string "\n"; | h::t -> print_string h; print_str_list t;; print_str_list (tous_les_carres 3);; (* Enumération des rectangles *) (* exercice 11 *) let rec concat_produits (a, b) l = match l with [] -> [] | (c, d)::t -> (a, b, c, d)::(concat_produits (a, b) t);; (* exercice 12 *) let rec croise_coordonnees a b = match a with [] -> [] | h::t -> (concat_produits h b)@(croise_coordonnees t b);; (* exercice 13 *) let coordonnees_rectangles n = let colonnes = couples_coordonnees n in croise_coordonnees colonnes colonnes;; (* exercice 14 *) let tous_les_rectangles n = let rec liste_rectangles l = match l with [] -> [] | coord::t -> carre_etoiles coord n::(liste_rectangles t) in liste_rectangles (coordonnees_rectangles n);; (* exercice 15 *) (* Il existe C n+1 n façons de choisir les lignes et autant de façons de choisir les colonnes, donc... *)

Previous Up Next