hg S’enregistrer Bac Tunisie Algorithmique et programmation : BAC INFORMATIQUE En Tunisie forum informatique Tunisie

Bac Tunisie Algorithmique et programmation : BAC INFORMATIQUE En Tunisie  forum informatique Tunisie Index du Forum

hg Bac Tunisie Algorithmique et programmation TIC réseaux php javascript sql access activités programmation c
hg
FAQ FAQ Rechercher Rechercher Membres Membres Groupes Groupes Profil Profil Se connecter pour vérifier ses messages privés Messages Privés Connexion Connexion


 Forum de l'excellence et l'excellence en innovation 
Pour participer à notre Forum, vous devez
 
inscrire sur notre forum a partir d'ici
 
  NB :
Les membres ''zéro messages'' seront supprimés automatiquement après un nombre de jours donné !!!!
             
   
 
  
forum d'aide informatique : internet, réseau, programmation informatique ...
Correction des exercices de recursivité
 
 
Poster un nouveau sujet   Répondre au sujet    Bac Tunisie Algorithmique et programmation : BAC INFORMATIQUE En Tunisie forum informatique Tunisie Index du Forum -> Algorithmique & programmation -> `··._.·`·.¸¸.·´´Cours¯`··._.·`·.,¸¸,.·´¯
hg Sujet précédent :: Sujet suivant   hd
Auteur Message
Mechergui haythem
recent membre
recent membre

Hors ligne

Inscrit le: 01 Déc 2008
Messages: 13
Point(s): 150
Moyenne de points: 0

Posté le: Mar 2 Déc - 10:35 (2008)    Sujet du message: Correction des exercices de recursivité Répondre en citant

PublicitéSupprimer les publicités ?
EXERCICES N°1:
uses wincrt;
var
   c:char;
   ch:string;
 

   function existe(chaine:string;caractere:char):boolean;
   begin
        if chaine='' then existe:=false
        else if chaine[1]=caractere then existe:=true
             else existe:= existe(copy(chaine,2, length(chaine)-1),  c);
   end;
 

   procedure lecture(var ch:string; var c:char);
   begin
        write('taper une chaine: ');
        readln(ch);
 

        write('taper un caractère: ');
        readln(c);
  end;
 

  procedure affiche;
  begin     if existe(ch,c) then write(c, ' exite dans  ',ch)
            else write(c,' n''existe pas dan  ',ch);
 

            writeln;
            writeln;
  end;
 

  BEGIN
       repeat
       lecture(ch,c);
       affiche;
       until false;
  end.
 


EXERCICES N°2:
uses wincrt;
var
   a,b:integer;
   max:integer;
 
 

 

   function maximum (a,b:integer):integer;
   begin
 

        if a>b then maximum:=a
        else maximum:=b;
   end;
 

 
   function ppcm(a,b:integer):integer;
   var
      temp:integer;
   begin
        if a> b then begin
                     temp:=a;
                     a:=b;
                     b:=temp;
                     end;
 

        if b mod a = 0 then ppcm:= b
        else
        ppcm:=ppcm(a,b+max);
   end;
 

   procedure lecture(var a,b:integer);
   begin
        repeat
        write('taper a: ');
        readln(a);
        until a<>0;
 

        repeat
        write('taper b: ');
        readln(b);
        until b<>0;
  end;
 

  procedure affiche;
 

  begin
            max:=maximum(a,b);   {le max doit rester fixe, hors des appels recursifs!!}
            write(' PPCM(': 20   ,a,',',b,')= ');
            writeln(ppcm(a,b));   
            writeln;
            writeln;
  end;
 

  BEGIN
       repeat
       lecture(a,b);
       affiche;
       until false;
  end.
 

 

______________________________________________________________
EXERCICES N°3:
program ex3_pgcd;
uses wincrt;
 

var a,b:integer;
 

function PGCD(a,b:integer):integer;
  begin
    if a=0 then PGCD:=b
    else if b=0 then PGCD:=a
    else PGCD:=PGCD(B,A mod B);                       
  end;
 

begin
  repeat
    write(' a= ');
    readln(a);
  until a>=0;
  repeat
    write(' b= ');
    readln(b);
  until b>a;
  writeln(' PGCD(',a,',',b,')= ',PGCD(a,b));
end.
 

