#define VERSION "1.00" #define N 42 #include #include #include #include void *concorda (char esame[N], int genere); int main () { 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; }