Salve a tutti.
Tra poche settimane ho l'esame di fondamenti di informatica e mi esercitavo sulla seguente traccia:
"Sia assegnato un file di testo contenente una sequenza di numeri interi molto lunga.
Scrivere un programma che, richiesto il nome del file da tastiera e l’immissione di una sequenza di numeri di cui è preventivamente fornita la lunghezza (maggiore di 1), verifichi quante volte la sequenza si presenti all’interno del file."
Ho scritto il seguente codice:
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
#define MAX 20
#define dim 50
void apri_file (int riemp, int sequenza[])
{
fstream numeri;
char nome_file[MAX];
cout <<"Inserisci nome file: ";
cin.getline (nome_file, MAX-1, '\n');
numeri.open (nome_file, ios::in);
if (!numeri)
{
cout <<"\nFile " <<nome_file <<" non trovato";
};
while (!numeri.eof())
{
numeri >> sequenza[riemp++];
};
riemp--;
numeri.close();
}
void inserisci_stringa (int lunghezza, int riemp, int sequenza[], int stringa[])
{
do
{
cout <<"Inserisci lunghezza sequenza (maggiore di 1): ";
cin >>lunghezza;
if (lunghezza <= 1)
{
cout <<"Inserimento non valido\n";
};
}
while (lunghezza <= 1);
cout <<"Inserisci sequenza da controllare:\n";
for (int i = 0; i < lunghezza; i++)
{
cin >>stringa [i];
};
}
int calcolo (int stringa[], int sequenza[], int lunghezza, int riemp, int &contatore)
{
int i,j;
for (i = 0; i <= riemp - lunghezza; i++)
{
if (sequenza[i] == stringa[0])
{
bool seqok = true;
for (j = 1; j < lunghezza; j++)
{
if (sequenza[i+j] != stringa[j])
{
seqok = false;
};
};
if (seqok == true)
{
contatore++;
};
};
};
return contatore;
}
int main ()
{
int contatore = 0;
int riemp = 0;
int sequenza[dim];
int stringa [dim];
int lunghezza;
apri_file (riemp, sequenza);
inserisci_stringa (lunghezza, riemp, sequenza, stringa);
cout <<"Sequenza incontrata " <<calcolo (stringa, sequenza, lunghezza, riemp, contatore) <<" volte";
}
Il problema è che la funzione "calcolo" sembra non funzionare: qualunque sequenza inserisca, "contatore" resta zero.
Che cosa sbaglio?
Vi prego di aiutarmi, sono disperato