$ PROVA INTERMEDIA 20 Aprile 2017

Documenti analoghi
ADT LISTA: altre operazioni non primitive ADT LISTA COSTRUZIONE ADT LISTA COSTRUZIONE ADT LISTA (2)

PROVA SCRITTA 23 MARZO 2010

Esercizio 1. Liste di interi

IL CONCETTO DI LISTA!

Fondamenti di Informatica T-1, 2013/2014 Modulo 2. Prova d Esame 1A di Giovedì 9 Gennaio 2014 tempo a disposizione 2h

Fondamenti di Informatica T-1, 2016/2017 Modulo 2. Prova d Esame 2A di Giovedì 26 Gennaio 2017 tempo a disposizione 2h

Fondamenti di Informatica T-1, 2015/2016 Modulo 2. Prova d Esame 1A di Giovedì 14 Gennaio 2016 tempo a disposizione 2h

Fondamenti di Informatica T-1, 2009/2010 Modulo 2 Prova d Esame 1A di Martedì 22 Dicembre 2009 tempo a disposizione 2h30'

Fondamenti di Informatica T-1, 2009/2010 Modulo 2 Prova d Esame 1B di Martedì 22 Dicembre 2009 tempo a disposizione 2h30'

Complessità algoritmi su strutture dati

Fondamenti di Informatica T-1, 2014/2015 Modulo 2. Prova d Esame 5A di Giovedì 9 Luglio 2015 tempo a disposizione 2h

Fondamenti di Informatica T-1, 2009/2010 Modulo 2 Prova d Esame 2A di Mercoledì 13 Gennaio 2010 tempo a disposizione 2h30'

Fondamenti di Informatica T-1, 2015/2016 Modulo 2. Prova d Esame 3A di Venerdì 12 Febbraio 2016 tempo a disposizione 2h

ELEMENTI DI INFORMATICA LB ESERCITAZIONE (del 09/03/2007) Files, Strutture e Liste

Fondamenti di Informatica T-1, 2016/2017 Modulo 2. Prova d Esame 3A di Giovedì 16 Febbraio 2017 tempo a disposizione 2h

#include <stdio.h> #include <stdlib.h> #define L 20 void Proc(char [], int); int N=L; main () { char *s; int i;

Complessità algoritmi su strutture dati (riassunto)

Fondamenti di Informatica T-1, 2017/2018 Modulo 2. Prova d Esame 4A di Giovedì 14 Giugno 2018 tempo a disposizione 2h

Complessità algoritmi su strutture dati (riassunto)

Fondamenti di Informatica T-1, 2010/2011 Modulo 2. Prova d Esame 1B di Mercoledì 19 Gennaio 2011 tempo a disposizione 2h

Fondamenti di Informatica T-1, 2010/2011 Modulo 2. Prova d Esame 5A di Mercoledì 13 Luglio 2011 tempo a disposizione 2h

Fondamenti di Informatica T-1, 2017/2018 Modulo 2. Prova d Esame 2A di Giovedì 25 Gennaio 2018 tempo a disposizione 2h

Fondamenti di Informatica T-1, 2016/2017 Modulo 2. Prova d Esame 1A di Giovedì 12 Gennaio 2017 tempo a disposizione 2h

Fondamenti di Informatica T-1, 2012/2013 Modulo 2. Prova d Esame 4A di Giovedì 13 Giugno 2013 tempo a disposizione 2h

Fondamenti di Informatica T-1, 2011/2012 Modulo 2. Prova d Esame 3A di Giovedì 9 Febbraio 2012 tempo a disposizione 2h

Fondamenti di Informatica T-1, 2011/2012 Modulo 2. Prova d Esame 2A di Giovedì 12 Gennaio 2012 tempo a disposizione 2h

Lab 16 Gestione file binari"

Fondamenti di Informatica T-1, 2017/2018 Modulo 2. Prova d Esame 5A di Giovedì 12 Luglio 2018 tempo a disposizione 2h

Fondamenti di Informatica T-1, 2015/2016 Modulo 2. Prova d Esame 6A di Giovedì 8 Settembre 2016 tempo a disposizione 2h

Liste semplici - ADT!

Fondamenti di Informatica T-1, 2014/2015 Modulo 2. Prova d Esame 2A di Martedì 29 Gennaio 2015 tempo a disposizione 2h

