Informatica 1. Prova di recupero 15 Febbraio 2005

Documenti analoghi
FONDAMENTI DI INFORMATICA

Esercizio 1 Liste: calcolo perimetro di un poligono

Informatica 1. Prova di recupero 17 Febbraio 2003

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

La sintassi del C APPENDICE H

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

Linguaggio C - sezione dichiarativa: costanti e variabili

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

Corso di Laurea in Matematica. LABORATORIO DI INFORMATICA Compito Totale - 21 Marzo Soluzione degli Esercizi

Puntatori. Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori

Architettura di un calcolatore e linguaggio macchina. Primo modulo Tecniche della programmazione

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

Tipi di dati fondamentali. Tipi di dati fondamentali. Utilità dei tipi di dati nelle dichiarazioni. Il tipo di dati char. Codice ASCII.

Informatica/ Ing. Meccanica/ Edile/ Prof. Verdicchio/ 17/01/2014/ Foglio delle domande / VERSIONE 1

Corso di Fondamenti di Informatica Il sistema dei tipi in C++

LA CODIFICA DELL INFORMAZIONE. Introduzione ai sistemi informatici D. Sciuto, G. Buonanno, L. Mari, McGraw-Hill Cap.2

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

Primi passi col linguaggio C

Architettura degli Elaboratori. Classe 3 Prof.ssa Anselmo. Appello del 18 Febbraio Attenzione:

Esercizi. I File ed il C

Problem solving elementare su dati vettoriali

Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Prova in itinere del 10 Novembre 2009 COGNOME E NOME 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

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

Le Funzioni e la Ricorsione

Linguaggio C: puntatori

Corso di Fondamenti di Informatica Tipi strutturati: Strutture typedef Anno Accademico 2008/2009 Francesco Tortorella

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

Il linguaggio C. Notate che...

1. Si effettui la divisione di 7/5 utilizzando un efficiente algoritmo e illustrando la corrispondente architettura hardware.

Scrittura formattata - printf

