|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Jan 2007
Messaggi: 173
|
[C] Passaggio da var. scalare a array
Ciao, sapete come fare a passare da scalare a array?
Cioè io immetto da input uno scalare, ad esempio 435, e devo portare in qualche modo in array queste 3 cifre Array[0]=4 array[1]=3 array[2]=5 mi serve per l'algoritmo di conversione base X a base 10 ![]() |
![]() |
![]() |
![]() |
#2 | |
Member
Iscritto dal: Jan 2007
Messaggi: 173
|
Quote:
Codice:
/*Algoritmo che converte un numero da base X a base 10*/ #include <stdio.h> #include <math.h> int baseXbase10 (int X, int B, int N); main() { int base_X,z,N; int numero_X; printf("Inserisci la base del numero da convertire: "); scanf("%d",&base_X); printf("\nInserisci il numero da convertire in base 10: "); scanf("%d",&numero_X); printf("\nDigita quante cifre ha il numero da convertire: "); scanf("%d",&N); z=baseXbase10(numero_X,base_X,N); printf("\n\nNumero convertito: %d\n",z); } int baseXbase10 (int X, int B, int N) { long int ris; int i; int Array[30]; ris=0; for (i=0;i<N;i++) { Array[i]=X%10; X/=10; ris=ris+Array[i]*(int)pow(B,i); } return ris; } E poi mi resta il problema che, se devo convertire un numero esadecimale, invece di A devo scrivere 10 ![]() Consigli? |
|
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Jan 2007
Messaggi: 173
|
finito in pag2, up
![]() |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Innanzitutto la conversione da una base ad un'altra in genere ha senso farla quando si deve convertire una stringa (che rappresenta il numero) in un valore intero (o viceversa). Non ha molto senso, almeno secondo me, fare una conversione di base da numero intero a numero intero. Anche perché potresti al massimo arrivare a base 10, non certo base 16, ad esempio.
Cioè che senso ha dover immettere il valore intero 1001 (mille e uno) pensandolo in base 2 per ottenere il valore intero 9??? Poi che ti serve a fare l'array 'Array' se nella funzione fai: Codice:
for (i=0;i<N;i++) { Array[i]=X%10; X/=10; ris=ris+Array[i]*(int)pow(B,i); } Poi scusa 'ris' è un long int ma poi la funzione ritorna un int??
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
![]() |
![]() |
![]() |
#5 |
Member
Iscritto dal: Jan 2007
Messaggi: 173
|
L'eserizio mi server per esercitarmi e basta
![]() L'array mi serve per il calcolo perchè la formula di conversione base X base 10 fa cosi' 1011.01 (base 2)= 1*10^3 +0*10^2 +1*10^1 +1*10^0 +0*10^-1 +1*10^-2 1A3C.F7 (base 16)= 1*10^3 +10*10^2 +3*10^3 +12*10^0 +15*10^-1 +7*10^-2 Per la base 16 come hai notato non posso farla, infatti avevo chiesto consigli ![]() L'array mi serve per le cifre da moltiplicare a 10^i Per il cast hai ragione, non ci avevo pensato ![]() Mi restano ancora da migliorare questi 2 punti detti prima: 1 Vorrei evitare di inserire N da esterno (lunghezza numero) usando qualche function tipo la strlen ma non ne conosco di function per gli interi 2 Mi resta il problema che, se devo convertire un numero esadecimale, invece di A devo scrivere 10 Sai cosa fare? Grazie mille |
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Come consiglio, prova invece ad esercitarti facendo una conversione da intero a stringa e viceversa. Conversione da intero a stringa (più facile). Immagina la seguente funzione: void int_to_str (char *buf, int value, int radix) Data una radice in radix, convertire il valore in value in una stringa da memorizzare nel buffer puntato da buf. Conversione da stringa a intero (meno facile). Immagina la seguente funzione: int str_to_int (char *str, int *pvalue, int radix) Data una radice in radix, convertire la stringa puntata da str in un valore numerico da restituire usando il puntatore pvalue. La funzione dovrebbe ritornare 1 se tutto ok, 0 se fallita (stringa malformata ad esempio).
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
![]() |
![]() |
![]() |
#7 |
Member
Iscritto dal: Jan 2007
Messaggi: 173
|
ehm aspetta
![]() devo fare questo perchè è sulle slide della prof, poi quando ho finito quelli delle slide magari provo i tuoi ![]() L'array si è temporaneo ma mi serve per applicare la formula, non trovo altra soluzione tu faresti diversamente? Come faresti? P.s. restano cmq sempre quei 2 problemucci ![]() p.p.s. hai un sito dove spiega a cosa servono tutte le function appartenenti alle librerie piu' famose? Ogni tanto compare sulle slide qualche function "magica" senza spiegazione e per capirla devo andare a intuito ![]() |
![]() |
![]() |
![]() |
#8 | ||
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Codice:
int baseXbase10 (int X, int B, int N) { long int ris; int i; int Val; ris=0; for (i=0;i<N;i++) { Val=X%10; X/=10; ris=ris+Val*(int)pow(B,i); } return ris; } Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
||
![]() |
![]() |
![]() |
#9 |
Member
Iscritto dal: Jan 2007
Messaggi: 173
|
lol, è vero, ma come vi vengono ste idee
![]() andbin e VeeJ grazie ![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:06.