1 (4) 2 (4) 3 (12) 4 (6) 5 (6)

Documenti analoghi
1 (4) 2 (4) 3 (7) 4 (5) 5 (5) 6 (7)

1 (4) 2 (4) 3 (7) 4 (5) 5 (6) 6 (6)

1 (7) 2 (5) 3 (6) 4 (6) 5 (4) 6 (4)

Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Prima prova in itinere COGNOME E NOME. 13 novembre 2006 RIGA COLONNA MATRICOLA

Politecnico di Milano Facoltà di Ingegneria Milano Leonardo A.A. 2007/08

1 (12) 2 (6) 3 (4) 4 (4) 5 (6)

1 (6) 2 (7) 3 (7) 4 (7) 5 (6)

Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Appello del 21 Luglio 2010 COGNOME E NOME RIGA COLONNA MATRICOLA

giapresente( ) leggi( ) char * strstr(char * cs, char * ct) NULL

PROVA SCRITTA DEL CORSO DI CORSO DI LAUREA IN INGEGNERIA BIOMEDICA ED ELETTRICA 9/6/2008

Esercizio 1 - Soluzione

Esercitazione 11. Liste semplici

Stringhe. In C le stringhe ben formate sono in realtà array di caratteri terminati sempre da un carattere speciale, \0, detto anche

Esercizio 1: funzione con valore di ritorno di tipo puntatore

Corso di Informatica 1 Esercitazione n. 4

Fondamenti di Programmazione

Esercizio 1 - cicli. Esercizio 1 cicli - Soluzione

Informatica 1. Prova di recupero 21 Settembre 2001

Funzioni di libreria. KP pp , , , 589, DD pp , , ,

Esercizio 1 Liste: calcolo perimetro di un poligono

ESERCIZIO 1 (5 punti) Convertire in binario il valore, espresso in decimale, Si usi la rappresentazione in virgola fissa.

Esercizio 2 (punti 7) Dato il seguente programma C: #include <stdio.h> int swap(int * nome, int length);

FONDAMENTI DI INFORMATICA

Funzioni con numero variabile di parametri: Funzioni Variadiche in C. Massimo Benerecetti Laboratorio di Algoritmi e Strutture Dati

Programmazione di base

C: panoramica. Violetta Lonati

Politecnico di Milano - Dipartimento di Elettronica, informazione e Bioingegneria Prof. Mauro Negri

Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Prova in itinere del 10 Novembre 2009 COGNOME E NOME RIGA COLONNA MATRICOLA

Breve Manuale di Riferimento sulla Sintassi Linguaggi C++ e FORTRAN

Laboratorio di Algoritmi e Strutture Dati

Ricerca binaria ricorsiva!

Il presente plico contiene 4 esercizi e deve essere debitamente compilato con cognome e nome, numero di matricola.

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)

RIGA COLONNA MATRICOLA

Complementi. - Ridefinizione di tipo - - Costrutto switch - - Programmazione su più file - - Parametri della funzione main - Funzione system -

3 Costrutti while, for e switch

Programmazione I - Laboratorio

Appello di Informatica B

Il linguaggio C Strutture

Introduzione al C. Esercitazione 6. Raffaele Nicolussi. Corso di Fondamenti di Informatica Ingegneria Clinica

Esercitazione 3. Corso di Fondamenti di Informatica

1. Esercizio tipo per prova pratica

Esercizi. La funzione swapint() primo tentativo

CALCOLATRICI, APPUNTI, LIBRI E QUADERNI,

Sommario FONDAMENTI DI INFORMATICA 1. Il tipo FILE. Passaggio da standard I/O. LINGUAGGIO C Gestione dei file

Informatica A a.a. 2010/ /02/2011

Esercizi. Stringhe. Stringhe Ricerca binaria

Esercizio n.1 FONDAMENTI DI INFORMATICA 1. Esercizio n.2. Soluzione. LINGUAGGIO C Funzioni e gestione file: esercitazione

Esercizi C sui tipi definiti dall utente

Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Prova in itinere del 8 Novembre 2010 COGNOME E NOME RIGA COLONNA MATRICOLA

ARRAY E STRINGHE. ESERCIZIO 2 Scrivere un programma che calcola il numero di doppie e di dittonghi (2 vocali vicine) presenti in una stringa.

Linguaggio C. tipi di dati definiti dall utente. Università degli Studi di Brescia. Docente: Massimiliano Giacomin

Esercizio 1: Puntatori impiegati che sono manager

Tipi di dati strutturati e Linguaggio C. Record o strutture Il costruttore struct in C

ELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli

Relativamente agli esempi sopra riportati, al termine dell esecuzione della funzione il file di uscita dovrà contenere quanto riportato a lato.

Istruzioni iterative (o cicliche)

RIGA COLONNA MATRICOLA

Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Prova in itinere del 10 Novembre 2009 COGNOME E NOME RIGA COLONNA MATRICOLA

Lezione 9: Puntatori a funzioni. Tipi enumerativi e orientati ai bit

NOTA: I codici proposti sono solo una delle possibile soluzioni, non sono da intendersi come unica soluzione possibile o corretta

Esercitazione 5. Procedure e Funzioni Il comando condizionale: switch

Primi passi col linguaggio C

