Programmation Avancée en C


inttab.c

00001 #include <stdlib.h>
00002 #include <time.h>
00003 #include <stdio.h>
00004 
00005 int moyenne(int tab[], size_t n) {
00006     size_t i;
00007     int res = 0;
00008     if (n > 0) {
00009         for (i=0; i<n; i++) res += tab[i];
00010         return ((double) res)/n; // Division réelle!
00011     }
00012     fprintf(stderr, "Erreur : tableau de taille nulle!");
00013     return 0; // Il faut bien renvoyer une valeur.
00014 }
00015 
00016 int min(int tab[], size_t n) {
00017     size_t i;
00018     if (n > 0) {
00019         int min = tab[0];
00020         for (i=1; i<n; i++) 
00021             if (tab[i] < min) min = tab[i];
00022         return min;
00023     }
00024     fprintf(stderr, "Erreur : tableau de taille nulle!");
00025     return 0; // Il faut bien renvoyer une valeur.
00026 }
00027 
00028 int print_positiv_only(int tab[], size_t n) {
00029     size_t i, count = 0;
00030     if (n > 0) {
00031         for (i=0; i<n; i++) {
00032             if (tab[i] > 0) {
00033                 printf("%d ",tab[i]);
00034                 count++;
00035             }
00036         }
00037     } else fprintf(stderr, "Erreur : tableau de taille nulle!");
00038     return count;
00039 }
00040 
00041 
00042 void randtab(int tab[], size_t n, int inf, int sup); 
00043 void print_tab(int tab[], size_t n); // Cf. exercice /*@\ref{chap:types}.\ref{dyn_tab}@*/
00044 
00045 #define TAB_SIZE 20
00046 int main()
00047 {
00048     int tab[TAB_SIZE];
00049     srand(time(NULL));
00050     randtab(tab,TAB_SIZE,-100,100);
00051     print_tab(tab, TAB_SIZE);
00052     printf("Valeurs positives : ");
00053     int p = print_positiv_only(tab, TAB_SIZE);
00054     printf("\nNombre de valeurs positives : %d\n", p);
00055     printf("Valeur minimale : %d\n", min(tab, TAB_SIZE));
00056 
00057     return 0;
00058 }
00059 
00060 void print_tab(int tab[], size_t n) {
00061     size_t i; 
00062     for (i=0; i<n; i++) printf("+----");
00063     if (n > 0) printf("+\n");
00064     for (i=0; i<n; i++) printf("| %2d ", tab[i]);
00065     if (n > 0) printf("|\n");
00066     for (i=0; i<n; i++) printf("+----");
00067     if (n > 0) printf("+\n");
00068 }
00069      /* Remplit tab avec des valeurs aléatoires comprises entre 0 et lim. */
00070 void randtab(int tab[], size_t n, int inf, int sup) {
00071     size_t i;
00072     for (i=0; i<n; i++) 
00073         tab[i] = inf + (int) (((double) (sup+1-inf)) * rand() / (RAND_MAX+1.0));
00074 }