c14 #09 gestione stringhe: e sercizio. switch case. variabili logiche

23
Piero Scotto - C14 1 C14 #09 Gestione stringhe: esercizio. Switch case. Variabili logiche

Upload: louise

Post on 22-Jan-2016

46 views

Category:

Documents


0 download

DESCRIPTION

C14 #09 Gestione stringhe: e sercizio. Switch case. Variabili logiche. Finalità del corso. Finalità del corso. Finalità del corso. Finalità del corso. Finalità del corso. Problema. Ricavare dal codice fiscale la data di nascita e il sesso. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: C14  #09   Gestione stringhe:  e sercizio. Switch  case. Variabili logiche

Piero Scotto - C14 1

C14 #09 Gestione stringhe:

esercizio.Switch case.

Variabili logiche

Page 2: C14  #09   Gestione stringhe:  e sercizio. Switch  case. Variabili logiche

Piero Scotto - C14 2

Finalità del corso

Finalità del corso

Finalità del corso

Finalità del corso

Finalità del corso

Page 3: C14  #09   Gestione stringhe:  e sercizio. Switch  case. Variabili logiche

Piero Scotto - C14 3

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.

Page 4: C14  #09   Gestione stringhe:  e sercizio. Switch  case. Variabili logiche

Piero Scotto - C14 4

#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);

Page 5: C14  #09   Gestione stringhe:  e sercizio. Switch  case. Variabili logiche

Piero Scotto - C14 5

… 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 0giorno[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 */

Page 6: C14  #09   Gestione stringhe:  e sercizio. Switch  case. Variabili logiche

Piero Scotto - C14 6

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 */

Page 7: C14  #09   Gestione stringhe:  e sercizio. Switch  case. Variabili logiche

Piero Scotto - C14 7

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 uomoInvece 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. ");

Page 8: C14  #09   Gestione stringhe:  e sercizio. Switch  case. Variabili logiche

Piero Scotto - C14 8

Ora resta da trattare il mese. Nel codice fiscale è una lettera secondo una ben precisa codifica. La troviamo alla posizione 9.

Page 9: C14  #09   Gestione stringhe:  e sercizio. Switch  case. Variabili logiche

Piero Scotto - C14 9

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

Page 10: C14  #09   Gestione stringhe:  e sercizio. Switch  case. Variabili logiche

Piero Scotto - C14 10

Page 11: C14  #09   Gestione stringhe:  e sercizio. Switch  case. Variabili logiche

Piero Scotto - C14 11

Page 12: C14  #09   Gestione stringhe:  e sercizio. Switch  case. Variabili logiche

Piero Scotto - C14 12

Page 13: C14  #09   Gestione stringhe:  e sercizio. Switch  case. Variabili logiche

Piero Scotto - C14 13

Page 14: C14  #09   Gestione stringhe:  e sercizio. Switch  case. Variabili logiche

Piero Scotto - C14 14

Page 15: C14  #09   Gestione stringhe:  e sercizio. Switch  case. Variabili logiche

Piero Scotto - C14 15

Page 16: C14  #09   Gestione stringhe:  e sercizio. Switch  case. Variabili logiche

Piero Scotto - C14 16

Page 17: C14  #09   Gestione stringhe:  e sercizio. Switch  case. Variabili logiche

Piero Scotto - C14 17

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 */ }

Page 18: C14  #09   Gestione stringhe:  e sercizio. Switch  case. Variabili logiche

Piero Scotto - C14 18

#include<stdio.h> #include<string.h>#include <stdlib.h> /* per le funzioni sulle stringhe */#define MAXSTR 16int 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. ");

Page 19: C14  #09   Gestione stringhe:  e sercizio. Switch  case. Variabili logiche

Piero Scotto - C14 19

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;}

Page 20: C14  #09   Gestione stringhe:  e sercizio. Switch  case. Variabili logiche

Piero Scotto - C14 20

Page 21: C14  #09   Gestione stringhe:  e sercizio. Switch  case. Variabili logiche

Piero Scotto - C14 21

Page 22: C14  #09   Gestione stringhe:  e sercizio. Switch  case. Variabili logiche

Piero Scotto - C14 22

Page 23: C14  #09   Gestione stringhe:  e sercizio. Switch  case. Variabili logiche

Piero Scotto - C14 23