main() { int i; int a[10]={1,2,3,4,5,6,7,8,9,10}; /* inizializzazione in fase di definizione */ int b[10];

Esercizio 1 (15 punti)

Il presente plico contiene 3 esercizi e deve essere debitamente compilato con cognome e nome, numero di matricola.

Programmazione I - Laboratorio

il precedente programma dichiara un vettore di interi di dimensione 10 e successivamente inserisce il valore 4 nel secondo elemento del vettore.

2. Spiegare brevemente qual è la funzione del compilatore e la sua importanza per il programmatore.

Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Prova in itinere del 8 Novembre 2010 COGNOME E NOME RIGA COLONNA MATRICOLA

Spazio riservato ai docenti

Esercizio 1: calcolo insieme intersezione

(*lista == NULL (*lista)->info >= elem) accede al campo next di *lista solo se *lista non e' NULL. */ #include <stdio.h> #include <stdlib.

Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Appello del 17 Febbraio 2009 COGNOME E NOME RIGA COLONNA MATRICOLA

Esercitazione 2. Corso di Fondamenti di Informatica

Esercizi di programmazione in linguaggio C English Dictionary

Il linguaggio C. Notate che...

NOTA: I codici proposti sono solo una delle possibile soluzioni, non sono da intendersi come unica soluzione possibile o corretta

Esercizio 1. Esercizio 1 - Soluzione

Fondamenti di Informatica

Politecnico di Torino Sede di Alessandria Corso di informatica Programmazione in c: introduzione. e mail: sito: users.iol.

Struttura dei programmi C

Esercitazione 12. Esercizi di Ricapitolazione

Corso di Informatica Medica Esercitazione 1I ! Alessandro A. Nacci - alessandronacci.com

acquisizione numero elementi del primo insieme e del secondo insieme, finché elprimoinsieme oppure elsecondoinsieme > EL_INS

OTTAVA ESPERIENZA DI LABORATORIO. L elaborazione dei files in C

Esercizi svolti durante le ore di Informatica e Sistemi automatici nelle classi del Liceo Scientifico Tecnologico del Liceo Milli di Teramo

Informatica B

Esercitazione 7. Tutor: Ing. Diego Rughetti. Anno Accademico 2007/2008

PROVA SCRITTA DEL CORSO DI CORSO DI LAUREA IN INGEGNERIA BIOMEDICA ED ELETTRICA 17/2/2009

Introduzione al linguaggio C Puntatori

Non ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

Informatica/ Ing. Meccanica/ Prof. Verdicchio/ 13/09/2013/ Foglio delle domande/versione 1

Il linguaggio C. Puntatori e dintorni

Esercizio 1 (15 punti)

Stringhe e allocazione dinamica della memoria

ESAME SCRITTO DI ELEMENTI DI INFORMATICA E PROGRAMMAZIONE. 9 Settembre 2015

Struct, enum, Puntatori e Array dinamici

Ogni parte non cancellata a penna sarà considerata parte integrante della soluzione.

Transcript:

CORSO DI LAUREA IN INGEGNERIA ELETTRICA, CHIMICA e MATERIALI Informatica B, C Anno Accademico 2016-2017 Proff. Danilo ARDAGNA Prima Prova in Itinere 4.5.2017 Cognome Nome Matricola Firma Durata: 2h Valutazioni 1 (4) 2 (4) 3 (12) 4 (6) 5 (6) Si ricorda che non è possibile consultare libri o appunti, o utilizzare la calcolatrice. - 1 - punti 4 Effettuare il tracing delle variabili del seguente programma: in particolare elencare la sequenza di istruzioni che viene eseguita e, per ciascuna di esse, lo stato delle variabili dopo l esecuzione. Indicare infine l output delle printf del programma. 1

#include <stdio.h> 2 void main() int i, j; 1 i=-1; 2 j=1; 3 printf ("i j\n"); 4 while(i<=20 && j <=10) 5 printf ("%d %d\n",i,j); 6 if (i % 2==0) 7 i=3*i-j; 8 else 9 j++; 10 i=j*2; Output delle chiamate a printf i j -1 1 4 2 10 2-2 - punti 4 Convertire in binario complemento a 2 i numeri A=-25 e B=-123 sul numero minimo di bit necessari per rappresentare entrambi i numeri. Effettuare poi le operazioni di somma A+B e sottrazione B-A indicando se si è verificato o meno overflow. Commentare e motivare tutti i passaggi. Per rappresentare i due numeri sono necessari 8 bit. -A 2cpl2 = 00011001 A 2cpl2 = 11100111 -B 2cpl2 = 01111011 B 2cpl2 = 10000101 A+B = 01101000 (OVERFLOW, da due numeri negativi si ottiene un valore positivo, si ha anche riporto perduto come effetto collaterale) B-A = 10011110 (NO OVERFLOW) - 3 - punti 12 Date le seguenti strutture dati (relative all anagrafe clienti, al consumo elettrico orario nell arco della giornata di utenze residenziali e a un archivio consumi su base mensile) e il frammento di codice del programma principale: #include <stdio.h> #define N_CLIENTI 10000 #define MAX_STR 30 #define MAX_COD_FIS 16 #define MAX_LETTURE_PER_MESE 31*24 typedef struct char cognome[max_str+1]; char nome[max_str+1]; char indirizzo[max_str+1]; char codice_fiscale[max_cod_fis+1]; t_cliente; typedef struct 2

int gg, hh; int consumo_orario; t_lettura; 3 typedef struct int mm, aaaa; t_cliente cliente; t_lettura lettura_mensile[max_letture_per_mese]; t_archivio_consumi_cliente; void main() t_archivio_consumi_cliente mese[n_clienti]; /* Acquisizione dati non richiesta l implementazione */ Dopo l acquisizione dei dati dei clienti e dei valori di consumo nell arco di un mese (la scrittura di questa fase non è richiesta e non va svolta), si completi il codice del programma implementando le seguenti funzionalità: Calcolare i consumi totali di tutti i clienti data una certa data (giorno/mese/anno); Stampare i dati dell utente che in un mese ha effettuato il consumo più alto in un certo mese e anno #include <stdio.h> #include <string.h> #include <time.h> #include <stdlib.h> #define N_CLIENTI 5 #define MAX_STR 30 #define MAX_COD_FIS 16 #define MAX_LETTURE_PER_MESE 31*24 typedef struct char cognome[max_str+1]; char nome[max_str+1]; char indirizzo[max_str+1]; char codice_fiscale[max_cod_fis+1]; t_cliente; typedef struct int gg, hh; int consumo_orario; t_lettura; typedef struct int mm, aaaa; t_cliente cliente; t_lettura lettura_mensile[max_letture_per_mese]; t_archivio_consumi_cliente; int main() t_cliente cliente; int index; int mm, aaaa; t_archivio_consumi_cliente mese[n_clienti]; char cognome[max_str], nome[max_str], indirizzo[max_str], cf[max_str]; 3

4 /* ACQUISIZIONE DATI * * ======================================================= */ srand(time(null)); /* Questa funziona inizialliza un generatore di numeri pseudocasuali */ aaaa = 2017; mm = 3; for (int nomi = 0; nomi < N_CLIENTI; nomi++) index = 0; for (int g = 0; g < 31; g++) for (int h = 0; h< 24; h++) mese[nomi].lettura_mensile[index].gg = g+1; mese[nomi].lettura_mensile[index].hh = h; if ((h >=17 && h<= 23)) mese[nomi].lettura_mensile[index].consumo_orario = rand()%200; /* Numero pseudo-casuale */ else mese[nomi].lettura_mensile[index].consumo_orario = rand()%3; /* Numero pseudocasuale */ index++; /* I codici fiscali (come gli altri dati) sono puramente fittizi */ if (nomi == 0) strcpy(cliente.cognome, "Rossi");strcpy(cliente.nome, "Marco");strcpy(cliente.indirizzo, "via Roma 51, Torino");strcpy(cliente.codice_fiscale, "XYZTRE01A11W111S"); else if (nomi == 1) strcpy(cliente.cognome, "Verdi");strcpy(cliente.nome, "Giuseppe");strcpy(cliente.indirizzo, "via Indipendenza 31, Milano");strcpy(cliente.codice_fiscale, "XYZTRE01B41W111S"); else if (nomi == 2) strcpy(cliente.cognome, "Zucchi");strcpy(cliente.nome, "Maria");strcpy(cliente.indirizzo, "Piazza Felice 11, Pisa");strcpy(cliente.codice_fiscale, "FGZTRE01A13E11S"); else if (nomi == 3) strcpy(cliente.cognome, "Bassetti");strcpy(cliente.nome, "Pina");strcpy(cliente.indirizzo, "via Pascal 23, Trento");strcpy(cliente.codice_fiscale, "QWZTRE01A11W122S"); else if (nomi == 4) strcpy(cliente.cognome, "Bianchi");strcpy(cliente.nome, "Ugo");strcpy(cliente.indirizzo, "via Alloro 45, Pavia");strcpy(cliente.codice_fiscale, "POZTRE01A11W145S"); mese[nomi].cliente = cliente; mese[nomi].aaaa = aaaa; mese[nomi].mm = mm; /* * Lettura dei dati introdotti */ for (int clienti = 0; clienti < N_CLIENTI; clienti++) printf("consumi riferiti al mese %d anno %d\n\n", mese[clienti].mm, mese[clienti].aaaa); printf("%s %s %s cf: %s\n", mese[clienti].cliente.nome, mese[clienti].cliente.cognome, mese[clienti].cliente.indirizzo, mese[clienti].cliente.codice_fiscale ); printf("=========================================================\n"); for (int letture = 0; letture < MAX_LETTURE_PER_MESE; letture++) 4

printf("%d KWh %d/%d/%d ore %d:00\n", mese[clienti].lettura_mensile[letture].consumo_orario, mese[clienti].lettura_mensile[letture].gg, mese[clienti].mm, mese[clienti].aaaa, mese[clienti].lettura_mensile[letture].hh ); printf("----------\n"); 5 /* * Fine della fase di acquisizione dei dati * ======================================================== */ int max = -1; t_cliente persona_con_consumo_massimo; double totale; int gg; gg = 17; /* Primo quesito */ totale = 0; for (int clienti = 0; clienti < N_CLIENTI; clienti++) for (int lettura = 0; lettura < MAX_LETTURE_PER_MESE; lettura++) if (mese[clienti].aaaa == aaaa && mese[clienti].mm == mm && mese[clienti].lettura_mensile[lettura].gg == gg) totale = totale + mese[clienti].lettura_mensile[lettura].consumo_orario; /* 24 letture orarie */ printf("\nprimo quesito:\n================\n\n"); printf("i consumi totali per il giorno %d/%d/%d sono stati: %lf KWh\n", gg, mm, aaaa, totale); printf("\nsecondo quesito:\n================\n\n"); /* Secondo quesito */ for (int clienti = 0; clienti < N_CLIENTI; clienti++) if (mese[clienti].aaaa == aaaa && mese[clienti].mm == mm) totale = 0; for (int lettura = 0; lettura < MAX_LETTURE_PER_MESE; lettura++) totale = totale + mese[clienti].lettura_mensile[lettura].consumo_orario; printf("cliente %s %s: il consumo per il mese %d/%d e' stato %lf kwh\n", mese[clienti].cliente.nome, mese[clienti].cliente.cognome, mese[clienti].mm, mese[clienti].aaaa, totale); if (max < totale) max = totale; persona_con_consumo_massimo = mese[clienti].cliente; printf("\n Il cliente con il consumo più alto e' stato %s %s %s cf %s\n", persona_con_consumo_massimo.nome, persona_con_consumo_massimo.cognome, persona_con_consumo_massimo.indirizzo, persona_con_consumo_massimo.codice_fiscale); return 0; 5

6-4 - punti 6 Specificare le strutture dati necessarie ad un programma per la gestione di un archivio di registrazioni musicali. Ogni registrazione è caratterizzata dalle seguenti informazioni: Autore e titolo dell opera (rispettivamente di al più 50 e 100 caratteri); Il tipo di supporto tra CD, Vinile, Cassetta, file in formato mp3 e flac; Anno di uscita; Titoli dei brani e la loro lunghezza in minuti, secondi; Il genere (musica Classica, Rock, Pop, Indie, ecc.). Le strutture dati devono permettere a un ipotetico programma di gestire l archivio in modo da permettere semplici interrogazioni quali: restituire tutti i gli autori che hanno fatto uscire un lavoro in un certo anno, tutti i lavori per i quali è disponibile sia la versione in vinile che CD, i titoli dei brani e i tempi dati autori e titolo dell opera, tutte le registrazioni per un certo genere musicale. #define MAX_AUTORE_STG 30 #define MAX_TITOLO_STG 40 #define MAX_BRANO_STG 50 #define MAX_N_BRANI 30 typedef struct char titolobrano[max_brano_stg]; int duratamin, duratasec; t_brano; typedef struct char Autore[MAX_AUTORE_STG]; char Titolo[MAX_TITOLO_STG]; enum LP, CD, CT, M3, FL tiposupporto; int annouscita; enum Rk, Cl, Pp, HR, HM, Fl Genere; t_brano Brani[MAX_N_BRANI]; t_articolo; - 5 - punti 6 Scrivere un programma C che acquisisce e memorizza in un array 100 numeri interi. Il programma calcola e visualizza la media e deviazione standard della serie acquisita. Calcolare la deviazione standard come: #include <stdio.h> #include <math.h> #define N_SERIE 100 void main() int i; int v[n_serie]; float media, sigma; 6

float sum; 7 for(i=0; i<n_serie;i++) printf ("Inserirere numero %d\n",i+1); scanf("%d",&v[i]); sum=0; for (i=0; i<n_serie;i++) sum+=v[i]; media=sum/n_serie; sum=0; for (i=0; i<n_serie;i++) sum+=(v[i]-media)*(v[i]-media); sigma=sqrt(sum/n_serie); printf("%f %f",media,sigma); 7