Previous Up Next
Version pdf - Version archive

2.1  Le carré qui rend fou

2.1.1  Affichage de carres

Nous souhaitons afficher sur la console des carrés de la façon suivante :

# print_string (carre 5);;
. . . . . 
. . . . . 
. . . . . 
. . . . . 
. . . . . 

Exercice 1

Écrire la fonction ligne : int -> string retournant n points séparés par des espaces avec un retour à la ligne à la fin. Par exemple,

# ligne 6;;
- : string = ". . . . . . \n"

Exercice 2

Écrire la fonction carre : int -> string retournant un carré un coté n avec deux retours à la ligne à la fin. Par exemple,

# carre 6;;
- : string =
". . . . . . \n. . . . . . \n. . . . . . \n. . . . . . \n. . . . . . \n. . . . . . \n\n"

2.1.2  Remplissage avec des étoiles

Nous souhaitons maintenant afficher un carré contenant un rectangle d’étoiles. Par exemple,

# print_string (carre_etoiles (2, 8, 4, 9) 10);;
. . . . . . . . . . 
. . . * * * * * * . 
. . . * * * * * * . 
. . . * * * * * * . 
. . . * * * * * * . 
. . . * * * * * * . 
. . . * * * * * * . 
. . . * * * * * * . 
. . . . . . . . . . 
. . . . . . . . . . 

Exercice 3

Écrire la fonction etoiles : int -> int -> int -> string telle que etoiles a b n retourne n caractères séparés par des espaces avec un retour à la ligne à la fin, et dont les caractères dont l’indice se trouve entre a et b sont des étoiles. Par exemple,

# etoiles 3 8 10;;
- : string = ". . * * * * * * . . \n"

Exercice 4

Écrire la fonction carre_etoiles : int * int * int * int -> int -> string telle que carre_etoiles (lhaut, lbas, cgauche, cdroite) n retourne un carré un coté n contenant un rectangle d’étoiles dont le sommet en haut à gauche admet pour coordonnées (cgauche, lhaut) et le sommet en bas à droite (cdroite, lbas).

2.1.3  Enumération des carrés

Nous souhaitons afficher tous les carrés d’étoiles possible. Par exemple,

# print_str_list (tous_les_carres 3);;
* . . 
. . . 
. . . 

. . . 
* . . 
. . . 

. . . 
. . . 
* . . 

* * . 
* * . 
. . . 

. . . 
* * . 
* * . 

* * * 
* * * 
* * * 

. * . 
. . . 
. . . 

. . . 
. * . 
. . . 

. . . 
. . . 
. * . 

. * * 
. * * 
. . . 

. . . 
. * * 
. * * 

. . * 
. . . 
. . . 

. . . 
. . * 
. . . 

. . . 
. . . 
. . * 

Exercice 5

Écrire la fonction couples_coordonnees_a_fixe : int -> int -> (int * int) list telle que couples_coordonnees_a_fixe a b retourne tous les couples (a, y) vérifiant ayb. Par exemple,

# couples_coordonnees_a_fixe 3 8;;
- : (int * int) list = [(3, 3); (3, 4); (3, 5); (3, 6); (3, 7); (3, 8)]

Combien de couples sont retournés par cette fonction ?

Exercice 6

Écrire la fonction couples_coordonnees : int -> (int * int) list telle que couples_coordonnees n retourne tous les couples (x, y) vérifiant 1 ≤ xyn. Par exemple,

# couples_coordonnees 3;;
- : (int * int) list = [(1, 1); (1, 2); (1, 3); (2, 2); (2, 3); (3, 3)]

Combien de couples sont retournés par cette fonction ?

Exercice 7

Écrire la fonction coordonnees_carres_colonnes_fixees : int * int -> int -> (int * int * int * int) list telle que coordonnees_carres_colonnes_fixees (cgauche, cdroite) n retourne les coordonnées de tous les carrés d’étoiles dont les colonnes ont les indices (cgauche, cdroite). Par exemple,

# coordonnees_carres_colonnes_fixees (3, 5) 7;;                                     
- : (int * int * int * int) list =
[(1, 3, 3, 5); (2, 4, 3, 5); (3, 5, 3, 5); (4, 6, 3, 5); (5, 7, 3, 5)]

Combien d’éléments contient la liste retournée par cette fonction ?

Exercice 8

Écrire la fonction coordonnees_carres : int -> (int * int * int * int) list telle que coordonnees_carres n retourne les coordonnées de tous les carrés d’étoiles qu’il est possible de former dans un carré de côté n. Par exemple,

