diff --git a/RandEsam.c b/RandEsam.c index bd71d9c..6fd8273 100644 --- a/RandEsam.c +++ b/RandEsam.c @@ -1,105 +1,140 @@ -#define ver "0.6.4" +#define VERSION "1.00" +#define N 42 #include #include #include #include -#define N 100 - -#define fs 1 -#define fp 2 -#define ms 3 -#define mp 4 - -void *normalizza (char esame[N], int gen) { - int i; - for (i=0; i < 50; i++) { - if (esame[i] == ' ') { - switch (gen) { - case fs: - switch (esame[i-1]) { - case 'e': esame[i-1]='a'; break; - case 'i': esame[i-1]='a'; break; - default: break; - } break; - case fp: - switch (esame[i-1]) { - case 'a': esame[i-1]='e'; break; - case 'i': esame[i-1]='e'; break; - default: break; - } break; - case ms: - switch (esame[i-1]) { - case 'i': esame[i-1]='o'; break; - case 'e': esame[i-1]='o'; break; - default: break; - } break; - case mp: - switch (esame[i-1]) { - case 'e': esame[i-1]='i'; break; - default: break; - } break; - } - } - } - return (void *)esame; -} +void *concorda (char esame[N], int genere); int main () { - int i = 1; - int a = 1; - int gen=1; - char *esame=malloc (sizeof (esame) *20); - char r1[N], r2[N], r3[N], r4[N]; - char risposta[1]; - int randum; - srand (time(NULL)); - do { - randum = rand () % 3 + 1; - switch (randum) { - case 1: strcpy (r1, "\n>>> Psico"); break; - case 2: strcpy (r1, "\n>>> Neuro"); break; - case 3: strcpy (r1, "\n>>> "); break; - } - strcpy (esame, r1); - randum = rand () % 7 + 1; - - switch (randum) { - case 1: strcpy (r2, "patologie "); gen=2; break; - case 2: strcpy (r2, "fisiologia "); gen=1; break; - case 3: strcpy (r2, "disturbi "); gen=4; break; - case 4: strcpy (r2, "anatomia "); gen=1; break; - case 5: strcpy (r2, "scienze "); gen=2; break; - case 6: strcpy (r2, "biologia "); gen=1; break; - case 7: strcpy (r2, "sviluppo "); gen=3; break; - } - strcat (esame, r2); - - randum = rand () % 5 + 1; - switch (randum) { - case 1: strcpy(r3, "delle patologie "); break; - case 2: strcpy(r3, "della fisiologia "); break; - case 3: strcpy(r3, "cognitivi "); break; - case 4: strcpy(r3, "in eta' evolutiva"); break; - case 5: strcpy(r3, "affettive "); break; - } - strcat(esame, r3); - normalizza(esame, gen); - printf ("%s\n", esame); - - strcpy(risposta, "x"); - while ( strcmp (risposta, "s") != 0 && strcmp (risposta, "n") != 0) { - printf ("\nVuoi sapere il nome di un altro esame? (s/n) "); - scanf ("%s", risposta); - } - - if (strcmp (risposta, "s") != 0) { - printf ("Allora ciao"); - } - } while (strcmp(risposta, "s") == 0); - free (esame); - printf ("\n\n\n\n\n\n\nv%s",ver); - - return 0; + char parte1[N], parte2[N], parte3[N]; + char *esame = malloc (sizeof (esame) * N); + char risposta[1]; + int gen; + int block = 0; + int randum; // numero random + int mode = 1; + srand (time(NULL)); + do { + while (mode == 1) { + printf("\nModalita'? 1: Semiserio; 2: Normale "); + scanf("%d", &mode); + getchar(); + switch (mode) { + case 1: mode = 3; break; + case 2: mode = 0; break; + default: mode = 1; break; + } + } + // prima parte della frase + randum = rand () % (7 - mode); + switch (randum) { + case 0: strcpy (parte1, "Psico"); break; + case 1: strcpy (parte1, "Neuro"); break; + case 2: strcpy (parte1, "Bio"); break; + case 3: strcpy (parte1, ""); break; + // mode 2 + case 4: strcpy (parte1, "Proto"); break; + case 5: strcpy (parte1, "Super"); break; + case 6: strcpy (parte1, "Pseudo"); break; + } + strcpy (esame, parte1); + // seconda parte della frase + // questa parte definisce il genere e numero della frase (gen) + randum = rand () % (11 - mode); + switch (randum) { + case 0: gen = 1; strcpy (parte2, "fisiologia "); break; + case 1: gen = 1; strcpy (parte2, "anatomia "); break; + case 2: gen = 1; strcpy (parte2, "biologia "); break; + case 3: gen = 1; strcpy (parte2, "medicina "); break; + case 4: gen = 2; strcpy (parte2, "patologie "); break; + case 5: gen = 2; strcpy (parte2, "scienze "); break; + case 6: gen = 3; strcpy (parte2, "sviluppo "); break; + case 7: gen = 4; strcpy (parte2, "disturbi "); break; + // mode 2 + case 8: gen = 1; strcpy (parte2, "fuffa "); break; + case 9: gen = 1; strcpy (parte2, "notorietà "); break; + case 10: gen = 3; strcpy (parte2, "bicarbonato "); break; + } + strcat (esame, parte2); + // terza parte della frase + randum = rand () % 6; + switch (randum) { + case 0: strcpy (parte3, "delle patologie "); block = 1; break; + case 1: strcpy (parte3, "della fisiologia "); break; + case 2: strcpy (parte3, "cognitivi "); break; + case 3: strcpy (parte3, "in eta' evolutiva"); break; + case 4: strcpy (parte3, "affettivi "); break; + case 5: strcpy (parte3, "motorie "); break; + } + strcat (esame, parte3); + // concordanza parole + // block == 1 nel caso di presenza di parole immutabili + if (block != 1) { + concorda (esame, gen); + } + // lettera minuscola iniziale diventa maiuscola + if (esame[0] >= 'a' && esame[0] <= 'z'){ + esame[0] -= 32; + } + // printa risultato + printf ("\n>>> %s\n", esame); + // in caso affermativo, genera altri esami + strcpy (risposta, "x"); + while (strcmp (risposta, "s") != 0 && strcmp (risposta, "n") != 0 && strcmp (risposta, "m") != 0) { + printf ("\nVuoi sapere il nome di un altro esame? [s/n] (Cambia modalità': m) "); + scanf ("%s", risposta); + } + block = 0; // reset valore di block + if (strcmp(risposta, "m") == 0) { + mode = 1; + strcpy(risposta, "s"); + } + } while (strcmp(risposta, "s") == 0); + // termine programma + free (esame); + printf ("\n\nAllora ciao."); + printf ("\n\n\n\n\nRandEsam v%s", VERSION); + return 0; +} + +// concordanza genere e numero +// modifica le desinenze delle parole +void *concorda (char esame[N], int genere) { + int i; + for (i = 5; i < N; i++) { + if (esame[i] == ' ') { + switch (genere) { + case 1: // femminile singolare + switch (esame[i-1]) { + case 'e': esame[i-1] = 'a'; break; + case 'i': esame[i-1] = 'a'; break; + default: break; + } break; + case 2: // femminile plurale + switch (esame[i-1]) { + case 'a': esame[i-1] = 'e'; break; + case 'i': esame[i-1] = 'e'; break; + default: break; + } break; + case 3: // maschile singolare + switch (esame[i-1]) { + case 'i': esame[i-1] = 'o'; break; + case 'e': esame[i-1] = 'o'; break; + default: break; + } break; + case 4: // maschile plurale + switch (esame[i-1]) { + case 'e': + if (esame[i-2] == 'i' && esame[i-3] == 'r') + esame[i-1] = ' '; + break; + default: break; + } break; + } + } + } + return (void *)esame; }