PDA

Visualizza la versione completa : [C] Complemento a 2


titto96
03-03-2012, 15:28
Sono tre giorni che sto su questo algoritmo e non riesco a capire cosa non vada...



#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main ()
{
printf("Inserisci il numero intero\n");
int n,s,conta,resto,cambia;
conta=0;resto=0;s=0;cambia=0;
scanf("%d",&n);
do {
resto = n%2;
n=floor(n/2);
if (cambia = 0)
{
if (resto=0)
{
}
else
{
cambia=1;
}
}
else
{
if (resto=0)
{
resto=1;
}
else
{
resto=0;
}
}
s=s+resto*pow(10,conta);
conta++;
} while (n!=0);
printf("%d \n",s);
system("PAUSE");
return 0;

}


Il risultato che inserendo qualsiasi numero che sia paro o dispari, il programma stampa "0"

Chiedo il vostro aiuto per la soluzione

Grazie

ramy89
03-03-2012, 15:33
Spiega qual' lo scopo dell' algoritmo: che problema deve risolvere?
Altrimenti se il problema un errore semantico uno come fa a capire cosa c' che non va?

titto96
03-03-2012, 15:38
Pensavo di essermi espresso bene...

Comunque... ho deciso di creare un algoritmo che esegua il complemento a 2 di un numero intero. Il mio problema che qualsiasi numero io inserisca, il programma stampa "0"

ramy89
03-03-2012, 16:12
Il problema che non so per cosa usi queste variabili:


int n,s,conta,resto,cambia;
conta=0;resto=0;s=0;cambia=0;

Puoi spiegare come le usi nel programma, cio a cosa servono?

ardito86
03-03-2012, 16:16
Non ho guardato l'algoritmo e non l'ho nemmeno analizzato.

Una cosa: in ogni if, ci deve essere una espressione che pu essere vera o falsa.


Nel tuo caso:

if (cambia = 0)

questa espressione il compilatore la vede intanto come un'assegnazione, e poi una espressione falsa perch uguale a zero. E sar sempre falsa, il blocco di codice interno non verr mai eseguito
Quello che vorresti fare tu :

if (cambia == 0)

Capita la differenza? "=" assegnazione, "==" confronto.

Stessa cosa per tutti gli altri if

titto96
03-03-2012, 16:44
Grazie... ora stampa sequenze di 1 e di 0 ma purtroppo non sono vere

:( come posso risolvere? secondo voi c' qualche altro errore?

titto96
03-03-2012, 16:44
Grazie... ora stampa sequenze di 1 e di 0 ma purtroppo non sono vere

:( come posso risolvere? secondo voi c' qualche altro errore?

oregon
03-03-2012, 17:25
L'errore del confronto di tipo sintattico.

Adesso devi spiegare l'algoritmo che intendevi usare per capire gli errori logici ...

titto96
03-03-2012, 17:34
ho notato che facendo il complemento a 2 di un numero binario, il risultato era l'opposto dopo aver incontrato 1

Es.

01010 //Numero binario
10101 //Complemento a 1 (cambio di numeri)
10110 //Complemento a 2

Se notate il risultato l'opposto dei numeri dopo aver incontrato 1

Era questo il mio intento

Quando cambia=1 vuol dire che ha gi incontrato 1 se 0 ancora no.

Spero abbiate capito

oregon
03-03-2012, 17:40
Ma non devi inventarti tu un metodo o una "legge" ... devi seguire la regola.

Per il C2 devi ottenere

il C1
sommare 1 al risultato

Loading