Programmazione ed
Esercitazioni di Programmazione


<-- Torna alla lista delle soluzioni

Esercitazione 5

Esercizio 1

/* Scrivere una funzione char *cerca_carattere(char a[], char c, int dim) che, dato un array di caratteri e un valore c, determini se tale valore è presente nell’array. La funzione restituisce un puntatore al primo elemento dell’array che contiene il carattere c se tale elemento esiste, altrimenti restituisce il valore NULL. */

char *cerca_carattere(char a[], char c, int dim) {
	int i;
	
	for(i = 0; i < dim; i++) {
		if(a[i] == c) {
			return a + i;
		}
	}
	return NULL;
}


Esercizio 2

/* Scrivere una funzione void inverti(int a[], int dim) che, dato un array di interi scambia il primo elemento con l’ultimo, il secondo con il penultimo, ecc…. E' richiesto che la funzione usi l’aritmetica dei puntatori al posto dell’operatore []. */

void inverti(int a[], int dim) {
	int i;
	int temp;
	
	for(i = 0; i < dim/2; i++) {
		temp = *(a + i);
		*(a + i) = *(a + dim - i - 1);
		*(a + dim - i - 1) = temp;
	}
}


Esercizio 3

/* Scrivere una funzione int magica (int matrice [ ] [MAX_DIM], int dim) che determina se una matrice quadrata di interi è magica, ovvero se le somme degli elementi sulle righe, sulle colonne e sulle due diagonali sono tutte uguali. Il parametro dim contiene la dimensione effettiva della tabella. La funzione deve ritornare 1 se la matrice è magica, 0 altrimenti. */

typedef enum {
	RIGA, 
	COLONNA, 
	DIAG_PRI, 
	DIAG_SEC
} SumType;

int somme_varie(int matrice[][MAX_DIM], int dim, SumType type, int pos) {
	int i;
	int somma = 0;
	
	for(i = 0; i < dim; i++) {
		switch (type) {
			case RIGA: 
				somma += matrice[pos][i];
				break;
			case COLONNA: 
				somma += matrice[i][pos];
				break;
			case DIAG_PRI:
				somma += matrice[i][i];
				break;
			case DIAG_SEC:
				somma += matrice[i][dim - 1 - i];
				break;
			default:
				break;
		}
	}
	return somma;
}

int magica(int matrice[][MAX_DIM], int dim) {
	int i;
	int somma = somme_varie(matrice, dim, DIAG_PRI, 0);
	
	if(somma != somme_varie(matrice, dim, DIAG_SEC, 0)) return 0;

	for(i = 0; i < dim; i++) {
		if(somma != somme_varie(matrice, dim, RIGA, i)) return 0;
		if(somma != somme_varie(matrice, dim, COLONNA, i)) return 0;
	}
	return 1;
}


<-- Torna alla lista delle soluzioni