Advertisement
Le_BuG63

Untitled

Jul 4th, 2014
232
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.60 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <ctype.h>
  4. #include <string.h>
  5.  
  6. enum    suitType_e
  7. {
  8.     UNKNOW,
  9.     CONSTANT,
  10.     GEOMETRIC,
  11.     ARITHMETIC
  12. };
  13.  
  14. typedef enum suitType_e suitType_t;
  15.  
  16. int         get_numbers(char *pStrOperation, int *iTab)
  17. {
  18.     unsigned int    k = 0;
  19.     char            *pch = NULL;
  20.  
  21.     pch = strtok(pStrOperation, ", -+");
  22.  
  23.     while(pch != NULL)
  24.     {
  25.         iTab[k++] = atoi(pch);
  26.  
  27.         pch = strtok(NULL, ", -+");
  28.     }
  29.  
  30.     return k;
  31. }
  32.  
  33. suitType_t  get_suit_type(int *iTab, size_t nNumbersInTab)
  34. {
  35.     int err = 0;
  36.     int index;
  37.     int tmp;
  38.  
  39.  
  40.     tmp = iTab[0];
  41.     for(index = 1; index < nNumbersInTab && err != 1; ++index) // On va vérifier si les nombres sont "CONSTANT"
  42.     {
  43.         if(tmp != iTab[index])
  44.             err = 1;
  45.     }
  46.  
  47.     if(!err) return CONSTANT; err = 0;
  48.  
  49.     tmp = iTab[1] - iTab[0];
  50.     for(index = 2; index < nNumbersInTab && err != 1; ++index) // On va vérifier si les nombres sont "ARITHMETIC"
  51.     {
  52.         if(iTab[index] - iTab[index - 1] != tmp)
  53.             err = 1;
  54.     }
  55.  
  56.     if(!err) return ARITHMETIC; err = 0;
  57.  
  58.     tmp = iTab[1] / iTab[0];
  59.     for(index = 2; index < nNumbersInTab && err != 1; ++index) // On va vérifier si les nombres sont "GEOMETRIC"
  60.     {
  61.         if(iTab[index] / iTab[index - 1] != tmp)
  62.             err = 1;
  63.     }
  64.  
  65.     if(!err) return GEOMETRIC; err = 0;
  66.  
  67.     return UNKNOW;
  68. }
  69.  
  70. void    print_suit(int *iTab, size_t sizeTab)
  71. {
  72.     for(size_t i = 0; i < 10; ++i)
  73.         printf("%d|", 10);
  74. }
  75.  
  76. void        continue_suit(suitType_t suitType, int *iTab, size_t sizeTab)
  77. {
  78.     int factor;
  79.     int index;
  80.     int value;
  81.  
  82.     switch(suitType)
  83.     {
  84.     case ARITHMETIC:
  85.         factor  = iTab[1] - iTab[0];
  86.         value   = iTab[0];
  87.  
  88.         for(index = 1; index < sizeTab; ++index)
  89.         {
  90.             value += factor;
  91.             iTab[index] = value;
  92.  
  93.             printf("%d|", value);
  94.         }
  95.  
  96.         //print_suit(iTab, sizeTab);
  97.  
  98.         break;
  99.     case GEOMETRIC:
  100.         factor  = iTab[1] / iTab[0];
  101.         value   = iTab[0];
  102.  
  103.         for(index = 1; index < sizeTab; ++index)
  104.         {
  105.             value *= factor;
  106.             iTab[index] = value;
  107.         }
  108.  
  109.         //print_suit(iTab, sizeTab);
  110.  
  111.         break;
  112.  
  113.     case UNKNOW:
  114.         printf("Il n'y a aucune suite logique trouvee.\n");
  115.         break;
  116.  
  117.     case CONSTANT:
  118.         break;
  119.  
  120.     default:        // Ça ne devrait pas arriver, mais on sait jamais
  121.         break;
  122.     }
  123. }
  124.  
  125. int main(int argc, char *argv[])
  126. {
  127.     size_t      sizeTab = atoi(argv[1]);
  128.     int         *iTab = malloc(sizeTab * sizeof(*iTab));
  129.     int         nNumbers;
  130.     suitType_t  suitType;
  131.  
  132.     if(iTab == NULL)
  133.     {
  134.         fprintf(stderr, "Erreur: memoire allouee indisponible");
  135.         return 1;
  136.     }
  137.  
  138.     nNumbers = get_numbers(argv[2], iTab);
  139.  
  140.     memset(iTab, iTab[0], sizeTab);
  141.  
  142.     suitType = get_suit_type(iTab, nNumbers);
  143.  
  144.     continue_suit(suitType, iTab, sizeTab);
  145.  
  146.     free(iTab);
  147.  
  148.     return 0;
  149. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement