Soluzioni agli esercizi del quinti homework

- Soluzione esercizio 1
- Soluzione esercizio 2

-----------------

LEGENDA

Se avete dei dubbi o volete dei chiarimenti sui risultati del terzo homework potete contattare il Dott. Petroccia.
Vi invitiamo pero' prima a compilare le vostre soluzioni su macchine Linux ed a provare i test effettuati per essere sicuri che non ci siano stati errori.

ESERCIZIO 1
Nome Compila Test.1 Test.2 Test.3 Test.4 Risultato
AlbertoMariaAloisi Compila Risultato Corretto Risultato Corretto Risultato Corretto Risultato Corretto Corretto
AldoNardi Compila Risultato Corretto Risultato Corretto Risultato Corretto Risultato Corretto Corretto
AlessioMario Compila Output errato Output errato Output errato Output errato Errore
AndreaLupattelli Compila Output errato Output errato Output errato Output errato Errore
AngeloLauletta Compila Risultato Corretto Risultato Corretto Risultato Corretto Risultato Corretto Corretto
AntonellaMarino Compila Risultato Corretto Risultato Corretto Risultato Corretto Risultato Corretto Corretto
AttilioFiore Compila Risultato Corretto Risultato Corretto Risultato Corretto Risultato Corretto Corretto
BeatriceFormai Compila Risultato Corretto Risultato Corretto Risultato Corretto Risultato Corretto Corretto
BledarLera Compila Risultato Corretto Risultato Corretto Risultato Corretto Risultato Corretto Corretto
DamianoIlacqua Compila Risultato Corretto Risultato Corretto Risultato Corretto Risultato Corretto Corretto
DanieleFortuna Compila Risultato Corretto Risultato Corretto Risultato Corretto Risultato Corretto Corretto
DavideFrazzetto Compila Output errato Output errato Output errato Output errato Errore
DavideTuccilli Compila Risultato Corretto Risultato Corretto Risultato Corretto Risultato Corretto Corretto
EjonaMile Compila Output errato Output errato Output errato Output errato Errore
EmanueleGiarlini Compila Risultato Corretto Risultato Corretto Risultato Corretto Risultato Corretto Corretto
EmanueleMungai Compila Risultato Corretto Risultato Corretto Risultato Corretto Risultato Corretto Corretto
GennyProto Compila Risultato Corretto Risultato Corretto Risultato Corretto Risultato Corretto Corretto
GiovanniMarianelli Compila Risultato Corretto Risultato Corretto Risultato Corretto Risultato Corretto Corretto
GiovanniScigliano Compila Risultato Corretto Risultato Corretto Risultato Corretto Risultato Corretto Corretto
GiuliaGiacomini Compila Output errato Output errato Output errato Output errato Errore
GiuseppeImperato Compila Risultato Corretto Risultato Corretto Risultato Corretto Risultato Corretto Corretto
LeonardoMasci Compila Risultato Corretto Risultato Corretto Output errato Output errato Errore
LucaPellegrino Compila E.A.M. Risultato Corretto Output errato Output errato Errore
ManuelMauro Compila Risultato Corretto Risultato Corretto Risultato Corretto Risultato Corretto Corretto
MarcoMogliani Compila Risultato Corretto Risultato Corretto Risultato Corretto Risultato Corretto Corretto
MarioGattiPaganoBrundo Compila Risultato Corretto Timeout Output errato Output errato Timeut + Errore
MarioGreco Compila Risultato Corretto Risultato Corretto Risultato Corretto Risultato Corretto Corretto
NicolaDonato Compila Risultato Corretto Risultato Corretto Risultato Corretto Risultato Corretto Corretto
PierPaoloPetti Compila Risultato Corretto Risultato Corretto Risultato Corretto Risultato Corretto Corretto
RiccardoMassullo Compila Risultato Corretto Risultato Corretto Risultato Corretto Risultato Corretto Corretto
RobertoFeola Compila Risultato Corretto Risultato Corretto Risultato Corretto Risultato Corretto Corretto
RobertoFravili Compila Risultato Corretto Risultato Corretto Risultato Corretto Risultato Corretto Corretto
SerenaMatrone Compila Risultato Corretto Risultato Corretto Risultato Corretto Risultato Corretto Corretto
StefanoLauletta Compila Risultato Corretto Risultato Corretto Risultato Corretto Risultato Corretto Corretto
StefanoMarra Compila Risultato Corretto Risultato Corretto Risultato Corretto Risultato Corretto Corretto
StefanoMarra Compila Risultato Corretto Risultato Corretto Risultato Corretto Risultato Corretto Corretto
TaniaIelpo Compila Risultato Corretto Risultato Corretto Risultato Corretto Risultato Corretto Corretto
ValerioMoroni Compila Risultato Corretto Risultato Corretto Output errato Output errato Errore
Test -
Input.1 = 5 15 8 40 24 0 19 30 -1 10
output.1 = 5 30 40 0 8 15 19 24
Input.2 = 100 99 98 97 96 95 94 93 92 91 90 89 88 87 86 85 84 83 82 81 80 79 78 77 76 75 74 73 72 71 70 69 68 67 66 65 64 63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 -1 12
output.2 = 1 2 3 4 6 12 24 36 48 60 72 84 96 0 5 7 8 9 10 11 13 14 15 16 17 18 19 20 21 22 23 25 26 27 28 29 30 31 32 33 34 35 37 38 39 40 41 42 43 44 45 46 47 49 50 51 52 53 54 55 56 57 58 59 61 62 63 64 65 66 67 68 69 70 71 73 74 75 76 77 78 79 80 81 82 83 85 86 87 88 89 90 91 92 93 94 95 97 98 99 100
Input.3 = 10 5 20 15 5 40 35 30 20 40 -1 5
output.3 = 5 5 10 15 20 20 30 35 40 40
Input.4 = 4 7 10 16 13 2 -1 3
output.4 = 2 4 7 10 13 16
ExTotali = 38
ExCorretti = 29
ExErrati = 9

