Ritorna alla pagina del corso.

Questa pagina contiene gli esercizi proposti in laboratorio e -alcune- delle soluzioni proposte.
Si suggerisce di provare a risolvere gli esercizi e solo in un secondo tempo di confrontare quanto fatto con le soluzioni proposte.

01: /*
02: 9. Redigere un programma C che controlli la validità di una password.
03:     Si supponga che, perché una password sia valida, debbano essere      soddisfatte tutte le seguenti regole:
04: 
05:     1. deve contenere una combinazione di lettere minuscole e di cifre, con almeno un carattere di ciascun insieme;
06: 
07:     2. deve avere una lunghezza compresa tra 5 e 12 caratteri;
08: 
09:     3. non possono esserci due caratteri contigui uguali.
10: 
11:     Il programma deve iterativamente chiedere l'introduzione di una password e stampare VALIDA o NON VALIDA (e la motivazione) ad ogni introduzione.
12: */
13: #include<stdio.h>
14: #include<stdlib.h>
15: 
16: int main(int argc, char **argv){
17:   
18:   char c, prec = 0;
19:   int hasdigit = 0, hasletter = 0, hasother = 0, hascont=0, len  = 0;
20: 
21:   printf("Inserisci una password: ");
22:   do
23:   {
24:     scanf("%c", &c);
25: 
26:     // incremento lunghezza
27:     ++len;
28: 
29:     // controllo se e' una cifra
30:     if(c >= '0' && c <= '9')
31:       hasdigit = 1;
32:     else if( (c >= 'a' && c <= 'z') )
33:       hasletter = 1;
34:     else if(c != '\n') // lo \n entra comunque nel ciclo e lo devo ignorare
35:       hasother = 1;
36: 
37:     // controllo cartteri contigui uguali
38:     if( c == prec )
39:       hascont = 1;
40: 
41:     // mi salvo il carattere letto per sfruttarlo alla iterazione successiva
42:     prec = c;
43:   }
44:   while(c != '\n');
45: 
46:   //  decremento lunghezza password per non tener conto dell'invio
47:   --len;
48: 
49:   // controllo condizioni e stampa motivazione
50:   if(hasletter && hasdigit && !hascont && !hasother && (len >=5 && len <= 12))
51:     printf("VALIDA\n");
52:   else
53:   {
54:     printf("NON VALIDA\n");
55:     if(!hasletter)
56:       printf("non contiene lettere\n");
57:     if(!hasdigit)
58:       printf("non contiene cifre\n");
59:     // TODO completare...
60: 
61:   }
62: 
63:   return 0;
64: }
65: 
66: