Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Avvertenze:
1. (16 punti)
Un file contiene una sequenza di date, una per riga, ordinate cronologicamente. Ciascuna data `e
scritta nel formato GG/MM/AAAA. Come esempio si consideri il seguente file
23/6/1999
12/4/2001
16/4/2001
18/12/2003
20/12/2003
4/4/2004
Si scriva una funzione C che prenda come parametri il nome del file ed una data di riferimento e
restituisca la prima data presente nel file che sia posteriore alla data passata come parametro.
Nel caso che tutte le date siano anteriori al parametro, la funzione deve restituire il valore del
parametro stesso.
Ad esempio, nel caso del file precedente e della data di riferimento 23/2/2003, la funzione deve
restituire la data 18/12/2003. Se invece la data di riferimento 4/11/2006, la funzione deve
restituire la data 4/11/2006.
2. (14 punti)
Si definisca la funzione C che elimina da una lista di interi tutti gli elementi doppi (con lo stesso
valore di un altro elemento) rendendo disponibile al sistema la memoria da essi occupata.
1. (16 punti)
#include <stdio.h>
#include <stdlib.h>
struct Data
{
int giorno;
int mese;
int anno;
};
struct list{
int value;
struct list * next_ptr;
};
Avvertenze:
1. (16 punti)
Si consideri il seguente file di testo:
Esso contiene per ogni riga, separati da uno spazio, il nome di un ristorante seguito dalle coordinate
X e Y in un sistema cartesiano. Il nome del ristorante non contiene mai spazi.
Si scriva una funzione C che prenda come parametri il nome del file e un punto nel sistema
cartesiano (rappresentato da due valori X e Y entrambe numeri in virgola mobile) e che scriva nello
standard output il nome del ristorante pi vicino al punto specificato (tra quelli contenuti nel file).
Ad esempio se i valori di X e Y sono rispettivamente 40.1 e 72.2, loutput dovr essere:
Jack_Hot_Dogs
2. (14 punti)
Si definisca la funzione C che elimina da una lista di interi tutti gli elementi che sono multipli di un
altro elemento nella lista, rendendo disponibile al sistema la memoria da essi occupata.
1. (16 punti)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Ristorante
{
char nome[30];
float x;
float y;
};
struct Ristorante r;
char nome_rist[30];
float min_dist = 0;
while (fscanf(fp,"%s %f %f",r.nome,&r.x,&r.y) != EOF) {
printf("%s %f:%f\n",r.nome,r.x,r.y);
float d = distanza(r, x, y);
printf("Distanza: %f\n",d);
if (min_dist == 0 || d < min_dist) {
printf("Nuova didtanza minima: %f\n",d);
min_dist = d;
strcpy(nome_rist,r.nome);
}
}
printf("Il ristorante pi vicino : %s\n", nome_rist);
}
ristoranteVicino(argv[1], x, y);
return 0;
}
2. (14 punti)
struct list{
int value;
struct list * next_ptr;
};
!! !
PROVA SCRITTA 24 Luglio 2014
!
Avvertenze:
* Chi si presenter allorale pu, facoltativamente, portare limplementazione al computer della propria
soluzione,
eventualmente corretta, corredata di tutto quanto necessario alla verifica del corretto funzionamento.
!
1. (23 punti)
Si consideri il seguente file di testo contenente alcuni nomi di citt e il relativo numero di abitanti :
!
Ancona:101258
Torino:900873
Pisa:88627
Genova:596958
Palermo:678412
Pescara:121342
!
Si scriva una procedura in linguaggio C che legga le informazioni dal file e che scriva sullo
standard output i numeri di abitanti in ordine crescente. Utilizzare lalgoritmo QuickSort per
lordinamento. Si assuma inoltre che il file non contenga pi di 30 righe e che i nomi delle citt non
siano pi lunghi di 30 caratteri.
Nel caso del file di esempio loutput dovr quindi essere:
!
88627
101258
121342
596958
678412
900873
!
2. (7 punti)
Si definisca in C una struttura dati per rappresentare un albero binario di numeri in virgola mobile.
!
!
!
1. (23 punti)
#include <stdio.h>
!
#include <stdlib.h>
//5 punti
void scambia(int* a, int* b) {
int c = *a;
*a = *b;
*b = c;
!
}
//10 punti
void quickSort(int v[],int iniz,int fine){
if (iniz<fine) {
int i=iniz,j=fine,pivot=v[(iniz+fine)/2];
do {
while (v[i] < pivot) i++;
while (v[j] > pivot) j--;
if (i < j) scambia(&v[i], &v[j]);
if (i <= j) i++, j--;
} while (i <= j);
if (iniz < j) quickSort(v, iniz, j);
if (i < fine) quickSort(v, i, fine);
}
!
}
int main() {
//2 punti
FILE *fp;
if ((fp = fopen("citta.txt","r")) == NULL) {
printf("File error\n");
return 1;
};
//2 punti
int ab[30];
char buff[30];
//2 punti
int i = 0;
while (fscanf(fp,"%s %d",buff,&ab[i]) != EOF) {
i++;
}
quickSort(ab,0,i);
//2 punti
for (int k=0;k<i;k++) {
printf("%d\n",ab[k]);
}
return 0;
}
!
2. (7 punti)
!!
struct tree {
float dato;
struct tree *sx;
struct tree *dx;
};
Universit Politecnica delle Marche, Facolt di Ingegneria,
!
Elementi di Informatica (Prof. C. Morbidoni)
!!
PROVA SCRITTA 1 Ottobre 2014
!
!
Avvertenze:
* Chi si presenter allorale pu, facoltativamente, portare limplementazione al computer della propria
soluzione,
eventualmente corretta, corredata di tutto quanto necessario alla verifica del corretto funzionamento.
!
1. (15 punti)
Scrivere una procedura RICORSIVA in C che, data una stringa di lunghezza massima di 30
caratteri, scriva a video tutte le stringhe ottenute eliminando di volta in volta il primo carattere fino
ad ottenere una stringa di un solo carattere.
Ad esempio data la stringa BOCCIATO, loutput della funzione dovr essere:
!
BOCCIATO
OCCIATO
CCIATO
CIATO
IATO
ATO
TO
O
!
2. (15 punti)
Scrivere un programma C che chieda ripetutamente allutente di digitare una parola da tastiera,
finche lutente non digiti due parole consecutive uguali (solo in questo caso il programma termina).
!
!
!
!
!
!
!
!
!
!
SOLUZIONE
!
1. (15 punti)
!
void eco(char str[], int l, int i){
!
if(i < l){
for (int k = i; k < l; k++) {
printf("%c",str[k]);
}
printf("\n");
i++;
eco(str,l, i);
}
!
2. (15 punti)
!
#include <stdio.h>
void copy_string(char s1[], char s2[]) {
int i;
for(i=0; s1[i]!='\0'; ++i)
{
s2[i]=s1[i];
}
s2[i]='\0';
}
int compare_string(char s1[], char s2[]) {
int i;
for(i=0; s1[i]!='\0'; ++i) {
if (s2[i]!=s1[i]) {
return 1;
};
}
return 0;
}
int main() {
char parola1[30];
char parola2[30];
printf ("Digita una parola: ");
scanf("%s",parola1);
printf ("Digita una parola: ");
scanf("%s",parola2);
while (strcmp(parola1,parola2)!=0) {
copy_string(parola2, parola1);
printf ("Digita una parola: ");
scanf("%s",parola2);
}
return 0;
}
!
Oppure
!
#include <stdio.h>
#include <string.h>
int main() {
char parola1[30];
char parola2[30];
printf ("Digita una parola: ");
scanf("%s",parola1);
printf ("Digita una parola: ");
scanf("%s",parola2);
while (strcmp(parola1,parola2)!=0) {
strcpy(parola1, parola2);
printf ("Digita una parola: ");
scanf("%s",parola2);
}
return 0;
}
Universit Politecnica delle Marche, Facolt di Ingegneria,
Avvertenze:
* ATTENZIONE:
* Non consentito consultarsi ne parlare con i compagni, pena lannullamento della prova.
* LEGGERE E CAPIRE BENE IL TESTO DEGLI ESERCIZI PRIMA DI COMINCIARE SCRIVERE CODICE
Esempio I/0:
Input: Q = Pip >> Output: Pippo
Input: Q = Pa >> Output: Paperino Paperone
Input: Q = Tal >> Output: No match found
Attenzione: non consentito usare la funzione di libreria strcmp per confrontare le stringhe.
Attenzione: implementare il programma utilizzando la notazione array ( [] ) per accedere ai singoli
caratteri.
SOLUZIONE
#include <stdlib.h>
#include <stdio.h>
return pnew;
}
2. (15 punti)
#include <stdio.h>
#include <string.h>
//Metodo main
//ERRORE: -2 punti
int main() {
int matched = 0;
}
// Scrivere a video No atch found solo se non esiste alcuna stringa "S[i]"
// ERRORE: -3 punti
if (matched == 0) {
//Utilizzo della funzione di libreria per scrivere a video
//ERRORE: -3 punti
printf("No matches found.\n");
}
//NON RISCHIESTO
} while (strcmp("quit",q) !=0);
//Ritornare l'intero 0
//ERRORE: -1 punto
return 0;
}
Universit Politecnica delle Marche, Facolt di Ingegneria, Corsi di Laurea in Ingegneria:
Elettronica, Biomedica
Avvertenze:
o (5 punti)
a) Definire un tipo di dato o una struttura che rappresenti un prodotto, con le seguenti
caratteristiche:
o ID, un intero come codice identificativo del prodotto (esempio 12, 34, etc.)
o Marca. Il nome dellazienda che produce il prodotto. Esempi di valori: Indesit,
Merloni.
o Tipologia. Indica il tipo di prodotto, esempi di valori: Coltello, Lavatrice, Forno.
o Prezzo. Il prezzo in euro. Esempio valori: 24.99 , 130.50
o (10 punti) Implementare una funzione INSERISCI che data una lista di prodotti ed un
prodotto, inserisca questo ultimo nella lista in modo che essa risulti ordinata in ordine
crescente di prezzo dei prodotti.
(Nota: La funzione assume che la lista in ingresso sia gi ordinata e si limita ad inserire il
nuovo elemento nella posizione giusta)
o (12 punti) Implementare una funzione SCRIVI_ORDINE che prenda come parametri una
lista di prodotti ordinati per prezzo crescente e un float indicante il budget in euro. La
funzione deve scrivere a video le caratteristiche del maggior numero possible di prodotti
acquistabili con il budget dato (i cui prezzi sommati siano quindi minori o uguali al budget).
Loutput deve essere della forma:
o Marca: Iguzzini, Tipologia: Tazza, Prezzo: 9.90;
Marca: Gibson, Tipologia: Corde per chitarra, Prezzo: 13.50;
typedef struct {
int id;
float prezzo;
char* marca;
char* tipologia;
} prodotto;
prodotto p1;
p1.id = 1;
p1.prezzo = 133;
p1.marca = "indesit";
p1.tipologia = "forno";
prodotto p2;
p2.id = 2;
p2.prezzo = 29.34;
p2.marca = "indesit";
p2.tipologia = "padella";
prodotto p3;
p3.id = 3;
p3.prezzo = 1033;
p3.marca = "gibson";
p3.tipologia = "chitarra";
prodotto p4;
p4.id = 4;
p4.prezzo = 2.45;
p4.marca = "indesit";
p4.tipologia = "tappo";
prodotto p5;
p5.id = 5;
p5.prezzo = 56.99;
p5.marca = "gibson";
p5.tipologia = "Cavo";
lista_prodotti l = {p1,NULL};
lista_prodotti* lp = &l;
inserisci_ordinato(&lp,p2);
inserisci_ordinato(&lp,p3);
inserisci_ordinato(&lp,p4);
inserisci_ordinato(&lp,p5);
//scrivi(lp);
scriviOrdine(lp, 3000);
}
Universit Politecnica delle Marche, Facolt di Ingegneria,
Avvertenze:
* ATTENZIONE:
* Non consentito consultarsi ne parlare con i compagni, pena lannullamento della prova.
* LEGGERE E CAPIRE BENE IL TESTO DEGLI ESERCIZI PRIMA DI COMINCIARE SCRIVERE CODICE
23.56 50.78
40.5 72.78
45.56 -5.4
80.61 -10.9
35.5 70.78
72.56 15.89
-12.2 -15.54
Scrivere una funzione ordina_rettangoli che, dato il nome del file, ritorni un array contenente le
aree di tutti i rettangoli, ordinati in modo crescente. La scelta dellalgoritmo di ordinamento la-
sciata allo studente.
Nota: si assuma che il file non possa contenere pi di 100 righe.
Nota: se necessario possibile usare la funzione abs(double), contenuta nella libreria math.c, per
ottenere il valore assoluto di un numero.
SOLUZIONE
Esercizio 1
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
//4 punti
void inserisci_ordinato(list **lpp, int value) {
list *tmp_lp;
while (*lpp!=NULL && (*lpp)->info < value)
lpp=&((*lpp)->next);
tmp_lp=*lpp;
*lpp=(list *)malloc(sizeof(list));
(*lpp)->info=value;
(*lpp)->next=tmp_lp;
}
//4 punti
int leggi_lista(list ** primo) {
int i, n;
printf("Numero di elementi: ");
scanf("%d", &n);
//2 punti
void stampa_lista(list *p) {
while (p != NULL) {
printf("%d ", p->info);
p = p->next;
}
printf("\n");
return;
}
//2 punti
void stampa_array(int arr[], int len) {
for (int i=0; i<len; i++) {
printf("%d ",arr[i]);
}
printf("\n");
}
//3 punti
int main(void) {
list *p;
p = NULL;
int plen = leggi_lista(&p);
stampa_lista(p);
int result[plen], i =0;
while (p != NULL) {
if (p->info%2==0) {
result[i] = p->info;
i++;
}
p = p->next;
}
stampa_array(result,i);
return(0);
}
Esercizio 2
//Ordinamento: 6 punti
void bubble_sort(int v[], int n){
int i; boolean ordinato = false;
while (n>1 && !ordinato){
ordinato = true;
for (i=0; i<n-1; i++)
if (v[i]>v[i+1]) {
scambia(&v[i],&v[i+1]);
ordinato = false;
}
n--;
}
}
//1 punto
void stampa_array(int arr[], int len) {
for (int i=0; i<len; i++) {
printf("%d ",arr[i]);
}
printf("\n");
//5 punti
void ordina_rettangoli(char* nome_file) {
FILE *fp;
if ((fp = fopen(nome_file,"r")) == NULL) {
printf("File error\n");
return;
};
float aree[100];
int i = 0;
while (fscanf(fp,"%f %f, &r.x,&r.y) != EOF) {
float area = abs(x*y);
aree[i] = area;
i++;
}
bubble_sort(aree, i);
stampa_array(aree, i)
return;
}
Universit Politecnica delle Marche, Facolt di Ingegneria,
Avvertenze:
* ATTENZIONE:
* Non consentito consultarsi ne parlare con i compagni, pena lannullamento della prova.
* LEGGERE E CAPIRE BENE IL TESTO DEGLI ESERCIZI PRIMA DI COMINCIARE A SCRIVERE CODICE
Esercizio 3 (4 punti)
Si esprimano le seguenti dichiarazioni di variabili e funzioni in linguaggio C:
a un array di 20 puntatori a stringhe.
b un puntatore a un array di 10 puntatori a char.
f una funzione che ha come parametro un array di numeri reali e che ritorna un puntatore ad un
file.
LE REGOLE
Ogni esercizio vale un certo numero di punti in totale. Lo studente dovr togliere da questo totale il
numero di punti specificato per ogni parte del programma errata.
Lo studente potr presentarsi allorale solo se raggiunger il punteggio minimo di 16 punti.
Durante lorale lo studente dovr, su richiesta, saper spiegare chiaramente ogni parte del suo
programma per confermare il risultato dellautovalutazione.
Il colloquio orale (non facoltativo!) potr riguardare ogni argomento del programma e alzare cos
come abbassare il voto ottenuto allo scritto (anche sotto la sufficienza).
Esercizio 3 (4 punti)
// 1 punto
char ** a[20];
// 1 punto
char * (*b)[10];
// 2 punti
FILE * f(float vett[],
);
Universit Politecnica delle Marche, Facolt di Ingegneria,
Avvertenze:
* ATTENZIONE:
* Non consentito consultarsi ne parlare con i compagni, pena lannullamento della prova.
* LEGGERE E CAPIRE BENE IL TESTO DEGLI ESERCIZI PRIMA DI COMINCIARE A SCRIVERE CODICE
22 Giulio Paldo
34 Marco Valdo
52 Batrice Pollenzi
18 Pablo Pincio
.
Avvertenze:
* Consegnare solo fogli formato A4 scritti su un solo lato (no fronte-retro), consegnare anche il presente foglio
* In testa a ciascun foglio (compreso il presente) scrivere: cognome, nome, numero progressivo di pagina rispetto al
totale
esempio per il secondo foglio di 3 consegnati: Giuseppe Russo 2/3
* Mantenere sul banco il libretto o altro documento di riconoscimento fino a controllo avvenuto
* Nientaltro deve trovarsi sul banco: non consentito consultare libri, dispense, appunti, ecc. o usare il telefonino
pena lannullamento immediato della prova!
* La correzione di riferimento per lautovalutazione verr effettuata subito dopo lesame
* Chi si presenta allorale pu, facoltativamente, portare limplementazione al computer della propria soluzione, even-
tualmente corretta, corredata di tutto quanto necessario alla verifica del corretto funzionamento.
Esercizio 3 (6 punti)
Si esprimano le seguenti dichiarazioni di variabili e funzioni (prototipi) in linguaggio C:
A e un array di 30 puntatori a puntatori a interi
B un record (struttura) composto da due puntatori a carattere
C e un array di 30 record (strutture) composti da un intero e 2 array di 25 caratteri
D una funzione che ritorna un puntatore a float ed ha come parametri un intero e un puntatore a
puntatore a float
REGOLE
Ogni esercizio vale un certo numero di punti in totale. Lo studente dovr togliere da questo totale il
numero di punti specificato per ogni parte del programma errata.
Lo studente potr presentarsi allorale solo se raggiunger il punteggio minimo di 18 punti.
Durante lorale lo studente dovr, su richiesta, saper spiegare chiaramente ogni parte del suo
programma per confermare il risultato dellautovalutazione e quindi per superare lesame.
Il colloquio orale (non facoltativo, ma a discrezione del docente) potr riguardare ogni argomento
del programma e alzare cos come abbassare il voto ottenuto allo scritto (anche sotto la sufficien-
za).
Soluzione Esercizio 1
#include <stdio.h>
#include <stdlib.h>
fclose(file);
return;
}
Soluzione Esercizio 2
Soluzione Esercizio 3
Avvertenze:
* Consegnare solo fogli formato A4 scritti su un solo lato (no fronte-retro), consegnare anche il presente foglio
* In testa a ciascun foglio (compreso il presente) scrivere: cognome, nome, numero progressivo di pagina rispetto al
totale
esempio per il secondo foglio di 3 consegnati: Giuseppe Russo 2/3
* Mantenere sul banco il libretto o altro documento di riconoscimento fino a controllo avvenuto
* Nientaltro deve trovarsi sul banco: non consentito consultare libri, dispense, appunti, ecc. pena lannullamento
della prova!
* Non consentito usare il telefonino durante la prova: pena lannullamento della prova stessa!
* La correzione di riferimento per lautovalutazione verr effettuata subito dopo lesame
* Chi si presenter allorale pu, facoltativamente, portare limplementazione al computer della propria soluzione, even-
tualmente corretta, corredata di tutto quanto necessario alla verifica del corretto funzionamento.
* LEGGERE E CAPIRE BENE IL TESTO DEGLI ESERCIZI PRIMA DI COMINCIARE A SCRIVERE CODICE
Esercizio 3 (3 punti)
Si scrivano le seguenti dichiarazioni in linguaggio C:
A un record contenente una stringa di 20 caratteri ed un puntatore a puntatore ad un carattere
B una funzione che ritorna un puntatore a intero e prende come parametro un array di stringhe e la
sua lunghezza
C una procedura che prende come parametro un numero decimale, un array di interi e la sua lun-
ghezza
LE REGOLE
Ogni esercizio vale un certo numero di punti in totale. Lo studente dovr togliere da questo totale il
numero di punti specificato per ogni parte del programma errata.
Lo studente potr presentarsi allorale solo se raggiunger il punteggio minimo di 16 punti.
Durante lorale lo studente dovr, su richiesta, saper spiegare chiaramente ogni parte del suo
programma per confermare il risultato dellautovalutazione e quindi per superare lesame.
Il colloquio orale (non facoltativo, ma a discrezione del docente) potr riguardare ogni argomento
del programma e alzare cos come abbassare il voto ottenuto allo scritto (anche sotto la sufficien-
za).
Esercizio 1 - 12 punti
Versione 1:
#include <stdio.h>
#include <stdlib.h>
Esercizio 3 - 3 punti
struct A { char s[20]; char** c;} // 1 punto
int* B(char* ss[], int len); //1 punti
void C (float f, int v[], int len); //1 punto
Universit Politecnica delle Marche, Facolt di Ingegneria
Elementi di Informatica (Prof. C. Morbidoni)
PROVA SCRITTA 14 Gennaio 2016
DURATA: 1 ora e 30 minuti
Avvertenze:
* Consegnare solo fogli formato A4 scritti su un solo lato (no fronte-retro), consegnare anche il presente foglio
* In testa a ciascun foglio (compreso il presente) scrivere: cognome, nome, numero progressivo di pagina rispetto al totale
esempio per il secondo foglio di 3 consegnati: Giuseppe Russo 2/3
* Mantenere sul banco il libretto o altro documento di riconoscimento fino a controllo avvenuto
* Nientaltro deve trovarsi sul banco: non consentito consultare libri, dispense, appunti, ecc. pena lannullamento della prova!
* Non consentito usare il telefonino durante la prova: pena lannullamento della prova stessa!
* La correzione di riferimento per lautovalutazione verr effettuata subito dopo lesame
* Chi si presenter allorale pu, facoltativamente, portare limplementazione al computer della propria soluzione, eventualmente cor-
retta, corredata di tutto quanto necessario alla verifica del corretto funzionamento.
* LEGGERE E CAPIRE BENE IL TESTO DEGLI ESERCIZI PRIMA DI COMINCIARE A SCRIVERE CODICE
Esempio:
dati.txt
Canone_televisivo_in_Italia 2050 12/01/2016
Iraq 1300 12/01/2016
Stato_Islamico 4040 12/01/2016
Canone_televisivo_in_Italia 300 13/01/2016
Guerra_civile_siriana 1500 13/01/2016
Arabia_Saudita 560 13/01/2016
Canone_televisivo_in_Italia 2350 14/01/2016
Guerra_civile_siriana 1500 14/01/2016
Esercizio 3 (6 punti)
Nel seguente codice sono presenti degli errori. Correggerlo scrivendo qui a fianco il codice corretto (3 punti)
cosa stampa il seguente codice? (fare una X sulla risposta corretta) (3 punti)
(a) i 2
(b) i 1
(c) ippo 1
(d) Pipp 2
Universit Politecnica delle Marche, Facolt di Ingegneria
Elementi di Informatica (Prof. C. Morbidoni)
PROVA SCRITTA 14 Gennaio 2016
DURATA: 1 ora e 30 minuti
Avvertenze:
* Consegnare solo fogli formato A4 scritti su un solo lato (no fronte-retro), consegnare anche il presente foglio
* In testa a ciascun foglio (compreso il presente) scrivere: cognome, nome, numero progressivo di pagina rispetto al totale
esempio per il secondo foglio di 3 consegnati: Giuseppe Russo 2/3
* Mantenere sul banco il libretto o altro documento di riconoscimento fino a controllo avvenuto
* Nientaltro deve trovarsi sul banco: non consentito consultare libri, dispense, appunti, ecc. pena lannullamento della prova!
* Non consentito usare il telefonino durante la prova: pena lannullamento della prova stessa!
* La correzione di riferimento per lautovalutazione verr effettuata subito dopo lesame
* Chi si presenter allorale pu, facoltativamente, portare limplementazione al computer della propria soluzione, eventualmente cor-
retta, corredata di tutto quanto necessario alla verifica del corretto funzionamento.
* LEGGERE E CAPIRE BENE IL TESTO DEGLI ESERCIZI PRIMA DI COMINCIARE A SCRIVERE CODICE
Esempio:
dati.txt
Canone_televisivo_in_Italia 2050 12/01/2016
Iraq 1300 12/01/2016
Stato_Islamico 4040 12/01/2016
Canone_televisivo_in_Italia 300 13/01/2016
Guerra_civile_siriana 1500 13/01/2016
Arabia_Saudita 560 13/01/2016
Canone_televisivo_in_Italia 2350 14/01/2016
Guerra_civile_siriana 1500 14/01/2016
Esercizio 3 (6 punti)
Nel seguente codice sono presenti degli errori. Correggerlo scrivendo qui a fianco il codice corretto (3 punti)
cosa stampa il seguente codice? (fare una X sulla risposta corretta) (3 punti)
(a) Pippo 3
(b) P 3
(c) Pippo 4
(d) i 4
Universit Politecnica delle Marche, Facolt di Ingegneria
Elementi di Informatica (Prof. C. Morbidoni)
PROVA SCRITTA 14 Gennaio 2016
DURATA: 1 ora e 30 minuti
Avvertenze:
* Consegnare solo fogli formato A4 scritti su un solo lato (no fronte-retro), consegnare anche il presente foglio
* In testa a ciascun foglio (compreso il presente) scrivere: cognome, nome, numero progressivo di pagina rispetto al totale
esempio per il secondo foglio di 3 consegnati: Giuseppe Russo 2/3
* Mantenere sul banco il libretto o altro documento di riconoscimento fino a controllo avvenuto
* Nientaltro deve trovarsi sul banco: non consentito consultare libri, dispense, appunti, ecc. pena lannullamento della prova!
* Non consentito usare il telefonino durante la prova: pena lannullamento della prova stessa!
* La correzione di riferimento per lautovalutazione verr effettuata subito dopo lesame
* Chi si presenter allorale pu, facoltativamente, portare limplementazione al computer della propria soluzione, eventualmente cor-
retta, corredata di tutto quanto necessario alla verifica del corretto funzionamento.
* LEGGERE E CAPIRE BENE IL TESTO DEGLI ESERCIZI PRIMA DI COMINCIARE A SCRIVERE CODICE
Esempio:
dati.txt
Canone_televisivo_in_Italia 2050 12/01/2016
Iraq 1300 12/01/2016
Stato_Islamico 4040 12/01/2016
Canone_televisivo_in_Italia 300 13/01/2016
Guerra_civile_siriana 1500 13/01/2016
Arabia_Saudita 560 13/01/2016
Canone_televisivo_in_Italia 2350 14/01/2016
Guerra_civile_siriana 1500 14/01/2016
Esercizio 3 (6 punti)
Nel seguente codice sono presenti degli errori. Correggerlo scrivendo qui a fianco il codice corretto (3 punti)
cosa stampa il seguente codice? (fare una X sulla risposta corretta) (3 punti)
(a) l 2
(b) P 1
(c) P 2
(d) l 1
Universit Politecnica delle Marche, Facolt di Ingegneria
Elementi di Informatica (Prof. C. Morbidoni)
PROVA SCRITTA 14 Gennaio 2016
DURATA: 1 ora e 30 minuti
Avvertenze:
* Consegnare solo fogli formato A4 scritti su un solo lato (no fronte-retro), consegnare anche il presente foglio
* In testa a ciascun foglio (compreso il presente) scrivere: cognome, nome, numero progressivo di pagina rispetto al totale
esempio per il secondo foglio di 3 consegnati: Giuseppe Russo 2/3
* Mantenere sul banco il libretto o altro documento di riconoscimento fino a controllo avvenuto
* Nientaltro deve trovarsi sul banco: non consentito consultare libri, dispense, appunti, ecc. pena lannullamento della prova!
* Non consentito usare il telefonino durante la prova: pena lannullamento della prova stessa!
* La correzione di riferimento per lautovalutazione verr effettuata subito dopo lesame
* Chi si presenter allorale pu, facoltativamente, portare limplementazione al computer della propria soluzione, eventualmente cor-
retta, corredata di tutto quanto necessario alla verifica del corretto funzionamento.
* LEGGERE E CAPIRE BENE IL TESTO DEGLI ESERCIZI PRIMA DI COMINCIARE A SCRIVERE CODICE
Esercizio 3 (6 punti)
Nel seguente codice sono presenti degli errori. Correggerlo scrivendo qui a fianco il codice corretto (3 punti)
cosa stampa il seguente codice? (fare una X sulla risposta corretta) (3 punti)
(a) u 3
(b) P 1
(c) u 1
(d) u 2
LE REGOLE
Ogni esercizio vale un certo numero di punti in totale. Lo studente dovr togliere da questo totale il numero di punti specificato per
ogni parte del programma errata.
Lo studente potr presentarsi allorale solo se raggiunger il punteggio minimo di 16 punti.
Durante lorale lo studente dovr, su richiesta, saper spiegare chiaramente ogni parte del suo programma per confermare il risul-
tato dellautovalutazione e quindi per superare lesame.
Il colloquio orale (non facoltativo, ma a discrezione del docente) potr riguardare ogni argomento del programma e alzare cos
come abbassare il voto ottenuto allo scritto (anche sotto la sufficienza).
#include <stdio.h>
#include <stdlib.h>
struct pageView {
int views;
char* page;
char* date;
};
int main() {
FILE* f1 = fopen("file1.txt","r");
if (f1 == NULL) {
exit(0);
}
struct pageView pv[1000];
int len = 0;
int views;
char page[100];
char* data;
while (fscanf(f1,%s%d %s,page,&views, data)!=EOF) {
int index = getIndexOf(pv, len, page);
if (index != -1) {
pv[index].views += views;
} else {
len++;
struct pageView newItem;
newItem.page = page;
newItem.views = views;
pv[len] = newItem;
}
}
}
#include <stdio.h>
int main() {
int v[10] = {2,123,4,5,6};
printf("%d",minimo(v,4));
}
Universit Politecnica delle Marche, Facolt di Ingegneria
Elementi di Informatica (Prof. C. Morbidoni)
PROVA SCRITTA 16 Febbraio 2016
DURATA: 1 ora e 30 minuti
Avvertenze:
* Consegnare solo fogli formato A4 scritti su un solo lato (no fronte-retro), consegnare anche il presente foglio
* In testa a ciascun foglio (compreso il presente) scrivere: cognome, nome, numero progressivo di pagina rispetto al totale
esempio per il secondo foglio di 3 consegnati: Giuseppe Russo 2/3
* Mantenere sul banco il libretto o altro documento di riconoscimento fino a controllo avvenuto
* Nientaltro deve trovarsi sul banco: non consentito consultare libri, dispense, appunti, ecc. pena lannullamento della prova!
* Non consentito usare il telefonino durante la prova: pena lannullamento della prova stessa!
* La correzione di riferimento per lautovalutazione verr effettuata subito dopo lesame
* Chi si presenter allorale pu, facoltativamente, portare limplementazione al computer della propria soluzione, eventualmente cor-
retta, corredata di tutto quanto necessario alla verifica del corretto funzionamento.
* LEGGERE E CAPIRE BENE IL TESTO DEGLI ESERCIZI PRIMA DI COMINCIARE A SCRIVERE CODICE
Esercizio 3 (4 punti)
Si implementi un metodo main() che agisca da cliente per le due funzioni definite negli esercizi precedenti:
Definisca un array di stringhe row e inizializzi i suoi valori con tre frasi a piacere ;
Calcoli il punteggio di ogni parola invocando la funzione definita allEsercizio 1;
Ordini le parole in base al punteggio (invocando la funzione definita allEsercizio 2);
Stampi a video la lista ordinata delle parole e corrispondenti punteggi.
Esempio: se rows contiene le seguenti 3 stringhe:
"In Pisa it is rainy FINE_RIGA",
"In Milano it will be rainy tomorrow FINE_RIGA",
"In Ancona it will be sunny forever FINE_RIGA"
Ogni esercizio vale un certo numero di punti in totale. Lo studente dovr togliere da questo totale il numero di punti specificato per
ogni parte del programma errata.
Lo studente potr presentarsi allorale solo se raggiunger il punteggio minimo di 16 punti.
Durante lorale lo studente dovr, su richiesta, saper spiegare chiaramente ogni parte del suo programma per confermare il risul-
tato dellautovalutazione e quindi per superare lesame.
Il colloquio orale (non facoltativo, ma a discrezione del docente) potr riguardare ogni argomento del programma e alzare cos
come abbassare il voto ottenuto allo scritto (anche sotto la sufficienza).
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
row = &row[strlen(word)+1];
return ranks_len;
// Dichiarazione funzione
// 1 Punto
void quickSort(rank ranks[], int iniz, int fine){
int main(void) {
}
Universit Politecnica delle Marche, Facolt di Ingegneria
Elementi di Informatica (Prof. C. Morbidoni)
PROVA SCRITTA 29 Aprile 2016
DURATA: 1 ora e 30 minuti
Avvertenze:
* Consegnare solo fogli formato A4 scritti su un solo lato (no fronte-retro), consegnare anche il presente foglio
* In testa a ciascun foglio (compreso il presente) scrivere: cognome, nome, numero progressivo di pagina rispetto al totale
esempio per il secondo foglio di 3 consegnati: Giuseppe Russo 2/3
* Mantenere sul banco il libretto o altro documento di riconoscimento fino a controllo avvenuto
* Nientaltro deve trovarsi sul banco: non consentito consultare libri, dispense, appunti, ecc. pena lannullamento della prova!
* Non consentito usare il telefonino durante la prova: pena lannullamento della prova stessa!
* La correzione di riferimento per lautovalutazione verr effettuata subito dopo lesame
* Chi si presenter allorale pu, facoltativamente, portare limplementazione al computer della propria soluzione, eventualmente cor-
retta, corredata di tutto quanto necessario alla verifica del corretto funzionamento.
* LEGGERE E CAPIRE BENE IL TESTO DEGLI ESERCIZI PRIMA DI COMINCIARE A SCRIVERE IL CODICE
trigliceridi 50 70
glicemia 60 100
colesterolo 130 200
dove ogni riga contiene tre valori separati da uno spazio che rappresentano, nellordine, il nome del valore, il livello minimo, il livel-
lo massimo.
Si definisca infine una funzione che prenda come parametri un array di analisi e il nome del file contenente livelli minimi e massi-
mi dei valori misurati e che stampi il nome di ogni paziente le cui analisi del sangue presentano livelli anomali (maggiori del mas-
simo o minori del minimo) per almeno uno dei valori misurati.
Ogni esercizio vale un certo numero di punti in totale. Lo studente dovr togliere da questo totale il numero di punti specificato per
ogni parte del programma errata.
Lo studente potr presentarsi allorale solo se raggiunger il punteggio minimo di 16 punti.
Durante lorale lo studente dovr, su richiesta, saper spiegare chiaramente ogni parte del suo programma per confermare il risul-
tato dellautovalutazione e quindi per superare lesame.
Il colloquio orale (non facoltativo, ma a discrezione del docente) potr riguardare ogni argomento del programma e alzare cos
come abbassare il voto ottenuto allo scritto (anche sotto la sufficienza).
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
// Non richiesto
int main() {
analisi a[2];
a[0].trigliceridi = 60;
a[0].glicemia = 70;
a[0].colesterolo = 150;
a[0].nome = "Pippo Baudo";
a[1].trigliceridi = 60;
a[1].glicemia = 30;
a[1].colesterolo = 150;
a[1].nome = "Tizio Inventato";
alert(a,2,"analisi.txt");
}
#include <stdlib.h>
#include <stdio.h>
//Non richiesto
int main() {
float v[] = {2.3 , 2.6 , 3.2 , 2.5 , 2.8 , 2.2};
compress(v, 6);
}
#include <stdlib.h>
#include <stdio.h>
//Non richiesto
list* inserisci(list* p, int num) {
list* pnew = (list*) malloc(sizeof(list));
pnew->next = p;
pnew->value = num;
return pnew;
}
//Non richiesto
int main() {
list* p = NULL;
p = inserisci(p,13);
p = inserisci(p,2);
p = inserisci(p,9);
p = inserisci(p,56);
int m = max(p);
printf("MAX: %d", m);
}
Universit Politecnica delle Marche, Facolt di Ingegneria
Elementi di Informatica (Prof. C. Morbidoni)
PROVA SCRITTA 13 Luglio 2016
DURATA: 1 ora e 30 minuti
Avvertenze:
* Consegnare solo fogli formato A4 scritti su un solo lato (no fronte-retro), consegnare anche il
presente foglio
* In testa a ciascun foglio (compreso il presente) scrivere: cognome, nome, numero progressi-
vo di pagina rispetto al totale
esempio per il secondo foglio di 3 consegnati: Giuseppe Russo 2/3
* Mantenere sul banco il libretto o altro documento di riconoscimento fino a controllo avvenuto
* Nientaltro deve trovarsi sul banco: non consentito consultare libri, dispense, appunti, ecc.
pena lannullamento della prova!
* Non consentito usare il telefonino durante la prova: pena lannullamento della prova
stessa!
* La correzione di riferimento per lautovalutazione verr effettuata subito dopo lesame
* Chi si presenter allorale pu, facoltativamente, portare limplementazione al computer della
propria soluzione, eventualmente corretta, corredata di tutto quanto necessario alla verifica
del corretto funzionamento.
Esempio, rubrica.txt
Alberto Rossi 3385555123
Giovanni Bianchi 3385555456
Matteo Verdi 3405555777
.
Esempio, tabulato.txt
3385555123 3385555456 20.54
3385555123 3405555777 32.60
3405555777 3205555666 5.30
.
Esercizio 2 (12 punti)
Si definisca una funziona C che prenda come parametri un array di float, la sua lunghezza e un numero intero
K, e che stampi a video la sequenza di K elementi contigui la cui somma sia massima.
Esercizio 3 (4 punti)
Si definisca:
1) Un tipo di dato A che rappresenti un elemento di una lista collegata bidirezionale di valori double
2) Una variabile B di tipo puntatore ad A
LE REGOLE
Ogni esercizio vale un certo numero di punti in totale. Lo studente dovr togliere da questo totale il numero
di punti specificato per ogni parte del programma errata.
Lo studente potr presentarsi allorale solo se raggiunger il punteggio minimo di 16 punti.
Durante lorale lo studente dovr, su richiesta, saper spiegare chiaramente ogni parte del suo programma
per confermare il risultato dellautovalutazione e quindi per superare lesame.
Il colloquio orale (non facoltativo, ma a discrezione del docente) potr riguardare ogni argomento del pro-
gramma e alzare cos come abbassare il voto ottenuto allo scritto (anche sotto la sufficienza).
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
// Ricerca e stampa del nome e cognome della persona chiamata in rubrica: 3 punti
fseek(fr,0,SEEK_SET);
found = 0;
while ( (fscanf(fr,"%s%s%s", n, c, tel)) != EOF ) {
if ( (strcmp(tel,chiamato_best) == 0) ) {
printf("%s %s %f", n, c, durata_best);
found = 1;
break;
}
}
//Stampa del numero se non presente in rubrica: 1 punto
if (!found) {
printf("Numero chiamato non in rubrica: %s %f", chiamato_best, durata_best);
}
return 0;
}
Esercizio 3 (4 punti)
//2 punti
typedef struct elem {
double val;
struct elem * next;
struct elem * previous;
} A;
//2 punti
A * B;
Universit Politecnica delle Marche, Facolt di Ingegneria
Elementi di Informatica (Prof. C. Morbidoni)
PROVA SCRITTA 20 Dicembre 2016
DURATA: 1 ora e 30 minuti
Esercizio 1 (15)
Scrivere un programma C che, prese come argomenti della funzione main due stringhe rappresentati il nome di due file,
crei per ogni file un vettore contente tutte le parole incluse nel file stesso, senza ripetizioni, e calcoli il coefficiente di
similarit di Jaccard tra i due vettori cos ottenuti, scrivendone il valore a video.
Il coefficiente di Jaccard il rapporto tra le parole in comune tra i due vettori e il numero totale di parole diverse pre-
senti nei due vettori.
Nota: una parola una stringa non contenente spazi. Le parole sono separate lun laltra da spazi.
Scrivere una procedura C che, dati come parametri un puntatorep al primo elemento di una lista collegata di numeri
reali e un array v di numeri reali terminato dal valore zero, elimini dalla lista p tutti gli elementi contenuti in v.
Nota: la funzione deve essere in grado di rimuovere qualsiasi elemento sia necessario (compreso il primo).
REGOLE
Ogni studente ricever una copia del suo elaborato e durante la correzione degli esercizi dovr assegnare un punteggio
ad ogni esercizio (auto valutazione) secondo le modalit indicate durante la correzione stessa.
Lo studente potr scegliere di sostenere la prova orale solo se raggiunger il punteggio minimo di 16 punti totali.
Lo studente dovr presentarsi allorale con la fotocopia del proprio elaborato e il punteggio assegnato ben visibile.
Durante lorale lo studente dovr, su richiesta, saper spiegare chiaramente ogni parte del suo programma per con-
fermare il risultato dellautovalutazione.
Durante la prova orale, che si tiene lo stesso giorno dopo quella scritta, lo studente dovr rispondere a 2 domande aperte
sul programma del corso.
Il voto finale verr assegnato dal docente tenendo conto del compito scritto e delle risposte alle domande.
SOLUZIONE DEGLI ESERCIZI
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
}
return i;
}
char* text1[1000];
char* text2[1000];
int l1 = leggiTesto(file1, text1);
int l2 = leggiTesto(file2, text2);
float sim = jaccardSimilarity(text1,l1,text2,l2);
Avvertenze:
* Consegnare solo fogli formato A4 scritti su un solo lato (no fronte-retro), consegnare anche il presente foglio
* In testa a ciascun foglio (compreso il presente) scrivere: cognome, nome, numero progressivo di pagina rispetto al totale
esempio per il secondo foglio di 3 consegnati: Giuseppe Russo 2/3
* Mantenere sul banco il libretto o altro documento di riconoscimento fino a controllo avvenuto
* Nientaltro deve trovarsi sul banco: non consentito consultare libri, dispense, appunti, ecc. pena lannullamento della prova!
* Non consentito usare il telefonino durante la prova: pena lannullamento della prova stessa!
* La correzione di riferimento per lautovalutazione verr effettuata subito dopo lesame
* Chi si presenter allorale pu, facoltativamente, portare limplementazione al computer della propria soluzione, eventualmente cor-
retta, corredata di tutto quanto necessario alla verifica del corretto funzionamento.
* LEGGERE E CAPIRE BENE IL TESTO DEGLI ESERCIZI PRIMA DI COMINCIARE A SCRIVERE IL CODICE
Esempio:
Se A {1, 3, 5} e B {2, 4, 6, 8} larray C, risultante dalla fusione di A e B, sar il seguente: {1, 2, 3, 4, 5, 6, 8}
Esercizio 3 (6 punti)
Si dichiarino in linguaggio C le seguenti variabili:
Ogni esercizio vale un certo numero di punti in totale. Lo studente dovr togliere da questo totale il numero di punti specificato per
ogni parte del programma errata.
Lo studente potr presentarsi allorale solo se raggiunger il punteggio minimo di 16 punti.
Durante lorale lo studente dovr, su richiesta, saper spiegare chiaramente ogni parte del suo programma per confermare il risul-
tato dellautovalutazione e quindi per superare lesame.
Il colloquio orale (non facoltativo, ma a discrezione del docente) potr riguardare ogni argomento del programma e alzare cos
come abbassare il voto ottenuto allo scritto (anche sotto la sufficienza).
int main() {
int l2;
printf("Inserisci la lunghezza del secondo array\n");
scanf("%d",&l2);
int b[l2];
for (int i=0; i<l2; i++) {
int limit;
if (i==0)
limit = 0;
else
limit = b[i-1];
int n;
do {
printf("Inserisci un numero intero maggiore di %d:\n",limit);
scanf("%d",&n);
} while (n<=limit);
b[i] = n;
}
Esercizio 3 (6 punti)
// 2 punti
char * A[10];
// 2 punti
int *** B;
// 2 punti
struct {
int i;
float f;
char * s;
}C;
Universit Politecnica delle Marche, Facolt di Ingegneria
Elementi di Informatica (Prof. C. Morbidoni)
PROVA SCRITTA 22 Settembre 2016
DURATA: 2 ore
Avvertenze:
* Consegnare solo fogli formato A4 scritti su un solo lato (no fronte-retro), consegnare anche il presente foglio
* In testa a ciascun foglio (compreso il presente) scrivere: cognome, nome, numero progressivo di pagina rispetto al totale
esempio per il secondo foglio di 3 consegnati: Giuseppe Russo 2/3
* Mantenere sul banco il libretto o altro documento di riconoscimento fino a controllo avvenuto
* Nientaltro deve trovarsi sul banco: non consentito consultare libri, dispense, appunti, ecc. pena lannullamento della prova!
* Non consentito usare il telefonino durante la prova: pena lannullamento della prova stessa!
* La correzione di riferimento per lautovalutazione verr effettuata subito dopo lesame
* Chi si presenter allorale pu, facoltativamente, portare limplementazione al computer della propria soluzione, eventualmente cor-
retta, corredata di tutto quanto necessario alla verifica del corretto funzionamento.
* LEGGERE E CAPIRE BENE IL TESTO DEGLI ESERCIZI PRIMA DI COMINCIARE A SCRIVERE CODICE
A. (4 punti) Definire una funzione denominata similarity che, date due stringhe come parametri, ritorni il
numero di caratteri uguali e nella stessa posizione allinterno delle due stringhe.
Esempio: similarity(pippo,pap) = 1 + 1 = 2
similarity(pippo,tavolo) = 0
B. (8 punti) Definire una procedura denominata similarityMatrix che, dati come parametri un array di strin-
ghe V ed una matrice di stringhe M, calcoli la similarit tra ogni coppia di stringhe in V (invocando la fun-
zione similarity definita al punto A) e popoli le celle della matrice M, in cui righe e colonne rappresentano le
diverse stringhe (nellordine in cui appaiono nellarray). Tutte le celle sulla diagonale della matrice M do-
vremmo essere poste a zero, le atre dovranno contenere il valore della similarit tra la stringa corrispondente
alla colonna e quella corrispondente alla riga.
0 5 0 2 1 0
5 0 1 2 1 0
0 1 0 0 1 3 Esempio:
2 2 0 0 2 0 Similarit tra le parole
1 1 1 2 0 1 Pippo e Paperino
0 0 3 0 1 0
#include <stdlib.h>
#include <stdio.h>
int printLink() {
printf("%s\n",link);
}
int main() {
char* link = "example.org";
printLink();
return 0;
}
#include <stdlib.h>
#include <stdio.h>
int printTwos(char* s) {
int found = 0;
while(s[0]!='\0') {
if (s[0]=='2') {
printf("%c\n",s[0]);
found++;
}
s++;
}
return found;
}
int main() {
int n = printTwos("p23kuk42k6");
return 0;
}
#include <stdlib.h>
#include <stdio.h>
int main() {
char mat[3][3];
for(int i = 0; i<3; i++) {
for (int j = 0; j<3; j++) {
mat[i][j] = i==j ? 0 : i*j;
printf("%d",*mat[i]);
}
printf("\n");
}
return 0;
}
Esercizio 2 (9 punti)
Dopo aver analizzato i seguenti programmi C:
- Se il programma corretto, scrivere a lato il relativo output
- Sottolineare nel codice eventuali errori, spiegandoli brevemente e chiaramente a lato
#include <stdlib.h>
#include <stdio.h>
char* link = "example.org";
#include <stdlib.h>
#include <stdio.h>
int printTwos(char* s) {
int found = 0;
while(s[0]!='\0') {
if (s[0]=='2') {
printf("%c\n",s[0]);
found++;
}
}
s++;
return found;
}
int main() {
int n = printTwos("p23kuk42k6");
return 0;
}
#include <stdlib.h>
#include <stdio.h>
void popolaMatrice() {
for(int i = 0; i<3; i++) {
for (int j = 0; j<3; j++) {
mat[i][j] = i==j ? 0 : i*j;
printf("%d",mat[i][j]);
}
printf("\n");
}
}
int main() {
char mat[3][3];
popolaMatrice();
return 0;
}
Esercizio 2 (9 punti)
Dopo aver analizzato i seguenti programmi C:
- Se il programma corretto, scrivere a lato il relativo output
- Sottolineare nel codice eventuali errori, spiegandoli brevemente e chiaramente a lato
#include <stdlib.h>
#include <stdio.h>
char* link = "example.org";
int printLink(char* link) {
printf("%s\n",link);
link = "google.com";
}
int main() {
printLink(link);
printLink(link);
return 0;
}
#include <stdlib.h>
#include <stdio.h>
int printTwos(char* s) {
while(s[0]!='\0') {
if (s[0]=='2') {
printf("%c\n",s[0]);
}
s++;
}
return s;
}
int main() {
int n = printTwos("p23kuk42k6");
return 0;
}
#include <stdlib.h>
#include <stdio.h>
void popolaMatrice(char[3][3] mat) {
for(int i = 0; i<3; i++) {
for (int j = 0; j<3; j++) {
mat[i][j] = i==j ? 0 : i*j;
printf("%d",mat[i][j]);
}
printf("\n");
}
}
int main() {
char mat[3][3];
popolaMatrice();
return 0;
}
REGOLE
Ogni studente ricever una copia del suo elaborato e durante la correzione degli esercizi dovr assegnare un
punteggio ad ogni esercizio (auto valutazione) secondo le modalit indicate durante la correzione stessa.
Lo studente potr scegliere di sostenere la prova orale solo se raggiunger il punteggio minimo di 16 punti
totali.
Lo studente dovr presentarsi allorale con la fotocopia del proprio elaborato e il punteggio assegnato ben
visibile.
Durante lorale lo studente dovr, su richiesta, saper spiegare chiaramente ogni parte del suo programma
per confermare il risultato dellautovalutazione.
Durante la prova orale, che si tiene lo stesso giorno dopo quella scritta, lo studente dovr rispondere a 2 do-
mande aperte sul programma del corso.
Il voto finale verr assegnato dal docente tenendo conto del compito scritto e delle risposte alle domande.
SOLUZIONE DEGLI ESERCIZI
A.
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define MAX 100
//Parte A - 4 punti
int similarity(char* s1, char* s2) {
int sim = 0;
while(*s1!='\0' && *s2!='\0') {
if (s1[0]==s2[0]) {
sim++;
}
s1++; s2++;
}
return sim;
}
//Parte B - 8 punti
void similarityMatrix(char* V[], int vl, int M[][MAX]) {
for(int i = 0; i < vl; i++) {
for(int j = 0; j < vl; j++) {
int sim;
if (i==j) sim = 0;
else sim = similarity(V[i],V[j]);
M[i][j] = sim;
printf("%d ",sim);
}
printf("\n");
}
}
//Parte C - 9 punti
//Trovare il valore massimo nella corrispondente riga della matrice di similarit (3 punti)
int findMax(int v[], int l) {
int max = 0;
int maxValue = 0;
for (int i = 0; i< l; i++) {
if (v[i]>maxValue) {
max = i;
maxValue = v[i];
}
}
return max;
}
int main() {
//Inizializzazione variabili: 1 punto
int M[MAX][MAX];
char* V[] = {"Pippo","Pippolo","Gervaso", "Paperino", "Plutarco", "Geffa"};
//Chiamata funzione: 1 punto
similarityMatrix(V, 6, M);
//lettura da standard input in variabile: 2 punti
char q[MAX];
printf(Inserisci parola:\n");
scanf("%s",q);
//Iterazione per trovare la riga corrispondente alla parola: 3 punti
for (int i = 0; i < 6; i++) {
if (strcmp(V[i], q) == 0 ) {
int imax = findMax(M[i], 6);
printf("%s ha %d lettere in comune",V[imax],M[i][imax]);
}
}
}
Universit Politecnica delle Marche, Facolt di Ingegneria
Avvertenze:
* Consegnare solo fogli formato A4 scritti su un solo lato (no fronte-retro), consegnare anche il presente foglio
* In testa a ciascun foglio (compreso il presente) scrivere: cognome, nome, numero progressivo di pagina rispetto al
totale
esempio per il secondo foglio di 3 consegnati: Giuseppe Russo 2/3
* Mantenere sul banco il libretto o altro documento di riconoscimento fino a controllo avvenuto
* Nientaltro deve trovarsi sul banco: non consentito consultare libri, dispense, appunti, ecc. pena lannullamento
della prova!
* Non consentito usare il telefonino durante la prova: pena lannullamento della prova stessa!
* La correzione di riferimento per lautovalutazione verr effettuata subito dopo lesame
* Chi si presenter allorale pu, facoltativamente, portare limplementazione al computer della propria soluzione, even-
tualmente corretta, corredata di tutto quanto necessario alla verifica del corretto funzionamento.
* LEGGERE E CAPIRE BENE IL TESTO DEGLI ESERCIZI PRIMA DI COMINCIARE A SCRIVERE CODICE
Esercizio 2 (9 punti)
Dato un file di testo come il seguente:
Nome:Marco Hobby:Matematica/Luogo:Ancona
Nome:Laura Hobby:Calcio/Luogo:Macerata
Nome:Giulio Hobby:Fisica/Luogo:Pesaro
Nome:Paola Hobby:Tennis/Luogo:Urbino
Scrivere un programma che permetta allutente di inserire un hobby ed un luogo (entrambi stringhe di lunghezza arbitraria contenenti
eventuali spazi) e che scriva a video, se esistono, i nomi di tutte le persone nellelenco con lo stesso hobby oppure con lo stesso luo-
go.
Nota: consentito usare opportunamente la funzione strcmp(char *, char *) della libreria string.h
Esercizio 3 (7 punti)
Nei seguenti frammenti di codice C sottolineare e spiegare con una breve nota a margine gli eventuali errori.
A) 2 punti
int a[10];
for (int i = 0; i <=9; i++) { a["i"] = i*i; }
B) 2 punti
char * p;
int a;
while(p!="pippo") { scanf("%s %s, &a, &p); }
C) 3 punti
int* f1(int a[], int k) {
while(a[i] != -1) {
if (a[i] == k) { return a[i]; }
}
return 0;
}
LE REGOLE
Ogni esercizio vale un certo numero di punti in totale. Lo studente dovr togliere da questo totale il
numero di punti specificato per ogni parte del programma errata.
Lo studente potr presentarsi allorale solo se raggiunger il punteggio minimo di 16 punti.
Durante lorale lo studente dovr, su richiesta, saper spiegare chiaramente ogni parte del suo
programma per confermare il risultato dellautovalutazione e quindi per superare lesame.
Il colloquio orale (non facoltativo, ma a discrezione del docente) potr riguardare ogni argomento
del programma e alzare cos come abbassare il voto ottenuto allo scritto (anche sotto la sufficien-
za).
Esercizio 1 - 14 punti
#include <stdio.h>
#include <stdlib.h>
float partial = 0;
int c = 0;
Esercizio 2 - 9 punti
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// -1
int main() {