Politecnico di Milano Facoltà di Ingegneria Milano Leonardo A.A. 2007/08 Informatica A E. Quintarelli Allievi Gestionali Recupero del 20 Febbraio 2008 Cognome e nome Firma Matricola Domanda 1 2 3 4 5 6 Punteggio max 5 4 5 3 7 4 TOT Punteggio La durata della prova è di 2h 30m. Non è consentito consultare libri o appunti, non è consentito l'uso di calcolatrici. 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. 1
Domanda 1. Scrivere la tabella di verità dell espressione (B or C) and (B or not A). Dire quanti bit sono necessari per rappresentare l intervallo [ 58, + 58] e giustificare il risultato. Con il numero di bit individuato, codificare in complemento a 2 (mostrando tutti i passaggi) i valori: N 1 = +56 N 2 = -56 Effettuare in complemento a due la somma N2+N2 indicando e motivando eventuali riporti e/o overflow 2
Domanda 2: Basi di Dati. Dato il seguente schema relazionale che modella i dati relativi ai dipendenti di una ditta. Dipendente(Matricola, Nome, Cognome, DataNascita, TitoloStudio, StipendioMensile) Tecnico(Codice, Nome, Cognome, Qualifica, CodiceResponsabile) Responsabile(Matricola, Nome, Cognome, DataNascita, DataAssunzione, Budget) Reparto(CodiceReparto,NomeReparto, Piano, CodiceResponsabile) Sottolineare le chiavi primarie ed indicare i vincoli di chiave esterna. Definire le seguenti interrogazione in SQL: i. trovare il nome e il cognome di tutti i tecnici che sono diretti dal responsabile con codice X, ordinando alfabeticamente il risultato. ii. trovare i diversi stipendi dei dipendenti che guadagnano più di 1500 euro mensili e lavorano nel reparto diretto dal Responsabile Mario Rossi. 3
Domanda 3. Definire le opportune strutture dati per rappresentare i dati riguardanti una azienda con 30 reparti. Ogni reparto è definito da un codice (intero), dal suo nome (20 caratteri) e dall elenco dei dipendenti che vi appartengono (al massimo 15). Ogni dipendente è caratterizzato a sua volta da: nome (20 caratteri), cognome (20 caratteri) e stipendio (intero). Si scrivano poi il prototipo, la chiamata nel main e la definizione, di una funzione che riceve in ingresso una variabile a che contiene i dati relativi ad una azienda, un codice c di un reparto e un intero s (e qualsiasi altro parametro ritenuto necessario); la funzione restituisce al chiamante il numero di dipendenti del reparto c che hanno uno stipendio superiore o uguale a s e il numero di dipendenti del reparto c che hanno uno stipendio inferiore a s. 4
Domanda 4. Dato il seguente segmento di codice C, #include <stdio.h> int P(int x, int *y) { x++; (*y)++; return (x+(*y)); } void Q(int x, int *y) { x++; (*y)++; } int main() { } int x=0; int y=10; int i,z; int *q=&z; for (i=0; i<5; i++) { z=p(x,&y); Q(x,&z); if (i%2==0) *q=x; printf("%d, %d, %d %d\n", x, y, z, *q); } Completare la tabella sottostante indicando i valori assunti dalle variabili x, y, z? x y z *q Domanda 5. Si scriva un programma C, scomposto in funzioni e procedure, che, data una matrice m di interi di dimensione 5
NxN (N definita come costante simbolica), permetta di: 1. Acquisire dal tastiera i valori degli elementi della matrice m, rifiutando eventuali valori non compresi nell intervallo [0, 99] (gli estremi dell intervallo sono valori ammissibili). 2. Acquisire da tastiera nel main un indice di colonna c (rifiutando eventuali valori non validi come indici) e calcolare in una funzione il valore medio degli elementi delle colonne c,, N-1? 3. Calcolare (in una funzione diversa di quella definita per risolvere il punto 2) e restituire al chiamante il valore minimo dei valori medi calcolati al punto 2. 4. Stampare su un file ris.txt i valori della diagonale principale che sono presenti (in qualsiasi posizione) nell altra diagonale della matrice m. 6
7
Domanda 6. Strutture Dati Dinamiche in C. Si realizzi una funzione C chiamata conta che, ricevuta in ingresso una lista di caratteri minuscoli (e qualsiasi altro parametro ritenuto necessario), restituisce al chiamante il numero di vocali presenti nella lista e il numero di consonanti presenti nella lista (due valori distinti). Oltre alla funzione richiesta dovranno essere dichiarate le opportune strutture dati necessarie e dovrà essere mostrata la chiamata della funzione nel programma principale. 8
9