- Soluzione esercizio 1
- Soluzione esercizio 2
- Soluzione esercizio 3
- Soluzione esercizio 4
- Soluzione esercizio 5
- Soluzione esercizio 6
- Soluzione esercizio 7
- Soluzione esercizio 8

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

Soluzione esercizio 1

#include <stdio.h>
#define LEN 10

int Esercizio1() {
	int somma = 0;
	int i = 0;
	for (i = 2; i < 100; i+= 3) {
		somma += i;
	}
	return somma;
}

Soluzione esercizio 2

#include <stdio.h>
#define LEN 10
void Esercizio2(float temp) {
	if (temp < 0) {
		printf("GHIACCIO\n");
	}
	else if (temp > 100) {
		printf("VAPORE\n");
	}
	printf("ACQUA\n");
}

Soluzione esercizio 3

#include <stdio.h>
#define LEN 10
double Esercizio3(int A[]) {
	double B[8] = {2.0, 1.0, 0.5, 0.2, 0.1, 0.05, 0.02, 0.01};
	int i = 0;
	double somma = 0.0;
	for (i = 0; i < 8; i++) {
		somma += (double)A[i] * B[i];
	}
	return somma;
}

Soluzione esercizio 4

#include <stdio.h>
#define LEN 10
int Esercizio4(int A[], int B[]) {
	//controlla il prefisso comune piu' lungo di A e B
	int i = 0;
	int check = 1;
	while (check && i < LEN) {
	// quando A[i] != B[i] il prefisso comune termina
		if (A[i] != B[i]) {
			check = 0;
		}
		else {
			i++;	
		}
	}
	return i;
}

Soluzione esercizio 5

#include <stdio.h>
#define LEN 10
int Esercizio5(int A[], int B[])  {
	//controlla la sequenza comune piu' lunga tra il suffisso di A ed il prefisso di B
	int start = 0;
	int i, j;
	int aux1, aux2;
	i = 0;
	j = 0;		
	while (i < LEN) {
		aux1 = i;
		aux2 = 0;
		//controllo se la sequenza che inizia ad aux1 di A e' comune ad un prefisso di B
		while(aux1 < LEN && A[aux1] == B[aux2]) {
			aux1++;
			aux2++;
		}
		if (aux1 >= LEN) {
			//sono arrivato alla fine di A
			return aux2;
		}
		i++;
	}
	return 0;
}

Soluzione esercizio 6

#include <stdio.h>
#define LEN 10
void Esercizio7 (int A[]) {
	//ordino un vettore
	int i, j;
	int aux;
	//metto in testa al vettore il valore piu' piccolo e poi rieseguo sulla parte restante del vettore
	for (i = 0; i < LEN; i++) {
		for (j = i + 1; j < LEN; j++) {
			if (A[i] > A[j]) {
					aux = A[i];
					A[i] = A[j];
					A[j] = aux;
			}
		}
	}
}

int find (int A[], int n, int k) { //controlla se l'elemento k e' presente nel vettore A int i = 0; for (i = 0; i < n; i++) { if (A[i] == k) { return 1; } } return 0; }

Soluzione esercizio 7

#include <stdio.h>
#define LEN 10
int Esercizio6 (int A[], int B[]) {
	//controllo gli elementi comuni di due vettori
	int i, j;
	//ordino A
	Esercizio7(A);
	int count = 0;
	int curr = A[0];
	//controllo se A[0] e' in B
	if (find(B, LEN, curr)) {
		count++;
	}
	for (i = 1; i < LEN; i++) {
		//trovo l'elemento successivo in A diverso da curr
		//quindi trovo un elemento ancora da controllare
		if (A[i] != curr) {
			curr = A[i];
			//controllo se l'elemento di A appartiene anche a B
			if (find(B, LEN, curr)) {
				count++;
			}
		}
	}
	return count;
}

Soluzione esercizio 8

#include <stdio.h>
#define LEN 10
int Esercizio8 (int A[], int B[]) {
	//controllo se A e B sono due permutazioni degli stessi elementi
	//ossia se hanno gli stessi elementi che appaiono lo stesso numero di volte
	int i, j;
	//ordino A e B
	Esercizio7(A);
	Esercizio7(B);
	//controllo se i due vettori sono uguali
	for (i = 0; i < LEN; i++) {
		if (A[i] != B[i]) {
			return 0;
		}
	}
	return 1;
}

void stampa (int A[], int n) {
	//stampa un vettore
	int i;
	for (i = 0; i < n; i++) {
		printf("%d ", A[i]);
	}
	printf("\n");
}