Numero uguale alla somma dei due numeri precedenti

di il
7 risposte

Numero uguale alla somma dei due numeri precedenti

Il programma mi stampa SEMPRE TRUE
/*Si implementi in C/C++ un algoritmo che acquisisca una sequenza di n (n>=1) interi
e che invochi una funzione che restituisce 1 se esiste un elemento nella sequenza uguale
alla somma dei due elementi precedenti o 0 se non esiste un tale elemento.
 
BY DAVIDE REICH */
 
#include <iostream>
using namespace std;
void acquisisco_vettore(int *punt, int n){
    for (int i=0;i<n;i++){
        cout << "Inserisci l'elemento ("<<i<<"): ";
        cin >> *(punt+i);
    }
}
 
int funzione(int *punt, int n){
    int i=0;
    int somma;
 
    for (i=2; i<n;i++, somma=punt[i-1] + punt [i-2])
            if (somma != punt[i])
            somma=0;
 
    if (somma==0)
        return 0;
    else
        return 1;
}
 
int main(){
    int n;
 
    cout << "Inserisci una sequenza di n interi maggiori o uguali ad 1";
    do {
        cin >> n;
            if (n<1){
                cout << "Ritenta sarai piu' fortunato" <<endl;
            }
    }
    while (n<1);
   
    int A[n];
    int *punt = &A[0];
    acquisisco_vettore(punt,n);
   
 
    int risultato = funzione(punt,n);
    if (risultato==0)
        cout << "Non ci sono numeri uguali." << endl;
    else
        cout << "Ci sono numeri uguali." << endl;
 return 0;
}

7 Risposte

  • Re: Numero uguale alla somma dei due numeri precedenti

    Dovresti farci qualche esempio di input per riprodurre il problema.
    Comunque io partirei dal semplificare il for
        for (i=2; i<n;i++, somma=punt[i-1] + punt [i-2])
                if (somma != punt[i])
                somma=0;
    
    farei la funzione cosi
    int funzione(int *punt, int n){
        int i;
     
        for (i=2; i<n;i++)
        {
                if ((punt[i-1] + punt [i-2]) == punt[i])
                	return 1;
        } 
       return 0;
    }
  • Re: Numero uguale alla somma dei due numeri precedenti

    AGGIORNATO. Mi da sempre TRUE.
    #include <iostream>
    using namespace std;
    void acquisisco_vettore(int *punt, int n){
        for (int i=0;i<n;i++){
            cout << "Inserisci l'elemento ("<<i<<"): ";
            cin >> *(punt+i);
        }
    }
    
    
    int funzione(int *punt, int n){
        int i;
     
        for (i=2; i<n;i++)
        {
                if ((punt[i-1] + punt [i-2]) == punt[i])
                   return 1;
        } 
       return 0;
    }
    
     
    int main(){
        int n;
     
        cout << "Inserisci una sequenza di n interi maggiori o uguali ad 1";
        do {
            cin >> n;
                if (n<1){
                    cout << "Ritenta sarai piu' fortunato" <<endl;
                }
        }
        while (n<1);
       
        int A[n];
        int *punt = &A[0];
        acquisisco_vettore(punt,n);
       
     
        int risultato = funzione(punt,n);
        if (risultato==0)
            cout << "Non ci sono numeri uguali." << endl;
        else
            cout << "Ci sono numeri uguali." << endl;
     return 0;
    }
  • Re: Numero uguale alla somma dei due numeri precedenti

    davide9797 ha scritto:


    AGGIORNATO. Mi da sempre TRUE.
    #include <iostream>
    using namespace std;
    void acquisisco_vettore(int *punt, int n){
        for (int i=0;i<n;i++){
            cout << "Inserisci l'elemento ("<<i<<"): ";
            cin >> *(punt+i);
        }
    }
    
    
    int funzione(int *punt, int n){
        int i;
     
        for (i=2; i<n;i++)
        {
                if ((punt[i-1] + punt [i-2]) == punt[i])
                   return 1;
        } 
       return 0;
    }
    
     
    int main(){
        int n;
     
        cout << "Inserisci una sequenza di n interi maggiori o uguali ad 1";
        do {
            cin >> n;
                if (n<1){
                    cout << "Ritenta sarai piu' fortunato" <<endl;
                }
        }
        while (n<1);
       
        int A[n];
        int *punt = &A[0];
        acquisisco_vettore(punt,n);
       
     
        int risultato = funzione(punt,n);
        if (risultato==0)
            cout << "Non ci sono numeri uguali." << endl;
        else
            cout << "Ci sono numeri uguali." << endl;
     return 0;
    }
    Ho tolto solo il return 0 dal main e mi va bene. Perchè?
  • Re: Numero uguale alla somma dei due numeri precedenti

    Con quale input lo provi? A me invece risulta che funziona correttamente.
  • Re: Numero uguale alla somma dei due numeri precedenti

    Cosi. E' uguale a prima solo che ho tolto return 0 dal main e mi va. Prima no.
    /*Si implementi in C/C++ un algoritmo che acquisisca una sequenza di n (n>=1) interi
    e che invochi una funzione che restituisce 1 se esiste un elemento nella sequenza uguale
    alla somma dei due elementi precedenti o 0 se non esiste un tale elemento.
     
    BY DAVIDE REICH */
     
    #include <iostream>
    using namespace std;
    void acquisisco_vettore(int *punt, int n){
        for (int i=0;i<n;i++){
            cout << "Inserisci l'elemento ("<<i<<"): ";
            cin >> *(punt+i);
        }
    }
    
    
    int funzione(int *punt, int n){
        int i;
     
        for (i=2; i<n;i++)
        {
                if ((punt[i-1] + punt [i-2]) == punt[i])
                   return 1;
        } 
       return 0;
    }
    
     
    int main(){
        int n;
     
        cout << "Inserisci una sequenza di n interi maggiori o uguali ad 1";
        do {
            cin >> n;
                if (n<1){
                    cout << "Ritenta sarai piu' fortunato" <<endl;
                }
        }
        while (n<1);
       
        int A[n];
        int *punt = &A[0];
        acquisisco_vettore(punt,n);
       
     
        int risultato = funzione(punt,n);
        if (risultato==0)
            cout << "Non ci sono numeri uguali." << endl;
        else
            cout << "Ci sono numeri uguali." << endl;
    }
  • Re: Numero uguale alla somma dei due numeri precedenti

    Rettifico. Mi va tutto bene ora. Grazie mille!
  • Re: Numero uguale alla somma dei due numeri precedenti

    Se tu guardi il flowchart di una for http://www.tutorialspoint.com/cprogramming/c_for_loop.htm capirai il tuo errore (suggerimento: controlla dove avresti calcolato la somma corrente...)
Devi accedere o registrarti per scrivere nel forum
7 risposte