ESERCIZIO 2
Nome Compila Test.1 Test.2 Test.3 Test.4 Risultato
AlbertoMariaAloisi Compila Risultato Corretto Risultato Corretto Risultato Corretto Risultato Corretto Corretto
AldoNardi Compila Risultato Corretto Risultato Corretto Risultato Corretto Output errato Errore
AngeloLauletta Compila Output errato Output errato Output errato Output errato Errore
AttilioFiore Compila Risultato Corretto Output errato Risultato Corretto Risultato Corretto Errore
BeatriceFormai Compila Risultato Corretto Risultato Corretto Risultato Corretto Risultato Corretto Corretto
BledarLera Compila Output errato Output errato Output errato Output errato Errore
DavideTuccilli Compila Risultato Corretto Risultato Corretto Risultato Corretto Output errato Errore
EjonaMile Compila Output errato Output errato Output errato Output errato Errore
EmanueleGiarlini Compila Risultato Corretto Risultato Corretto Risultato Corretto Risultato Corretto Corretto
EmanueleMungai Compila Output errato Output errato Output errato Output errato Errore
EnricoCalciano Compila Risultato Corretto Risultato Corretto Risultato Corretto Risultato Corretto Corretto
GiovanniScigliano Compila Output errato Output errato Output errato Output errato Errore
GiuseppeImperato Compila Risultato Corretto Risultato Corretto Risultato Corretto Risultato Corretto Corretto
LeonardoMasci Compila Risultato Corretto Output errato Risultato Corretto Output errato Errore
ManuelMauro Compila Risultato Corretto Risultato Corretto Risultato Corretto Output errato Errore
MarcoMogliani Compila Risultato Corretto Risultato Corretto Risultato Corretto Output errato Errore
MarioGattiPaganoBrundo Compila Output errato Output errato Output errato Output errato Errore
MarioGreco Compila Risultato Corretto Risultato Corretto Risultato Corretto Risultato Corretto Corretto
NicolaDonato Compila Output errato Output errato Output errato Output errato Errore
PierPaoloPetti Compila E.A.M. Output errato E.A.M. E.A.M. Errore
RobertoFeola Compila Risultato Corretto Risultato Corretto Risultato Corretto Timeout Timeout
RobertoFravili Compila Risultato Corretto Risultato Corretto Risultato Corretto Output errato Errore
SerenaMatrone Compila Risultato Corretto Risultato Corretto Risultato Corretto Risultato Corretto Corretto
StefanoLauletta Compila Risultato Corretto Risultato Corretto Risultato Corretto Risultato Corretto Corretto
TaniaIelpo Compila Risultato Corretto Risultato Corretto Risultato Corretto Risultato Corretto Corretto
Test -
Input.1 = 8 10 0.43 -1 1 6 2 3.45 -4 -2 14 2.46 4 12.03 14
output.1 = 2 2.46
Input.2 = 12 10 0.43 -10 10 6.01 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10
output.2 = 0 6.01
Input.3 = 4 1 3.7 2 4.2 12 4.3 11 3.8 2
output.3 = 2 4.20
Input.4 = 10 1 1 11 2 21 3 31 4 41 5 51 6 61 7 71 8 81 9 -1 12
output.4 = 8
ExTotali = 24
ExCorretti = 8
ExErrati = 16

Soluzione esercizio 1

#include <stdio.h>
#include <stdlib.h>

typedef struct nodo{
	int val;
	struct nodo * succ;
} Nodo;


