RandEsam/RandEsam.c

141 lines
5.1 KiB
C

#define VERSION "1.00"
#define N 42
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
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;
}