PDA

View Full Version : 3 domandine sul c++


albythebest
27-11-2003, 21:02
Ciao! Avrei da farvi 3 domandine:
1- Esiste una funzione che mi permetta in una divisione tipo 3/2 di avere come risulatato 3/2 (tre mezzi) invece di 1,5 e che in caso di una divizione come 9/15 di avere come risulatato 3/5?
2- Esiste una funzione che mi converta una variabile int da decimale a binaria, ottale e esadecimale?
3- Ho un problema con la funzione rand(): so che va inizializzata con srand() per evitare che dia sempre lo stesso risulatato ma nn so come farlo... me lo spiegate?

Grazie di tutto!:)

a2000
27-11-2003, 21:13
sì a tutto.

in excel ! :D

albythebest
27-11-2003, 21:41
...:rolleyes:
e in C++???

Ziosilvio
27-11-2003, 23:37
Ciao.
Risposta veloce veloce, da prendersi "cum grano salis" (non sono uno specialista di C++):
1) se stai chiedendo se esiste una classe per i numeri razionali, mi sa che va implementata "a mano";
2) la variabile, di per sé, è sempre binaria; dovrebbe essere possibile specificare il formato di visualizzazione, come si fa in C con printf();
3) rand() restituisce un valore a seconda del valore di una particolare variabile, detta seme: a ogni chiamata di rand() il valore del seme viene aggiornato. srand() prende un argomento di tipo unsigned int, il cui valore viene passato al seme. Se non vuoi far decidere il seme all'utente (all'inizio ha sempre lo stesso valore, ogni volta che il programma viene chiamato) puoi fare:
srand(time(NULL));
(la funzione time() è dichiarata nell'header time.h)

albythebest
28-11-2003, 17:42
Originariamente inviato da Ziosilvio
1) se stai chiedendo se esiste una classe per i numeri razionali, mi sa che va implementata "a mano";
Esattamente mi serve quello... Vedo se riesco a risolvere...
Originariamente inviato da Ziosilvio
2) la variabile, di per sé, è sempre binaria; dovrebbe essere possibile specificare il formato di visualizzazione, come si fa in C con printf();
Esatto è quello di cui ho bisogno!
Originariamente inviato da Ziosilvio
3) rand() restituisce un valore a seconda del valore di una particolare variabile, detta seme: a ogni chiamata di rand() il valore del seme viene aggiornato. srand() prende un argomento di tipo unsigned int, il cui valore viene passato al seme. Se non vuoi far decidere il seme all'utente (all'inizio ha sempre lo stesso valore, ogni volta che il programma viene chiamato) puoi fare:
srand(time(NULL));
(la funzione time() è dichiarata nell'header time.h)
Grazie mille per l'aiuto che mi hai dato qui!!!:) Ho risolto il problema!:cool:

cionci
30-11-2003, 04:25
Originariamente inviato da albythebest
Esattamente mi serve quello... Vedo se riesco a risolvere...
Guarda...è più semplice di quanto sembri...se hai problemi ti diamo una mano...

albythebest
30-11-2003, 18:49
Ciao cionci!!!:D Probabilmente nn ti ricordi di me (è passsato un pò di tempo...) ma io mi ricordo benissimo di te!:)

Si grazie, mi servirebbe il tuo aiuto!:) E anche sull'altra domanda se sai qualcosa mi farebbe molto piacere!
Tnx!!:)

/\/\@®¢Ø
30-11-2003, 23:38
Dovrebbero esserci diverse classi in giro per la rete che fanno al caso tuo
("use the Google, Luke!" :D )

prova ad esempio a vedere:+

http://www.google.com/search?q=rational+c%2B%2B+class&sourceid=mozilla-search&start=0&start=0&ie=utf-8&oe=utf-8
http://www.google.com/search?hl=en&lr=&ie=UTF-8&oe=utf-8&q=rational+c%2B%2B+library&btnG=Google+Search

Per la base, se controlli la documentazione ;) degli ostream vedrai che hai due alternative:

1) impostare opportunamente il canale:

#include <ios>
using namespace std;
/* blah blah blah */
/* out e' un ostream */
out.setf( ios_base::hex , ios_base::basefield );
out << 44;


2) usare i manipolatori

#include <ios>
using namespace std;
out << hex << 44;

Nel primo caso il canale continua a scrivere in formato esadecimale finche' non lo cambi nuovamente. Nel secondo caso il formato esadecimale e' valido solo per il primo
valore che scrivi.

Caveats:
Non sono sicuro del codice qui sopra (in particolare se la libreria inclusa e' quella corretta), sono almeno 5 mesi che non ci metto le mani sopra.
Probabilmente avrai bisogno di un compilatore recente/decente (scorda quello microsoft :D) per compilare il secondo esempio (se non pure il primo...)

lombardp
01-12-2003, 07:19
Originariamente inviato da Ziosilvio
1) se stai chiedendo se esiste una classe per i numeri razionali, mi sa che va implementata "a mano";


Si infatti.

Una decina di anni fa avevo creato proprio una classe del genere e avevo ridefinito gli operatori matematici (+,-,*,/) in C++ per operarte con questo nuovo tipo di dato. Per provarla ho preso il sorgente per la risoluzione di un sistema lineare (metodo di Gauss con le matrici, se non ricordo male) e cambiando solo il "tipo" delle variabili, avevo le soluzioni in forma di frazione.

cionci
01-12-2003, 09:41
Originariamente inviato da /\/\@®¢Ø
continua a scrivere in formato esadecimale finche' non lo cambi nuovamente. Nel secondo caso il formato esadecimale e' valido solo per il primo
valore che scrivi.
Ehm...non è che hai sbagliato thread ? Questo è quello sui numeri razionali...non sulla conversione di base ;)

albythebest
01-12-2003, 13:39
Originariamente inviato da cionci
Ehm...non è che hai sbagliato thread ? Questo è quello sui numeri razionali...non sulla conversione di base ;)

No no ha risposto giusto... io ho chiesto anche questo!:)

cionci
01-12-2003, 13:54
Originariamente inviato da albythebest
No no ha risposto giusto... io ho chiesto anche questo!:)
Ah...scusa, non avevo visto...