Politecnico di Milano Facoltà di Ingegneria Civile, Ambientale e Territoriale Informatica B [079904] Prof. P. Plebani Allievi Ingegneria Civile e Ambientale II prova in itinere (04 Febbraio 2009) Cognome e nome Matricola Firma Domanda 1 2 3 4 5 Punteggio max 6 5 9 6 6 TOT Punteggio 32 La durata della prova è di 2 ore. Non è consentito consultare libri o appunti, non è consentito l'uso di calcolatrici. Scrivere solo sui fogli distribuiti utilizzando il retro delle pagine in caso di necessità e cancellando le parti di brutta con un tratto di penna. Non separare questi fogli. Per tutti gli esercizi non è sufficiente fornire il risultato, ma è necessario mostrare il procedimento seguito. Gli allievi sono invitati a privilegiare chiarezza, proprietà di linguaggio e sinteticità nelle risposte agli esercizi, con l obiettivo di dimostrare la loro conoscenza degli argomenti.
Domanda 1. Algoritmi su matrici (6 punti). Data una matrice di interi di dimensione 10x10, sviluppare un programma C in grado di inserire nella matrice i valori inseriti dall utente (2), di stampare a video la matrice colonna per colonna (3) e successivamente, per ogni colonna, stampare anche la somma degli elementi (1). Non è richiesto l utilizzo di sottoprogrammi. int main() { int m[10][10], i, j; int somma[10]; for (j=0; j<10; j++) { scanf( %d, &m[i][j]); somma[i]=0; for (j=0; j<10; j++) { printf( %d, m[j][i]); somma[i]=somma[i]+m[i][j]; printf( %d, somma[i]);
Domanda 2. Gestione dei file. Data una matrice m[10][3] che contiene per ogni riga l imponibile, l iva e il totale di 10 fatture, si codifichi una funzione C che rispetti il seguente prototipo int scrivifatture(int m[10][3]); e che sia in grado di memorizzare sul file fatture.txt riga per riga i valori contenuti nella matrice. La funzione restituirà -1 se ci sono stati errore nell accesso al file; 0 in caso contrario. Inoltre si codifichi la funzione C relativa al seguente prototipo: int totaleiva(); che leggendo sempre dal file fatture.txt calcoli la somma dell importo IVA di tutte le fatture memorizzate. In caso di errore nell accesso al file la funzione restituisce -1; int scrivifatture(int m[10][3]) { int i,j; FILE *f; if ((f=fopen( fatture.txt, w ))!=NULL) { for (j=0; j<3; j++) { fprintf(f, %d, &m[i][j]); fclose(f) return 0; else { return -1; int totaleiva(){ int somma=0; int i; FILE *f; if ((f=fopen( fatture.txt, r ))!=NULL) { for (i=0; i<30; i++) { if (i%3 == 0) { fscanf(f, %d, &iva); somma = somma + iva; return somma; else { return -1;
Domanda 3. Sottoprogrammi in C (9 punti). Dato un array di N interi sviluppare un programma C composto da 3 funzioni con opportuni parametri di ingresso e di uscita in grado di: Riempire l array con i valori passati dall utente via tastiera. I valori dovranno essere compresi tra 1 e 100; e il numero di valori effettivamente richiesti dipende da un parametro richiesto (il cui valore dovrà essere minore di N); i restanti elementi saranno valorizzati a 0 (4); Dato un numero intero X ricevuto dal main, calcolare e restituire il prodotto degli elementi con indice superiore od uguale al numero X (effettuare tutti i controlli del caso e in caso di errore restituire -1); (3) Restituire, a seguito di una singola chiamata, la somma degli elementi in posizioni pari E la somma degli elementi dispari. (2) Le funzioni definite dovranno essere richiamate nello stesso ordine all intero di un main void riempi(int v[n], int n) { for (i=0; i<n; i++) { v[i]=0; if (i<n) { while (v[i]<1 v[i]>100) { scanf( %d, &v[i]); int prodotto(int i, int v[n]) { int p =0; if (i>=n) return -1; else { for (j=i; j<n; j++) { p = p + v[i]; return p; int somma(int *pari, int v[n]) { int sp=0, sd=0, i; for (i=0; i<n; i++) { if (i%2 ==0) sp=sp+v[i]; else sd= sd + v[i]; *pari = sp; return sd; int main() { int v[n], int p, int sp, sd; riempi(v); p = prodotto(10, v); sd = somma(&sp, v);
Domanda 4. Architetture. Illustrare le componenti dell Unità di Elaborazione secondo il modello della macchina di Von Neumann e descrivere il ciclo fetch-decode-execute
Domanda 5. Sistemi operativi. Descrivere i compiti del gestore dei processi all interno di un sistema operativo e confrontare le politiche di scheduling solitamente realizzate da esso