Fondamenti di Informatica T-1, 2016/2017 Modulo 2. Prova d Esame 5A di Giovedì 13 Luglio 2017 tempo a disposizione 2h

Fondamenti di Informatica T-1, 2010/2011 Modulo 2. Prova d Esame 3A di Mercoledì 16 Febbraio 2011 tempo a disposizione 2h

Fondamenti di Informatica T-1, 2013/2014 Modulo 2. Prova d Esame 6A di Giovedì 11 Settembre 2014 tempo a disposizione 2h

Fondamenti di Informatica T-1, 2014/2015 Modulo 2. Prova d Esame 3A di Giovedì 13 Febbraio 2015 tempo a disposizione 2h

Fondamenti di Informatica L-A

/* Esempio di contenuto del file di testo: */ PaoloBellavista marzo.dat PaolaMello aprile.dat FedericoChesani marzo.dat CarloGiannelli marzo.

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

Fondamenti di Informatica T-1, 2014/2015 Modulo 2. Prova d Esame 1A di Martedì 13 Gennaio 2015 tempo a disposizione 2h

Fondamenti di Informatica T-1, 2010/2011 Modulo 2. Prova d Esame 1A di Mercoledì 19 Gennaio 2011 tempo a disposizione 2h

Esercizio 1 Liste: calcolo perimetro di un poligono

Fondamenti di Informatica T-1, 2012/2013 Modulo 2. Prova d Esame 6A di Giovedì 12 Settembre 2013 tempo a disposizione 2h

Fondamenti di Informatica T-1, 2012/2013 Modulo 2. Prova d Esame 3A di Giovedì 14 Febbraio 2013 tempo a disposizione 2h

Esercitazione 11. Liste semplici

dott. Sabrina Senatore

Sistemi operativi A, Unix+C, 26/09/2017. Nome: Cognome: Matricola:

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

Esercizio 1: funzione con valore di ritorno di tipo puntatore

Fondamenti di Informatica T-1, 2015/2016 Modulo 2. Prova d Esame 5A di Giovedì 7 Luglio 2016 tempo a disposizione 2h

Esercizio 1. Esercizio 1 - Soluzione

Fondamenti di Informatica e Laboratorio T-AB Prova Pratica - 16 Giugno 2009 Compito A

Fondamenti di Informatica T-1, 2016/2017 Modulo 2. Prova d Esame 4A di Giovedì 15 Giugno 2017 tempo a disposizione 2h

Lab 11 Gestione file binari

1. Realizzare una funzione: int trovaritardatari(file *fprestiti, FILE *frate, Prestito *dest, int dim)

1. realizzare una funzione int estraimulte(file *fmutui, FILE *fpagamenti, Mutuo *dest, int dim)

Fondamenti di Informatica T-1, 2017/2018 Modulo 2. Prova d Esame 1A di Giovedì 11 Gennaio 2018 tempo a disposizione 2h

Fondamenti di Informatica e Laboratorio T-AB Prova Pratica - 12 Dicembre 2008 Compito A

PUNTATORI A STRUTTURE IL CONCETTO DI LISTA ADT LISTA (1) ADT LISTA (2) D può essere qualunque I = { cons, head, tail, emptylist } Π = { empty }

Fondamenti di Informatica T-1, 2012/2013 Modulo 2. Prova d Esame 5A di Giovedì 11 Luglio 2013 tempo a disposizione 2h

PUNTATORI A STRUTTURE

PUNTATORI A STRUTTURE

Esercizio 1 File: ordinamento di un archivio di studenti (file binario)

Il linguaggio C Strutture

Fondamenti di Informatica: Ingegneria Meccanica Prova scritta del 12 luglio 2008

PUNTATORI A STRUTTURE

Programmazione I - Laboratorio

Lab 09 Gestione file di testo

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

Fondamenti di Informatica T-1, 2016/2017 Modulo 2. Prova d Esame 6A di Giovedì 14 Settembre 2017 tempo a disposizione 2h

ELEMENTI DI INFORMATICA LB - PROVA PRATICA DEL 27/03/ LINGUAGGIO C (15 punti)

Fondamenti di Informatica T-1, 2017/2018 Modulo 2. Prova d Esame 3A di Venerdì 9 Febbraio 2018 tempo a disposizione 2h

