[C++, contare quante volte un array in un altro array]

Sponny
Ciao a tutti , non riesco a scrivere tale algoritmo , Immagino che qualche anima pia possa risolvere il mio problema.

la traccia dell esercizio è



mi sono bloccato qui. Qualcuno gentilmente saprebbe aiutarmi? :smt023
#include
#include
#include

using namespace std;

#define MAX 50

fstream file;
char nome[MAX];


void apri_file (int &m , int vet[MAX]);
void sequenza(int vet1[MAX]);

int main (){

int m,n;
int vet[MAX];
int vet1[MAX];

apri_file (m , vet);
sequenza(vet1);

return 0;

}

void apri_file (int &m , int vet[MAX])
{
cout<<"Inserire il nome del file: ";
cin.getline(nome, MAX, '\n');
file.open(nome,ios::in);
if(!file){
cout<<"\nIl file non esiste.";
exit(1);
}
file>>m;
for (int i=0; i {
file>>vet;
}
file.close();
}

void sequenza(int vet1[MAX]) {
int n;
cout<<"Quanti elementi vuoi inserire: ";
cin>>n;
for (int i=0;i cout<<"inserisci l'elemento di posizione "< cin>>vet1;
}
}



Risposte
vict85
Riguardo al testo ho un dubbio: due ripetizioni possono intersecarsi? Per capirci, supponi ti venga dato 1 2 1 come sequenza e tu abbia
1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1,
che risultato devo mettere? Se non si devono intersecare ne ho:
4 : 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1
oppure
4 : 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1
Ma se consideri in modo generico allora ne ho 8...

Insomma probabilmente il professore si è soffermato un po' troppo sulle caratteristiche che voleva avesse il codice e un po' troppo poco sul problema in sé.

Mi metto a cercare errori nel tuo codice comunque. Che errori/problemi ha? Insomma per sapere che devo cercare.

P.S.: Io sinceramente avrei messo il testo dell'esercizio con
[quote][/quote]
e il codice con
[code]
[/code]. Per il futuro ti suggerisco di farlo :wink: in particolare per il codice.

Sponny
io fino ad ora ho fatto un void che apre il file e memorizza l'array, e un altro void che memorizza un array da tastiera di lunghezza n definita dall'utente.
ora non riesco ad andare avanti : dovrei fare un void che con un contatore vede le ripetizioni , ma non ne sono capace.

vict85
Io penso che tu debba usare della memoria dinamica oppure i vector.

Sponny
nessuno mi riesce a dire come risolvere , sono quasi disperato.

vict85
Stai pensando troppo alla forma. Ti mostro un esempio di come dovresti, a mio avviso procedere.

vettore
1 2 3 6 1 1 2 3 5 2 1 1 1 1 6
con la sequenza 1 2 3
vettore utile w = |?|?|?|
variabile cont = 0
PASSO 1 w = |1|?|?|, cont = 0; controllo 1 = 1 allora proseguo con una lettura
PASSO 2 w = |1|2|?|, cont = 0; controllo 2 = 2 allora proseguo con una lettura
PASSO 3 w = |1|2|3|, cont = 0; controllo 3 = 3, w è pieno allora aggiungo una ripetizione, cancello primo elemento
PASSO 4 w = |2|3|?|, cont = 1; controllo 2 != 1, allora cancello primo elemento
PASSO 5 w = |3|?|?|, cont = 1; controllo 3 != 1, allora cancello primo elemento
PASSO 6 w = |?|?|?|, cont = 1; w è vuoto, devo leggere un elemento
PASSO 7 w = |6|?|?|, cont = 1; controllo 6 != 1, allora cancello primo elemento
PASSO 8 w = |?|?|?|, cont = 1; w è vuoto, devo leggere un elemento
PASSO 9 w = |1|?|?|, cont = 1; controllo 1 = 1, allora proseguo con una lettura
PASSO 10 w = |1|1|?|, cont = 1; controllo 1 != 2, allora cancello primo elemento
PASSO 11 w = |1|?|?|, cont = 1; controllo 1 = 1, allora proseguo con una lettura
PASSO 12 w = |1|2|?|, cont = 1; controllo 2 = 2 allora proseguo con una lettura
PASSO 13 w = |1|2|3|, cont = 1; controllo 3 = 3, w è pieno allora aggiungo una ripetizione, cancello primo elemento
PASSO 14 w = |2|3|?|, cont = 2; controllo 2 != 1, allora cancello primo elemento
PASSO 15 w = |3|?|?|, cont = 2; controllo 3 != 1, allora cancello primo elemento
PASSO 16 w = |?|?|?|, cont = 2; w è vuoto, devo leggere un elemento
e così via finché la lettura restituisce un elemento.

w lo implementerei come un array ma senza spostare gli elementi ma lavorando come se fosse un anello. Insomma dovresti memorizzare il punto di inizio, e gli elementi occupati, tenendo conto che gli elementi occupati hanno un massimo. Inoltre dovresti leggere i dati usando il resto.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.