____________________________autre methode:
program Calcul_PGCD;
uses wincrt;
         {calcul récursif d'un pgcd}
 var u, v: integer;
        
 function pgcd (a,b:integer):integer;
 begin
  if a=b then pgcd:=a
     else if b=0 then pgcd:=a
       else if a>b then pgcd:=pgcd(a-b,b)
         else pgcd:=pgcd(b-a,a)
 end;
        
begin
 write('Donner deux entiers : ');
 readln(u,v);
 writeln('pgcd= ',pgcd(u,v));
end.
 

______________________________________________________________
EXERCICES N°4:
program Calcul_puissance_recursive ;
uses wincrt;
 var x:real;
     n:integer;      
        
 function puiss (x:real;n:integer):real;
 begin
     if n=0 then puiss:=1
     else if n>0 then puiss:= x* puiss(x,n-1)
          else puiss:= 1/ puiss(x,-n);
 end;
 
        
begin
 repeat
 writeln('Calcul de x puissance n , Donner x et n : ');
 readln(x,n);
 writeln(x:10:2, '   puissance  ',n,  '   =   '  ,puiss(x,n):0:2);
 

 writeln;
 writeln;
until false
end.
 

 

______________________________________________________________
EXERCICES N°5:
program ex2;
uses wincrt;
 

var ch:string;
    c:char;
 

function nb(ch:string;c:char):integer;
  var l,p:integer;
  begin
    p:=pos(c,ch);
    l:=length(ch);
 

 

    if (l=0)OR(p=0) then nb:=0
    else if p>0 then nb:=nb(copy(ch,p+1,l-p),c)+1;
  end;
 

begin
 

repeat
  write(' CH= ');
  readln(ch);
  if (nb(ch,'A')=0) and  (nb(ch,'E')=0) then writeln('pas de A ni de E! ')
  else
  if nb(ch,'A')>nb(ch,'E') then writeln(' nbre(A)  >  nbre(E)')
  else  if nb(ch,'A')=nb(ch,'E') then writeln(' nbre(A)  =  nbre(E)')
  ELSE writeln(' nbre(E)  >  nbre(A)');
 

  writeln;
  until false
 

end.
program ex2;
uses wincrt;
 

var ch:string;
    c1,c2:char;
procedure lecture(var ch:string; var c1,c2:char);
begin
     write('ch= ');
     readln(ch);
 

     write('c1= ');
     readln(c1);
 

     write('c2=');
     readln(c2);
end;
 

function nb(ch:string;c:char):integer;  {compter le nombre ce c dans ch}
  
  begin
       if ch='' then nb:=0
       else if ch[1]=c then nb:=nb(copy(ch,2, length(ch)-1),c)+1   {incrementer nb et à la sou chaine}
            else nb:=nb(copy(ch,2, length(ch)-1),c);  {passer à la sous chaine SANS incrementer nb!}
      
  end;
 

procedure affiche;
begin
     writeln(c1:15,' : ',  nb(ch,c1) );
     writeln(c2:15,' : ',  nb(ch,c2) );
     if nb(ch,c1)= nb(ch,c2) then writeln('Donc nbre de ',c1,' egal au nbre de ',c2)
     else if nb(ch,c1)> nb(ch,c2) then writeln('Donc nbre de ',c1,' supérieur au nbre de ',c2)
          else  writeln('Donc  nbre de ',c2,' supérieur au nbre de ',c1) ;
end;
 

begin
 

repeat
  lecture(ch,c1,c2);
  affiche;
 

 

  writeln;
until false
 

end.
 

 

______________________________________________________________
EXERCICES N°6:
program ex34;
uses wincrt;
 

const n=10;
type TTab=array[1..n]of integer;
 

var T:TTab;
    i:integer;
    x:integer;
 

procedure recherche(T:TTab;n,v:integer;p:integer;var i:integer);
  begin
    if p>n then exit
    else if abs(t[p]-v)<abs(t[i]-v) then i:=p;
 

    recherche(T,n,v,p+1,i);
  end;
 

procedure genere(var T:TTab;n:integer);
  var i:integer;
  begin
    randomize;
    for i:=1 to n do
      t[i]:=random(100);
  end;
 

procedure affiche(T:TTab;n:integer);
  var i:integer;
  begin
    for i:=1 to n do
      writeln(' T[',i,']= ',t[i]);
  end;
 

begin
  genere(t,n);
  affiche(t,n);
  write(' X= ');
  readln(x);
  i:=1;
  recherche(t,n,x,1,i);
  writeln(' La valeur la plus proche de ',x,' dans T est : ',t[i]);
end.
program ex34;
uses wincrt;
 

const n=10;
type TTab=array[1..n]of integer;
 

var T:TTab;
    x:integer;
    plus_proche:integer;
function  recherche(T:TTab;v,n:integer):integer;
  
  begin
       if n=1 then recherche := plus_proche
       else if abs(t[n]-v)< abs(plus_proche-v) then   begin
                                                      plus_proche:=t[n];
                                                      recherche:=recherche(t,v,n-1);
                                                      end
 

           else                                       recherche:=recherche(t,v,n-1);
                                                       
      
 

                   
      
  end;
 

procedure initialiser(var T:TTab;n:integer);
  var i:integer;
  begin
    randomize;
    for i:=1 to n do
      t[i]:=random(100);
  end;
 

procedure affiche(T:TTab;n:integer);
  var i:integer;
  begin
    for i:=1 to n do
      writeln(' T[',i,']= ',t[i]);
  end;
 

begin
 

  initialiser(t,n);
  plus_proche:=t[1];
  affiche(t,n);
 

  repeat
  write(' X= ');
  readln(x);
  writeln(' La valeur la plus proche de ',x,' dans T est : ',  recherche(t,x,n) );
 until false;
end.
 

_____________________________________________________________
 

EXERCICES N°7:
program ex5_rec;
uses wincrt;
type
 chaine=string[9];
var ch:chaine;
 

function invers(ch:chaine):chaine;
 

  begin
 
    if length(ch)<=1 then invers:=ch
    else invers:=ch[length(ch)]+invers(copy(ch,1,length(ch)-1));
  end;
 

begin
  write(' CH= ');
  readln(ch);
  writeln(' invers(ch)= ',invers(ch));
end.
Program Inverse_un_mot ;
Uses wincrt ;
Type
Chaine=string[20] ;
Var
Mot :chaine ;
 

Function inverse(mot :chaine) : chaine ;
Var
  Longueur :integer ;
  Debut :chaine ;
  Suite : chaine ;
Begin
  Longueur := length(mot) ;
    If(longueur=0) or (longueur=1)
       then
       Inverse := mot
Else
   Begin
     Debut:=copy(mot,1,1) ;
     Suite:=copy(mot,2,longueur-1);
     Inverse:=inverse(suite)+debut ;
    End;
End;
 

Begin
     Writeln('Ecrivez un mot: ');
      Read(mot);
      Writeln('Mot renversé : ',inverse(mot) );
End.
 

 

______________________________________________________________
EXERCICES N°8:
program ex6_rec;
uses wincrt;
 

const max=100;
type TTab=array[1..max]of integer;
 

var n,v:integer;
    t:ttab;
 

function existe(T:TTab;n,v,dbt:integer):boolean;
  begin
    if dbt>n then existe:=false
    else if v=T[dbt] then existe:=true
    else existe:=existe(t,n,v,dbt+1);
  end;
 

procedure lecture(var T:TTab;n:integer);
  var i:integer;
  begin
    for i:=1 to n do
      begin
        write(' T[',i,']= ');
        readln(t[i]);
      end;
  end;
 

begin
  n:=5;
  lecture(t,n);
  write(' V= ');
  readln(v);
  writeln(existe(t,n,v,1));
end.
program ex6_rec;
uses wincrt;
 

const N=10;
type TTab=array[1..N]of integer;
 

var v:integer;
    t:ttab;
 

procedure initialiser(var T:TTab;n:integer);
  var i:integer;
  begin
    randomize;
    for i:=1 to n do
      t[i]:=random(100);
  end;
 

 

function existe(T:TTab; v,n:integer):boolean;
  begin
    if n>= 1 then if v=T[n] then existe:=true
                  else existe:=existe(t,v,n-1)
    else existe:=false;
  end;
 

procedure affiche(T:TTab;n:integer);
  var i:integer;
  begin
    for i:=1 to n do
      write(t[i]:6);
 

    WRITELN;
  end;
 

begin
  initialiser(t,n);
  affiche(T,N);
  repeat
  write(' V= ');
  readln(v);
  if existe(t,v,n) then writeln(v:20,'  existe dans T.')
  else writeln(v:20,'  n''existe pas dans T.');
 

 

  writeln;
  until false;
end.
 

 

______________________________________________________________
EXERCICES N°9:
program ex7_rec;
uses wincrt;
 

type ttab=array[1..6]of byte;
 

var n,v:integer;
    t:ttab;
 

procedure lecture(var T:TTab;var n,v:integer);
  var i:integer;
  begin
    write(' N= ');
    readln(n);
    for i:=1 to n do
       begin
         write(' T[',i,']= ');
         readln(t[i]);
       end;
    write(' V= ');
    readln(v);
  end;
 

procedure tri(var t:ttab;n:integer);
  var i,j,int:integer;
  begin
    for i:=2 to n do
      begin
        int:=T[i];
        j:=i;
        while(T[j-1]>int)AND(j>1)do
          begin
            t[j]:=t[j-1];
            j:=j-1;
          end;
          T[j]:=int;
       end;
  end;
 

function dicho(t:ttab;n,v,dbt,fin:integer):boolean;
  var m:integer;
  begin
    m:=(dbt+fin) div 2;
    if dbt>fin then dicho:=false
    else if t[m]=v then dicho:=true
    else if t[m]>v then dicho:=dicho(t,n,v,dbt,m-1)
    else if t[m]<v then dicho:=dicho(t,n,v,m+1,fin);
  end;
 

begin
  lecture(t,n,v);
  tri(t,n);
  writeln(dicho(t,n,v,1,n));
end.
program ex7_rec;
uses wincrt;
 

type ttab=array[1..6]of byte;
 

var n,v:integer;
    t:ttab;
 

procedure lecture(var T:TTab;var n,v:integer);
  var i:integer;
  begin
    write(' N= ');
    readln(n);
    for i:=1 to n do
       begin
         write(' T[',i,']= ');
         readln(t[i]);
       end;
    write(' V= ');
    readln(v);
  end;
 

procedure tri(var t:ttab;n:integer);
  var i,j,int:integer;
  begin
    for i:=2 to n do
      begin
        int:=T[i];
        j:=i;
        while(T[j-1]>int)AND(j>1)do
          begin
            t[j]:=t[j-1];
            j:=j-1;
          end;
          T[j]:=int;
       end;
  end;
 

function dicho(t:ttab;n,v,dbt,fin:integer):boolean;
  var m:integer;
  begin
    m:=(dbt+fin) div 2;
    if dbt>fin then dicho:=false
    else if t[m]=v then dicho:=true
    else if t[m]>v then dicho:=dicho(t,n,v,dbt,m-1)
    else if t[m]<v then dicho:=dicho(t,n,v,m+1,fin);
  end;
 

begin
  lecture(t,n,v);
  tri(t,n);
  writeln(dicho(t,n,v,1,n));
end.
______________________________________________________________
EXERCICES N°10:
{// programme tri par selection}
 

program tri_par_selection;
uses wincrt;
const nmax=100;
type type_tab=array[1..nmax] of integer;
var i,j,indmin,n:integer;
    t:type_tab;
 

{procedure lecture}
procedure lecture(var t:type_tab;var x:integer);
var i:integer;
begin
repeat
write('entrer la taille de tableau N=');
readln(x);
until n in [1.. nmax];
for i:=1 to x do
begin
write('T[',i,']=');
readln(t[i]);
end;
end;
 

{procedure permutation}
procedure permutation(var x,y:integer);
var temp:integer;
begin
     temp:=x;
     x:=y;
     y:=temp;
end;
 

 

 

 

 {procedure affiche}
procedure affiche(t:type_tab;n:integer);
var i:integer;
begin
        for i:=1 to n do
            write(t[i]:8);
 

        WRITELN;
        WRITELN;
end;
 

 

{procedure tri par selection}
function position_min(t:type_tab;debut, fin:integer):integer;
begin
     if debut<=fin - 1 then if t[debut]<t[debut+1] then begin
                                                    position_min:= debut;
                                                    debut:=debut+1;
                                                    position_min:=position_min(t,debut,fin);
                                                    end
 

                        else                        position_min:=position_min(t,debut+1,fin)
 

     else position_min:= debut;
end;
 

 

procedure tri_selection(var t:type_tab;i,n:integer);
var
   indmin:integer;
 

begin
          
                  if i<= n-1 then begin
                                       indmin:=position_min(t,i,n);
                                       permutation(t[i],t[indmin]);
                                       i:=i+1;
                                       tri_selection (t,i,n)
                                  end;
                             
end;
 

{programmme principal}
begin
lecture(t,n);
clrscr;
 

affiche(t,n);
 

tri_selection(t,1,n);
 

affiche(t,n);
 

end.
 

 

        {  ALGORITHME  ITERATIF
 

        0. def proc   tri_selection(var t:ttab  ;    n:entier)
        1. pour i de 1 à n-1 faire
 

                indmin<------- i
 

                pour j de i+1 à n faire        {cette boucle cherche l''indice du minimum
                    
                      si(t[j]<t[indmin]) alors indmin <----- j
                      fin si
                fin pour
 

 

                permutation(t[i],t[indmin]);
 

            fin pour
 

        2. fin tri_selection
 

         }
 

{// programme tri par selection}
 

program tri_par_selection;
uses wincrt;
const nmax=100;
type type_tab=array[1..nmax] of integer;
var i,j,indmin,n:integer;
    t:type_tab;
 

{procedure lecture}
procedure lecture(var t:type_tab;var x:integer);
var i:integer;
begin
repeat
write('entrer la taille de tableau N=');
readln(x);
until n in [1.. nmax];
for i:=1 to x do
begin
write('T[',i,']=');
readln(t[i]);
end;
end;
 

{procedure permutation}
procedure permutation(var x,y:integer);
var temp:integer;
begin
     temp:=x;
     x:=y;
     y:=temp;
end;
 

 

 

 

 {procedure affiche}
procedure affiche(t:type_tab;n:integer);
var i:integer;
begin
        for i:=1 to n do
            write(t[i]:8);
 

        WRITELN;
        WRITELN;
end;
 

 

{procedure tri par selection}
 

 

procedure tri_selection(var t:type_tab;n:integer);
begin
     for i:=1 to n-1 do
              begin
                 
                   indmin:=i;
                   for j:=i+1 to n do
                       if(t[j]<t[indmin]) then indmin:=j;  {pour mémoriser l''indice du min et non pas min}
                      
 

                   permutation(t[i],t[indmin]);
 

                   
              end;
end;
 

{programmme principal}
begin
lecture(t,n);
clrscr;
 

affiche(t,n);
 

tri_selection(t,n);
 

affiche(t,n);
 

end.
 

 

        {  ALGORITHME  ITERATIF
 

        0. def proc   tri_selection(var t:ttab  ;    n:entier)
        1. pour i de 1 à n-1 faire
 

                indmin<------- i
 

                pour j de i+1 à n faire        {cette boucle cherche l''indice du minimum
                    
                      si(t[j]<t[indmin]) alors indmin <----- j
                      fin si
                fin pour
 

 

                permutation(t[i],t[indmin]);
 

            fin pour
 

        2. fin tri_selection
 

         }
______________________________________________________________
EXERCICES N°11:
 

program prgm_fact_prem;
uses wincrt;
 

procedure fact_prem(n, i : integer);
begin
    if (n > 1) then
        if (n mod i)=0 then begin
            Writeln(i);
            fact_prem(n div i, i);
        end else fact_prem(n, i + 1);
end;
 

var
    n : integer;
begin
REPEAT
    Write('Saisir le nombre à décomposer en facteurs premiers, n > 0 :');
    Readln(n);
  
    fact_prem(n, 2);
  
    writeln;
    writeln;
 

    UNTIL FALSE;
end.
 

 

 


 
Revenir en haut
hmed
recent membre
recent membre

Hors ligne

Inscrit le: 20 Juin 2009
Messages: 19
Masculin
Point(s): 226
Moyenne de points: 0

Posté le: Sam 20 Juin - 18:55 (2009)    Sujet du message: Correction des exercices de recursivité Répondre en citant

Okay Okay Okay Okay Okay Okay merci  Okay Okay Okay Okay Okay Okay  pour le partage

 
Revenir en haut
Contenu Sponsorisé






Posté le: Aujourd’hui à 23:14 (2016)    Sujet du message: Correction des exercices de recursivité

 
Revenir en haut
Montrer les messages depuis:   
bg bd
Poster un nouveau sujet   Répondre au sujet    Bac Tunisie Algorithmique et programmation : BAC INFORMATIQUE En Tunisie forum informatique Tunisie Index du Forum -> Algorithmique & programmation -> `··._.·`·.¸¸.·´´Cours¯`··._.·`·.,¸¸,.·´¯ Toutes les heures sont au format GMT + 1 Heure
 
Page 1 sur 1

 
Sauter vers:  
Index | créer forum gratuit | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation