clevernessisamyth

Info 2eme annee 2010 INPT

Aug 18th, 2020 (edited)
779
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.15 KB | None | 0 0
  1. #include <stdio.h>
  2. //Question 1
  3. int valide(char *fragment)
  4. {
  5.     if( length(fragment) % 2 == 0 )
  6.         return 0;
  7.  
  8.     int delimiter = length(fragment)/2;
  9.     int i, j;
  10.  
  11.     for( i=0, j=delimiter+1 ; i<delimiter ; i++, j++ ) // AGGAGTCTA#TCCTCAGAT
  12.                                                        // i         j
  13.     {
  14.         // A - T
  15.         if( (fragment[i] == 'A' && fragment[j] != 'T') || (fragment[i] == 'T' && fragment[j] != 'A') )
  16.             break;
  17.         // C - G
  18.         if( (fragment[i] == 'C' && fragment[j] != 'G') || (fragment[i] == 'G' && fragment[j] != 'C') )
  19.             break;
  20.     }
  21.  
  22.     return i<delimiter ? 0 : 1;
  23. }
  24.  
  25. //Question 2
  26. int nombreBase(char *fragment)
  27. {
  28.     return length(fragment)-1; // -1 -> #
  29. }
  30.  
  31. //Question 3
  32. void pourcentageMaxBases(char *fragment)
  33. {
  34.     int cpt_A, cpt_T, cpt_C, cpt_G;
  35.  
  36.     //count base
  37.     for( int i = 0 ; i<length(fragment) ; i++ )
  38.     {
  39.         for( int j = 0 ; j<4 ; j++)
  40.         {
  41.             if( fragment[i]=='A')
  42.                 cpt_A++;
  43.             if( fragment[i]=='T')
  44.                 cpt_T++;
  45.             if( fragment[i]=='C')
  46.                 cpt_C++;
  47.             if( fragment[i]=='G')
  48.                 cpt_G++;
  49.         }
  50.     }
  51.  
  52.     //find max & print percentage
  53.     max = max(cpt_A, cpt_T, cpt_C, cpt_G);
  54.     sum = cpt_A + cpt_T + cpt_C + cpt_G
  55.     if( cpt_A == max )
  56.         printf("A : %d%% ", cpt_A, cpt_A*100/sum);
  57.     if( cpt_T == max )
  58.         printf("T : %d%% ", cpt_T, cpt_T*100/sum);
  59.     if( cpt_C == max )
  60.         printf("C : %d%% ", cpt_C, cpt_C*100/sum);
  61.     if( cpt_A == max )
  62.         printf("G : %d%% ", cpt_G, cpt_G*100/sum);
  63. }
  64.  
  65. //Question 4
  66. int contientSousSequence(char *fragment, char *sousseq)
  67. {
  68.     size_t t_frag = length(fragment);
  69.     size_t t_sousseq = length(sousseq);
  70.  
  71.     if( t_frag < t_sousseq ) // si sousseq est plus longue du fragment
  72.         return 0;
  73.  
  74.     int i, j;
  75.     for( i = 0, j = 0 ; i<t_frag && j!=t_sousseq ; i++ )
  76.     {
  77.         if( fragment[i]==sousseq[j] )
  78.             j++;
  79.         else
  80.             j = 0;
  81.     }
  82.     return j == t_sousseq;
  83. }
  84.  
  85. //Question 5
  86. int insererBase(char base, char *fragment, int n)
  87. {
  88.     size_t t_frag = length(fragment);
  89.  
  90.     if( t_frag < n )
  91.         return 0;
  92.  
  93.     char _fragment[t_frag+1];
  94.     for( int i=0 ; i<n ; i++ )
  95.         _fragment[i]=fragment[i];
  96.  
  97.     _fragment[n] = base;
  98.  
  99.     for( int i=n ; i<t_frag ; i++ )
  100.         _fragment[i+1]=fragment[i];
  101.  
  102.     _fragment[t_frag+1] = '\0';
  103.  
  104.     return valide(_fragment);
  105. }
  106.  
  107. //Question 6
  108. int supprimerBase(int n, char *fragment)
  109. {
  110.     size_t t_frag = length(fragment);
  111.  
  112.     if( t_frag < n )
  113.         return 0;
  114.  
  115.     char _fragment[t_frag-1];
  116.     int i;
  117.     for( i=0 ; i<n ; i++ ) // remplissage du nouveau fragment jusqu'à position n
  118.         _fragment[i]=fragment[i];
  119.  
  120.     for( i=n ; i<t_frag-1 ; i++) // remplissage du nouveau fragment en dépassant n
  121.         _fragment[i]=fragment[i+1];
  122.  
  123.     _fragment[t_frag-1] = '\0';
  124.  
  125.     return valide(_fragment);
  126. }
  127.  
  128. void main(void)
  129. {
  130.     // tests
  131.     char fragment[] = "AGGAGTCTAACTT#TCCTCAGATTTGAA";
  132.     printf("Valide? %d\n", valide(fragment));
  133.     printf("Nombre des bases: %d\n", nombreBase(fragment));
  134.     printf("Pourcentage des Max nbr bases: \n"); pourcentageMaxBases(fragment);
  135.     printf("AGGAGTCTA#TCCTCAGAT contient CCTC? %d\n", contientSousSequence(fragment, "CCTC"));
  136.     printf("Inserting A to %s in %d, valide? %d\n", fragment, 8, insererBase('A', fragment, 8));
  137.     printf("Deleting A of %s from %d, valide? %d\n", "AGGAGTCTAAC#TCCTCAGATG", 8, supprimerBase(8, "AGGAGTCTAAC#TCCTCAGATG"));
  138. }
  139.  
Add Comment
Please, Sign In to add comment