Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Tutoraggio informatica, Esercizi di Elementi di Informatica

Tutoraggio informatica programmazione C

Tipologia: Esercizi

2018/2019

Caricato il 09/04/2019

wolfanger
wolfanger 🇮🇹

5 documenti

1 / 3

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
pf3

Anteprima parziale del testo

Scarica Tutoraggio informatica e più Esercizi in PDF di Elementi di Informatica solo su Docsity!

TUTORAGGIO INFORMATICA

Settimana 6

Le strutture dati, argomenti su linea di comando

PROBLEMA 1: gestionale studenti [struttura statica]

Si scriva un programma che gestisca i dati anagrafici degli studenti del Politecnico di Torino. Ogni studente è

caratterizzato da una matricola del tipo SXXXXXX dove X rappresenta un intero tra [0,9], un cognome (max

25 car.), un nome (max 25 car.) e e una data di nascita nel formato gg/mm/aaaa.

Il programma in particolare oltre all’eseguibile riceve da linea di comando un numero intero tra 0 - 2. In base

al valore passato il programma dovrà, dopo aver definito tramite typedef la struttura dati Studente:

a) Se il valore = 0 : caricamento studente

Chiedere tramite un unica scanf(…) i dati di ogni studente e inserirli in fondo al contenuto del vettore di

tipo Studente, contenente appunto gli studenti del Polito. Controllare che venga assegnata ad uno

studente una matricola NON ancora data ad altri.

In caso negativo (la matricola è stata già assegnata) stampare un messaggio di errore e terminare,

altrimenti caricare lo studente e terminare.

b) Se il valore = 1 : ricerca studente

Chiedere tramite scanf(…) una matricola, nel formato sopra descritto, e ricercare all’interno della

struttura dati se esiste uno studente con quella matricola e stampare a video i suoi dati e terminare.

c) Se il valore = 2 : modifica data nascita

Chiedere tramite scanf(…) una matricola, nel formato sopra descritto, e ricercarla all’interno della

struttura dati: se esiste uno studente con quella matricola, chiedere un valore tra 1 e 12 che rappresenta il

nuovo mese di nascita tramite scanf(…). Modificare così la data di nascita e quindi il valore nella

struttura dati solo per quello studente e terminare.

Dato che NON si è ancora visto i file, supporre di partire già con una struttura dati di partenza,

caricando all’interno del main un vettore di tipo Studente staticamente, prima di fare il controllo

sull’argomento a linea di comando. Si usino i seguenti dati come partenza:

#define N 100

Studente s[N] ={

{“S000000“, “Rossi“, “Mario“, “12/12/2000“},

{“S000001“, “Gialli“, “Ermenegildo“, “11/01/2000“},

{“S000002“, “Rossi“, “Pluto“, “22/03/1999“}

Supporre che tutti gli inserimenti siano corretti. Utilizzare inoltre funzioni, se ritenuto necessario, per avere

una miglior leggibilità e riutilizzare parti di codice usate in più punti del programma.

Approfondimento: (dopo aver affrontato i file)

a) Leggere i dati contenuti all’interno di un file con formato per ogni riga:

b) Passare su linea di comando come terzo paramentro il path del file.

c) Ogni aggiunta o modifica di qualche riga nella struttura dati devono aggiornare il contenuto del file

passato come parametro, in modo tale da farlo rimanere permanente nel tempo e riutilizzabile per altre

esecuzioni (tutte le modifiche effettuate da programma vanno scritte sul file letto). Il numero di righe del

file non è noto a priori.

TEMA D’ESAME DEL 16 giugno 2016 (12BHD) TURNO A

PROGRAMMAZIONE [TESTO ORIGINALE]

Si realizzi un programma per calcolare la bolletta telefonica degli utenti di un operatore di telefonia mobile. I dati sono contenuti in una base dati che consiste in un file di testo denominato “clienti.dat” in cui ogni

riga descrive una telefonata nel seguente formato:

<numero_telefonico>

Il numero telefonico è una stringa alfanumerica lunga al massimo 15 caratteri che indica il numero di telefono del chiamante, la data è una stringa nel formato GG/MM/YYYY, l’ora inizio e l’ora fine sono due

stringhe di 8 caratteri nel formato HH:MM:SS e numero amico è un carattere che assume il valore

‘S’ nel caso la chiamata sia verso un numero amico ‘N’ nel caso la chiamata sia verso un

numero non amico. Si assuma che le chiamate inizino e finiscano sempre nello stesso giorno, che il formato del file sia corretto e che il numero di righe del file non sia noto a priori.

La tariffa pagata per una chiamata dipende unicamente dall’ora d’inizio della stessa. La giornata

è divisa in quattro fasce orarie (fascia 1: 00:00:00 - 05:59:59; fascia 2: 06:00:00 - 11:59:59; fascia 3:

12:00:00 - 17:59:59; fascia 4: 18:00:00 - 23:59:59). Il costo di una chiamata che inizia in fascia X sarà calcolato sulla base del costo della fascia X anche se a causa della sua lunghezza la chiamata dovesse

terminare nella fascia X+1. I costi delle fasce sono contenuti in un file denominato tariffe.txt. Il file è

composto da 4 righe (una per ogni fascia). Ogni riga contiene il costo per unità di 30 secondi di chiamata per la rispettiva fascia con la precisione dei centesimi di euro. Nel caso di chiamata di un numero amico il costo viene scontato al 50%. Per chiamate di durata non multipla di 30 secondi si arrotonda la durata per eccesso.

Ad esempio:

Clienti.dat 3472222222 01/01/2011 10:10:12 10:11:10 S 3472222222 02/01/2011 15:10:12 16:11:20 N 3471111111 01/01/2011 11:10:12 11:21:10 N 3472222222 08/01/2011 21:20:12 22:13:09 N 3471111111 01/02/2011 11:15:00 11:15:10 N 3472222222 10/02/2011 21:20:12 22:11:10 N

tariffe.txt

Il programma riceve sulla linea di comando il numero di telefono di un utente e un numero tra 1 e 12 indicante un mese e deve stampare in output: a) la bolletta da pagare nel mese, b) il numero di chiamate nel mese, c) e lo sconto totale ottenuto per le chiamate a numeri amici.

Ad esempio: C:> PROG.EXE 3472222222 1 Bolletta telefonica: 93.18 Euro Numero di chiamate: 3 Sconto ricevuto: 0.51 Euro

Dato che i file non li avete ancora visti, SUPPORRE che: avete già letto i file correttamente e caricato

all’interno di OPPORTUNE strutture dati i loro contenuti. Risolvere tutti gli altri punti.