67 lines
1.6 KiB
C
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;
|
|
}
|