Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - risolvere un problema...
Forum - C/C++ - risolvere un problema...

Avatar
mattiasangi (Normal User)
Newbie


Messaggi: 1
Iscritto: 12/11/2010

Segnala al moderatore
Postato alle 18:27
Venerdì, 12/11/2010
ho un problema...devo risolvere l'algoritmo seguente: dato in input un numero n, visualizza solo i numeri pari...
io ho provato con il seguente codice:
#include <stdio.h>
#include <stdlib.h>
main()
{
      int x,i;
      printf("scrivi un numero naturale...\n");
      scanf("%d", &x);
      for (i=1;i<=x;i++)
      {
         if (i/2)
         printf("i numeri pari sono...===>%d\n", i);
      }
system("pause");
}

se provo a eseguirlo, non raggiungo il risultato che volevo...cosa ho sbagliato ?
grazie in anticipo.

PM
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Up
1
Down
V
Segnala al moderatore
Postato alle 1:44
Sabato, 13/11/2010
Testo quotato

Postato originariamente da Bonny:

Sono d'accordo che un numero naturale per essere pari deve essere divisibile per due ma la divisione deve dare come resto zero.. questo il calcolatore non lo sa gli e lo devi dire eh!!!
quindi nella selezione dive hai scritto if( i / 2) manca qualcosa...  il calcolatore interpreta quella istruzione in questo modo se i diviso due e quindi???? capisci che manca qualcosa?! :k:



in realtà il programma compila perfettamente, è sbagliata la semantica della soluzione.

la divisione nella condizione dell'if è tra interi, quindi viene brutalmente restituito un intero che viene valutato: se 0 false, altrimenti vero.

ricordo che (tra interi) 1/2 = 0, 2/3 = 0, 12 / 7 = 1, etc...

quello che ti serve è l'operatore modulo, che in C è '%'

ricapitolando:

if (n % x)

si traduce con se il modulo di n / x è zero, quindi se n è un multiplo di x.
nel tuo caso x è 2.

cmq ci sarebbero altri modi più furbi per testare se un numero è divisibile per due, ma questo ora basta e avanza :)

PM
Avatar
Bonny (Member)
Expert


Messaggi: 437
Iscritto: 24/04/2009

Up
0
Down
V
Segnala al moderatore
Postato alle 0:07
Sabato, 13/11/2010
Sono d'accordo che un numero naturale per essere pari deve essere divisibile per due ma la divisione deve dare come resto zero.. questo il calcolatore non lo sa gli e lo devi dire eh!!!
quindi nella selezione dive hai scritto if( i / 2) manca qualcosa...  il calcolatore interpreta quella istruzione in questo modo se i diviso due e quindi???? capisci che manca qualcosa?! :k:

PM
Avatar
Pitagora (Member)
Expert


Messaggi: 367
Iscritto: 12/06/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 7:20
Sabato, 13/11/2010
usare gli operatori bitwise...

Codice sorgente - presumibilmente C++

  1. int x = 9
  2. while (x != 0) {
  3. if (x & 1) // se il numero e' dispari
  4. ....
  5. else // altrimenti
  6. ....
  7. }




PM
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Up
0
Down
V
Segnala al moderatore
Postato alle 10:05
Sabato, 13/11/2010
Testo quotato

Postato originariamente da Pitagora:

usare gli operatori bitwise...

Codice sorgente - presumibilmente C++

  1. int x = 9
  2. while (x != 0) {
  3. if (x & 1) // se il numero e' dispari
  4. ....
  5. else // altrimenti
  6. ....
  7. }






credo che prima si insegna a scrivere gli if, poi si passa ai bitwise :)

PM
Avatar
Alex (Ex-Member)
Expert


Messaggi: 441
Iscritto: 15/08/2005

Up
0
Down
V
Segnala al moderatore
Postato alle 17:43
Sabato, 13/11/2010
Postato originariamente da HeDo:

Postato originariamente da Bonny:

cmq ci sarebbero altri modi più furbi per testare se un numero è divisibile per due, ma questo ora basta e avanza :)

che modi più furbi ci sarebbero? mi hai incuriosito=)

PM
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Up
0
Down
V
Segnala al moderatore
Postato alle 19:11
Sabato, 13/11/2010
Testo quotato

Postato originariamente da Alex:

Postato originariamente da HeDo:

Postato originariamente da Bonny:

cmq ci sarebbero altri modi più furbi per testare se un numero è divisibile per due, ma questo ora basta e avanza :)

che modi più furbi ci sarebbero? mi hai incuriosito=)



il modo più furbo è il bitwise :)

PM
Avatar
hackersitiz (Normal User)
Pro


Messaggi: 120
Iscritto: 29/09/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 19:31
Sabato, 13/11/2010
Testo quotato

Postato originariamente da mattiasangi:

ho un problema...devo risolvere l'algoritmo seguente: dato in input un numero n, visualizza solo i numeri pari...
io ho provato con il seguente codice:
#include <stdio.h>
#include <stdlib.h>
main()
{
      int x,i;
      printf("scrivi un numero naturale...\n");
      scanf("%d", &x);
      for (i=1;i<=x;i++)
      {
         if (i/2)
         printf("i numeri pari sono...===>%d\n", i);
      }
system("pause");
}

se provo a eseguirlo, non raggiungo il risultato che volevo...cosa ho sbagliato ?
grazie in anticipo.  


1- usa il tag code..
2-aggiusta le variabili
3-vatti a riguardare gli operatori
Tutto questo senza offesa, ma:
Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  int main(void)
  4. {
  5.       int number;
  6.       int counter;
  7.  
  8.       printf("scrivi un numero naturale...\n");
  9.       scanf("%d", &number);
  10.  
  11.       for (counter = 1; counter <= number; counter++)
  12.       {
  13.          if (counter % 2 == 0)
  14.          printf("i numeri pari sono...===>%d\n", counter);
  15.       }
  16.  
  17.       return 0;
  18.   }


era banale se tu avessi studiato meglio il C...
Ancora senza offesa, ma ti chiedo di accettare le critiche..
Spero di essere stato utile,
Saluti..
P.S = ti ho cambiato le variabili perche erano un po' urende:rotfl:

Ultima modifica effettuata da hackersitiz il 13/11/2010 alle 19:32
PM
Avatar
hackersitiz (Normal User)
Pro


Messaggi: 120
Iscritto: 29/09/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 19:41
Sabato, 13/11/2010
Scusate ho visto adesso la soluzione bitwise, bella soluzione, ma ho preferito postare quella più semplice che nel suo caso mi sembrava più occasionale...
Saluti e scusate ancora...

PM