[C++, contare quante volte un array in un altro array]
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?
la traccia dell esercizio è
mi sono bloccato qui. Qualcuno gentilmente saprebbe aiutarmi?

#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;icout<<"inserisci l'elemento di posizione "< cin>>vet1;
}
}
Risposte
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
in particolare per il codice.
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

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.
ora non riesco ad andare avanti : dovrei fare un void che con un contatore vede le ripetizioni , ma non ne sono capace.
Io penso che tu debba usare della memoria dinamica oppure i vector.
nessuno mi riesce a dire come risolvere , sono quasi disperato.
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.
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.