void separa_liste( Nodo ** origine, int k, Nodo ** multipli_e_divisori, Nodo ** resto);

void inserisci ( Nodo ** lista, int val);

void stampa_lista (Nodo * l);

int main () {
	Nodo * origine, * mul_e_div, * resto;
	int val;
	
	origine = NULL;
	mul_e_div = NULL;
	resto = NULL;
	
	scanf("%d", &val);
	
	while(val >= 0) {
		inserisci(&origine, val);
		scanf("%d", &val);		
	}
	
	scanf("%d", &val);
	
	if(val <= 0) return 1;
	
	separa_liste(&origine, val, &mul_e_div, &resto);
	
	stampa_lista(mul_e_div);
	stampa_lista(resto);
	
	if(origine != NULL){
		printf("Errore! origine e' diversa da NULL\n!");
		return 1;
	}
	
	return 0;
}

void inserisci ( Nodo ** lista, int val){
	Nodo * n, *s, *p;
	
	n = malloc(sizeof(Nodo));
	n->val = val;
	n->succ = NULL;
	
	p = NULL;
	s = *lista;
	while((s!=NULL) && (s->val < val)){
		p=s;
		s=s->succ;
	}
	if (p != NULL){
		n->succ = s;
		p->succ = n;
	} else {
		*lista = n;
		n->succ = s;
	}
}

void separa_liste( Nodo ** origine, int k, Nodo ** multipli_e_divisori, Nodo ** resto) {
	
	Nodo * t;
	
	if(*origine == NULL) return;
	
	separa_liste(&((*origine)->succ), k, multipli_e_divisori, resto);
	
	if(((*origine)->val>0)&&(((*origine)->val%k==0)||(k%(*origine)->val==0))){
		t=*multipli_e_divisori;
		*multipli_e_divisori = *origine;
		(*multipli_e_divisori)->succ = t;
	} else {
		t=*resto;
		*resto = *origine;
		(*resto)->succ = t;
	}
	*origine = NULL;	
}

void stampa_lista(Nodo * l){
	while(l != NULL){
		printf(" %d", l->val);
		l = l->succ;
	}
	printf("\n");
}

Soluzione esercizio 2

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

typedef struct nodo{
	int chiave;
	double val;
	struct nodo * succ;
} Nodo;

void inserisci( Nodo * tabella [10], int c, double v);

void elimina( Nodo * tabella [10], int c);

Nodo * trova( Nodo * tabella [10], int c);

int max_sbilanciamento( Nodo * tabella[10]);

int main () {
	Nodo * tabella [10];
	Nodo * n;
	
	int chiave, elementi, i;
	double val;
	
	for(i=0; i<10; i++){
		tabella[i] = NULL;
	}
	
	scanf("%d", &elementi);
	
	for (i=0; i < elementi; i++){
		scanf("%d", &chiave);
		if(chiave > 0){
			scanf("%lf", &val);
			inserisci(tabella, chiave, val);
		}
		if (chiave<0) {
			elimina(tabella, abs(chiave));
		}
	}
	
	printf("%d ", max_sbilanciamento(tabella));
	scanf("%d", &chiave);
	
	n = trova(tabella, chiave);
	
	if (n!=NULL){
		printf("%.2lf", n->val);
	}
	printf("\n");
}	

void inserisci( Nodo * tabella [10], int c, double v){
	Nodo * n;
	n = trova(tabella, c);
	if(n != NULL){
		n->val = v;
	} else {
		n = tabella[c%10];
		tabella[c%10]=malloc(sizeof(Nodo));
		tabella[c%10]->chiave = c;		
		tabella[c%10]->val = v;
		tabella[c%10]->succ = n;
	}
}

void elimina( Nodo * tabella [10], int c){
		Nodo * l, *p;
		
		l = tabella[c%10];
		p = NULL;
		while((l != NULL) && (l->chiave != c)){
			p=l;
			l=l->succ;
		}
		if(l != NULL){
			if(p != NULL){
				p->succ = l->succ;
			} else{
				tabella[c%10] = l->succ;
			}
			free(l);
		}
}

Nodo * trova( Nodo * tabella [10], int c){
	Nodo * r;
	
	r = tabella[c%10];
	
	while((r != NULL) && (r->chiave != c)){
		r = r->succ;
	}
	return r;
}

int max_sbilanciamento( Nodo * tabella[10]){
	int max = 0, min =-1;
	int i, e;
	
	Nodo * n;
	
	for(i = 0; i < 10; i++){
		if(tabella[i]==NULL){
			min = 0;
		} else {
			e = 0;
			n = tabella[i];
			while(n != NULL){
				e++;
				n = n->succ;
			}
			if (max < e) 
				max = e;
			if(min > e || min==-1) 
				min = e;
		}
	}
	return max-min;
}