Fondamenti di Informatica T-1 Modulo 2

ALGHERO 5 16 VARIABILE ANCONA 7 9 NUVOLOSO AOSTA 0 4 NEVE BARI VARIABILE BOLOGNA 7 9 PIOGGIA...

Lezione 11: Liste a Puntatori e Input/Output

PUNTATORI A STRUTTURE! IL CONCETTO DI LISTA! ADT LISTA (1)! ADT LISTA (2)!

1. Realizzare una funzione int trovaevasori(file * fcatasto, FILE * ftasse, Lotto * dest, int dim)

Esercizi di preparazione alla prova scritta

Strutture dati dinamiche in C (II)

accesso * leggiaccessi(char * nomefile, int * dim);

Esercizio 1. Esercizio 1

case 0: /* child 1 - writing end */ close(fd[0]); // close read end write(fd[1], string, (strlen(string)+1));/* +1 is termination \0 */ return (0);

File di testo e file binari Soluzione 1 (2)

Fondamenti di Informatica T-1, 2010/2011 Modulo 2. Prova d Esame 6A di Mercoledì 14 Settembre 2011 tempo a disposizione 2h

ADT ALBERO BINARIO (tree)) ADT ALBERO BINARIO

SIMULAZIONE Fondamenti di Informatica T-1 Prova di Laboratorio - 14 Dicembre 2009 Compito B

Fondamenti di Informatica T- 1, 2012/2013 Modulo 2

Fondamenti di Informatica T-1, 2010/2011 Modulo 2. Prova d Esame 2A di Mercoledì 2 Febbraio 2011 tempo a disposizione 2h

Indice come albero binario di ricerca!

Lab 16 Gestione file binari

Esercizi Liste. Prof. Alessandro Campi

- matrici - stringhe - file (lettura/scrittura, di testo/binari) - strutture, puntatori - allocazione dinamica della memoria (malloc)

1. Realizzare una funzione int trovaevasori(file * fcomune, FILE * ftasse, Recapito * dest, int dim)

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

Esercizio 1 Liste: calcolo del numero di elementi ripetuti in una lista

Lab 12 Allocazione dinamica della memoria

D può essere qualunque. Una lista è una sequenza (cioè un multi-insieme finito. Per denotare strutture a lista useremo la seguente

Transcript:

$ PROVA INTERMEDIA 20 Aprile 2017 In un file binario alimenti.bin sono scritti i valori calorici (per 100 grammi di prodotto) dei prodotti alimentari. Per ciascun prodotto, il file alimenti.bin contiene - il nome del prodotto (stringa di 50 char), - e il valore dell'energia (intero, in Kilo-calorie). Ad esempio, per il prodotto cracker si ha: "cracker" 439 perché i cracker hanno, per 100 grammi di prodotto, 439 kcal. Si realizzi un programma C, organizzato in almeno tre funzioni, rispettivamente dedicate a: a partire dal file alimenti.bin, creare una lista L in memoria centrale che contiene i dati dei prodotti, ordinata in base al nome del prodotto; la funzionea riceve come parametri: il puntatore al file, il puntatore a L (inizializzata a NULL nel main ), più eventuali parametri a scelta, e restituisce il puntatore alla radice della lista L;

$ PROVA INTERMEDIA 20 Aprile 2017 stampare la lista L a video; la funzioneb riceve come parametri: il puntatore a L, più eventuali parametri a scelta, e restituisce void ; a partire dalla lista L creata, determinare quanti e quali alimenti sono iper-calorici (ovvero hanno più di 300 calorie per 100 grammi di prodotto), stampando il nome di ciascun alimento e le sue calorie per 100 grammi di prodotto e il numero totale di alimenti iper-calorici su un file di uscita di tipo testo output.txt da consegnare con i codici sorgente; la funzionec riceve come parametri il puntatore al secondo file, aperto nel main il puntatore a L, più eventuali parametri a scelta, e restituisce void. NOTA BENE: Si consegnino i sorgenti e il file di uscita generato. E' possibile utilizzare librerie C (ad es. per le stringhe). Nel caso si strutturi a moduli l'applicazione qualunque libreria utente va riportata nello svolgimento.

CONSIDERAZIONI Leggete bene il testo, e comprendete cosa vi viene chiesto Pensate se qualche funzionalità può essere riutilizzata

$ Domanda a) Il programma deve chiamare tre funzioni (da definire) dedicate rispettivamente a: a) Caricare in una lista L in memoria centrale i record del file Inserimento ordinato in lista con ordinamento in base al nome del prodotto (stringa) Usate la strcmp di string.h

