mattiasangi (Normal User)
Newbie
Messaggi: 1
Iscritto: 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.
|
|
HeDo (Founder Member)
Guru^2
Messaggi: 2765
Iscritto: 21/09/2007
|
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?! |
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
|
|
Bonny (Member)
Expert
Messaggi: 437
Iscritto: 24/04/2009
|
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?!
|
|
Pitagora (Member)
Expert
Messaggi: 367
Iscritto: 12/06/2010
|
usare gli operatori bitwise...
Codice sorgente - presumibilmente C++ |
int x = 9 while (x != 0) { if (x & 1) // se il numero e' dispari .... else // altrimenti .... }
|
|
|
HeDo (Founder Member)
Guru^2
Messaggi: 2765
Iscritto: 21/09/2007
|
Postato originariamente da Pitagora:
usare gli operatori bitwise...
Codice sorgente - presumibilmente C++ |
int x = 9 while (x != 0) { if (x & 1) // se il numero e' dispari .... else // altrimenti .... }
|
|
credo che prima si insegna a scrivere gli if, poi si passa ai bitwise |
|
Alex (Ex-Member)
Expert
Messaggi: 441
Iscritto: 15/08/2005
|
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=)
|
|
HeDo (Founder Member)
Guru^2
Messaggi: 2765
Iscritto: 21/09/2007
|
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 |
|
hackersitiz (Normal User)
Pro
Messaggi: 120
Iscritto: 29/09/2010
|
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++ |
#include <stdio.h> #include <stdlib.h> int main(void) { int number; int counter; printf("scrivi un numero naturale...\n"); scanf("%d", &number); for (counter = 1; counter <= number; counter++) { if (counter % 2 == 0) printf("i numeri pari sono...===>%d\n", counter); } return 0; }
|
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
Ultima modifica effettuata da hackersitiz il 13/11/2010 alle 19:32 |
|
hackersitiz (Normal User)
Pro
Messaggi: 120
Iscritto: 29/09/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...
|
|