Compito di Fondamenti di Informatica



Похожие документы
Concetti chiave. Struct. Variabili strutturate: il tipo struct Elementi di una struttura typedef e struct Array di strutture

Fondamenti di Informatica 2

Esercizio 1. Esercizio 2

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a settembre 2011

La struttura dati ad albero binario

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

Liberare la memoria allocata dinamicamente.

Dispensa di Esercizi in C++ Fondamenti di Informatica

dall argomento argomento della malloc()

Lab 11 Gestione file di testo"

Le Liste. Elisa Marengo. Università degli Studi di Torino Dipartimento di Informatica. Elisa Marengo (UNITO) Le Liste 1 / 31

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

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

Appunti tratti dal videocorso on-line di Algoritmi e Programmazione Avanzata By ALeXio

1: /* Nome del programma: gestione_articoli_01.cpp 2: Realizzato da: Gaetano Della Cerra 3: Data: 06/02/ III Informatica Serale I.T.I.S.

Laboratorio di Algoritmi e Strutture Dati

Appello di Informatica B

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

File di testo e file binari Directory

void funzioneprova() { int x=2; cout<<"dentro la funzione x="<<x<<endl; }

Fondamenti di Informatica T-1, 2010/2011 Modulo 2. Prova d Esame 4A di Martedì 21 Giugno 2011 tempo a disposizione 2h

INFORMATICA - I puntatori Roberta Gerboni

Algoritmi di Ricerca. Esempi di programmi Java

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

Laboratorio di Algoritmi e Strutture Dati

Allocazione dinamica della memoria - riepilogo

I puntatori e l allocazione dinamica di memoria

Quotazione compareto( ) Quotazione piurecente( ) Quotazione Quotazione Quotazione non trovato count( )

Alfabeto ed elementi lessicali del linguaggio C

Lezione 9: Strutture e allocazione dinamica della memoria

Laboratorio di Fondamenti di Informatica anno accademico Esercizi proposti il

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

RICERCA DI UN ELEMENTO

Esempio: dest = parolagigante, lettere = PROVA dest (dopo l'invocazione di tipo pari ) = pprrlogvgante

Il tipo di dato astratto Pila

Algoritmi e Strutture Dati

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

Gestione dei File in C

Politecnico di Torino

Tipi di Dato Ricorsivi

Esame di Informatica Generale 9 CFU 21 Giugno 2011 Professori: Carulli, Fiorino, Mazzei

Introduzione alla programmazione in C

La Struttura Dati Lista

costruttori e distruttori

Studente (Cognome Nome): Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a Secondo Compitino 21 Dicembre 2006

Corso di Laurea in Ingegneria Gestionale Esame di Informatica - a.a luglio 2013

Realizzazione di una classe con un associazione

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a giugno 2013

Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007

LISTE, INSIEMI, ALBERI E RICORSIONE

I tipi di dato astratti

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

(Esercizi Tratti da Temi d esame degli ordinamenti precedenti)

Esempio: Array di struct

Una funzione è detta ricorsiva se chiama, direttamente o indirettamente, se stessa. In C tutte le funzioni possono essere usate ricorsivamente.

GESTIONE INFORMATICA DEI DATI AZIENDALI

Linguaggio C - Stringhe

MAGAZZINO.CPP January 2, 2008 Page 1

Studente (Cognome Nome): Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a Primo scritto 11 Gennaio 2008

Funzioni in C. Violetta Lonati

Esercizi della lezione 5 di Java

Soluzioni degli esercizi di riepilogo (Fondamenti di Informatica 1 Walter Didimo)

Breve riepilogo della puntata precedente:

Le variabili. Olga Scotti

RICORSIVITA. Vediamo come si programma la soluzione ricorsiva al problema precedente: Poniamo S 1 =1 S 2 =1+2 S 3 =1+2+3

GESTIONE ANAGRAFICA ARTICOLI. Consente l inserimento, la modifica o l eliminazione dell anagrafica articoli. Per l inserimento di un nuovo articolo:

Laboratorio di Algoritmi e Strutture Dati

Vettori Algoritmi elementari di ordinamento

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

Inizializzazione, Assegnamento e Distruzione di Classi

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Fondamenti di Informatica Ingegneria Civile e Ambientale Esame del 28/06/2012 Tempo a disposizione: 2h 30 min

Esercizio 1. Esercizio 1

Le stringhe. Le stringhe

Matematica - SMID : Programmazione Febbraio 2009 FOGLIO RISPOSTE

Corso di Fondamenti di Informatica

Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati

Gestione dinamica di una pila

Alcune regole di base per scrivere un programma in linguaggio C

GESTIONE RICEVUTE FISCALI. Consente l inserimento, la modifica o l eliminazione di una ricevuta fiscale.

Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a Secondo Compitino 17 Dicembre 2005

CREARE UNA LIBRERIA IN C

Database 3 affitto veicoli. Testo del quesito

SAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica

Esercizi sulla definizione di classi (Fondamenti di Informatica 1 Walter Didimo) Soluzioni

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

Archivio CD. Fondamenti di Programmazione

INFORMATIVA FINANZIARIA

Транскрипт:

Compito di Fondamenti di Informatica In un magazzino viene utilizzato un archivio informatico, nel quale vengono memorizzate le informazioni relative ai prodotti contenuti nel magazzino e che ne permette la visualizzazione e la vendita. La struttura dati utilizzata è costituita da un vettore di liste. Il vettore ha dimensione n, fissata dall utente all inizio del programma (il vettore è dinamico). Ogni elemento del vettore contiene una lista i cui elementi hanno la seguente struttura: Collocazione nel Magazzino, Intero compreso tra 0 e n-1 Codice Prodotto, Stringa di 5 caratteri Prezzo Unitario, Intero senza segno Numero Pezzi Presenti in Magazzino, Intero senza segno Il campo Numero Pezzi Presenti in Magazzino assume il valore zero quando non sono più presenti pezzi di quel prodotto. Esso viene decrementato per ogni vendita di quel prodotto. Si suppone che ciascun ADT Lista sia realizzato con puntatori e che sia ordinato per Codice Prodotto. Si suppone che il campo Collocazione nel Magazzino sia un numero intero compreso tra 0 e n-1, dove n viene scelto dall utente e, come detto, coincide con la dimensione del vettore. Questo significa che l elemento di indice i del vettore contiene tutti i prodotti che sono posti nello stesso settore del magazzino. Tale settore viene identificato dalla Collocazione nel Magazzino. Codificare in C: le strutture dati utilizzate e le funzioni primitive necessarie al compito. l allocazione di vettore di liste, dopo che l utente ha scelto n. una funzione che permette di inserire un nuovo prodotto e tutti i relativi altri campi nel vettore di liste. una funzione che permette di vendere un determinato prodotto. Se il prodotto cercato esiste, il campo numero pezzi presenti in magazzino deve essere decrementato di quanto specificato dall utente. Se l utente vuole comprare 3 pezzi, allora il campo numero pezzi deve essere decrementato di 3; se il numero di pezzi attuali è inferiore a 3, allora il programma deve avvertire l utente che il numero di pezzi è inferiore e tale numero deve essere posto a 0. Se l utente vuole comprare un certo prodotto e il numero di pezzi è 0, allora il sistema deve avvertire l utente che non è possibile l acquisto. una funzione che visualizza tutti i prodotti situati in un certo settore del magazzino (0,..,n-1). Il Main che alloca il vettore di liste e che richiama le precedenti funzioni Durata: 2h Cognome: Nome: Matricola: 1

#include<stdio.h> #include<stdlib.h> #include<string.h> #define FFLUSH while (getchar()!='\n') void LeggiStringa(char s[], unsigned long dim){ unsigned long i; for (i=0; i<dim-1;i++) if ((s[i]=getchar())=='\n') break; if (i==dim-1) s[i]='\0'; /******************** Funzioni Legate al TipobaseList**********************/ #define STR 6 typedef struct { unsigned int collocazione; char cod_prod[str]; unsigned int prezzo, num_pezzi; tipobaselist; /*Serve nella funzione Locate e Insord*/ int ConfrontaList(tipobaseList a, tipobaselist b){ return strcmp(a.cod_prod,b.cod_prod); /*Serve nella funzione visita */ void VisualizzaElementoLista(tipobaseList x){ printf("\nla collocazione e' %u",x.collocazione); printf("\nil codice del prodotto e' %s ",x.cod_prod); printf("\nil prezzo e' %u ",x.prezzo); printf("\nil numero di pezzi presenti in magazzino e %u ",x.num_pezzi); /******************** LISTA**************************/ #define LISTAVUOTA NULL typedef short boolean; typedef struct nodolist { tipobaselist info; struct nodolist *next; *list; typedef list position; position End(list l){ if (l==listavuota) return(listavuota); while (l->next!=listavuota) l=l->next; return(l); position First(list l) { return(listavuota); 2

