Update RandEsam.c

master
Racoonicorn 2016-12-24 14:24:00 +01:00 committed by GitHub
parent 4f1cfb3e46
commit ebef95318e
1 changed files with 131 additions and 96 deletions

View File

@ -1,105 +1,140 @@
#define ver "0.6.4"
#define VERSION "1.00"
#define N 42
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#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;
}