feat: Initial commit

This commit is contained in:
2024-03-22 17:14:57 +01:00
parent dc83234df1
commit db9bafe755
45 changed files with 1996 additions and 0 deletions

4
Laboratorio 4/matrix.txt Normal file
View File

@@ -0,0 +1,4 @@
3 4
1 2 3 4
5 6 7 8
9 0 1 1

118
Laboratorio 4/matrixquad.c Normal file
View File

@@ -0,0 +1,118 @@
// Laboratorio 4 - Esercizio 3
// Matteo Schiff - s295565
#include <stdio.h>
#include <ctype.h>
#define MAX_N 20
int min(int a, int b);
int stampaSottomatrice(int m[MAX_N][MAX_N], int x, int y, int dim);
void sottomatrici(int M[MAX_N][MAX_N], int nr, int nc, int dim);
int leggiMatrice(int M[MAX_N][MAX_N], int * nr, int * nc);
int min(int a, int b) {
if (a < b)
return a;
return b;
}
// La funzione stampa la sottomatrice e restituisce la somma degli elementi
int stampaSottomatrice(int m[MAX_N][MAX_N], int x, int y, int dim) {
int sum = 0;
for (int i = x; i < x + dim; i++) {
for (int j = y; j < y + dim; j++) {
printf("%d ", m[i][j]);
sum += m[i][j];
}
putc('\n', stdout);
}
putc('\n', stdout);
return sum;
}
void sottomatrici(int M[MAX_N][MAX_N], int nr, int nc, int dim) {
int a, max = 0;
int x = -1, y = -1;
printf("Le sottomatrici quadrate di dimensione %d sono:\n", dim);
for (int i = 0; i <= nr - dim; i++) {
for (int j = 0; j <= nc - dim; j++) {
a = stampaSottomatrice(M, i, j, dim);
if (a >= max) {
max = a;
x = i;
y = j;
}
}
}
printf("La sottomatrice con somma degli elementi massima (%d) e':\n", max);
stampaSottomatrice(M, x, y, dim);
}
int leggiMatrice(int M[MAX_N][MAX_N], int * nr, int * nc) {
char filename[23] = "./";
FILE *fp_read;
puts("Inserisci il nome del file");
scanf("%20s", filename + 2);
fp_read = fopen(filename, "r");
if (fp_read == NULL)
{
printf("Errore nell'apertura del file\n");
return 1;
}
fscanf(fp_read, "%d %d\n", nr, nc);
// Controlla dimensione matrice
if (*nr < 0 || *nc < 0 || *nr > MAX_N || *nc > MAX_N) {
printf("Dimensione della matrice non valida\n");
fclose(fp_read);
return 1;
}
// Leggi matrice
for (int i = 0; i < *nr; i++) {
for (int j = 0; j < *nc; j++) {
fscanf(fp_read, "%d ", &M[i][j]);
}
}
fclose(fp_read);
return 0;
}
int main()
{
int M[MAX_N][MAX_N], N, P, dir, lmax, dim, nr, nc;
if (leggiMatrice(M, &nr, &nc)) {
return 1;
}
lmax = min(nr, nc);
// Chiedi all'utente le dimensioni dei sottoquadrati
while (1) {
printf("Inserisci una dimensione compresa tra 1 e %d: ", lmax);
scanf("%d", &dim);
// Se dim non è un valore valido, termina
if (dim < 1 || dim > lmax) {
break;
}
sottomatrici(M, nr, nc, dim);
}
return 0;
}

58
Laboratorio 4/ruota.c Normal file
View File

@@ -0,0 +1,58 @@
// Laboratorio 4 - Esercizio 2
// Matteo Schiff - s295565
#include <stdio.h>
#include <ctype.h>
#define MAX_N 30
void ruota(int v[MAX_N], int N, int P, int dir);
void ruota(int v[MAX_N], int N, int P, int dir) {
int t;
P = P % N;
for (int x = 0; x < P; x++) {
if (dir == 1) {
t = v[0];
for (int i = 0; i < N - 1; i++) {
v[i] = v[i+1];
}
v[N-1] = t;
} else {
t = v[N-1];
for (int i = N-1; i > 0; i--) {
v[i] = v[i-1];
}
v[0] = t;
}
}
for (int x = 0; x < N; x++) {
printf("%d ", v[x]);
}
putchar('\n');
}
int main()
{
int V[MAX_N], N, P, dir;
do {
printf("Inserisci N compreso tra 0 e %d: ", MAX_N);
} while(scanf("%d", &N) != 1 || N > MAX_N || N < 0);
printf("Inserisci il vettore di lunghezza %d: ", N);
for(int i = 0; i < N; i++) {
scanf(" %d", &V[i]);
}
do {
printf("Inserisci il numero di rotazioni e la direzione (formato '<rotazioni> <direzione>'): ");
scanf(" %d %d", &P, &dir);
ruota(V, N, P, dir);
} while (P != 0);
return 0;
}

View File

@@ -0,0 +1,66 @@
// Laboratorio 4 - Esercizio 1
// Matteo Schiff - s295565
#include <stdio.h>
#include <ctype.h>
#define INPUT_FILE "./vettore.txt"
#define MAX_LEN 30
void sottoSequenze(int V[MAX_LEN], int N);
void sottoSequenze(int V[MAX_LEN], int N) {
int start = 0; // memorizza l'inizio del sottovettore corrente
int maxLen = 0; // memorizza la grandezza del massimo sottovettore decrementata di uno
int positions[30]; // memorizza gli indici dei sottovettori con lunghezza massima trovati
int lastPosition = 0; // memorizza la posizione dell'ultimo elemento salvato in `positions`
for (int i = 0; i < N; i++) {
if (V[i] == 0) {
start = i+1;
}
if ((i - start) == maxLen) {
positions[lastPosition] = start;
lastPosition++;
} else if ((i - start) > maxLen) {
positions[0] = start;
lastPosition = 1;
maxLen = i - start;
}
}
printf("I sottovettori sono di dimensione massima (%d):\n", maxLen + 1);
for (int j = 0; j < lastPosition; j++) { // Per ogni sottovettore ...
for (int x = 0; x < maxLen + 1; x++) { // ... stampa il sottovettore
printf("%d ", V[positions[j]+x]);
}
putchar('\n');
}
}
int main()
{
int V[MAX_LEN], N;
FILE *fp_read;
fp_read = fopen(INPUT_FILE, "r");
if (fp_read == NULL)
{
printf("Errore nell'apertura del file\n");
return 1;
}
for (N = 0; N < MAX_LEN && !feof(fp_read); N++) {
if (fscanf(fp_read, "%d ", &V[N]) != 1)
break;
}
sottoSequenze(V, N);
fclose(fp_read);
return 0;
}

View File

@@ -0,0 +1 @@
1 3 4 0 1 0 9 4 2 0