Files
Laboratori-TDP/Laboratorio 4/sottovettori.c
2024-03-22 17:14:57 +01:00

67 lines
1.6 KiB
C

// 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;
}