$ Domanda a), come fareste? Definire il tipo del record (struct, element) Definire una funzione isless che dati due element restituisce: vero (1), se il primo (il suo nome) precede o è uguale al nome del secondo falso (0), viceversa Definire il tipo list (con elementi di tipo element) Definire la lista L

$ Domanda a), come fareste? Ciclo di lettura da file (fino alla file del file), leggendo 1 record per volta Inserire l'elemento letto in lista L con insord, che usa la funzione isless

#define DIM 50 $ el.h typedef struct { char nome[dim]; int val; element; int isless(element a, element b); void printel(element x);

$ el.c #include <stdio.h> #include "el.h" int isless(element a, element b) { if (strcmp(a.nome, b.nome) > 0) return 0; else return 1; void printel(element x) { printf("%s, %d\n", x.nome, x.val);

#include "el.h" $ list.h typedef struct nodo { element value; struct nodo *next; NODO; typedef NODO *list; list cons(element el, list l); list insord(element el, list l); void showlist(list l);

$ list.c #include <stdlib.h> #include "list.h" list cons(element el, list l) { list aux = (NODO*)malloc(sizeof(NODO)); aux->value = el; aux->next = l; return aux; list insord(element el, list l) { if (l == NULL) return cons(el, l); else { if (isless(el, l->value)) return cons(el, l); else { l->next = insord(el, l->next); return l;

$ list.c #include <stdlib.h> #include "list.h" list cons(element el, list l) { list aux = (NODO*)malloc(sizeof(NODO)); aux->value = el; aux->next = l; return aux; list insord(element el, list l) { if (l == NULL) return cons(el, l); else { if (strcmp(el.nome, l->value.nome)<=0) return cons(el, l); else { l->next = insord(el, l->next); return l;

