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: