Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    475

    [C++] Funziona che ritorna valori diversi per parametri uguali Oo

    Stavo provando a fare uno degli esercizi del sito UVa, per la precisione il numero 100.

    Dato un algoritmo chiede di calcolare il massimo numero di iterazioni necessario a terminarlo per i valori compresi tra due numeri i e j forniti nell'input.

    Io ho scritto questo:

    codice:
    int algLen(int n)
    {
        int result;
    
        while (n != 1)
        {
            if (n%2)
            {
                n = 3 * n + 1;
            }
            else
            {
                n = n / 2;
            }
    
            result++;
        }
    
        result++;
        return result;
    }
    Che pare funzionare senza problemi, o almeno da dei risultati plausibili.
    Dato che gli intervalli forniti sono più di uno in realtà, ho pensato di scrivere questa funzione che restituisce direttamente il massimo valore di algLen nell'intervallo passato come parametro.

    codice:
    int maxAlgLen(int i, int j)
    {
        int lenK, maxLen = 0;
    
        for (int k = i; k <= j; k++)
        {
            lenK = algLen(k);
    
            if (lenK > maxLen)
                maxLen = lenK;
        }
    
        return maxLen;
    }
    Consideriamo l'intervallo 1 10. Tra 1 e 10 il massimo valore di algLen è 20. Questo lo so perchè glieli faccio stampare tutti a video. E questo è giusto, per (1;10) viene 20 anche secondo il sito.

    La cosa divertente è che se eseguo:

    codice:
    int main()
    {
        cout << maxAlgLen(1, 10);
    }
    ottengo invariabilmente 77. Il che di per sè non è tanto fastidioso, se consideriamo che questo codice:

    codice:
    int main()
    {
        for (int i = 1; i < 11; i++)
            cout << algLen(i) << endl;
    
        cout << endl;
        cout << maxAlgLen(1, 10);
        cout << endl;
    
        return 0;
    }
    stampa ogni volta un valore diverso, che è sempre nei dintorni di circa 32600.


    Cioè posso capire che ci sia un errore e mi dia il risultato sbagliato, ok... MA COME DIAVOLO FA A RESTITUIRE VALORI DIVERSI OGNI VOLTA PER GLI STESSI PARAMETRI!?!?
    "Let him who has understanding reckon the number of the beast, for it is a human number.
    Its number is rw-rw-rw-."

  2. #2
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    un motivo può essere che la variabile result non è inizializzata.. inizializzala a 0 e vedrai che funziona

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    475
    Vero, grazie.

    Ora toglimi una curiosità. Com'è che la funzione in cui si usava la variabile non inizializzata dava sempre il risultato corretto mentre quella che si appoggiava solo al suo valore ne era influenzata? E' assurdo xD
    "Let him who has understanding reckon the number of the beast, for it is a human number.
    Its number is rw-rw-rw-."

  4. #4
    Originariamente inviato da Ippo343
    Ora toglimi una curiosità. Com'è che la funzione in cui si usava la variabile non inizializzata dava sempre il risultato corretto mentre quella che si appoggiava solo al suo valore ne era influenzata? E' assurdo xD
    Tra i comportamenti indefiniti ci sono anche quelli assurdi ;-)

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 © 2026 vBulletin Solutions, Inc. All rights reserved.