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)