Entra

View Full Version : [C] Quesito


Manugal
25-06-2005, 13:14
Ciao a tutti! :)

Devo modificare un programmino. Quando fa dei operazioni logiche ad esempio a||b può dare 0 se è falso o 1 se è vero. Io dovrei modificarlo in modo tale che mi dia V se è vero e F se è falso (senza far uso degli enumeratori). Come posso fare? Grazie.

jappilas
25-06-2005, 13:26
ma... che io sappia un punto esclamativo ( come in ( !(condizione) ) inverte il risultato del test su <condizione> ... ;)

Manugal
25-06-2005, 13:28
Scusa e che c'entra con quello che voglio fare io? Io voglio sostituire il carattere "F" a 0 e il carattere "V" a 1.

71104
25-06-2005, 13:29
Ciao a tutti! :)

Devo modificare un programmino. Quando fa dei operazioni logiche ad esempio a||b può dare 0 se è falso o 1 se è vero. Io dovrei modificarlo in modo tale che mi dia V se è vero e F se è falso (senza far uso degli enumeratori). Come posso fare? Grazie. V ed F cosa sono, variabili/costanti numeriche? caratteri char? macro?

71104
25-06-2005, 13:30
Scusa e che c'entra con quello che voglio fare io? Io voglio sostituire il carattere "F" a 0 e il carattere "V" a 1. ok, allora non si può. devi per forza convertire manualmente: char c;
bool f = a || b;
if (f) {
c = 'V';
}
else {
c = 'F';
}

71104
25-06-2005, 13:31
oppure (forma più semplice): char c = (a || b) ? 'V' : 'F';

jappilas
25-06-2005, 13:35
scusa sti giorni sono davvero stordito... avevo capito lo scopo fosse la negazione del test (F al posto di 1, V al posto dello 0) ... -_-'

Scusa e che c'entra con quello che voglio fare io? Io voglio sostituire il carattere "F" a 0 e il carattere "V" a 1.

in quel caso... ehm... sostituirei i test con semplici funzioni con un char in ritorno... :stordita:

oppure (forma più semplice): char c = (a || b) ? 'V' : 'F';

ed anche più ottimizzata se non sbaglio ;)

repne scasb
25-06-2005, 14:27
c=('V'-'F')*(a||b)+'F';


Si puo' fare di meglio pero'...

Manugal
25-06-2005, 15:12
Ok grazie. Senza che apro un altro post non riesco a capire ora quest'altro problema. Devo praticamente creare una funzione che calcoli l'n-esima potenza di x quindi io ho fatto così:

double power(double x, double n){

int i;
double power=1.0;

for(i=1; i<n; i++)
power*=x;

return power;
}

Perché il valore di power che ritorna la funzione è sempre 1? :cry:

repne scasb
25-06-2005, 18:22
double x,n,power; /* power = 'x' elevato alla 'n' */

power=exp(n*log(x));

71104
25-06-2005, 18:30
double x,n,power; /* power = 'x' elevato alla 'n' */

power=exp(n*log(x));

scusa, qui non sarebbe meglio usare pow? :confused:
calcolare una potenza non è più semplice per la cpu che calcolare prima un logaritmo e poi e elevato al risultato?

kratteo
25-06-2005, 18:52
perchè fare l'esponente del logaritmo?

c'è la funzione pow (nb bisogno dichiarare la libreria math.h)

pow (base, esponente);

repne scasb
25-06-2005, 18:58
scusa, qui non sarebbe meglio usare pow? :confused:
calcolare una potenza non è più semplice per la cpu che calcolare prima un logaritmo e poi e elevato al risultato?

1) Non e' stata specificata alcun tipo di CPU.
2) Nel caso di CPU di cleasse x86 con FPU di classe x87, e' necessario ricordare la tale FPU non dispone di un'istruzione assembly di elevamento a potenza, ma dell'istruzione: FYL2X (ossia Y* Log in base 2 di X), percui il compilato di "pow" su FPU di classe x87, e' "sostanzialmente" quanto da me scritto poco sopra.

repne scasb
25-06-2005, 19:03
perchè fare l'esponente del logaritmo?


1) Perche' permette di capire come funziona l'elevamento a potenza.
2) Perche' e' in "generale" piu' veloce della funzione pow.

Fenomeno85
25-06-2005, 19:14
1) Perche' permette di capire come funziona l'elevamento a potenza.
2) Perche' e' in "generale" piu' veloce della funzione pow.

ecco che esce con le sue perle di saggezza :D ci mancavi


~§~ Sempre E Solo Lei ~§~

okay
25-06-2005, 19:44
repne scasb bentornata era tanto tempo che non li leggevo +.
mi sei mancata è bello sapere che ci sei

ciao