Fondamenti di Informatica 2

Documenti analoghi
Fondamenti di Informatica 2

Fondamenti di Informatica 2

Fondamenti di Informatica 2

Fondamenti di Informatica 2

Fondamenti di Informatica 2

Fondamenti di Informatica 2

Fondamenti di Informatica 2

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

Fondamenti di Informatica 2

Esercizi di programmazione in linguaggio C English Dictionary

Fondamenti di Informatica T-1 Modulo 2

Programmazione I - Laboratorio

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

C: panoramica. Violetta Lonati

Fondamenti di Informatica 2 Soluzione della prova scritta del 21 Dicembre 2007

L'Allocazione Dinamica della Memoria nel linguaggio C

Fondamenti di Informatica 2

Esercizio 1: media di numeri reali (uso funzioni e struct)

Esercizio 1: funzione con valore di ritorno di tipo puntatore

Le strutture /2. Iniziamo ora a progettare il codice per la gestione del database. Quali sono le funzionalità da implementare?

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

Introduzione al linguaggio C Puntatori

Il compito del 11 novembre 2004

Esercizio 1 (15 punti)

Definizione Allocazione e deallocazione di variabili Allocazione e deallocazione di vettori

Esercitazione di Reti degli elaboratori

Lab 16 Gestione file binari"

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

Esercitazioni di Fondamenti di Informatica - Lez. 7 20/11/2018

Il linguaggio C. Puntatori e dintorni

Informatica (A-K) 14. Linguaggio C -4

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

Opinione calcolamedia( ) Opinione inverti( )

Esercitazione 12. Esercizi di Ricapitolazione

Ambienti di Programmazione per il Software di Base

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

ELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli

Esercitazione 11. Liste semplici

Soluzioni seconda prova intermedia del 30 gennaio 2006 temi 1 e 2. Siano date le seguenti definizioni di costanti e tipi in linguaggio C:

Introduzione al C Lez. 4. Allocazione Dinamica della memoria

Introduzione al C Lez. 4

Le strutture /3. Riprendiamo ora la struttura definita alcune lezioni fa e completiamo il set di funzioni che servono per gestire un elenco di libri.

Puntatori e array. Violetta Lonati

Unità Didattica 4 Linguaggio C. Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo.

Lezione 12: Allocazione Dinamica della Memoria

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

Lezione X Definizione di vettori a run-time

Fondamenti di Informatica L-A

Aritmetica dei puntatori

Puntatori. Un puntatore contiene un numero che indica la locazione di memoria dove è presente la variabile puntata

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

Lezione 8: Stringhe ed array multidimensionali