#   coordonnees_carres 3;;
- : (int * int * int * int) list =
[(1, 1, 1, 1); (2, 2, 1, 1); (3, 3, 1, 1); (1, 2, 1, 2); (2, 3, 1, 2);
 (1, 3, 1, 3); (1, 1, 2, 2); (2, 2, 2, 2); (3, 3, 2, 2); (1, 2, 2, 3);
 (2, 3, 2, 3); (1, 1, 3, 3); (2, 2, 3, 3); (3, 3, 3, 3)]

Combien d’éléments contient la liste retournée par cette fonction ?

Exercice 9

Définir une fonction tous_les_carres : int -> string list telle que tous_les_carres n retourne un liste contenant tous les carrés d’étoiles au format chaîne de caractère. Par exemple,

# tous_les_carres 3;;
- : string list =
["* . . \n. . . \n. . . \n\n"; ". . . \n* . . \n. . . \n\n";
 ". . . \n. . . \n* . . \n\n"; "* * . \n* * . \n. . . \n\n";
 ". . . \n* * . \n* * . \n\n"; "* * * \n* * * \n* * * \n\n";
 ". * . \n. . . \n. . . \n\n"; ". . . \n. * . \n. . . \n\n";
 ". . . \n. . . \n. * . \n\n"; ". * * \n. * * \n. . . \n\n";
 ". . . \n. * * \n. * * \n\n"; ". . * \n. . . \n. . . \n\n";
 ". . . \n. . * \n. . . \n\n"; ". . . \n. . . \n. . * \n\n"]

Exercice 10

Écrire la fonction print_str_list : string list -> unit telle que print_str_list l affiche toutes les chaînes de la liste l les unes à la suite des autres. Par exemple,

# print_str_list ["debut " ; "milieu et " ; "fin"];;
debut milieu et fin
- : unit = ()

2.1.4  Enumération des rectangles

Nous souhaitons afficher tous les rectangles d’étoiles possible. Par exemple,

# print_str_list (tous_les_rectangles 2);;
* . 
. . 

* * 
. . 

. * 
. . 

* . 
* . 

* * 
* * 

. * 
. * 

. . 
* . 

. . 
* * 

. . 
. * 

Exercice 11

Définir une fonction concat_produits : ’a * ’b -> (’c * ’d) list -> (’a * ’b * ’c * ’d) telle que concat_produits (a, b) l retourne une liste de quadruplets dont les deux premiers éléments sont a et b et les deux suivants pris dans la liste l. Par exemple,

# concat_produits (2, 4) [(1,2);(3,4);(5,6);(7,8);(9,0)];;
- : (int * int * int * int) list =
[(2, 4, 1, 2); (2, 4, 3, 4); (2, 4, 5, 6); (2, 4, 7, 8); (2, 4, 9, 0)]

Exercice 12

Définir une fonction croise_coordonnees : (’a * ’b) list -> (’c * ’d) list -> (’a * ’b * ’c * ’d) list telle que croise_coordonnees a b retourne tous les 4-uplets qu’il est possible de former avec un élément de a et un élément de b. Par exemple,

# croise_coordonnees  [(1,2);(3,4)] [(5,6);(7,8)];;
- : (int * int * int * int) list =
[(1, 2, 5, 6); (1, 2, 7, 8); (3, 4, 5, 6); (3, 4, 7, 8)]

Exercice 13

Définir une fonction coordonnees_rectangles : int -> (int * int * int * int) list telle que coordonnees_rectangles n retourne la liste des coordonnées de tous les rectangles qu’il est possible de former à l’intérieur d’un carré de côté n. Par exemple,

# coordonnees_rectangles 2;;
- : (int * int * int * int) list =
[(1, 1, 1, 1); (1, 1, 1, 2); (1, 1, 2, 2); (1, 2, 1, 1); (1, 2, 1, 2);
 (1, 2, 2, 2); (2, 2, 1, 1); (2, 2, 1, 2); (2, 2, 2, 2)]

Exercice 14

Définir une fonction tous_les_rectangles : int -> string list telle que tous_les_rectangles n retourne une liste contenant les représentations sous forme de chaînes de caractères de tous les rectangles qu’il est possible de former à l’intérieur d’un carré de côté n. Par exemple,

# tous_les_rectangles 2;;
- : string list =
["* . \n. . \n\n"; "* * \n. . \n\n"; ". * \n. . \n\n"; "* . \n* . \n\n";
 "* * \n* * \n\n"; ". * \n. * \n\n"; ". . \n* . \n\n"; ". . \n* * \n\n";
 ". . \n. * \n\n"]

Exercice 15

Combien peut-on former de rectangles d’étoiles dans un carré de côté n ?


Previous Up Next