Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- //Question 1
- int valide(char *fragment)
- {
- if( length(fragment) % 2 == 0 )
- return 0;
- int delimiter = length(fragment)/2;
- int i, j;
- for( i=0, j=delimiter+1 ; i<delimiter ; i++, j++ ) // AGGAGTCTA#TCCTCAGAT
- // i j
- {
- // A - T
- if( (fragment[i] == 'A' && fragment[j] != 'T') || (fragment[i] == 'T' && fragment[j] != 'A') )
- break;
- // C - G
- if( (fragment[i] == 'C' && fragment[j] != 'G') || (fragment[i] == 'G' && fragment[j] != 'C') )
- break;
- }
- return i<delimiter ? 0 : 1;
- }
- //Question 2
- int nombreBase(char *fragment)
- {
- return length(fragment)-1; // -1 -> #
- }
- //Question 3
- void pourcentageMaxBases(char *fragment)
- {
- int cpt_A, cpt_T, cpt_C, cpt_G;
- //count base
- for( int i = 0 ; i<length(fragment) ; i++ )
- {
- for( int j = 0 ; j<4 ; j++)
- {
- if( fragment[i]=='A')
- cpt_A++;
- if( fragment[i]=='T')
- cpt_T++;
- if( fragment[i]=='C')
- cpt_C++;
- if( fragment[i]=='G')
- cpt_G++;
- }
- }
- //find max & print percentage
- max = max(cpt_A, cpt_T, cpt_C, cpt_G);
- sum = cpt_A + cpt_T + cpt_C + cpt_G
- if( cpt_A == max )
- printf("A : %d%% ", cpt_A, cpt_A*100/sum);
- if( cpt_T == max )
- printf("T : %d%% ", cpt_T, cpt_T*100/sum);
- if( cpt_C == max )
- printf("C : %d%% ", cpt_C, cpt_C*100/sum);
- if( cpt_A == max )
- printf("G : %d%% ", cpt_G, cpt_G*100/sum);
- }
- //Question 4
- int contientSousSequence(char *fragment, char *sousseq)
- {
- size_t t_frag = length(fragment);
- size_t t_sousseq = length(sousseq);
- if( t_frag < t_sousseq ) // si sousseq est plus longue du fragment
- return 0;
- int i, j;
- for( i = 0, j = 0 ; i<t_frag && j!=t_sousseq ; i++ )
- {
- if( fragment[i]==sousseq[j] )
- j++;
- else
- j = 0;
- }
- return j == t_sousseq;
- }
- //Question 5
- int insererBase(char base, char *fragment, int n)
- {
- size_t t_frag = length(fragment);
- if( t_frag < n )
- return 0;
- char _fragment[t_frag+1];
- for( int i=0 ; i<n ; i++ )
- _fragment[i]=fragment[i];
- _fragment[n] = base;
- for( int i=n ; i<t_frag ; i++ )
- _fragment[i+1]=fragment[i];
- _fragment[t_frag+1] = '\0';
- return valide(_fragment);
- }
- //Question 6
- int supprimerBase(int n, char *fragment)
- {
- size_t t_frag = length(fragment);
- if( t_frag < n )
- return 0;
- char _fragment[t_frag-1];
- int i;
- for( i=0 ; i<n ; i++ ) // remplissage du nouveau fragment jusqu'à position n
- _fragment[i]=fragment[i];
- for( i=n ; i<t_frag-1 ; i++) // remplissage du nouveau fragment en dépassant n
- _fragment[i]=fragment[i+1];
- _fragment[t_frag-1] = '\0';
- return valide(_fragment);
- }
- void main(void)
- {
- // tests
- char fragment[] = "AGGAGTCTAACTT#TCCTCAGATTTGAA";
- printf("Valide? %d\n", valide(fragment));
- printf("Nombre des bases: %d\n", nombreBase(fragment));
- printf("Pourcentage des Max nbr bases: \n"); pourcentageMaxBases(fragment);
- printf("AGGAGTCTA#TCCTCAGAT contient CCTC? %d\n", contientSousSequence(fragment, "CCTC"));
- printf("Inserting A to %s in %d, valide? %d\n", fragment, 8, insererBase('A', fragment, 8));
- printf("Deleting A of %s from %d, valide? %d\n", "AGGAGTCTAAC#TCCTCAGATG", 8, supprimerBase(8, "AGGAGTCTAAC#TCCTCAGATG"));
- }
Add Comment
Please, Sign In to add comment