All pastes #913035 Raw Edit

Someone

public text v1 · immutable
·published 2008-02-21 20:08 UTC
rendered paste body
(* Exercice 1 *)

(* ITERATION 1 *)
let eratosthene n =

let p = Array.make n true and premier = [] in

for k = 2 to n do (* on parcourt le tableau pour tester chaque entier pour voir s'il est premier *)
	let i= ref 2 in
	while !i<k do (* on avance dans le tableau jusqu'au prochain nombre premier *)
		while p.(!i) = false do
			incr i;
		done;
		if k mod !i = 0 then (* on regarde si le nombre est divisible par un nombre premier plus petit *)
			p.(k) <- false;
		incr i;
	done;
	if p.(k) = true then
		premier <- premier@[k]; (* on ajoute le nombre au tableau s'il est premier *)
	
done;

premier;

(*
réponse de OCamL:
Characters 470-492:
  		premier <- premier@[k];
    ^^^^^^^^^^^^^^^^^^^^^^
Unbound instance variable premier
*)
eratosthene 100;

(* ITERATION 2 *)

#let horner alpha a = let n=vect_length a and answer:=ref 0 in
 For i:=n downto 0
  answer:= !answer*alpha + a.(i)
 done;
!answer;;











(* Exercice 2 *)
(* N.B. Le programme a été testé sous OCaml *)
# let change a =

let b = Array.copy a and n = Array.length a in

b.(n-1) <- a.(n-2);
b.(n-2) <- a.(n-1);
b;;

val change : 'a array -> 'a array = <fun>
# change [| 1;2;3;4;5;6;7;8;9;10 |];;
  
- : int array = [|1; 2; 3; 4; 5; 6; 7; 8; 10; 9|]

(* Exercice 3 *)

let somme3 a =
let n = Array.length a and min = ref a.(0) in
for i = 0 to n-1 do
	for j = i to n-1 do
		let s = ref a.(i) in
		for k = i+1 to j do
			s:= !s + a.(k);
		done;
		if !s < !min then
		min:= !s
	done;
done;
!min;;

let somme2 a =
let n = Array.length a and min = ref a.(0) in
for i = 0 to n-1 do
	let s = ref 0 in
	for j = i to n-1 do
		s:= !s + a.(j);
		if !s < !min then min := !s;
	done;
done;
!min;;

let rec iterer f n x = if n = 0 then x else iterer f (n-1) (f x);;

let somme2 a =
let n = Array.length a in
fst ( iterer ( fun (mini,i) -> 
								let (sf,minif,jf) = iterer ( fun (s,min,j) -> 
																			let s' = s + a.(j) in
																			if s' < min then
																							(s',s',j+1)
																						else (s',min,j+1))
														n-i+1
														(0,mini,i) in
								(minif,i+1))
			n
			(a.(0),0));;