Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [C++] Uguagliare array in una ricorsione

    Salve, sto creando una funzione ricorsiva che somma tutti gli elementi di un array.

    Utilizzando i vettori è più semplice, visto che ha delle funzioni come le stringhe.

    Io invece voglio utilizzare gli array!

    La strada che scelgo come via di fuga è che se la dimensione dell'array è 1 allora la somma è a[0],

    altrimenti devo sommare l'ultimo elemento alla somma di un sottoarray in cui manca l'ultimo elemento, il discorso è che non so come creare un array più piccolo.

    Mi spiego meglio.

    io ho:

    a[]={4,5,7,8,2,3}

    e voglio avere.

    b[]={4,5,7,8,2} // cioè generare b a partire da a meno l'ultimo elemento

    per poi ripassarlo alla funzione per fare la somma degli elementi di questo sottoarray etc.. fino a quando il sottoarray che si genera ha dimensione 1 e scatta la via di fuga

    b[]=a[]-1 //è sbagliato


    Come posso fare???
    Ho preovato con i puntatori, ma manco ci riesco.

    Suggeritemi solo l'associazione degli array e non la soluzione per la ricorsione, perchè devo fare un esame

  2. #2
    Posta il codice che hai scritto, comunque è abbastanza semplice.

  3. #3
    Grazie per l'interessamento, ma io no voglio la soluzione della ricorsione.

    Fate finta che io della ricorsione non vi abbia detto niente.

    Riformulo la domanda

    io ho:

    a[]={3,5,6,7,4,6}

    e voglio un b[] più piccolo di 1 elemento rispetto ad a[]

    cioè facendo un'uguaglianza del tipo.

    b[]=a[]-1;

    dovrei avere :

    b[] ==> 3 5 6 7 4

    grazie per la vostra immensa disponibilità

  4. #4
    Aspetta, se tu lavori con un array sai già la dimensione. O perchè l'hai allocato in modo statico, o perchè l'hai allocato in modo dinamico e quindi sai quanta roba c'è dentro. Quello che passi alla funzione è sempre un puntatore al primo elemento, e la sua dimensione!
    ergo, se vuoi memorizzare dentro un array B l'array A senza l'ultimo elemento, prendendo in considerazione il fatto che DIM è la dimensione basta un for
    codice:
    int B[DIM-1];
    for(int i=0;i<DIM-1;i++)
        B[i] = A[i];
    Quindi questo è quanto, comunque sicuramente non ti servirà lavorare in questo modo, basta modificare i parametri della funzione, se io ho una funzione del genere
    codice:
    int func(int a[], int dim)  {
        for(int i=0;i<dim;i++)
            cout<<a[i];
    }
    e ho un array a[] = { 1, 2, 3, 4, 5 }. Facendo func(a, 5) stampa tutti gli elementi, facendo func(a, 4) ne stampa tutti tranne l'ultimo, non so se mi spiego, è come se l'array che gli passo è più piccolo, non mi serve passargli per forza un'array di dimensione inferiore, gli passo l'indirizzo iniziale e la dimensione 'logica' non 'fisica' dell'array, in modo da poterci lavorare come voglio.

    Essenzialmente, per fare quello che devi fare tu, ti basta questo, puoi farlo anche inserendo in B gli elementi di A meno l'ultimo, ma questo è soltanto una complicazione inutile.

  5. #5
    ok

    grazie!!

    se ci sono problemi ti scrivo!!

    ciao!!

  6. #6
    codice:
    #include <iostream>
    #include <cstdlib>
    #include <string>
    
    
    using namespace std;
    
    int Dim = 6;
    
    
    
    
    int somma(int a[])
    {
    
    int b[Dim];
    
    
    if(Dim=1) return a[0];
    
    
    
    
    else
    
    
    
    for(int i=0;i<Dim-1;i++)
    {
    b[i]=a[i-1];
    }
    
    
    Dim--;
    
    return a[Dim]+somma(b);  //sempre l'ultimo elemento di a più la somma di un sotto vetore
    
    
    }
    
    
    
    
    
    
    int main()
    {
    
    int aa[]={1,4,6,3,2,5};
    
    cout<<somma(aa);
    
    return 0;
    }

    Non va bene, non fa la somma manco per niente!!

    il mio libro come soluzione all'esercizio usa i vettori, ma io voglio provare con l'array

  7. #7
    Grazie in anticipo per l'aiuto

  8. #8



    RISOLTO

    Che pasticcio che ho combinato prima

    Ora funge alla grande...
    Grazie mille

    codice:
    #include <iostream>
    #include <cstdlib>
    #include <string>
    
    
    using namespace std;
    
    
    
    int Dim = 6;
    
    
    int somma(int a[])
    {
    
    int b[Dim-1];
    
    if(Dim==1) return a[0];
    
    
    else
    
    for(int i=0;i<Dim-1; i++)
    {
       b[i]= a[i];
        }
    
    Dim--;
    
    return a[Dim]+somma(b);  //sempre l'ultimo elemento di a più la somma di un sotto vetore
    
    
    }
    
    
    
    int main()
    {
    
    int aa[]={1,4,6,3,2,5};
    
    cout<<somma(aa);
    
    return 0;
    }

  9. #9
    Visto che l'hai risolto ti faccio vedere il modo che intendevo io e che ti ho spiegato (o almeno ci ho provato) sopra.
    codice:
    #include <iostream>
    using namespace std;
    
    int somma(int a[], int dim) {
        if(dim <= 0) return 0;
        if(dim == 1) return a[0];
    
        return somma(a, dim-1) + a[dim-1];
    }
    
    int main() {
        int a[] = {1, 2, 3, 4};
        cout<<somma(a, 4);
        return 0;
    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.