/*
  Name: tp9 - exo 2
  Copyright: b1-1
  Author: ARCHAMBEAU
  15/11/06 16:30
  Description: range les chiffres par ordre croissant de 2 tableaux
*/


#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
void fusion(int *t1, int taille1, int *t2, int taille2, int *tab);
void aff_tab(int *t01, int *t02, int *tf00, int nb01, int nb02, int nbff);

int main(void)
{
   int t1[5] = {1, 5, 11, 20, 100},
       t2[7] = {2, 7, 8, 20, 70, 150, 200},
       n1 = 5,
       n2 = 7,
       t[12],
       nf;
       
   nf = (n1 + n2);
   printf("             FUSION DE 2 TABLEAUX\n\n\n");
   
   fusion(t1, n1, t2, n2, t);
   aff_tab(t1, t2, t, n1, n2, nf);

   printf("\nFIN!\n");
   system ("pause");
   return 0;
}

/******************************************************************************/

void fusion(int *t1, int taille1, int *t2, int taille2, int *tab)
{
  int i, j, k;
      i = j = k = 0;
      
      while ((i<taille1)&&(j<taille2))
      {
            if(t1[i]<t2[j])
            {
              tab[k]=t1[i];
              i++;
            }
            else 
            {
              tab[k]=t2[j];
              j++;
            }            
      k++;
      }
      
      if (i==taille1)/*dc tab1 déjà tout recopier => finir de recopier le tab2*/
        for (j ; j<taille2 ; j++)
        {
          tab[k] = t2[j];
          k++;
        }
      else/*dc tableau2 déjà tout recopier => finir de recopier le tableau1*/
        for (i ; i<taille1 ; i++)
        {
          tab[k] = t1[i];
          k++;
        }
}

/******************************************************************************/

void aff_tab(int *t01, int *t02, int *tf00, int nb01, int nb02, int nbff)
{
    int i;
    
    printf("|   Tableau 1   ||   Tableau 2   ||   Tableau F   |\n");
    printf("|---------------||---------------||---------------|\n");
    printf("|indice| valeur ||indice| valeur ||indice| valeur |\n");
    printf("|------|--------||------|--------||------|--------|\n");
    for(i=0 ; i<(nbff) ; i++)
    {
        if(i<nb01)
          printf("|  %2d  |  %4d  |",i,t01[i]);
        else
          printf("|******|********|");
        if(i<nb02)
          printf("|  %2d  |  %4d  |",i,t02[i]);
        else
          printf("|******|********|");
    
        printf("|  %2d  |  %4d  |\n",i,tf00[i]);
    }    
}

