Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    [C++]Iterazione per sequenza

    Salve,

    Devo creare una sequenza (determinata) con un iterazione.
    Mi serve per stampare i numeri di una tabella, i quali appunto, seguono questa sequenza.
    Ecco il codice:
    codice:
    //SEQUENZA: +1 - +1 - +1 - +5
      int x=4, y=1, z=5;
        while (x <=100)
        {
            cout << x << "\t";
            x+=y;
            cout << x << "\t";
            x+=y;
            cout << x << "\t";
            x+=y;
            cout << x << "\t";
            x+=z;
            
            
            
        }
    E' sbagliato, perchè arriva a 103.
    Una soluzione sarebbe aggiungere un if-break, ma voglio capire da dove deriva questo "errore" e come ovviarlo per evitare ripetizioni in futuro.

    Ringrazio e saluto.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    L'errore deriva dal fatto che le x sono aumentate all'interno e il controllo della while avviene solo alla fine ...

    Devi inserire le if...break ...

    Se i valori degli incrementi sono costanti, non usare le variabili y e z ...

    codice:
      int x=4, lim = 100;
      while (x<=lim)
      {
            cout << x << "\t";
            x++; if(x>lim) break;
    
            cout << x << "\t";
            x++; if(x>lim) break;
    
            cout << x << "\t";
            x++; if(x>lim) break;
    
            cout << x << "\t";
            x+=5;
      }
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    O, se preferisci una soluzione più generale:
    codice:
    int x=4;
    int max=100;
    int incr[]={1, 1, 1, 5}; // qui metti i valori di cui incrementare di volta in volta
    size_t period=sizeof(incr)/sizeof(*incr);
    for(int i=0; x<=max; i++, x+=incr[i%period])
        cout << x << "\t";
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da MItaly

    codice:
    int x=4;

    Oops ... arrivato dopo ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Bene, il programma è finito.
    Ma prima vorrei fare delle domande (o servono altri 3d? )...aspetto conferma.

  6. #6
    Originariamente inviato da signoredeltempo
    Ma prima vorrei fare delle domande (o servono altri 3d? )...aspetto conferma.
    Non c'è bisogno di prendere in giro, e comunque basta un minimo di buon senso...
    Ciascuna discussione deve trattare esclusivamente uno e un solo problema: quello indicato nel titolo. Per ogni nuovo problema che non sia strettamente correlato, è necessario aprire una nuova discussione.
    se hai domande sul codice che abbiamo postato o ancora inerenti all'argomento iniziale della discussione vanno qui, se la domanda è un'altra si fa una nuova discussione...
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Cercavo un rolleyes, ma non l'ho trovato .
    Allora:
    perchè usi size_t? Non equivale ad unsigned int?
    Il while, non controlla la condizione all'inizio (anziché alla fine)?
    (continua...)

  8. #8
    Originariamente inviato da signoredeltempo
    perchè usi size_t? Non equivale ad unsigned int?
    Non necessariamente; un size_t è un tipo senza segno tale per cui è garantito che possa contenere le dimensioni di qualunque oggetto tu possa creare (di fatto se non erro è definito come il tipo restituito da sizeof). Ovviamente per array di quelle dimensioni usare un int qualunque non è un problema, ma tendo ad usare il size_t abitualmente quando si parla di dimensioni di oggetti più che altro come forma di documentazione ("questa variabile non è un intero qualunque, ma è la dimensione di qualcosa").
    Il while, non controlla la condizione all'inizio (anziché alla fine)?
    Il while controlla all'inizio, ma tu fai degli incrementi a metà del ciclo, per cui fa a tempo a sforare prima che la successiva iterazione del while si "accorga" che hai sforato.
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da signoredeltempo
    Il while, non controlla la condizione all'inizio (anziché alla fine)?
    (continua...)
    Intendevo che, dopo aver controllato all'entrata, tutto il codice viene eseguito e solo alla fine di tutti gli incrementi riparte il while e si effettua il controllo.

    Così va bene?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    unsigned int può contenere fino a 4294967295 (preso da climits, spero di non dire sciocchezze): questo vale anche per size_t?
    Vorrei postare il codice del programma, magari per qualche consiglio/dritta.
    (continua...)

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.