C14 #09
Gestione stringhe:
esercizio.
Switch case.
Variabili logiche
Piero Scotto - C14
1
Finalità del corso
Finalità del corso
Finalità del corso
Finalità del corso
Finalità del corso
Piero Scotto - C14
2
Problema. Ricavare dal codice fiscale la
data di nascita e il sesso.
Vediamo di procedere passo passo per
la soluzione del problema.
Inizialmente passiamo il codice fiscale
via input. Ci sarebbero da fare diversi
controlli sulla correttezza: limitiamoci a
quello sulla lunghezza.
Piero Scotto - C14
3
#define MAXSTR 16 /* definisco la lunghezza del codice
fiscale */
int main()
{
char codice[MAXSTR]; /* vettore codice fiscale */
short corretto = 0; /* variabile logica 0=FALSO */
do
{ printf("Scrivere il codice fiscale ");
gets(codice); /* funzione con cui prendo il codice */
if (strlen(codice)!=MAXSTR) printf("Codice errato");
else corretto=1;
} while (!corretto);
printf("Il codice è corretto: %s ", codice);
Piero Scotto - C14
4
… gets(codice);
/* da qui inizio a lavorare sul codice */
Definisco nuove variabili: giorno, mese, anno sono ancora
caratteri o stringhe, mentre day, month, year sono i
corrispondenti valori numerici. Sia in codice che in tutte le
altre stringhe si inizia a contare da 0
giorno[0]=codice[9]; giorno[1]=codice[10];
Giorno contiene due caratteri:
char giorno[2];
day=atoi(giorno); /* day e' il numero riferito a giorno: uso
la funzione atoi alphanum to integer */
Piero Scotto - C14
5
Analogamente per l’anno:
anno[0]=codice[6]; anno[1]= codice[7];
year=atoi(anno); /* year e' il numero riferito all'anno
*/
mese=codice[8]; /* mese invece e' una lettera */
Piero Scotto - C14
6
Nel Codice fiscale l’informazione sul sesso è inserita nel
giorno di nascita (posizioni 10-11 nella stringa codice)
ES. NPLLNZ98D23L219S Il 23 è il giorno di nascita e si
tratta di un uomo
Invece NPLSRA98D63L219F il 63 è il giorno di nascita –
dobbiamo togliere 40 – e si tratta di una donna.
if (day > 40) sex=0; else sex=1; /* stabilisco il sesso */
if (sex==0) day=day-40; /* stabilisco il giorno anche per le
femmine */
if (sex==0) printf("Persona di sesso femminile. "); else
printf("Persona di sesso maschile. ");
Piero Scotto - C14
7
Ora resta da trattare il mese. Nel codice fiscale è una
lettera secondo una ben precisa codifica. La troviamo alla
posizione 9.
Piero Scotto - C14
8
Per tradurre la lettera in numero dobbiamo considerare
12 casi. Potremmo utilizzare una serie di if,
eventualmente annidati, ma esiste una istruzione più
semplice molto adatta alla trattazione di numerosi casi
diversi.
L’istruzione si chiama: switch – case
Piero Scotto - C14
9
Piero Scotto - C14
10
Piero Scotto - C14
11
Piero Scotto - C14
12
Piero Scotto - C14
13
Piero Scotto - C14
14
Piero Scotto - C14
15
Piero Scotto - C14
16
switch (mese)
{ case 'A': month=1; break;
case 'B': month=2; break;
case 'C': month=3; break;
case 'D': month=4; break;
case 'E': month=5; break;
case 'H': month=6; break;
case 'L': month=7; break;
case 'M': month=8; break;
case 'P': month=9; break;
case 'R': month=10; break;
case 'S': month=11; break;
case 'T': month=12; break;
default: month=0; break; /* in tutte le altre situazioni */
}
Piero Scotto - C14
17
#include<stdio.h>
#include<string.h>
#include <stdlib.h> /* per le funzioni sulle stringhe */
#define MAXSTR 16
int main()
{
char codice[MAXSTR], giorno[2], mese, anno[2]; short corretto = 0, sex, day, month=0,
year;
do
{ printf("Scrivere il codice fiscale ");
gets(codice);
if (strlen(codice)!=MAXSTR) printf("Codice errato");
else corretto=1;
} while (!corretto);
printf("Il codice è corretto: %s ", codice);
giorno[0]=codice[9]; giorno[1]=codice[10]; /* giorno: 2 caratteri */
day=atoi(giorno); /* day e' il numero riferito a giorno */
mese=codice[8]; /* mese */
anno[0]=codice[6]; anno[1]= codice[7];
year=atoi(anno); /* year e' il numero riferito all'anno */
if (day > 40) sex=0; else sex=1; /* stabilisco il sesso */
if (sex==0) day=day-40; /* stabilisco il giorno anche per le femmine */
if (sex==0) printf("Persona di sesso femminile. "); else printf("Persona di sesso maschile. ");
Piero Scotto - C14
18
switch (mese)
{ case 'A': month=1; break;
case 'B': month=2; break;
case 'C': month=3; break;
case 'D': month=4; break;
case 'E': month=5; break;
case 'H': month=6; break;
case 'L': month=7; break;
case 'M': month=8; break;
case 'P': month=9; break;
case 'R': month=10; break;
case 'S': month=11; break;
case 'T': month=12; break;
default: month=0; break;
}
printf("La data di nascita e' %d-%d-%d ", day,month,year);
getchar(); /* per tenere attiva la console e non farla sparire */
return 0;
}
Piero Scotto - C14
19
Piero Scotto - C14
20
Piero Scotto - C14
21
Piero Scotto - C14
22
Piero Scotto - C14
23
Scarica

Presentazione ppt