void MakeNullList(list *l){ *l=listavuota; boolean EmptyList(list l){ return(l==listavuota); boolean FullList(list l){ struct nodolist *tmp; tmp=(struct nodolist *)malloc(sizeof(struct nodolist)); if (!tmp) return 1; free (tmp); return(0); void InsertList(list *l, position p, tipobaselist x){ struct nodolist * temp; if (!FullList(*l)) { temp=(struct nodolist *) malloc(sizeof(struct nodolist)); temp->info=x; if (p==listavuota) { temp->next=*l; *l=temp; temp->next=p->next; p->next=temp; void DeleteList(list *l, position p){ struct nodolist * tmp; if (!EmptyList(*l)) if (p==listavuota) { tmp=(*l)->next; free (*l); *l=tmp; tmp=p->next; p->next=tmp->next; free (tmp); position Locate(list l, tipobaselist x){ if (!EmptyList(l)) { if (!ConfrontaList(l->info,x)) return(listavuota); while (l->next!=listavuota) { if (!ConfrontaList(l->next->info,x)) return(l); l=l->next; return(l); tipobaselist Retrieve(list l, position p) { if (!EmptyList(l)) if (p==listavuota) return(l->info); else return(p->next->info); 3

position Next(list l, position p) { if (p==listavuota) return(l); else return(p->next); /******************** COMPITO **************************/ void visita(list l){ position p,u; tipobaselist x; p=first(l); u=end(l); while (p!=u) { x=retrieve(l,p); VisualizzaElementoLista(x); p=next(l,p); void insord(list *l, tipobaselist x) { position p,u; tipobaselist tmp; if (EmptyList(*l)) InsertList(l,First(*l),x); p=first(*l); u=end(*l); while (p!=u) { tmp=retrieve(*l,p); if (ConfrontaList(tmp,x)<0) p=next(*l,p); else break; InsertList(l,p,x); void inserimento_prodotto(list *l, tipobaselist x){ position p; if (!EmptyList(*l)) p=locate(*l,x); if ( EmptyList(*l) p==end(*l)) insord(l,x); else printf("\n Prodotto gia' esistente, inserimento impossibile \n"); void vendita_prodotto(list *l, tipobaselist x){ position p; tipobaselist tmp; if (!EmptyList(*l)) p=locate(*l,x); if (EmptyList(*l) p==end(*l)) printf("\nprodotto Inesistente "); tmp=retrieve(*l,p); if (tmp.num_pezzi==0) printf("\nnon ci sono pezzi per questo prodotto "); if (tmp.num_pezzi>=x.num_pezzi) tmp.num_pezzi-=x.num_pezzi; printf("\nnumero di pezzi inferiore alla richiesta "); tmp.num_pezzi=0; DeleteList(l,p); InsertList(l,p,tmp); 4

unsigned int LeggiCollocazione(unsigned int n){ unsigned int x; do { printf("\ninserisci la collocazione in magazzino dell'articolo "); printf("\ncompresa tra 0 e %d ", n-1); scanf("%d",&x); while (x>=n); return x; list *magazzino; main(){ unsigned int n,scelta,i,indice; tipobaselist prodotto; do{ printf("\ninserisci il numero di elementi del vettore: "); scanf("%u",&n); while(n<2); magazzino=(list *)malloc(n*sizeof(list)); for(i=0;i<n;i++) MakeNullList(&magazzino[i]); do{ printf("\n\n--------magazzino----------"); printf("\n1)inserisci un nuovo prodotto "); printf("\n2)vendita di un determinato prodotto"); printf("\n3)visualizza i prodotti di un settore del magazzino "); printf("\n4)esci "); printf("\nla scelta e'... "); scanf("%u",&scelta); switch(scelta){ case 1: indice=leggicollocazione(n); prodotto.collocazione=indice; printf("\n Inserisci il codice del prodotto "); LeggiStringa(prodotto.cod_prod,STR); printf("\n Inserisci il prezzo "); scanf("%u",&prodotto.prezzo); printf("\nnumero di pezzi presenti in magazzino "); scanf("%u",&prodotto.num_pezzi); inserimento_prodotto(&magazzino[indice],prodotto); break; case 2: indice=leggicollocazione(n); printf("\n Inserisci il codice del prodotto "); LeggiStringa(prodotto.cod_prod,STR); printf("\nnumero di pezzi che desideri acquistare "); scanf("%u",&prodotto.num_pezzi); vendita_prodotto(&magazzino[indice],prodotto); 5

case 3: while(scelta<4); break; indice=leggicollocazione(n); visita(magazzino[indice]); 6