Utilizza i tipi di dati comuni a tutto il framework.net Accesso nativo ai tipi.net (C# è nato con.net) Concetti fondamentali:

Fondamenti di Informatica T. Linguaggio C: i puntatori

Programmazione in Java (I modulo)

INFORMATICA 1 L. Mezzalira

Laboratorio di Informatica Ingegneria Clinica Lezione 14-16/11/2011

Rappresentazione binaria delle variabili (int e char)

Lab 10 Gestione file di testo

FONDAMENTI DI INFORMATICA

Esercizio 1: Puntatori impiegati che sono manager

Struttura dei programmi C

Informatica/ Ing. Meccanica/ Prof. Verdicchio/ 14/02/2012 / Foglio delle domande / VERSIONE 1

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

Linguaggio macchina. 3 tipi di istruzioni macchina. Istruzioni per trasferimento dati. Istruzioni logico/aritmetiche

Fondamenti di Informatica

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

Modi di indirizzamento

Definizione di metodi in Java

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

Variabili. Tipi di dati di base. Variabili. Variabili

Tipi di dati scalari (casting e puntatori) Alessandra Giordani Lunedì 10 maggio 2010

Corso di Fondamenti di Informatica. La ricorsione

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari

Laboratorio di Programmazione I Compitino (Vers. C)

Appunti, esempi ed esercizi sui linguaggi C/C++

Esercizi Programmazione I

Compitino di Laboratorio di Informatica CdL in Matematica 13/11/2007 Teoria Compito A

La principale modalità di calcolo è l applicazione di funzioni

Creare una funzione float square(float x). La funzione deve restituire il quadrato del parametro x.

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

Unità Didattica 2 Linguaggio C. Espressioni, Operatori e Strutture linguistiche per il controllo del flusso

Informatica 1 Tipi e dichiarazioni in C++ C++ - Tipi e dichiarazioni 1

Fondamenti di Informatica 1 Ing.Gestionale (A.A ) - docente Sandro Moriggi RECUPERO. cognome nome

Introduzione alla programmazione in C

Appello di Informatica B

Esercizio 1. Esercizio 2

Codifica dei Numeri. Informatica ICA (LC) 12 Novembre 2015 Giacomo Boracchi

Rappresentazione dell Informazione

SULL USO DEI CARATTERI. char x; si legge con ( %c,&x) e si stampa con ( %c,x) ma anche con ( %d,x) DUE ESEMPI

Programmazione 1 A.A. 2015/2016

void concatenastringhe (char st1[], char st2[], char stout[]) { int n=0,s=0; // dichiarazione variabili con inizializzazioni

Strutture Dinamiche. Fondamenti di Informatica

Informatica Teorica. Macchine a registri

Esercitazione di Calcolatori Elettronici Ing. Battista Biggio. Corso di Laurea in Ingegneria Elettronica. Capitolo 5 Linguaggio Assembly

Introduzione al Linguaggio C

Programmazione Funzionale

Somma di numeri binari

Compito di Fondamenti di Informatica

Suggerimenti, note utili ed errori comuni. Fondamenti di informatica T

Laboratorio di programmazione

Strutturare il codice: sottoprogrammi

Input/Output di numeri

Gestione dei file. File di testo e binari

Gestione dei File in C

Fondamenti di Informatica T-1 Modulo 2

Fondamenti di Informatica T-1, 2009/2010 Modulo 2 Prova d Esame 5 di Giovedì 15 Luglio 2010 tempo a disposizione 2h30'

Esempio di Prova Scritta

Appunti del corso di Informatica 1. 6 Introduzione al linguaggio C

3. Terza esercitazione autoguidata: progetto gestione voli

DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA. INFORMATICA B Ingegneria Elettrica. I file in Matlab

Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C

(1) - - (4) R4 = R7 * R7 (4) (2) (3) 5 - (4) rinviata perché in WAW con (3) 6 (3) e (4) ritirabili ma attendono il completamento di (2) (2) (3) (4)

Esiste però anche un ambiente globale: quello dove tutte le funzioni sono definite. Qui si possono anche definire variabili, dette variabili globali

Strutture dati e loro organizzazione. Gabriella Trucco

Variabili. Unità 2. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

Corso di Fondamenti di Informatica (M-Z)

Individuazione di sottoproblemi

Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica

Gestione degli impegni Requisiti generali Si fissi come ipotesi che la sequenza di impegni sia ordinata rispetto al tempo,, e che ogni lavoratore abbi

I vettori in C. Vettori. Definizione di vettori in C. int dato[10] ; int. Numero di elementi. Tipo di dato base. Nome del vettore.

Transcript:

Informatica 1 Prova di recupero 15 Febbraio 2005 Si risolvano i seguenti esercizi. Ai fini della determinazione del voto finale il loro punteggio andrà sommato al punteggio del laboratorio. Il tempo complessivo a disposizione è di 3 ore. Esercizio 1 (2 punti) Si rappresentino in complemento a due i numeri 45 e 64, usando parole di 16 bit. Quindi si esegua la differenza, in binario, 45 64 e si riconverta il risultato in formato decimale. Esercizio 2 (4 punti) Si considerino le seguenti dichiarazioni nel linguaggio C typedef struct { float PrimoCampo; char SecondoCampo; int TerzoCampo; struttura; struttura x, r; int z; float w; Scrivere una sequenza di istruzioni nel linguaggio di von Neumann che sia equivalente alle seguenti istruzioni C: x = r; z = r.terzocampo; r.primocampo = w; Si possono fare le seguenti assunzioni: 1. Una variabile di tipo float occupa due celle di memoria, mentre variabili di tipo int e char ne occupano una. Le celle della macchina di von Neumann corrispondenti alle variabili C suddette sono, rispettivamente: x: Un numero adeguato di celle a partire dalla cella 101 r: Un numero adeguato di celle a partire dalla cella 111 z: Un numero adeguato di celle a partire dalla cella 121 w: Un numero adeguato di celle a partire dalla cella 131 I campi delle variabili di tipo struttura sono memorizzati in celle consecutive. 2. Le istruzioni del linguaggio di von Neumann utilizzabili sono le seguenti LOAD xxx STORE xxx ADD xxx

SUB xxx BR zzz (Salta all istruzione numero zzz) BEQ zzz (Salta all istruzione numero zzz se il contenuto dell accumulatore è 0) BG zzz (Salta all istruzione numero zzz se il contenuto dell accumulatore è > 0) BGE zzz (Salta all istruzione numero zzz se il contenuto dell accumulatore è >= 0) BLE zzz (Salta all istruzione numero zzz se il contenuto dell accumulatore è <= 0) L aggiunta del simbolo = subito dopo il codice operativo di un istruzione indica la modalità di indirizzamento immediata. L aggiunta del simbolo @ subito dopo il codice operativo di un istruzione indica la modalità di indirizzamento indiretta. 3. Le istruzioni del linguaggio di von Neumann che realizzano il codice C suddetto siano numerate a partire dal numero k Esercizio 3 (20 punti) Parte a. (3 punti) Definire dei tipi di dato per contenere informazioni relative a patenti e multe. Una patente è definita da un numero identificativo, dal nome del proprietario, dal suo codice fiscale, da una data di rilascio e una di scadenza, e da un numero di punti ancora disponibili sulla patente. Una multa è definita da un numero identificativo, dal numero identificativo della patente cui viene addebitata, dalla data in cui è stata emessa, dall'ammontare della multa (in euro), dal numero di punti da togliere alla patente a causa della multa. Parte b. (9 punti nella versione semplificata; 12 nella versione completa) Codificare un sottoprogramma che prende in ingresso i descrittori fpat e fmul di 2 file (entrambi supposti aperti sia in lettura che in scrittura), uno contenente una serie di patenti, ed uno contenente una serie di multe, e ritorna il descrittore di un nuovo file. Il sottoprogramma deve realizzare quanto segue: per ogni multa presente nel file fmul, il sottoprogramma modifica i dati della patente corrispondente nel file fpat, togliendo i punti indicati nella multa. Se una patente, dopo avere sottratto i punti di una multa, ha un residuo di punti minore o uguale a zero, il sottoprogramma scrive in un terzo file (il cui descrittore verrà ritornato alla fine) la posizione nel file fpat della suddetta patente. Si assuma che nel file fpat le patenti siano elencate in ordine di data di scadenza, mentre nel file fmul le multe siano ordinate secondo l identificatore della patente a cui si riferiscono. Si supponga pure che tutte le multe del file fmul si riferiscano a patenti effettivamente esistenti nel file fpat. Versione semplificata Si assuma che per ogni patente nel file fmul si trovi al massimo una multa. Parte c. (7 punti) Codificare un sottoprogramma che prende in ingresso il nome di un file contenente patenti, e restituisce una lista contenente le patenti con meno di 10 punti residui, ordinate in ordine crescente di punti residui (cioè mettendo prima quelle con meno punti residui).

Soluzioni Esercizio 1 45: 0000000000101101 64: 0000000001000000-64: 1111111111000000 45-64: 0000000000101101 + 1111111111000000 = 1111111111101101 Che è il complemento di 10011, cioè -19, come dovrebbe essere. Esercizio 2 /* x = r, con x che parte dalla cella 101 ed occupa 4 celle, mentre r parte dalla cella 111 */ LOAD 111 STORE 101 LOAD 112 STORE 102 LOAD 113 STORE 103 LOAD 114 STORE 104 /* z = r.terzocamp, con il terzo campo di r che corrisponde alla cella 114 */ LOAD 114 STORE 121 /* r.primocampo = w, con il primo campo di r che è lungo 2 celle */ LOAD 131 STORE 111 LOAD 132 STORE 112

Esercizio 3 Parte a. typedef struct { unsigned long id; char nome[80]; char CF[16]; TipoData rilascio; TipoData scadenza; int punti; TipoPatente; /* dove TipoData è stata più volte dichiarata a lezione e esercitazione. */ typedef struct { unsigned long id; unsigned long id_pat; TipoData emessa; float somma; int punti; TipoMulta; Parte b. Versione completa. FILE *aggiornapatenti(file *fpat, FILE *fmul){ TipoMulta m_cor, m_prec; unsigned long id_pat; int totpunti; long pos_pat; bool next_pat; /* bool è definito come al solito */ FILE *fsottozero = fopen("invalide.txt", "wb"); rewind(fmul); while(!feof(fmul)){ next_pat = false; totpunti = 0; do { fread(&m_cor, sizeof(tipomulta), 1, fmul); if(totpunti == 0){

/* è la prima multa che leggo relativa alla prossima patente */ totpunti = m_cor.punti; m_prec = m_cor; else if (m_cor.id_pat == m_prec.id_pat){ /* la multa appena letta si riferisce alla stessa patente della multa precedente, * mi, limito a sommare i punti da togliere */ totpunti += m_cor.punti; else { /* devo passare alla prossima multa; come prima cosa, ritorno sulla multa precedente */ fseek(fmul, -(sizeof(tipomulta)), SEEK_CUR); m_cor = m_prec; next_pat = true; while(!feof(fmul) && next_pat == false); /* Vado a cercare la patente da modificare nel file di patenti, quindi faccio i cambiamenti * necessari; */ rewind(fpat); do { fread(&p, sizeof(tipopatente), 1, fpat); while(p.id!= m_cor.id_pat); fseek(fpat, -(sizeof(tipopatente)), SEEK_CUR); p.punti -= totpunti; pos_pat = ftell(fpat); fwrite(&p, sizeof(tipopatente), 1, fpat); /* se la patente ha un numero di punti <= 0, la segnalo nel file apposito; if (p.punti <= 0){ fwrite(&pos_pat, sizeof(long), 1, fsottozero); /* fine del while esterno */ return fsottozero;

Versione semplificata. FILE *aggiornapatenti(file *fpat, FILE *fmul){ TipoMulta m_cor, m_prec; unsigned long id_pat; int totpunti; long pos_pat; bool next_pat; /* bool è definito come al solito */ FILE *fsottozero = fopen("invalide.txt", "wb"); rewind(fmul); while(fread(&m_cor, sizeof(tipomulta), 1, fmul) == 1){ /* Vado a cercare la patente da modificare nel file di patenti, quindi faccio i cambiamenti * necessari; */ rewind(fpat); do { fread(&p, sizeof(tipopatente), 1, fpat); while(p.id!= m_cor.id_pat); fseek(fpat, -(sizeof(tipopatente)), SEEK_CUR); p.punti -= m_cor.punti; pos_pat = ftell(fpat); fwrite(&p, sizeof(tipopatente), 1, fpat); /* se la patente ha un numero di punti <= 0, la segnalo nel file apposito; if (p.punti <= 0){ fwrite(&pos_pat, sizeof(long), 1, fsottozero); /* fine del while esterno */ return fsottozero;

Parte c. typedef struct EL { TipoPatente info; struct EL *next; ElListaPatenti; typedef TipoElPatente *ListaPatenti; ListaPatenti menodi10(char *nome_file){ FILE *f = fopen(nome_file, "rb"); ListaPatenti res = NULL; TipoPatente p; while(fread(&p, sizeof(tipopatente), 1, f) == 1){ if (p.punti < 10) inser_per_punti(&res, p); return res; /* adattata dalla funzione vista ad esercitazione */ bool inser_per_punti(listapatenti *l, TipoPatente p) { ElListaPatenti *pt_new_el; if (*arch == NULL) { pt_new_el = malloc(sizeof(ellistapatenti)); pt_new_el->info = p; pt_new_el->next = NULL; *l = pt_new_el; return true; if((*l)->info.punti > p.punti) { pt_new_el = malloc(sizeof(ellistapatenti)); pt_new_el->info = p; pt_new_el->next = *l; *l = pt_new_el; return true; else { return inser_per_punti(&((*l)->next), p);