Prog Caml : Ecrire la fonction concatene_tab

On a vu qu'il y avait un opérateur permettant de mettre bout-à-bout deux chaînes de caractères. Il y a l'équivalent pour les tableaux : la fonction "Array.append t1 t2" permet de concaténer deux tableaux de même type (pour que cela ait un sens). Elle retourne un nouveau tableau, dont la longueur est la somme des longueurs de t1 et de t2.

[|        t 1         |] [|             t 2             |]
----------------------------------------------------------
[|             r  e  s  u  l  t  a  t                   |]

Par exemple si t1 = [| 3; 5 |] et t2 = [| 4; 9; 0 |], alors Array.append t1 t2 retournera le tableau [| 3; 5; 4; 9; 0 |].

C'est un très bon exercice que d'essayer de recoder cette fonction soit même. Ecrivez donc une fonction concatene_tab qui fait la même chose que Array.append. Pouvez-vous en deviner le type de cette fonction ?

Indication pour le code : pour créer le tableau que l'on retourne, il faut en donner une valeur d'initialisation. Pour cette exercice, on peut essayer de faire un code qui traite tous les cas ou supposé que la valeur est int.

Limites de temps et de mémoire (Python)

  • Temps : 4 s sur une machine à 1 GHz.
  • Mémoire : 1 000 ko.

Commentaires

 
let read_int() = Scanf.scanf " %d" (fun x -> x);;

let read_array() = 
  let length = read_int() in
  let res = Array.make length 0 in
  for i = 0 to (pred length) do   
    res.(i) <- read_int() ;
  done;
res;;

let print_array t =
  print_int (Array.length t) ;
  print_newline () ;
  for i = 0 to pred (Array.length t) do
    print_int t.(i) ;
    print_string " "
  done
;;

let concatene_tab t1 t2 =
(*à compléter*)
in

let t = read_array () in
print_array ( concatene_tab t (read_array ()))


Source : https://www.france-ioi.org/ Créé par : Arthur Charguéraud.