#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define LMAX 10000
void DesignDNA ( char dna[], int N );
void Cut ( char dna[], int N, int taglio[]);
int main ()
{
FILE *f;
srand48(time(NULL));
int N, controllo, i;
//Messaggio iniziale
fprintf(stdout,"Questo programma simula l'effetto di un enzima che effettua...\n");
fprintf(stdout,"un taglio nella sequenza di DNA ogni volta che si trova la guanina.\n");
fprintf(stdout,"Inserire il numero di tagli compresi tra 2000 e 5000.\n");
//Controllo inserimento input da tastiera
do
{
controllo=fscanf(stdin, "%d", &N);
if((controllo==0) || N<2000 || N>5000)
{
fscanf(stdin, "%*[^\n]");
fprintf(stdout,"Attenzione, N deve essere un intero e compreso fra 2000 e 5000.\n");
}
}
while((controllo==0) || N<2000 || N>5000);
char dna[LMAX];
int taglio[N];
for(i=0;i<N;i++)
{
taglio[i]=0;
}
DesignDNA( dna, N);
f=fopen("taglio", "w");
for(i=0;i<LMAX;i++)
{
fprintf(stdout, " %c\n", dna[i]);
fprintf(f, "%c\n", dna[i]);
}
Cut( dna, N, taglio);
for(i=0;i<N;i++)
{
fprintf(stdout, "%d\n", taglio[i]);
fprintf(f, "%d\n", taglio[i]);
}
fclose(f);
return 0;
}
void DesignDNA ( char dna[], int N )
{
int n, i;
for(i=0;i<LMAX;i++)
{
n= rand() % 3;
if(n==0)
{
dna[i]='A';
}
if(n==1)
{
dna[i]='C';
}
if(n==2)
{
dna[i]='T';
}
}
for(i=0;i<N;i++)
{
n = rand() % LMAX;
if((n!= 0 && n!= LMAX) && dna[n] != 'G')
{
dna[n] = 'G';
}
}
}
void Cut (char dna[], int N, int taglio[])
{
int i, j=0 ;
for(i=0;i<LMAX;i++)
{
if(dna[i] == 'G')
{
taglio[j]=i;
j++;
}
}
}
QUesto è quello completo. Ha ancora qualche problema ma dovrebbe essere più o meno giusto.