Nome e cognome

Decidiamo che nome e cognome devono avere al più 30 lettere (non sono ammessi cognomi composti, come De Marchi).
Saranno realizzati come stringhe C, cioè dal tipo parola definito come segue, ricordando che ogni stringa sarà terminata dal carattere nullo '\0' (quello con codice 0).
typedef char PAROLA[31];
L'array avrà 31 elementi, per permettere di accomodare anche parole di esattamente 30 lettere (la 31-esima è '\0').

Le operazioni della struttura dati saranno controllo uguaglianza e diversità e controllo ordinamento lessicografico. Inoltre daremo le procedure per leggere e scrivere.

/*controllo uguaglianza*/
BOOL UgualeParola(PAROLA p1, PAROLA p2)
{
   int i; 
   
   for(i= 0; p1[i] != '\0' && (p1[i] == p2[i]); i++);
   return (p1[i] == p2[i]);
}

/*controllo diversità*/
BOOL DiversoParola(PAROLA p1, PAROLA p2)
{
   int i; 
   
   for(i= 0; p1[i] != '\0' && (p1[i] == p2[i]); i++);
   return (p1[i] != p2[i]);
}

/* altra versione 
BOOL DiversoParola(PAROLA p1, PAROLA p2)
{
   return ! UgualeParola(p1,p2);
}
*/

/*controllo ordine lessicografico
  ritorna vero sse p1 minore strettamente di p2 */
BOOL MinoreLess(PAROLA p1, PAROLA p2)
{
   int i; 
   
   for(i= 0; p1[i] != '\0' && (p1[i] == p2[i]); i++);
   return (p1[i] < p2[i]);
}

/*lettura parola
  la parola letta dal file fin sarà ritornata nella variabile p
  si assume che la parola termina quando si trova un carattere che non è
  una lettera o si sono lette 30 lettere*/
void LeggiParola(FILE * fin, PAROLA p)
{
   int i, c;
   
   for(i= 0; (c = fgetc(fin)) && isalpha(c) && (i < 30); i++)
      p[i] = c;
    p[i] = '\0';
}

/*scrittura parola
  la parola contenuta nella variabile p sarà scritta sul file fout*/
void ScriviParola(FILE * fout, PAROLA p)
{
   int i;
   
   for(i= 0; p[i] != '\0'; i++)
      fputc(p[i],fout);
}