191104_primoCompitino

Scarica in formato pdf o txt
Scarica in formato pdf o txt
Sei sulla pagina 1di 3

PRIMA PROVA INTERMEDIA DEL MODULO DI

MOTIVARE IN MANIERA CHIARA LE SOLUZIONI PROPOSTE A CIASCUNO DEGLI ESERCIZI SVOLTI

ESERCIZIO 1 (4 punti)
Semplificarla l’espressione booleana 𝐹 = 𝐴𝐵 ̅̅̅̅ + 𝐴𝐵̅ con le leggi dell’algebra
booleana. Verificare il risultato della semplificazione con le tabelle di verità.

ESERCIZIO 2 (4 punti)
Descrivere in modo chiaro e sintetico i moduli di un moderno sistema operativo.

ESERCIZIO 3 (25 punti)

Esercizio 3.1 (6 punti)


Il comune di Cagliari ha organizzato un importante evento per il quale è atteso un
certo numero stimato di persone. Si pensa di scegliere come “location” un terreno
fuori città, ma non si sa se l’estensione del terreno possa contenerle.
Scrivere un programma C che, leggendo da tastiera la misura dell’estensione del
terreno in ettari, espressa tramite floating point, stampi a video se essa è in grado di
contenere il numero atteso di partecipanti, valore letto sempre da tastiera. Per far
questo si consideri che:
- un ettaro equivale a 104 metri quadri;
- in un metro quadro possono stare in piedi fino a quattro persone.
N.B. L’approssimazione di un floating point x all’intero più vicino si ha tramite la
funzione round(x) nella libreria math.h.

Esercizio 3.2 (19 punti)


1. (3 punti) Definire una struttura C composta da due stringhe di massimo 50
caratteri ed un intero, rappresentanti rispettivamente nome, conome e numero
di matricola di uno studente. Si chiami questa struttura dati Tipo_Studente.
2. Si scriva un programma C che:
a. (6 punti) legga una sequenza di due stringhe e un intero rappresentante
nome, cognome e numero di matricola di uno studente e li memorizzi in
un vettore di variabili di tipo Tipo_Studente di massimo 50 elementi.
L’inserimento termina se viene inserita la stringa “FINE” o al raggiungimento
dei 50 studenti.
b. (10 punti) Si stampi a video il numero di studenti la cui iniziale di cognome
corrisponde a quella di un carattere inserito da tastiera.
N.B. La funzione strcmp(s1,s2) della libreria string.h restituisce 0 se le stringhe s1 e s2
sono identiche.
Soluzioni

ESERCIZIO 1

Tramite la legge di De Morgan, si ha:


𝐹 = ̅̅̅̅
𝐴𝐵 + 𝐴𝐵̅ = 𝐴̅ + 𝐵̅ + 𝐴𝐵̅
Mettendo in evidenza 𝐵̅:
𝐹 = 𝐴̅ + 𝐵̅ + 𝐴𝐵̅ = 𝐴̅ + 𝐵̅ ∙ (1 + 𝐴) = 𝐴̅ + 𝐵̅

Ciò si evince dalla tabella di verità seguente:


𝐴 𝐵 𝐴̅ 𝐵̅ 𝐴̅ + 𝐵̅ ̅̅̅̅ + 𝐴𝐵̅
𝐴𝐵
0 0 1 1 1 1
0 1 1 0 1 1
1 0 0 1 1 1
1 1 0 0 0 0

ESERCIZIO 2

Si vedano le dispense del corso.

ESERCIZIO 3

#include <stdio.h>
#include <math.h>

/* Soluzione dell’Esercizio 3.1 */


int main()
{
float ettari, mq;
int npersone,n;

printf("Inserire l\'estensione del terreno in ettari:\n");


scanf("%f",&ettari);

mq=ettari*10000; /*dati del problema*/


npersone=round(4.*mq);

scanf("%d",&n);
if (n<=npersone)
printf("%d possono essere contenute in %f ettari\n",n,ettari);
else
printf(“L\’area scelta è troppo piccola\n”);

return 0;

Elementi di Informatica – 4 novembre 2019 2


#include <stdio.h>
#include <string.h>

/* Esercizio 3.2.1*/
typedef struct
{
char nome[50], cognome[50];
int matricola;
} Tipo_Studente;

/*Esercizio 3.2.2 e 3.2.3*/


int main()
{
Tipo_Studente studenti[50];
Tipo_Studente nuovo;
int nstudenti, i, conto;
char iniziale;

/* Esercizio 3.2.2 */
nstudenti=0;
printf("Inserire nome, cognome e matricola di uno studente.\n");
printf("Inserire \'FINE\' per terminare l'inserimento.\n");
scanf("%s",&nuovo.nome[0]);
while((strcmp(nuovo.nome,"FINE"))&&(nstudenti<50))
{
scanf("%s %d",&nuovo.cognome[0],&nuovo.matricola);
studenti[nstudenti]=nuovo;
nstudenti++;
scanf("%s",&nuovo.nome[0]);
}
scanf("%c",&iniziale); /*leggo l'ultimo a capo*/

/*Esercizio 3.2.3*/
printf("Inserimento terminato.\n\n");
printf("Inserire l\'iniziale di cognome:\n");
scanf("%c",&iniziale);
for(i=0, conto=0; i<nstudenti; i++)
if (studenti[i].cognome[0]==iniziale)
conto=conto+1;
printf("Numero di studenti con iniziale pari a %c:
%d\n",iniziale, conto);

return 0;
}

Elementi di Informatica – 4 novembre 2019 3

Potrebbero piacerti anche