Programma che restituisce un array

di il
7 risposte

Programma che restituisce un array

Scrivere una funzione c++ che, dato un array di interi positivi a ed un intero k, restituisce un array contenente gli elementi di a che sono divisibili per k:
Esempio: a={4,7,3,1,45,6,32,20} , k=3.
La funzione restituisce {3,45,6}
non capisco cosa è che non funziona

#include<iostream>
using namespace std;
const int N=10;
void funzione(int [N],int);
int main()
{
    int k;
    int a[N]={4,7,3,1,45,6,32,20};
    cout<<"Inserisci un numero k"<<endl;
    cin>>k;
    funzione(a,k);
return 1;

}
void funzione(int x[N],int t)
{
    int c[N];
    int dc=0;
    for(int i=0;i<N;i++)
    {
        if(x[i]%t==0)
        {
            c[dc]=x[i];
            dc++;
        }
    }
for(int s=0;s<dc;s++)
cout<<x[s]<<" ";
}

7 Risposte

  • Re: Programma che restituisce un array

    La funzione corretta è:
    cout<<c[s]<<" ";
    Inoltre correggi nel main l' istruzione return 1 con return 0.

    Matteo
  • Re: Programma che restituisce un array

    Perchè però mi stampa anche gli zeri nel vettore?
    come faccio per risolvere questa cosa?
  • Re: Programma che restituisce un array

    Quando compili il programma ed inserisci ad esempio k=3, il vettore c[N] contiene e vengono stampati gli elementi: 3,45,6,0,0.
    Ciò è corretto perchè come ti ho già spiegato nell' esercizio "funzione restituzione array", l' array lo inizializzi nel seguente modo:
    int a[N]={4,7,3,1,45,6,32,20}; 
    Pertanto essendo N=10, avrai gli ultimi 2 elementi del vettore a[N] nulli e siccome 0/3= 0, sono elementi che vengono inseriti nel vettore c[N].

    Matteo
  • Re: Programma che restituisce un array

    Sisi fin qui c'ero arrivato
    ma quello che volevo sapere è come faccio a far stampare solo 3,45,6 senza andar a modificare la dimensione dell'array
    non c'è un modo per far riconoscere al compilatore la dimensione LOGICA dell'array
  • Re: Programma che restituisce un array

    Se non vuoi che vengano stampati anche gli zeri, basta modificare l' istruzione if nel seguente modo:
    if(x[i]%t==0 && x[i]!=0)
    Matteo
  • Re: Programma che restituisce un array

    Si ho capito ma in questo modo se l'array fosse
    
    int a[N]={4,7,3,0,1,45,0,6}
    
    non verranno stampati neanche gli zeri presenti all'interno dell'array
    così poi non funziona l'esercizio
  • Re: Programma che restituisce un array

    Allora l' unico modo è quello di modificare l' istruzione if in questo modo:
    if(x[i]%t==0 && i<N-2)
    Non esistono altri modi, visto che stai utilizzando i vettori che sono una sequenza di elementi allocati staticamente in memoria, dove definisci prima di compilare quanta memoria viene occupata.
    Se vorresti invece analizzare una sequenza di elementi dove non definisci prima di compilare quanta memoria vuoi occupare, dovresti crearti una lista di elementi invece che utilizzare un vettore, ma ciò richiede la conoscenza dell' allocazione dinamica della memoria (ovvero dell' operatore new in C++) e dei puntatori, ma credo che questi argomenti non li hai ancora studiati visto la tipologia degli esercizi che stai trattando.

    Matteo
Devi accedere o registrarti per scrivere nel forum
7 risposte