feat: Initial commit
This commit is contained in:
4
Laboratorio 4/matrix.txt
Normal file
4
Laboratorio 4/matrix.txt
Normal 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
118
Laboratorio 4/matrixquad.c
Normal 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
58
Laboratorio 4/ruota.c
Normal 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;
|
||||
}
|
||||
66
Laboratorio 4/sottovettori.c
Normal file
66
Laboratorio 4/sottovettori.c
Normal 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;
|
||||
}
|
||||
1
Laboratorio 4/vettore.txt
Normal file
1
Laboratorio 4/vettore.txt
Normal file
@@ -0,0 +1 @@
|
||||
1 3 4 0 1 0 9 4 2 0
|
||||
Reference in New Issue
Block a user