Test d'ALGO1 pour les INFO1 : le texte du test PDF et ses sources TEX
et une proposition de correction de la question 1 :
Ada
with ada.Text_IO,ada.Integer_Text_IO; use ada.Text_IO,ada.Integer_Text_IO; procedure Test1 is N,S : Integer; function SommeChiffres_rec(N: in Integer) return Integer is Q : Integer; begin Q := N/10; if Q = 0 then return N; else return (N rem 10) + SommeChiffres_rec(Q); end if; end; function SommeChiffres_tq(N: in Integer) return Integer is Q,S : Integer; begin Q := N; S := 0; while Q > 0 loop S := S + (Q rem 10); Q := Q / 10; end loop; return S; end; procedure SommeChiffres_rj(N: in Integer; S: out Integer) is Q : Integer; begin Q := N; S := 0; loop S := S + (Q rem 10); Q := Q / 10; exit when Q = 0; end loop; end; begin Put("N ? "); Get(N); Put(SommeChiffres_rec(N)); Put(SommeChiffres_tq(N)); SommeChiffres_Rj(N,S); Put(S); end;
et de la question 2 :
Ada
with ada.Text_IO,ada.Integer_Text_IO; use ada.Text_IO,ada.Integer_Text_IO; procedure Test2 is N : Integer; function Fibo_Rec(N: in Integer) return Integer is begin if N = 0 then return 0; elsif N = 1 then return 1; else return Fibo_Rec(N-1) + Fibo_Rec(N-2); end if; end; function Fibo_Pour(N: in Integer) return Integer is A,B,C : Integer; begin if N = 0 then return 0; elsif N = 1 then return 1; else A := 0; B := 1; for I in 2..N loop C := A + B; A := B; B := C; end loop; return C; end if; end; function Fibo_tq(N: in Integer) return Integer is A,B,C,I : Integer; begin if N = 0 then return 0; elsif N = 1 then return 1; else A := 0; B := 1; I := 2; while I <= N loop C := A + B; A := B; B := C; I := I+1; end loop; return C; end if; end; begin Put("N ? "); Get(N); Put(Fibo_Rec(N)); Put(Fibo_pour(N)); Put(Fibo_tq(N)); end;