Codice dei programmi nella directory:
///File: DNA.c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#define LSTR 128
int ogni; /// visualizza ogni OGNI valori
void randomizza()
/* Chiamare 1 sola volta, prima di random() */
{
time_t t;
srand((unsigned) time(&t));
/* inizializza generatore pseudocasuale sul tempo di sistema */
}
char base() // Adenina (A), Timina (T), Guanina (G), Citosina (C) sono le unità
//fondamentali che compongono il codice genetico.
{
char codice[] = "ATGC";
return codice[rand() % 4];
}
void genera_parola(char s[]) { /// prova a generare a caso la parola MAIUSCOLA
int i;
int len = strlen(s);
char generata[LSTR] = {0};
long double tentativo = 0;
clock_t inizio = clock(); /// Calcolo tempo
do {
for (i = 0; i < len; i++)
generata[i] = base(); /// valore a caso compreso fra 'A' e 'Z'
tentativo++;
if ((long long int) tentativo % ogni == 0)
printf("Tentativo %30.0Lf, DNA generato=[%s], da generare=[%s]\n", tentativo, generata,s);
} while (strcmp(s, generata) != 0);
printf("DNA generato di %d lettere = [%s] in %30.0Lf tentativi\n", len, generata, tentativo);
clock_t fine = clock(); /// Calcolo tempo
double tempo_trascorso = ((double)(fine - inizio)) / CLOCKS_PER_SEC;
printf("Tempo trascorso: %f secondi\n", tempo_trascorso);
}
int main() {
char s[LSTR];
char invio;
randomizza();
printf("Sequenza di DNA Adenina (A), Timina (T), Guanina (G), Citosina (C) ->");
gets(s);
printf("Visualizzo tentativi ogni ---->");
scanf("%d%c", &ogni, &invio);
genera_parola(s);
printf("Premi invio...");
getchar();
return 0;
}
///(Fine file: DNA.c)
///File: ProbabilitaEtempi-tabulato.c
//Autore: F. Sacco
//Breve descrizione del programma: Stima tempi per far uscire la sequenza di DNA corretta
#include<stdio.h>
#include <stdlib.h>
int main() {
char invio;
long double casi_possibili, operazioni;
int lunghezzaDNA;
int i;
FILE *fd;
printf("Numero di operazioni compiute dal PC in un secondo --------->");
scanf("%Lf%c", &operazioni, &invio);
fd=fopen("TempiDNA.txt","w");
fprintf(fd,"______________________________________________________________________________________________\n");
fprintf(fd,"Stima dei tempi per generare sequenza di DNA con un computer \nche fa %10.0Lf operazioni al secondo:\n",operazioni);
for (lunghezzaDNA = 1; lunghezzaDNA < 45; lunghezzaDNA++) {
casi_possibili = 4;
for (i = 1; i < lunghezzaDNA; i++)
casi_possibili *= 4;
fprintf(fd,"______________________________________________________________________________________________\n");
fprintf(fd,"\nTentativi medi per far uscire la sequenza DNA lunga %d lettere=%20.0Lf", lunghezzaDNA, casi_possibili / 2);
fprintf(fd,"\nNumero di secondi (in media) richiesti=%20Lf", casi_possibili / (operazioni * 2));
fprintf(fd,"\nNumero di giorni (in media) richiesti=%20Lf", casi_possibili / ((long double)(operazioni * 2) * 86400));
fprintf(fd,"\nNumero di anni (in media) richiesti=%20Lf", casi_possibili / ((long double)(operazioni * 2) * 86400 * 365));
fprintf(fd,"\n(Eta' dell'universo in anni=13 miliardi e 800 milioni, in giorni = %20LF", (long double)13800000000 * 356.4);
fprintf(fd,"\n");
}
fclose(fd);
system("TempiDNA.txt"); // Lancia l'applicazione legata ai file .txt (di solito blocco note windows)
return 0;
}
///(Fine file: ProbabilitaEtempi-tabulato.c)
///File: ProbabilitaEtempi.c
//Autore:F. Sacco
//Breve descrizione del programma:Calcolo tempo richiesto stimato per generare sequenza di DNA
#include<stdio.h>
int main() {
char invio;
long double casi_possibili, operazioni;
int lunghezzaDNA;
int i;
printf("Numero di operazioni compiute dal PC in un secondo --------->");
scanf("%Lf%c", &operazioni, &invio);
do {
casi_possibili=4;
printf("Numero di lettere della sequenza DNA [con 4 lettere: ACTG] [0==uscita]->");
scanf("%d%c", &lunghezzaDNA, &invio);
if (lunghezzaDNA <= 0) break;
for (i = 1; i < lunghezzaDNA; i++)
casi_possibili *= 4;
printf("\nTentativi medi per far uscire la sequenza DNA lunga %d lettere=%20.0Lf", lunghezzaDNA, casi_possibili / 2);
printf("\nNumero di secondi (in media) richiesti=%20Lf", casi_possibili / (operazioni * 2));
printf("\nNumero di giorni (in media) richiesti=%20Lf", casi_possibili / ((long double)(operazioni * 2) * 86400));
printf("\nNumero di anni (in media) richiesti=%20Lf", casi_possibili / ((long double)(operazioni * 2) * 86400 * 365));
printf("\n(Eta' dell'universo in anni=13 miliardi e 800 milioni, in giorni = %20LF", (long double)13800000000 * 356.4);
printf("\n\nPremi invio...");
getchar();
} while (lunghezzaDNA > 0);
return 0;
}
///(Fine file: ProbabilitaEtempi.c)