-- Exo 1a x <= y <= z <=> x <= y and y <= z -- Exo 1b max(x, y) <= z <=> (x >= y and x <= z) or (x < y and y <= z) <=> x <= z and y <= z min(x, y) >= z <=> (x <= y and x >= z) or (x > y ans y >= z) <=> x >= z and y >= z -- Exo 1c max(x, y) >= z <=> (x >= y and x >= z) or (x < y and y >= z) <=> x >= z or y >= z min(x, y) <= z <=> (x <= y and x <= z) or (x > y ans y <= z) <=> x <= z or y <= z -- Exo 1d Solution Patrice : --------------------- IF x <= y THEN IF y > z THEN IF x <= z THEN -- x <= z < y y <-> z ELSE -- z < x <= y x <- z <- y <- x -- simultanément, faut adapter avec la var aux END IF ELSE -- x <= y <= z NULL ; ELSE -- x > y IF y <= z THEN -- x ? z IF x <= z THEN -- y < x <= z x <-> y ELSE -- y <= z < x x <- y <- z <- x END IF ELSE -- x > y > z x <-> z END IF END IF Solution Sylvie : -------------------- (Dans X,Y, et Z, on a respectivement A,B,et C au départ) if X > Y then Echanger X et Y end if; ------ maintenant X = min(A,B) - Y=max(A,B) if Y > Z then Echanger Y et Z end if; ------- maintenant Z = max(Y,Z) = max(A,B,C) : il reste à ------- éventuellement ordonner X et Y if X > Y then Echanger X et Y end if; -- Exo 1e (année mod 400 = 0) or (année mod 4 = 0 and année mod 100 <> 0) -- Exo 2a function isTriangle(a, b, c : in Natural) return boolean is begin return a <= b + c and b <= a + c and c <= a + b; end; -- Exo 2b function isRectangledTriangle(a, b, c : in Natural) return boolean is begin return a**2 = b**2 + c**2 or b**2 = a**2 + c**2 or c**2 <= a**2 + b**2; end; -- Exo 2c function min3(a, b, c : in Natural) return boolean is begin if a <= b and a <= c then return a; elsif b <= c then return b; else return c; end if; end; function min3(a, b, c : in Natural) return boolean is begin return Natural'Min(a, Natural'Min(b, c)); end; -- Exo 3a function isPerfectSquare_1(n : in Natural) return boolean is p : natural; begin p := 1; while (p + 1)**2 <= n loop p := p + 1; end loop return p ** 2 = n; end -- Exo 3c function naturalSqrt(n : in Natural) return natural is p : natural; begin p := 1; while (p + 1)**2 <= n loop p := p + 1; end loop return p; end -- Exo 4 function isPrimeNumber_naif(n : Natural) return boolean is nbDiviseur : Natural := 0; begin for i in 1..n loop if n mod i = 0 then nbDiviseur := nbDiviseur + 1; end if; end loop; return n = 2; end; function isPrimeNumber_Optimisation_1(n : Natural) return boolean is nbDiviseur : Natural := 0; begin i := 2; loop exit when i**2 >= n; if n mod i = 0 then return false; end if; i := i + 1; end loop; return true; end; function isPrimeNumber_Optimisation_2(n : Natural) return boolean is nbDiviseur : Natural := 0; i : Natural; begin if n = 2 then return true; end if; if n mod 2 = 0 or n = 1then return false; end if; i := 3; loop exit when i**2 >= n; if n mod i = 0 then return false; end if; i := i + 2; end loop; return true; end; -- Exo 5a somme : Natural := 0; n : Natural := 0; tmp : Natural := 0; begin loop get(tmp); exit when tmp = 0; n := n + 1; somme := somme + tmp; end loop; if n /= 0 then put(Float(somme) / Float(n)); end if; end; -- Exo 5b max : Natural := 0; tmp : Natural; begin loop get(tmp); exit when tmp = 0; if tmp > max then max := tmp; end if end loop; put(max); end; -- Exo 5c max : Natural := 0; occ : Natural := 0; tmp : Natural := 0; begin loop get(tmp); exit when tmp = 0; if tmp > max then max := tmp; occ := 1; elsif tmp = max then occ := occ + 1; end if; end loop; put(max); put(" : "); put(occ); end; -- Exo 6a a, b, c, d : float; begin get(a); get(b); get(c); d := b**2 - 4 * a * c; if d = 0 then put("1 solution : "); put(-b / (2 * a)); elsif d > 0 then put("2 solutions : "); put((-b + sqrt(d)) / (2 * a)); put((-b - sqrt(d)) / (2 * a)); else put("Aucune solution dans R"); end if; end; -- Exo 6b -- pour d = b**2 - 4*a*c > 0 -- soit t = -(b + sign(b) * sqrt(b**2 - 4*a*c)) / 2 -- alors r1 = t / a -- et r2 = c / t (car r1 * r2 = c / a) function sign(x : float) return float is begin if x < 0 then return -1.0; else return 1.0; end if; end; a, b, c, d : float; t : float; begin get(a); get(b); get(c); d := b**2 - 4 * a * c; if d = 0 then put("1 solution : "); put(-b / (2 * a)); elsif d > 0 then put("2 solutions : "); t = -(b + sign(b) * sqrt(b**2 - 4*a*c)) / 2; put(t / a); put(c / t); else put("Aucune solution dans R"); end if; end; -- Exo 7abcd type T_IntArray is array (Integer range <>) of Integer; procedure PascalTriangle(N : Natural) is T : T_IntArray(1..N); Last, tmp : Natural; begin for I in T'Range loop T(I) := 0; end loop; t(1) := 1; for I in 1..N loop Last := 0; for j in 1..i loop Tmp := T(J); T(J) := last + T(J); Last := Tmp; put(t(j), 5); end loop; New_Line; end loop; end; -- Exo 8a b, n : Natural; while n /= 0 loop put(n mod b); n = n / b; end loop;