# include <stdio.h>


// Exercice 1

int somme_for(int n, int tab[]){
  int i=0;
  int tmp=0;
  for(i=0;i<n;i++)
    tmp += tab[i];
  return tmp;
}

int somme_while(int n, int tab[]){
  int i=0;
  int tmp=0;
  while(i<n){
    tmp += tab[i];
    i++;}
  return tmp;
}

int somme_do_while(int n, int tab[]){
  int i=0;
  int tmp=0;
  do{
    tmp += tab[i];
    i++;
  }while(i<n);
  return tmp;
}

// Exercice 2

void inverse_nb(int nb){
  if(nb<=0 || nb >= 10000){
    printf("le nombre n'est pas compris entre 0 et 10000");
    return;
    }
  while(nb>0){
    printf("%i",nb%10);
    nb=nb/10;
  }
}

// Exercice 3

void tasse(int n, int tab[]){
  int i=0,j=0;
  for(i=0;i<n;i++){
    tab[j]=tab[i];
    if(tab[i]!=0){
      j++;
    }
  }

  for(;j<n;j++){
    tab[j]=0;
  }
}



void affiche_tab(int n,int tab[]){
  int i;
  for(i=0;i<n;i++){
    printf("%d",tab[i]);
  }
  printf("\n");
}

// Exercice 4

void inverse(int n,int tab[]){
  int i=0;
  int tmp=0;
  for(i=0;i<n/2;i++){
    tmp= tab[i];
    tab[i]=tab[n-1-i];
    tab[n-1-i]=tmp;
  }
}

// Exercice 5

void fusion(int n, int tabA[], int m, int tabB[], int fus[]){
  int a=0;
  int b=0;

/* On remplit d'abord fus[] jusqu'a ce qu'on arrive a la fin de tabA[]
 ou de tabB[] */

  while(a<n && b<m)
    {
      if(tabA[a]<tabB[b]){
	fus[a+b]=tabA[a];
	a++;
      }
      else{
	fus[a+b]=tabB[b];
	b++;
      }
    }

/* On remplit ensuite fus[] par ce qui reste */

  while(a+b<n+m){
    if(a>=n){
      fus[a+b]=tabB[b];
      b++;
    }
    else{
      fus[a+b]=tabA[a];
      a++;
    }
  }
}

// Exercice 6

void matrice_ligne(int i, int j, int matrice[][j],int ligne[]){
  int x,y;
  for(y=0;y<i;y++){
    for(x=0;x<j;x++){
      ligne[x+y*j]=matrice[y][x];
    }
  }
}

// Exercice 7

void insere(int n, int tab[], int val){
  int i=0;
  int tmp=0;
  while(i<(n-1)){
    if(tab[i]<val){
      ;
    }
    else{
      tmp=tab[i];
      tab[i]=val;
      val=tmp;
    }
    i++;
  }
  tab[n-1]=val;
}

// Exercice 8

int factorielle_boucle(int n){
  int i;
  int tmp=1; 
  for(i=1;i<=n;i++)
    tmp=tmp*i;
  return tmp;
}


int factorielle_rec(int n){
  if(n==0){
    return 1;}
  else{ return (n*factorielle_rec(n-1));}
}


int main(int argc, char *argv[]){
  int i,j;
  int tab[5]={0,2,0,4,5};

  int t[3]={1,5,6};
  int y[4]={0,3,5,8};
  int fus[7];

  int mat[2][3]={{1,2,3},{4,5,6}};
  int li[2*3];

  
  int somm=somme_for(5,tab);
  printf("%d \n",somm);
  inverse(5,tab);
  tasse(5,tab);
  affiche_tab(5,tab);
  fusion(3,t,4,y,fus);
  affiche_tab(7,fus);
  matrice_ligne(2,3,mat,li);
  affiche_tab(6,li); 
  insere(6,li,4);
  affiche_tab(6,li);
  printf("%i, %i \n",factorielle_boucle(3), factorielle_rec(3));
while(1){}
}

