Programma per multipli di un numero

di il
7 risposte

Programma per multipli di un numero

Ho questo esercizio: visualizzare tutti i numeri multipli di n compresi tra a e b; a, b, n vengono riechiesti in input all'utente. Ho provato a scrivere un programmino ma non funziona correttamente. dove sbaglio? Potreste aiutarmi per favore? Grazie in anticipo.

#include <stdlib.h>
#include <iostream>
using namespace std;

main()
{
  int a;
  int b;
  int n;
  int i;

  cout <<"Inserisci l'inervallo a-b\n";
  cin>>a>>b;
  cout<<"Inserisci n\n";
  cin>>n;
   i=a;
  while(n<=b)
  {
      i++;
      cout<<n*i<<endl;
  }

  system("pause");
  return 0;
}



7 Risposte

  • Re: Programma per multipli di un numero

    Prima di scrivere codice che magari non funziona e non sai neanche il perché, devi indicare l'algoritmo che hai seguito per risolvere il problema.

    Ci descrivi i passi che hai pensato di fare per risolvere il problema e ci fai vedere, nel codice, dove hai messo in pratica queste tue idee?

    Perché dici che il programma non funziona?

    Cosa è un numero multiplo di un altro?
  • Re: Programma per multipli di un numero

    Inizialmento ho imposto di controllare l'intervallo impostato dall'utente in cui si trova il numero, sempre deciso dall'utente,e i sui multipli quindi il numero e i suoi multipli devono essere maggiori di a e minori di b.Il multiplo di un numero è un numero che diviso il primo numero dà resto zero. Il fatto è che non riesco a capire come programmare questa parte, poichè si usa un ciclo con i quali non me la cavo molto bene. Ora conoscendo la toria come la traduco in c++?
  • Re: Programma per multipli di un numero

    #include <stdlib.h>
    #include <iostream>
    using namespace std;
    
    main()
    {
        int a; /* limite inferiore */
        int b; /* limite superiore */
        int n; /* numero del quale calcolare i multipli */
        int m; /* il multiplo vero e proprio (l'ho aggiunto per chiarezza) */
        int i; /* contatore (in questo caso, anche moltiplicatore) */
    
        cout <<"Inserisci l'intervallo a-b\n";
        cin>>a>>b;
        cout<<"Inserisci n\n";
        cin>>n;
    
        i=a; /* stai assegnando il limite inferiore al moltiplicatore: non va! */
    
        while(n<=b) /* nell'ambito di questo ciclo, n non viene mai modificato!!!
                       Per questo se n>b fin dall'inizio, il ciclo non verra' MAI
                       eseguito, mentre se n<=b il ciclo sarà infinito */
        {
            i++; /* incrementi di uno il moltiplicatore, ma sei partito
                    da un punto inopportuno quando hai scritto i=a */
           
            m = n*i; /* questo e' quello che mandi in uscita: e' multiplo di n? */
           
            cout<<n*i<<endl; /* gia' dal primo passaggio stai moltiplicando
                                n*(a+1) e non credo proprio sia quel che ti serve
                                (poi n*(a+2), quindi n*(a+3) e cosi' via)*/
                                
        }
    
        system("pause");
        return 0;
    }
    #include <stdlib.h>
    #include <iostream>
    using namespace std;
    
    main()
    {
        int a; /* limite inferiore */
        int b; /* limite superiore */
        int n; /* numero del quale calcolare i multipli */
        int m; /* il multiplo vero e proprio */
        int i; /* contatore (in questo caso, anche moltiplicatore) */
    
        cout <<"Inserisci l'inervallo a-b\n";
        cin>>a>>b;
        cout<<"Inserisci n\n";
        cin>>n;
    
        i=1; /* parti con i = unita', ovvero n resta se stesso */
    
        do /* il do "posticipa" il controllo della condizione d'uscita */
        {
            m = i*n; /* prendi i valori multipli di n, uno ad uno a partire da n */
    
            if(m>=a && m<=b) /* solo se m e' compreso entro i limiti imposti... */
            {
                cout<<m<<endl; /* ...lo mostri in console */
            }
    
            i++; /* DOPO incrementi il moltiplicatore */
        } while(m<=b);
    
      system("pause");
      return 0;
    }
    Prova entrambi i codici con un debugger e vedi cosa succede alle variabili nei due casi.
  • Re: Programma per multipli di un numero

    Grazie mille per l'aiuto soprattutto per il codice commentato. Il problema che io ho capito la logica e la sintassi dei cicli ma quando vado a risolvere gli esercizi non so che istruzioni impostare dentro il ciclo. Come potrei risolvere questo grande problema, perchè altrimenti non potrei andare avanti nella programmazione, i cicli dovrebbero essere un argomento semplice e invece per me non lo sono affatto.
  • Re: Programma per multipli di un numero

    Per risolvere gli esercizi la parte (secondo me) più importante è CAPIRE BENE LA TRACCIA (non è così banale).
    In secondo luogo direi che è importante scomporre il problema in tanti "problemini" da affrontare uno ad uno.
    Quando si passa a scrivere il codice, non sottovalutare l'importanza di commentare PER SE i passaggi (serve a chiarirsi le idee man mano che si procede). Intendi questi commenti come una specie di appunto che prendi per tenere traccia in modo esplicito e CHIARO di quel che stai facendo.

    Quanto sopra direi che può essere ritenuto un approccio che aiuta in tutte le situazioni.

    Per i cicli in particolare, in genere trovo utile pensarli come una specie di "sottoprogramma" nel programma, per cui c'è una fase di inizializzazione, nella quale prepari le variabili prima di entrare nel ciclo vero e proprio, ci sono delle condizioni di modifica dei dati (spesso con incremento o decremento di qualcosa, ma non è detta), quindi ci sono delle condizioni di verifica per determinare quando è ora di abbandonare il ciclo e tornare al "flusso principale" del programma.

    E poi c'è un'arma potentissima: il debugger. Non considerare mai una perdita di tempo seguire passo per passo nel debugger quel che succede all'interno del ciclo, sia in termini di flusso delle operazioni, sia in termini di valori delle variabili. C'è chi preferisce far precedere a questo tipo di verifica una fase di progettazione "su carta", con diagrammi di varia natura. Sicuramente per chi lo sa fare è un grande aiuto, però per qualche ragione a me confonde le idee più che chiarirmele.

    Anche vedere TANTI esempi di codice messo insieme da altri è molto utile, magari provando a metterci le mani e sperimentare il risultato di modifiche fatte con tanta, tanta curiosità.

    Col che non ti ho detto proprio niente di determinante, anche perché ognuno finisce per sviluppare il proprio modo di procedere personale, adatto alla propria forma mentis e non a quella altrui.
  • Re: Programma per multipli di un numero

    Grazie per il consiglio
  • Re: Programma per multipli di un numero

    @olegfresi .... ti devi sforzare di risolvere il caso singolo, a prescindere dal ciclo, cosa che non hai neanche tentato di fare in questo caso.
    Il tuo problema non è nei cicli ma proprio nella individuazione dell'algoritmo e nello studio accurato della richiesta dell'esercizio. Non puoi pensare in alcun modo di passare al codice se non hai compreso bene la richiesta dell'esercizio.

    Dovevi tentare di arrivarci da solo e qui @AldoBaldo non ti è stato d'aiuto fornendoti del codice piuttosto che farti arrivare da solo.

    Fra l'altro, @AldoBaldo, se n è 10 e i limiti sono 1000000000 e 1000000050, devo farmi un loop da un miliardo di conteggi? Sei proprio sicuro?
Devi accedere o registrarti per scrivere nel forum
7 risposte