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

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

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

Esercizio 1: funzione con valore di ritorno di tipo puntatore

Fondamenti di Informatica 2 Simulazione d esame dell 11 Dicembre 2009

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

Fondamenti di Informatica 2

Input/output da file I/O ANSI e I/O UNIX FLUSSI E FILE FLUSSI FLUSSI di TESTO FLUSSI BINARI FILE

Esercizio 1 (15 punti)

Esercizio 1 (15 punti)

Il sistema C è formato dal linguaggio C, dal preprocessore, dal compilatore, dalle librerie e da altri strumenti di supporto.

Esercizi di riepilogo (Fondamenti di Informatica 1 Walter Didimo)

Informatica 1. Prova di recupero 21 Settembre 2001

Fondamenti di Informatica 6. Algoritmi e pseudocodifica

ERRATA CORRIGE. void SvuotaBuffer(void); void SvuotaBuffer(void) { if(getchar()!=10) {svuotabuffer();} }

Politecnico di Milano - Facoltà di Ingegneria INFORMATICA A - Corso per allievi GESTIONALI - Prof. C. SILVANO A. A. 2001/ febbraio A

I files in C. A cura del prof. Ghezzi

Lab 10 Gestione file di testo

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

Stringhe e allocazione dinamica della memoria

Appello di Informatica B

Informatica 1. Corso di Laurea Triennale in Matematica. Gianluca Rossi

Lab 11 Gestione file di testo"

Lezione 5 Sottoarray di somma massima

Una stringa di caratteri in C è un array di caratteri terminato dal carattere '\0' a p e \0

Programmazione I - Laboratorio

Quicksort e qsort() Alessio Orlandi. 28 marzo 2010

I puntatori. Un puntatore è una variabile che contiene l indirizzo di un altra variabile. puntatore

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

Linguaggio C: introduzione

C: panoramica. Violetta Lonati

Problem solving avanzato

Definizione Allocazione e deallocazione di variabili Allocazione e deallocazione di vettori

RELAZIONE DELLA PROVA DI LABORATORIO DI INFORMATICA

Appello di Fondamenti di Informatica 12/09/2017

