Programma con array

giuliomontenero
Scrivere una funzione C++ che, dati due array di
interi positivi a e b, restituisce l’array c che contiene i numeri positivi che
appaiono in entrambi gli array (si suppone che gli array a e b non contengano
elementi ripetuti).
Esempio: a={2,11,6,5,9}, e b={2,3,4,11,7,5}. La funzione restituisce
c={2,11,5}.

ecco il mio elaborato
a me stampa solo il primo valore cercato
perchè?

#include<iostream>
using namespace std;
const int N=4;
bool funzione(int [5], int [3]);
int main()
{
    int a[5]={2,11,6,5,9};
    int b[3]={2,11,5};
    funzione(a,b);
    return 0;
}

bool funzione(int x[5], int y[3])
{
    int c[N]={};
    int dc=0;
    int i,j;
    bool condizione=false;
    for(i=0;i<5 && !condizione;i++)
    {
        for(j=0;j<3 && !condizione; j++)
        {
            if(x[i]==y[j] && !condizione)
            {
                condizione=true;
                c[dc]=x[i];
                dc++;
            }
            j++;
        }
        i++;
    }
    for(int k=0;k<dc;k++)
    cout<<c[k]<<" ";

    return condizione;
}

Risposte
apatriarca
Utilizza il tag code per inserire il codice in modo da mantenere la formattazione e rendere leggibile il codice, questa volta l'ho fatto io per te. Ma dal testo del problema sembra che la funzione debba essere in grado di funzionare per qualsiasi array di ingresso, mentre tu hai limitato le due dimensioni in modo abbastanza strano. Quando ho più tempo provo a dare un occhiata all'algoritmo che hai usato.

Sk_Anonymous
Perché non dovrebbe stampare solo il primo valore? Appena trovi il primo valore, setti "condizione" a "true", e per come hai scritto il programma lo fai uscire da tutti i cicli. Quella variabile credo sia inutile, basta impostare i cicli for sulle dimensioni degli array e basta, il ciclo finisce quando gli array sono stati "parsati" per intero.

Concordo sulle le osservazioni di apatriarca. Se il testo ti chiede array di qualunque dimensione, l'array finale "c" va allocato dinamicamente, e la funzione deve prendere la dimensione degli array in input (a meno di altri metodi per capire dove finiscono). Ovviamente, visto che il testo richiede l'uso del c++, la classe std::vector ti semplificherebbe molto la vita. Credo che ci sia una funzione delle STL per chiamare una funzione per ogni valore di un array, ma non ne so di più (dovresti approfondire)

Sk_Anonymous
"me stesso":
Credo che ci sia una funzione delle STL per chiamare una funzione per ogni valore di un array, ma non ne so di più (dovresti approfondire)


Trovata! :smt026

http://www.cplusplus.com/reference/algorithm/for_each/

Umby2
Utilizzerei il controllo di condizione solo e solamente sul ciclo piu' interno (quello della j ) (mi sembra anche giusto perchè se hai trovato un numero presente nel secondo vettore è inutile che continui a cercarlo).

Il ciclo esterno non dovrebbe avere questo controllo (quello della i ), ma termina fino alla fine.
Ovviamente cosi' facendo dovresti spostare la istruzione:

bool condizione=false;

internamente al primo ciclo (non esterna cosi dove l'hai messa)

giuliomontenero
potreste farmi vedere nel codice come lo modifichereste
io non ho ancora capito
vi dico solo che posso usare solo cicli e array

giuliomontenero
ho capito grazie

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