1 / 23

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

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.

louise
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Finalità del corso Finalità del corso Finalità del corso Finalità del corso Finalità del corso 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. Piero Scotto - C14

  4. #define MAXSTR 16 /* definisco la lunghezza del codice fiscale */ intmain() { 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

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

  8. Ora resta da trattare il mese. Nel codice fiscale è una lettera secondo una ben precisa codifica. La troviamo alla posizione 9. 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 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. 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 */ } Piero Scotto - C14

  18. #include<stdio.h> #include<string.h> #include <stdlib.h> /* per le funzioni sulle stringhe */ #define MAXSTR 16 intmain() { 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

  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; } Piero Scotto - C14

  20. Piero Scotto - C14

  21. Piero Scotto - C14

  22. Piero Scotto - C14

  23. Piero Scotto - C14

More Related