public static boolean occorre (int[] a, int n) { int i = 0; boolean trovato = false;

Esercizio 1 Liste: calcolo perimetro di un poligono

OTTAVA ESPERIENZA DI LABORATORIO. L elaborazione dei files in C

Caratteri e stringhe

Array multidimensionali e stringhe

Transcript:

CORSO DI LAUREA IN INGEGNERIA ELETTRICA, CHIMICA e MATERIALI Informatica B anno accademico 010-011 Prof. Danilo ARDAGNA Seconda Prova in Itinere 7.06.011 Durata 1h 30 Valutazioni 1 (6) (7) 3 (7) 4 (7) 5 (6) Cognome Nome Matricola Firma Si ricorda che non è possibile consultare libri o appunti. - 1 - punti 6 Si consideri il seguente frammento di codice in linguaggio C: #include <stdio.h> int f(int *v, int n) main() int r; if(n == 0) return 1; r = f(&v[1], n-1); printf("%d - ", v[1] + 1); return r+; int vettore[7]; int i; int ris; for(i=0; i<5; i++) vettore[i] = i*; ris = f(&vettore[1], );

printf("%d\n", ris); indicare l output della printf e fornire lo stack di attivazione relativo all esecuzione del programma. Funzione Variabile Valore main vettore[0] vettore[1] vettore[] vettore[3] vettore[4] vettore[5] 0 4 6 8? vettore[6]? f i ris v n 5 5 &vettore[1] r 3 f v n &v[1] 1 r 1 f v &v[1] n 0 r? Output: 7-5 - 5 - - punti 7 Si vuole implementare un programma in linguaggio C per la gestione delle adozioni in un canile. Il programma legge un file di testo chiamato cani.txt (già esistente) contenente su ogni riga il nome dei cani, e scrive in un file chiamato adozioni.txt ciascun nome letto seguito da ADOTTATO o NON ADOTTATO in base all'avvenuta adozione. Il programma sfrutta una funzione (già data) con il seguente prototipo: int adottato(char*); che prende in input il nome del cane e restituisce 1 se il cane è stato adottato, 0 altrimenti. int main() FILE *fp1, *fp; char nome[10];

fp1 = fopen("cani.txt", "r"); fp = fopen("adozioni.txt", "w"); 3 if(fp1 == NULL fp == NULL) return -1; else while(fscanf(fp1, "%s", nome)!= EOF) fclose(fp1); fclose(fp); if(adottato(nome)) fprintf(fp, "%s %s \n", nome, "ADOTTATO"); else fprintf(fp, "%s %s \n", nome, "NON ADOTTATO"); - 3 - punti 7 Siano dati i seguenti prototipi di funzione: int parolecrociate(char m[][], int r, int c, char dizionario[][], int n); int ricercaindizionario (char parola[], char dizionario[][], int n); in cui m è una matrice di r righe e c colonne, dizionario è un array contenente n stringhe e parola è una stringa. m è una matrice di caratteri utilizzata per rappresentare schemi del gioco delle parole crociate: 3

Ogni elemento di m contiene un carattere (per sempicità si considerino solo caratteri minuscoli) oppure il carattere convenzionale \0 per rappresentare la casella nera di separazione. int ricercaindizionario (char parola[], char dizionario[][], int n) int i; /* Il dizionario viene analizzato elemento per elemento; se l'elemento corrente e' uguale alla parola ricercata allora viene restituito 1*/ for (i=0; i<n; i++) if (strcmp(parola,dizionario[i])==0) return 1; /* Si e' giunti alla fine del dizionario e non e' stata trovata la parola da ricercare, la funzione restituisce 0*/ Se il dizionario e ordinato e sufficiente sostituire la condizione del for con la seguente: i<n && (strcmp(parola,dizionario[i])<=0) 4 Si fornisca l implementazione di ricercaindizionario che restituisce 1 se la parola è presente in dizionario e 0 altrimenti (si faccia uso della funzione di libreria int strcmp(char *s1, char *s) che restituisce un valore positivo se s1 è maggiore di s negativo se s is maggiore di s1 e 0 in caso di uguaglianza). Come cambia l implementazione della funzione se si assume che l array dizionario è ordinato? - 4 - punti 7 Si fornisca l implementazione della funzione parolecrociate che restituisce 1 se tutte le parole incluse nella matrice m compaiono in dizionario e 0 in caso contrario. Si faccia uso della funzione ricercaindizionario implementata al punto precedente. Si assuma per semplicità che non possano comparire più caselle nere consecutive. int parolecrociate(char m[r][c], int r, int c, char dizionario[n][maxp], int n) int i, j;/*indici di scansione della matrice*/ int k;/*indice di scansione della parola da ricercare nel dizionario */ char p[maxp]; for (i=0; i<r; i++) k=0; /*Scansione della matrice per righe */ for (j=0; j<c; j++) 4

5 if (m[i][j]=='\0') /*Se viene trovatoil terminatore*/ p[k]='\0'; if (ricercaindizionario(p,dizionario,n)==0)/* Si la parola non e' presente la funzione termina con 0*/ k=0; else /*viene effettuata la copia del carattere corrente nella parola di appoggio*/ p[k++]=m[i][j]; si /* si e' giunti a fine riga, si effettua la ricerca della parola sin qui determinata a cui deve aggiungere il terminatore*/ k++; p[k]='\0'; if (ricercaindizionario(p,dizionario,n)==0) /* Da aggiungere la porzione di codice analoga alla precedente che effettua la scansione della matrice per colonne */ /* Se si giunge alla fine della funzione, tutte le parole sono nel dizionario e si restituisce 1*/ return 1; - 5 - punti 6 Sia dato il seguente schema logico: Barca (ID, Nome, VelocitàMax, Peso, IDProprietario) Proprietario(ID, Nome, Cognome, Nazionalità, DataNascita) Porto(Nome, Estensione, Città) Ormeggio(IDBarca, NomePorto, DataInizio,DataFine) Vincoli di integrità referenziale tra: Barca.IDProprietario e Proprietario.ID Ormeggio.IDBarca e Barca.ID Ormeggio.NomePorto e Porto.Nome Indicare le chiavi primarie ed i vincoli di integrità referenziale. Fornire in SQL le seguenti query: 5

a) Elencare i proprietari di nazionalità italiana che hanno ormeggiato la propria barca presso il porto di Nizza nel 011 b) Determinare i proprietari di nazionalità francese nati nel 1973 c) Elencare il nome delle barche ed i relativi proprietari che sono state ormeggiate nel 011 presso il porto di Valencia per un periodo consecutivo superiore a 15 giorni. 6 a) SELECT Proprietario.* FROM Barca, Proprietario,Porto,Ormeggio WHERE Ormeggio.IDBarca=Barca.ID and NomePorto=Porto.Nome and IDProprietario=Proprietario.ID and Città= Nizza and DataInizio >=1/1/011 b) SELECT * FROM Proprietario WHERE DataNascita between 1/1/1973 and 31//1973 and Nazionalità= Francese c) SELECT Barca.Nome, Cognome, Poprietario.Nome FROM Barca, Proprietario,Porto,Ormeggio WHERE Ormeggio.IDBarca=Barca.ID and NomePorto=Porto.Nome and IDProprietario=Proprietario.ID and Città= Valencia and DataInizio >=1/1/011 and DataFine <=31/1/011 and DataFine-DataInizio>15 6