void showlist(list l) { if (l!= NULL) { printel(l->value); showlist(l->next); $ list.c

$ main.c #include <stdio.h> #include <stdlib.h> #include "funzioni.h" #include "list.h" main() { list L = NULL; FILE *f, *output; f = fopen("alimenti.bin", "rb"); if (f == NULL) { printf("non aperto.\n"); exit(-1); L = funzionea(f, L); fclose(f); showlist(l); /* funzioneb */

$ main.c (continua) showlist(l); /* funzioneb */ output = fopen("output.txt", "wt"); if (output == NULL) { printf("file non creato.\n"); exit(-1); funzionec(output, L); fclose(output);

#include "list.h" list funzionea(file *f,list L); void funzionec(file *output,list L); /*funzioni.c */ #include <stdio.h> #include <stdlib.h> #include "funzioni.h" #define IPER 300 $ funzioni.h e.c list funzionea(file *f, list L) { element el; while (fread(&el, sizeof(element), 1, f) > 0) { L = insord(el, L); return L;

$ Domanda c) Scandire in contenuto della lista L, scrivendo in uscita sul file di uscita La funzione del punto c) riceve il puntatore al file di uscita (preventivamente aperto in scrittura), e la lista (ed eventuali altri parametri a vostra scelta). Deve scorrere la lista, stampare su file un elemento se è iper-claorico, e tenere il conto... E' una variante della solita showlist... con un conteggio in più

$ funzioni.c (continua) void funzionec(file *output, list L) { int tot=0; while (L!= NULL) { if (L->value.val > IPER) { fprintf(output, "%s %d\n", L->value.nome, L->value.val); tot++; L=L->next; fprintf(output, "Numero di alimenti ipercalorici: %d\n", tot);

$ PROVA INTERMEDIA 26 Aprile 2018 In un file binario alimenti.bin sono scritti i valori calorici (per 100 grammi di prodotto) dei prodotti alimentari. Per ciascun prodotto, il file alimenti.bin contiene - il nome del prodotto (stringa di 50 char), - e il valore dell'energia (intero, in Kilo-calorie). Ad esempio, per il prodotto cracker si ha: "cracker" 439 perché i cracker hanno, per 100 grammi di prodotto, 439 kcal. I prodotti con molte calorie, detti iper-calorici, hanno più di 300 calorie per 100 grammi di prodotto. Ad esempio, il prodotto cracker è iper-calorico. Si realizzi un programma C, organizzato in almeno tre funzioni, rispettivamente dedicate a: a partire dal file alimenti.bin, creare una lista L in memoria centrale che contiene i dati dei prodotti iper-calorici, ordinata in base al nome del prodotto; la funzionea riceve come parametri: il puntatore al file, il puntatore a L (inizializzata a NULL nel main ), più eventuali parametri a scelta, e restituisce il puntatore alla radice della lista L;

$ PROVA INTERMEDIA 26 Aprile 2018 stampare la lista L a video; la funzioneb riceve come parametri: il puntatore a L, più eventuali parametri a scelta, e restituisce void ; a partire dalla lista L creata, determinare il valore medio dell'energia (tipo float), calcolato come media di quelli degli alimenti nella lista L, stampando tale valore ( float ) su un file di uscita di tipo testo iper.txt da consegnare con i codici sorgente; la funzionec riceve come parametri il puntatore al secondo file, aperto nel main il puntatore a L, più eventuali parametri a scelta, e restituisce void. NOTA BENE: Si consegnino i sorgenti e il file di uscita generato. E' possibile utilizzare librerie C (ad es. per le stringhe). Nel caso si strutturi a moduli l'applicazione qualunque libreria utente va riportata nello svolgimento.

$ PROVA INTERMEDIA 26 Aprile 2018 stampare la lista L a video; la funzioneb riceve come parametri: il puntatore a L, più eventuali parametri a scelta, e restituisce void ; a partire dalla lista L creata, determinare il valore medio dell'energia (tipo float), calcolato come media di quelli degli alimenti nella lista L, stampando tale valore ( float ) su un file di uscita di tipo testo iper.txt da consegnare con i codici sorgente; la funzionec riceve come parametri il puntatore al secondo file, aperto nel main il puntatore a L, più eventuali parametri a scelta, e restituisce void. NOTA BENE: Si consegnino i sorgenti e il file di uscita generato. E' possibile utilizzare librerie C (ad es. per le stringhe). Nel caso si strutturi a moduli l'applicazione qualunque libreria utente va riportata nello svolgimento. Cosa cambia?

$ main.c #include <stdio.h> #include <stdlib.h> #include "funzioni.h" main() { list L = NULL; FILE *f, *output; f = fopen("alimenti.bin", "rb"); if (f == NULL) { printf("non aperto.\n"); exit(-1); L = funzionea(f, L); fclose(f); showlist(l); /* funzioneb */

$ main.c (continua) showlist(l); /* funzioneb */ output = fopen("iper.txt", "wt"); if (output == NULL) { printf("file non creato.\n"); exit(-1); funzionec(output, L); fclose(output);

#include "list.h" list funzionea(file *f,list L); void funzionec(file *output,list L); /*funzioni.c */ #include <stdio.h> #include <stdlib.h> #include "funzioni.h" #define IPER 200 $ funzioni.h e.c list funzionea(file *f, list L) { element el; while (fread(&el, sizeof(element), 1, f) > 0) { if (el.val > IPER) L = insord(el, L); return L;

$ Domanda c) Scandire in contenuto della lista L, scrivendo in uscita sul file di uscita la media delle calorie La funzione del punto c) riceve il puntatore al file di uscita (preventivamente aperto in scrittura), e la lista (ed eventuali altri parametri a vostra scelta). Deve scorrere la lista, sommare tutti valori delle calorie, e tenere il conto... E' una variante della solita showlist... con due conteggi in più (una somma e un conteggio)

$ funzioni.c (continua) void funzionec(file *output, list L) { float media=0.0; int tot=0; while (L!= NULL) { media = media + L->value.val); tot++; L=L->next; fprintf(output, "Media alimenti : %f\n", media/tot);

CONSIDERAZIONI (FINALI) Leggete bene il testo, e comprendete cosa vi viene chiesto Pensate se qualche funzionalità può essere riutilizzata Almeno una domanda non standard c'è... (conteggio, media, selezione di elementi da file o da lista che rispettano una certa proprietà, etc)