/* File: fraseit.c */ /* Scopo: utilizzo di stringhe, array di puntatori bidimensionali */ /* Il programma genera frasi del tipo ARTICOLO NOME VERBO ARTICOLO NOME utilizzando estrazioni di numeri casuali per gli indici degli array. */ #include <stdio.h> /* per puts() */ #include <string.h> /* per strcpy(), strcat() e strlen() */ #include <ctype.h> /* per toupper() */ #include <stdlib.h> /* per srand() e rand() */ #include <time.h> /* per time(NULL), argomento di srand() */ #define max 80 #define dim 4 void EstraiAggiungi(char frase[max], char *stringhe_dati[][dim], int sesso); /* Estrae la parola random tra le stringhe contenute nella riga indicata dal sesso [0/1] dell'array bidimensionale di puntatori a stringa e la aggiunge alla frase corrente. Infine accoda uno spazio alla stringa di output. */ int main(void) { char *articolo[2][dim] ={{"il","un","qualche","ogni"}, /* maschili */ {"la","una","nessuna","quella"}}; /* femminili */ char *nome[2][dim] ={{"ragazzo","topo","gatto","piatto"}, /* maschili */ {"ragazza","tazza","zebra","mucca"}}; /* femminili */ char *verbo[2][dim] ={{"guardo`","mangio`","prese","spinse"}, /* maschili */ {"guardo`","mangio`","prese","spinse"}};/* femminili */ /* La prima riga e` uguale alla seconda riga per avere la possibilita` di passare lo stesso parametro, array bidimensionale di puntatori a caratteri, alla funzione EstraiAggiungi(...). */ int sex, giri; char *estratta; char frase[max]; srand(time(NULL)); /* inizializza il generatore di numeri pseudocasuali */ for (giri = 0; giri < 20; giri++) { frase[0] = '\0'; /* azzera la frase */ sex = rand() % 2; /* estrae sesso: 0 = masc. 1 = femm. */ EstraiAggiungi(frase, articolo, sex); /* estrae l'articolo e lo aggiunge al contenuto di frase */ frase[0] = toupper(frase[0]); /* prima lettera maiuscola */ EstraiAggiungi(frase, nome, sex); /* estrae il nome e lo aggiunge al contenuo di frase */ EstraiAggiungi(frase, verbo, sex); /* estrae il verbo e lo aggiunge al contenuo di frase */ sex = rand() % 2; /* estrae sesso 0=masc. 1=femm. */ EstraiAggiungi(frase, articolo, sex); /* estrae l'articolo e lo aggiunge al contenuto di frase */ EstraiAggiungi(frase, nome, sex); /* estrae il nome e lo aggiunge al contenuo di frase */ frase[strlen(frase)-1] = '.'; /* mette il punto alla fine di frase: sovrascrive l'ultimo carattere che e` ' ' */ puts(frase); } return 0; } void EstraiAggiungi(char *frase, char *parola[2][dim], int sesso) { strcat(frase, parola[sesso][rand() % dim]); strcat(frase, " "); /* aggiunge uno spazio alla fine di frase */ }