Individuare sequenza di numeri in un file.txt

di
Anonimizzato18903
il
2 risposte

Individuare sequenza di numeri in un file.txt

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

2 Risposte

  • Re: Individuare sequenza di numeri in un file.txt

    Ti consiglio caldamente di inserire delle "stampe" di debug su cout, ad esempio stampare il contenuto di 'sequenza' dopo aver richiamato la funzione apri_file(), il contenuto di 'stringa' dopo aver richiamato inserisci_stringa() così ti accerti che l'input sia corretto.
  • Re: Individuare sequenza di numeri in un file.txt

    Penso di aver capito qual è il problema: ho usato la sostituzione per riferimento con riemp, sequenza e contatore e adesso funziona!
    Grazie mille per l'aiuto, candaluar!
Devi accedere o registrarti per scrivere nel forum
2 risposte