|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
[C] Cambio di base
Ciao a tutti........
Sono di fronte a questo problema: Scrivere un programma che dato in input un numero n in base 10 e un base b maggiore o uguale di 2, converte n in base b. Io avevo fatto una cosa del genere, però ho visto che non va: Codice:
#include <stdio.h>
int main(void){
int num,base,i=0,val=0;
printf("Inserisci numero: ");
scanf("%d", &num);
printf("Inserisci la base: ");
scanf("%d", &base);
for( ; num>0; num/=base, ++i)
if(num%base)
val+=pow(base,i);
printf("%d", val);
return 0;
}
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Il programma deve convertire secondo un alfabeto di cifre...ed il numero convertito non può che essere un vettore di interi (o al limiti sfruttando un alfabeto ongi intero può essere convertito in un carattere)...con ogni intero che rappresenta una cifra del numero convertito...
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
Ehm non ho capito molto
Cioè l'algoritmo che ho usato io non va bene. A me interessa sapere anche quello, perché se devo convertire da base 10 a una base maggiore di 10 mi serve un certo algoritmo mentre se è minore me ne serve un altro. |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
Le cifre che ottieni dalla conversione non puoi rimetterle in un intero... O te le stampi volta volta oppure le metti in un vettore di interi... Il numero di cifre che servono per rappresentare un numero naturale N in base Beta è pari all'intero superiore di logaritmo in base Beta di N... |
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
Quindi l'algoritmo che ho usato io va bene solamente che devo rappresentare ogni cifra nell' i-esima posizione di un vettore. Giusto?=
|
|
|
|
|
|
#6 | ||
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
In generale il tuo algoritmo non va bene
Codice:
Ultima modifica di cionci : 05-11-2005 alle 16:40. |
||
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
Grazie ancora non vedo lo spoiler
Ho provato a buttare giù questo: Codice:
#include <stdio.h>
#define N 32
int main(void){
int num,base,i;
int a[N]={0};
printf("Inserisci numero: ");
scanf("%d", &num);
printf("Inserisci la base: ");
scanf("%d", &base);
for(i=N; num>0, i>0; --i){
a[i]=num%base;
num/=base;
}
printf("La rappresentazione in base %d è: ", base);
for(i=0; i<N; ++i)
printf("%d", a[i]);
return 0;
}
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
int a[N]={0};
Questo non azzera il vettore... |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
Si si ho provato personalmente. Non mettendo niente mi vengono tutti numeri strani. Se lo metto invece mi visualizza correttamente tutti 0. Anche sul mio libro c'è scritto che per azzerarlo si usa quell'istruzione. Il problema è un altro è che credo che non mi calcoli correttamente il valore nella base b.
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Funziona, ma io suppongo che dipenda dall'implementazione del compilatore...
Ad esempio se scrivi: int a[10] = {5}; non ti inizializza tutti gli elementi a 5, ma solo giustamente il primo. gli altri a 0... |
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
C - Didattica e Programmazione di Al Kelley e Ira Pohl. COnforme allo standard ANSI C.
Ma perché pensi sia questo il problema? |
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
Infatti dipende dal compilatore (per quanto riguarda gli array automatici come questo)
|
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
No, non penso che sia quello il problema, ma mi interessava questo aspetto...
|
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
Ma l'algoritmo che ho usato è giusto? A me sembra di si. Però se provo ad esempio a dargli come numero 13 e poi a dargli come base 2 mi da 110
|
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Aspetta...guardo meglio...
|
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Prova con altre, ad esempio 1548 in base 16....
|
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
Ho provato ora mi viene 60
|
|
|
|
|
|
#19 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Questo perchè inizializzi i a N invece di N-1... Controlla ora...
|
|
|
|
|
|
#20 |
|
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
E' vero ora tornano i risultati
E perché dovevo inizializzarlo a N-1 se devo partire dall'ultima posizione dell'array? |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 02:35.



















