PDA

Visualizza la versione completa : [C++] Programma conversione basi di numeri


Guybrush1989
28-12-2008, 12:46
salve.. devo scrivere un programma che converta un numero da base 10 a base b scelta da tastiera..ho provato a fare in questo modo:

#include "util.h"

void convertiNumero(stringa s, int &num, int &base, int&riemp){

int j=-1,i=-1;
int* app=NULL;
app=new int [max-1]; //Puntatore ad array

if (app[j]<=1){ //Se il numero diviso <=1, procedi alla stampa al contrario della stringa
stampaStringa (s, riemp); //e svuota l'array dinamico
delete [] app;
}

else{
app[-1]=num;
riemp++;
i++;
j++;
if(j==0){ //La prima volta che il ciclo viene eseguito, dividi per il numero dato da tastiera
app[j]=(app[0])/(base);
s[i]=(app[0])%(base); //Inserisci nella stringa che verr stampata a video il resto della divisione tra interi
}

else{ //Tutte le altra volte, dividi il numero del ciclo precedente con la base e memorizza il risultato
app[j]=(app[j-1])/(base);
s[i]=(app[j-1])%(base);
}

convertiNumero (s, app[j], base, riemp); //Ricorsione: ripeti la procedura con un numero inferiore a num finquando app[j]==1

}

}

void stampaStringa (stringa s, int &riemp){

int i;

for (i=riemp+1; i>=0; i--)
cout<<s[i]<<"\t";

}



Il programma viene compilato dal dev ma d dei caratteri strani a video.
Grazie a chiunque voglia aiutarmi.

Cell
28-12-2008, 14:29
Uno dei problemi che di sicuro c' che gli indici degli array vanno oltre i loro limiti (tra 0 e max-1). L'indice di un array non pu, ad es. essere -1.

menphisx
28-12-2008, 14:41
Originariamente inviato da Cell
Uno dei problemi che di sicuro c' che gli indici degli array vanno oltre i loro limiti (tra 0 e max-1). L'indice di un array non pu, ad es. essere -1.

Veramente gli indici possono essere negativi :fagiano:

Pacio88
28-12-2008, 15:55
Originariamente inviato da menphisx
Veramente gli indici possono essere negativi :fagiano:
Davvero?
La cosa mi nuova, potresti spiegarmi come possibile?

menphisx
28-12-2008, 17:50
Originariamente inviato da Pacio88
Davvero?
La cosa mi nuova, potresti spiegarmi come possibile?

Semplicemente invece di andare avanti di un byte, va indietro :fagiano:




char mem[1024];
char *p = &mem[512];

/*
p[1] => mem[513]
p[-1] => mem[511]
*/



:fagiano: :mame:

Guybrush1989
28-12-2008, 21:44
Raga, nulla ancora? Ci sto sbattendo da un p la testa e nn capisco perch non funzioni...

oregon
28-12-2008, 22:33
Originariamente inviato da Pacio88
Davvero?
La cosa mi nuova, potresti spiegarmi come possibile?

Mai sentito parlare di "aritmetica dei puntatori" ?

oregon
28-12-2008, 22:37
Originariamente inviato da Guybrush1989
Raga, nulla ancora? Ci sto sbattendo da un p la testa e nn capisco perch non funzioni...

Se non hai avuto ancora risposte e' probabilmente perche' il codice non e' facilmente leggibile ... Usa i tag CODE (o il tasto # del forum) e indenta il codice in modo che sia facilmente leggibile ed esaminabile.

Inoltre, invia tutte le parti del codice che lo rendano compilabile, compresa la main altrimenti penso che pochi si prenderanno la briga di fare tutto quello che serve al posto tuo ...

Pacio88
28-12-2008, 22:38
Si l'aritmetica dei puntatori non mi nuova, diciamo pure che la conosco.. :mame:
Ma ahim a questa cosa degli indici negativi non avevo proprio mai pensato.

P.S. Oltretutto io e gli indici non siamo molto amici (basti vedere una discussione di qualche giorno fa) :D

oregon
28-12-2008, 22:44
Originariamente inviato da Pacio88
Si l'aritmetica dei puntatori non mi nuova, diciamo pure che la conosco.. :mame:
Ma ahim a questa cosa degli indici negativi non avevo proprio mai pensato.

Allora non hai approfondito abbastanza l'aritmetica dei puntatori.


P.S. Oltretutto io e gli indici non siamo molto amici (basti vedere una discussione di qualche giorno fa) :D

Ecco ... tutto ha una spiegazione ... :)

Loading