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

    [C++] Problema con il passaggio dei parametri aggiornati delle successioni

    Ho questo testo:

    Si consideri la successione a1=0 a2=1 a3=2 e per n>3
    an=a(n-1)+2*a(n-2)+a(n-3)
    Sia dato un array ordinato B di interi di N elementi
    con Bi>a3. Scrivere una funzione booleana ricorsiva che
    restituisca TRUE se gli N elementi dell'array
    rappresentano N elementi consecutivi della successione.

    Ho scritto questo codice, ma le modifiche che avvengono sui parametri a1, a2, a3 all'interno di succ vengono perse all'interno di consecutivi e per questo la successione non continua a generarsi correttamente alla successiva chiamata, sapreste indicarmi il perchè?

    codice:
    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    bool consecutivi(int,int,int,int [],int,int);
    int succ(int &,int &,int &,int,int);
    
    int main(){
        
        int b[4]={19,41,88,189};
        if(consecutivi(0,1,2,b,4,0)) cout<<"SI"<<endl;
        else cout<<"NO"<<endl;
        
        
        
        system("pause");
        return 0;
        
    }
    
    bool consecutivi(int a1,int a2,int a3,int b[],int N,int i){
         cout<<"\nCONSECUTIVI "<<a1<<"\t"<<a2<<"\t"<<a3<<endl;
         if(i>=N) return true;
         else if(succ(a1,a2,a3,b[i],0)==b[i]) return consecutivi(a1,a2,a3,b,N,i+1);
         else return false;
    }
    
    int succ(int &a1,int &a2,int &a3,int lim,int somma){
        
        if(a1+(2*a2)+a3>=lim){ int somma=a1+(2*a2)+a3;
                             cout<<"NO"<<somma<<endl;
                             a1=a2;
                             a2=a3;
                             a3=somma;
                             cout<<a1<<"\t"<<a2<<"\t"<<a3<<endl;
                             return somma;
                             }
        else{ 
              int somma=a1+(2*a2)+a3;
              cout<<"SI"<<somma<<endl;
              return succ(a2,a3,somma,lim,somma);
              }
    }
    Grazie mille.
    MondoLibero: Informazione Libera, Varia ed Eventuale
    Sito di informazione varia ed eventuale. Quando ho voglia scrivo di ciò che mi pare. Pubblico guide, recensioni, notizie, critiche e tutto ciò che mi passa sotto mano e che penso sia interessante.

  2. #2

    Re: [C++] Problema con il passaggio dei parametri aggiornati delle successioni

    Originariamente inviato da Skull260287
    Ho questo testo:

    Si consideri la successione a1=0 a2=1 a3=2 e per n>3
    an=a(n-1)+2*a(n-2)+a(n-3)
    Sia dato un array ordinato B di interi di N elementi
    con Bi>a3. Scrivere una funzione booleana ricorsiva che
    restituisca TRUE se gli N elementi dell'array
    rappresentano N elementi consecutivi della successione.

    Ho scritto questo codice, ma le modifiche che avvengono sui parametri a1, a2, a3 all'interno di succ vengono perse all'interno di consecutivi e per questo la successione non continua a generarsi correttamente alla successiva chiamata, sapreste indicarmi il perchè?

    codice:
    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    bool consecutivi(int,int,int,int [],int,int);
    int succ(int &,int &,int &,int,int);
    
    int main(){
        
        int b[4]={19,41,88,189};
        if(consecutivi(0,1,2,b,4,0)) cout<<"SI"<<endl;
        else cout<<"NO"<<endl;
        
        
        
        system("pause");
        return 0;
        
    }
    
    bool consecutivi(int a1,int a2,int a3,int b[],int N,int i){
         cout<<"\nCONSECUTIVI "<<a1<<"\t"<<a2<<"\t"<<a3<<endl;
         if(i>=N) return true;
         else if(succ(a1,a2,a3,b[i],0)==b[i]) return consecutivi(a1,a2,a3,b,N,i+1);
         else return false;
    }
    
    int succ(int &a1,int &a2,int &a3,int lim,int somma){
        
        if(a1+(2*a2)+a3>=lim){ int somma=a1+(2*a2)+a3;
                             cout<<"NO"<<somma<<endl;
                             a1=a2;
                             a2=a3;
                             a3=somma;
                             cout<<a1<<"\t"<<a2<<"\t"<<a3<<endl;
                             return somma;
                             }
        else{ 
              int somma=a1+(2*a2)+a3;
              cout<<"SI"<<somma<<endl;
              return succ(a2,a3,somma,lim,somma);
              }
    }
    Grazie mille.
    Nessuno è riuscito a capire l'errore?
    MondoLibero: Informazione Libera, Varia ed Eventuale
    Sito di informazione varia ed eventuale. Quando ho voglia scrivo di ciò che mi pare. Pubblico guide, recensioni, notizie, critiche e tutto ciò che mi passa sotto mano e che penso sia interessante.

  3. #3
    Uffa non capisco, non capisco, sarà una cavolata ma niente.
    MondoLibero: Informazione Libera, Varia ed Eventuale
    Sito di informazione varia ed eventuale. Quando ho voglia scrivo di ciò che mi pare. Pubblico guide, recensioni, notizie, critiche e tutto ciò che mi passa sotto mano e che penso sia interessante.

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.