home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 17 / CD_ASCQ_17_101194.iso / dos / prg / alb_c10 / chap_14 / ch14_06.c0 < prev    next >
Encoding:
Text File  |  1994-09-08  |  1.6 KB  |  66 lines

  1. /*********************************************************************
  2. *  CH14_06.C          Allocation de mémoire à un tableau avec calloc() *
  3. *            test préalable de la mémoire avec coreleft() *
  4. *         Ce programme ne fonctionne pas en C ANSI ni sous "Windows" *
  5. *********************************************************************/
  6.  
  7. #include<stdio.h>
  8. #include<alloc.h>           /* pour calloc(), coreleft() et free()  */
  9.  
  10. typedef enum{ Echec= -1, Succes, Vrai= 0, Faux} logique;
  11.  
  12. void LitU( unsigned*);
  13. void EcritTab( double*, unsigned);
  14.  
  15. main( void)
  16. {
  17.     double *tab;                  /* Nom du tableau           */
  18.     unsigned n;               /* n: Dimension du tableau  */
  19.     unsigned long libre;
  20.     logique test;
  21.  
  22.     do
  23.         {
  24.        printf("\n Entrez la dimension du tableau: ");
  25.        LitU( &n);
  26.  
  27.        test= Succes;
  28.        libre= coreleft();
  29.        if( libre< n* sizeof( double))
  30.         {
  31.            printf("\n Vous ne disposez que de %lu octets\n"
  32.               " la dimension max de votre tableau est: %lu",
  33.                           libre, libre/ sizeof( double));
  34.            test= Echec;
  35.         }
  36.     }
  37.     while( test!= Succes);
  38.  
  39.     tab= ( double*) calloc( n, sizeof( double) );
  40.     EcritTab( tab, n);
  41.     free( tab); 
  42. }
  43.  
  44. void EcritTab( double *tableau, unsigned dim_tab)
  45. {
  46.     unsigned i;
  47.     double *ptr;
  48.     ptr= tableau; 
  49.     printf("\n (tableau)= ");
  50.     for( i= 0; i< dim_tab; i++)
  51.       printf("\n\t   [%u]= %lf", i, *( ptr++));
  52. }
  53.  
  54. void LitU( unsigned* entier_u)
  55. {
  56.     double dble;
  57.     do
  58.     {
  59.        while( scanf("%lf", &dble)!= 1)
  60.         while( getchar() != '\n');
  61.        while( getchar() != '\n');
  62.     }
  63.     while( dble< 0.0 || dble> 65535.0);
  64.     *entier_u= ( unsigned) dble;
  65. }
  66.