Help algoritmo...

Luck32
ciao a tutti...
volevo sapere se qualkuno poteva darmi una mano ...

sto provando a creare un algoritmo con cui calcolare il valore di un
numero dal sistema decimale a quello binario...

poike sono all'inizio del corso nn posso usare molti operatori,
IO avevo PENSATO di usare l'operatore "resto" con la condizione
"IF"... pero nn riesco ad utilizzare il ciclo "for" e quidni il programma
nn va...

qualkuno ha qualke idea?

Risposte
codino75
scrivi l'abbozzo del tuo algoritmo...

cozzataddeo
"Luck3":
... pero nn riesco ad utilizzare il ciclo "for" e quidni il programma
nn va...

Forse intendevi dire il ciklo "for"...credo sia per questo che non ti funziona...

Luck32
int n;
cout<<"Inserire il Numero:";
cin>>n;
for (n=0;n/2==0;n%2);{
if (n%2==0)
cout<<"0";
else if (n%2!=0)
cout<<"1";
}
system ("pause");
return 0;
}


scusate l'ignoranza e i tanti errori...

Giova411
"Luck3":
int n;
cout<<"Inserire il Numero:";
cin>>n;
for (n=0;n/2==0;n%2);{
if (n%2==0)
cout<<"0";
else if (n%2!=0)
cout<<"1";
}
system ("pause");
return 0;
}


Premetto che non so che cosa devi trovare... Ma guardando al volo il pezzo di codice ho visto che n prima lo chiedi e poi lo resetti a zero nel ciclo? Sicuro? Così perdi il valore di n inserito dall'utente. In teoria dovresti dichiarare una variabile locale all'interno del ciclo, quindi indipendente da quella globale che chiedi all'utente.

TomSawyer1
Se vuoi farlo in quel modo, devi scrivere

for (; n/2>0; n/2){
if (n%2==0)
    cout << "0";
else
    cout << "1";
}

cozzataddeo
L'osservazione di Giova411 è corretta e costituisce il primo macroscopico errore.
La correzione suggerita forse non coglie del tutto nel segno: se ti serve un contatore per il ciclo devi definirti una variabile locale alla funzione non al ciclo. Ovvero prima dell'istruzione for o come prima istruzione all'interno della parentesi del ciclo for dovresti scrivere qualcosa come "int contatore = 0"...
In ogni caso, poiché il tuo test lo esegui non su un contatore ma sul quoziente di n/2, un contatore non ti serve a niente perciò la prima istruzione del ciclo for la puoi lasciare vuota (basta mettere un semplice punto e virgola [for(; n/2==0;...)]).

Il secondo sta nel fatto che l'istruzione for viene eseguita se la seconda istruzione restituisce un valore logico diverso da zero, ovvero risulta vera. Nel tuo caso l'istruzione

n/2 == 0

è vera se e solo se n vale 0 o 1. Per cui il tuo ciclo viene eseguito almeno una volta solo in questi due casi (banali).

Il terzo sta nel fatto che il valore di n non viene mai aggiornato nel ciclo: il valore calcolato con l'espressione n%2 non modifica il valore di n. Per far ciò dovresti scrivere
n=n%2; o in modo piú compatto n %= 2;

Ci sarebbero altre considerazioni di carattere stilistico ma per ora può bastare.
Intanto vai a vederti la sintassi dell'istruzione for (su internet trovi manuali C e C++ per tutti i gusti), cerca di sistemare questi errori e ricompila il programma.

A quel punto provalo e cerca di capire perché ancora non funziona... :wink: ...poi ci risentiamo...

Buon lavoro!

:D

cozzataddeo
Per come la vedo io anche il ciclo di Tom Sawyer contiene un paio di errori...molto probabilmente sviste...

TomSawyer1
Si', n/2 e' chiaramente n=n/2.

cozzataddeo
Certo.
Inoltre se n = 0 o n = 1 il programma non dà in output nessun valore.
In piú i valori emessi in questo modo forniscono sí le cifre binarie del numero però in ordine inverso (la prima ad essere emessa è la cifra delle unità, la seconda quella delle "duine" [ :-D ], la terza quella delle "quartine", ecc.). Per cui alla fine sul monitor verrà visualizzato a rovescio.
Ad esempio se in input si mette il numero 10 si ottiene in uscita

0 1 0 1

e non, come ci si aspetterebbe,

1 0 1 0

Suggerimento stilistico: l'istruzione n%2 restituisce dà come risultato 0 o 1 che sono proprio i due numeri da mandare in output, quindi l'istruzione if...else può essere sinteticamente sostituita dall'unica istruzione

cout << n%2

TomSawyer1
Massi', il programma completo con tutti i dettagli (pochi) lo scrivera' lui, come deve essere.

cozzataddeo
Certo, le mie indicazioni erano a beneficio di Luck3. :)

Luck32
vi ringrazio tutti siete stati tremendamente utili (lezione saltata il For è diventato arabo x me )

ma cmq trovo un problema ...

int main () {
int n;
cout<<"Inserire il Numero:";
cin>>n;
for (; n/2>0; n=n/2){
if (n%2==0)
cout << "0";
else
cout << "1";
}
system ("pause");
return 0;
}


nn mi da l'ultima cifra... si ferma prima ...

Ps: sapevo del fatto k il mio risultato sarebbe stato il numero bianrio al contrario,
ma il prof. ha detto k quella sarà un operazione k vedremo piu avanti...

SCUSATE la visibile ignoranza, grazie ankora ... e mi sa k saro molto presente in questo forum ! :D

TomSawyer1
Quindi se si ferma prima, ti potrebbe essere utile pensarci un po' tu da solo.

Al massimo, se proprio non ti va
.

lorven
Ciao, viene persa l'ultima cifra perchè Il FOR dovrebbe fermarsi quando n=0:
basta cambiare

for (; n/2>0; n=n/2){

con:

for (; n>0; n=n/2){

Vedo inoltre che non hai colto i suggerimenti stilistici di Cozza Taddeo ...

EDIT:
@TomSawyer
sorry, 5'' dopo... :(

Luck32
ecco... ALGORITMO COMPLETATO...

con un grosso Grazie a tutti gli esperti e non k mi hanno dato una mano :D...

per quanto rigurda lo stile... mi immagino come un Gattuso a 18anni... molto molto rozzo! :lol:

semmai se vi è poss mi aiuterebbe una spiegazione sull'utilizzo di "for"...
sto provando a recuperare la lezione su "for" e "while" ma le guide su internet , diciamo
le comprendo poco ...

cmq UTILITà su scala 1a100 ... 1000

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.