Programmation Avancée en C


concat_tab.c

00001 #include <stdio.h>
00002 #include <stdlib.h>
00003 #include <time.h>
00004 
00005 void print_tab(int tab[], size_t n) {
00006     size_t i;
00007     if (n <= 0) return;
00008     for (i=0; i<n; i++) printf("+----");
00009     printf("+\n");
00010     for (i=0; i<n; i++) printf("| %2d ", tab[i]);
00011     printf("|\n");
00012     for (i=0; i<n; i++) printf("+----");
00013     printf("+\n");
00014 }
00015 
00016 void randtab(int tab[], int n, int lim); // Cf. exercice /*@\ref{chap:types}.\ref{func:quicksort}@*/.
00017 
00018 int main()
00019 {
00020     size_t n1=0, n2=0, i;
00021     printf("Entrer la taille du premier tableau: n1 = "); scanf("%lu",&n1);
00022     printf("Entrer la taille du second  tableau: n2 = "); scanf("%lu",&n2);
00023     int *tab1, *tab2;
00024     tab1 = (int *) malloc(n1 * sizeof(int)); 
00025     tab2 = (int *) malloc(n2 * sizeof(int)); 
00026     if ((tab1 == NULL) || (tab2 == NULL)) {
00027         fprintf(stderr, "Erreur lors de l'allocation des tableaux\n");
00028         return 1;
00029     }
00030     srand(time(NULL));
00031     randtab(tab1,n1,99);
00032     randtab(tab2,n2,99);
00033     printf("Affichage du tableau tab1 de taille n1 = %lu:\n",n1);
00034     print_tab(tab1,n1);
00035     printf("Affichage du tableau tab2 de taille n2 = %lu:\n",n2);
00036     print_tab(tab2,n2);
00037     if ( (tab1 = (int *) realloc((void *) tab1, n1 + n2)) == NULL) {
00038         fprintf(stderr, "Erreur lors de la réallocation du premier tableau\n");
00039         return 1;
00040     }    
00041     for (i=n1; i<n1+n2; i++) tab1[i] = tab2[i-n1];// On aurait pu utiliser memcpy.
00042     printf("Affichage du tableau tab1 de taille n1+n2 = %lu:\n",n1+n2);
00043     print_tab(tab1,n1+n2);
00044     free(tab1); 
00045     free(tab2);
00046     return 0;
00047 }
00048 
00049 
00050     /* Remplit tab avec des valeurs aléatoires comprises entre 0 et lim. */
00051 void randtab(int tab[], int n, int lim) {
00052     int i;
00053     for (i=0; i<n; i++) 
00054         tab[i] = (int) (((double) lim+1) * rand() / (RAND_MAX+1.0));
00055 }