Esempio: Mergesort. void mergesort(int *a, int *b, int l, int r) { int i,j,k,m;

Informatica B Allievi Meccanici con cognome da Cl a L II prova intermedia del 13/02/01 Prof. Elisabetta Di Nitto

Fondamenti di Informatica

Fondamenti di Informatica 12. Linguaggio C -4

Fondamenti di Informatica T 1, 2009/2010 Modulo 2 Prova d Esame 3a di Giovedì 11 Febbraio 2010 tempo a disposizione 2h30'

L Allocazione Dinamica della Memoria

Esercizio 1: parole nel testo

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

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, 2015/2016 Modulo 2. Prova d Esame 1A di Giovedì 14 Gennaio 2016 tempo a disposizione 2h

Allocazione dinamica della memoria

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

Fondamenti di Informatica T-1 Modulo 2

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

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

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

Corso di Informatica 1 (IN110) Tutorato n. 4

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

Linguaggio C: PUNTATORI

T = { D, {F 1,...,F n }, {P 1,...,P m } }

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

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

Dati strutturati in C

ALGORITMI DI ORDINAMENTO E RICERCA BINARIA. Docente: Giorgio Giacinto AA 2008/2009. problema dell ordinamento in modi diversi

Operazioni su file di caratteri

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

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

char *s; s = (char *) malloc(5*sizeof(char)); scanf( %s, s); Stringhe

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

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

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

Strutture dati. Operatori di incremento e decremento. Strutture di dati. Strutture di dati. ++ e -- Esempi. Vettori e matrici.

Stringhe e allocazione dinamica della memoria

Strutture Dati Dinamiche

Esercizio 1 (15 punti)

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

Laboratorio di Algoritmi e Strutture Dati Ingegneria e Scienze Informatiche - Cesena A.A

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: Ingegneria Meccanica Prova scritta del 12 luglio 2008

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

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

Fondamenti di Informatica 6. Algoritmi e pseudocodifica

Matrici. Parte 7. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

NOTA SULLA CORREZIONE: Per ottenere un esito positivo è necessario svolgere un elaborato sufficiente in entrambe le parti.

Allocazione Dinamica. Allocazione Statica. malloc() La funzione malloc()

Lab 12 Allocazione dinamica della memoria

Lezione 8 Struct e qsort

Transcript:

Fondamenti di Informatica 2 Soluzione della prova scritta del 31 Gennaio 2006 Esercizio 1 (4 punti) Elencare i tipi di dato predefiniti del linguaggio C, precisandone il dominio e le operazioni principali definite su di essi. Esercizio 2 (7 punti) Definire una struttura dati per rappresentare i dati di un Libro. I dati di interesse sono: il nome dell Autore, il Titolo e l anno di pubblicazione (3 punti). Scrivere un programma che prende in ingresso i dati di un libro e li stampa a video con un opportuno messaggio (4 punti). #include <stdio.h> #include <stdlib.h> typedef char Stringa[30]; Stringa Autore ; Stringa Titolo; int Anno; Libro; main() Libro unlibro ; printf("qual e' l Autore del libro? "); gets(unlibro.autore); printf("qual e' il Titolo del libro? "); gets(unlibro.titolo); printf("qual e' l Anno di pubblicazione del libro? "); scanf("%d", &unlibro.anno); printf("autore: %s\ttitolo: %s\tanno: %d\n", unlibro.autore, unlibro.titolo, unlibro.anno); Fondamenti di Informatica 2 Prova Scritta del 31 Gennaio 2006 1

Esercizio 3 (8 punti) Definire una struttura dati per rappresentare un elenco di Libri. (Per la rappresentazione di libro potete usare quella definita nell esercizio precedente). (2 punti) Si supponga che la struttura dati contenga già memorizzato un elenco di libri. Scrivere una funzione che prende in ingresso l elenco di libri e restituisce l indice dell Elenco cui corrisponde il libro meno recente (4 punti) Dire quale modifica deve essere apportata alla funzione precedente affinché restituisca l indice dell Elenco relativo al libro più recente (2 punti). Libro A[100] ; int NumLibri; Elenco; int LibroMenoRecente(Elenco *E) int i,indicemin=0; int min = E->A[0].Anno; for(i=1;i<e->numlibri;i++) if(min > E->A[i].Anno) min = E->A[i].Anno; indicemin = i; return indicemin; La modifica da effettuare è nella condizione dell if: non > ma <. Coerentemente dovrebbe essere modificato il nome della variabile min in max Fondamenti di Informatica 2 Prova Scritta del 31 Gennaio 2006 2

Esercizio 4 (4 punti) Dire quale operazione è implementata dalla funzione mistero. #define DIM 100 int leggidati(char *nomefile) FILE *fp int i=0; int m=1; int *A; fp = fopen(nomefile r ); A = (int *)malloc(dim * sizeof(int)); while(!feof(fp)) if(i >= m*dim) m++; A = mistero(a,m); fscanf(fp, %d,&a[i]); i++; return i; int * mistero(int *A, int m) int i; int *B; B = (int *)malloc(m*dim*sizeof(int)); for(i=0;i<(m-1)*dim;i++) B[i] = A[i]; free(a); return B; Soluzione La funzione mistero incrementa lo spazio di memoria allocato al vettore A, nel caso in cui la sua dimensione non sia sufficiente a memorizzare i dati presenti nel file. Inizialmente la funzione leggidati alloca spazio per il vettore A pari a DIM. Se i dati da memorizzare fossero in numero maggiore, la funzione mistero alloca spazio in un nuovo array pari alla dimensione corrente di A aumentata di DIM (la variabile m memorizza la dimensione dell array A in termini di multiplo di DIM). Successivamente copia il contenuto di A nel nuovo array e restituisce il puntatore di quest ultimo alla funzione leggidati, dopo aver liberato la memoria originariamente assegnata ad A. NOTA: l operazione svolta dalla funzione mistero è implementata dalla funzione di libreria realloc Fondamenti di Informatica 2 Prova Scritta del 31 Gennaio 2006 3

Esercizio 5 (6 punti) Si consideri una matrice di interi memorizzata in una variabile di tipo int righe colonne; int **A; Matrice; e un vettore di interi memorizzato in una variabile di tipo int dimensione; int *A; Vettore; Scrivere una funzione che calcoli il prodotto matrice-vettore restituendo il risultato in una variabile di tipo Vettore. La funzione, prima di eseguire il prodotto, deve verificare che matrice e vettore siano compatibili. Nel caso in cui non siano compatibili, la funzione restituisce una variabile Vettore i cui campi valgono rispettivamente 0 e NULL. Il prototipo della funzione è Vettore Prodotto(Matrice *M, Vettore *V); Allocare dinamicamente la memoria per il risultato. Soluzione Vettore Prodotto(Matrice *M, Vettore *V) int i,j; Vettore Ris; if(m->colonne!= V->dimensione) Ris.dimensione=0; Ris.A = NULL; return Ris; Ris.A = (int *)malloc(m->righe * sizeof(int)); Ris.dimensione = M->righe; for(i=0; i < M->righe; i++) Ris.A[i] = 0; for(j=0;j< M-> colonne;j++) Ris.A[i]+= M->A[i][j]*V->A[j]; return Ris; Fondamenti di Informatica 2 Prova Scritta del 31 Gennaio 2006 4

Esercizio 6 (4 punti) Di seguito si riporta la funzione partition dell algoritmo di ordinamento quicksort. Questa funzione è relativa all ordinamento di un array di int. int partition (int* A, int l, int r) int pivot = A[l], i=l-1, j=r+1; int temp; for (; ;) do j--; while (A[j]>pivot); do i++; while (A[i]<pivot); if (i<j) temp=a[i]; A[i]=A[j]; A[j]=temp; else return j; Modificare opportunamente la funzione in modo tale che ordini in senso crescente un array di stringhe di caratteri. Usare la funzione di libreria strcmp per confrontare le stringhe e la funzione strcpy per copiare le stringhe. (Suggerimento: usare la variabile pivot per memorizzare l indice dell array di stringhe che contiene l elemento pivot) int partition (char** A, int l, int r) int pivot = l, i=l-1, j=r+1; char temp[50]; for (; ;) do j--; while (strcmp(a[j],a[pivot])>0); do i++; while (strcmp(a[i],a[pivot])<0); if (i<j) strcpy(temp, A[i]); strcpy(a[i],a[j]); strcpy(a[j], temp); else return j; Fondamenti di Informatica 2 Prova Scritta del 31 Gennaio 2006 5