12/11/11 11:13
AlessandroS
Salve a tutti,
Avrei dei problemi a completare un programma in cui deve:
1) Creare due vettori A e B allocati dinamicamente ( new tipo[n]; ) con dimensione scelta da input , aventi un tipo che può essere unsigned short o float , tale tipo viene scelto durante l' esecuzione dall' user ( 0 se è unsigned short , 1 se è float ) . Per tale motivo ho dovuto utilizzare i puntatori a void.
2) Creare un vettore C di stessa dimension e tipo dei vettori A e B , i quali elementi i-esimi vengono calcolati nel seguente modo:
C[i] = A[i] / B[i] se i è pari;
C[i] = A[i]^B[i] ( elevato a B[i] ) se i è dispari;
Dovendo creare un puntatore a funzione ( sempre perchè la traccia me lo richiede ).
3) Stamapare il Vettore C
Punti risolti: i punti 1) e 3) funzionano poichè, una volta letti i vettori A e B li ho stampati con il sottoprogramma che dovrei utilizzare per il vettore C e funziona
Problema: il punto 2) mi da problemi , per tale motivo vi incollo il sottoprogramma che applica la divisione ( identico per la potenza ) e penso che il problema consista in quello perchè durante l' esecuzione e precisamente nella stampa del vettore C , i risultati non sono esatti:
quei cout mi servivano per utilizzare un debugging manuale cmq da quei cout ho potuto vedere che cmq vengono presi giusti i valori nelle rispettive i-esime posizioni dei vettori A e B e anche il risultato *ris è giusto . Ma quando vado a stampare ( tramite un altro sottoprogramma ) il vettore C , mi da valori random. In conlusione penso che il problema sia nel comando *(unsigned short*)C= *ris; ---> non è giusto fare così? se si o se no mi potreste dire come potrei fare?
Se non vi è chiaro vi posso incollare tutto il programma che è diviso in 3 file.
Grazie in anticipo ,
Alessandro
Avrei dei problemi a completare un programma in cui deve:
1) Creare due vettori A e B allocati dinamicamente ( new tipo[n]; ) con dimensione scelta da input , aventi un tipo che può essere unsigned short o float , tale tipo viene scelto durante l' esecuzione dall' user ( 0 se è unsigned short , 1 se è float ) . Per tale motivo ho dovuto utilizzare i puntatori a void.
2) Creare un vettore C di stessa dimension e tipo dei vettori A e B , i quali elementi i-esimi vengono calcolati nel seguente modo:
C[i] = A[i] / B[i] se i è pari;
C[i] = A[i]^B[i] ( elevato a B[i] ) se i è dispari;
Dovendo creare un puntatore a funzione ( sempre perchè la traccia me lo richiede ).
3) Stamapare il Vettore C
Punti risolti: i punti 1) e 3) funzionano poichè, una volta letti i vettori A e B li ho stampati con il sottoprogramma che dovrei utilizzare per il vettore C e funziona
Problema: il punto 2) mi da problemi , per tale motivo vi incollo il sottoprogramma che applica la divisione ( identico per la potenza ) e penso che il problema consista in quello perchè durante l' esecuzione e precisamente nella stampa del vettore C , i risultati non sono esatti:
Codice: void divisione ( void* A, void* B, void* C,const int t) { if ( t == 0 ) { unsigned short *u = (unsigned short*)A; unsigned short *v = (unsigned short*)B; unsigned short *ris = new unsigned short; cout << "divisione "<< *u << "fratto "<< *v <<endl; *ris= *u/ *v; cout << "il risultato di e' "<< *ris<<endl; *(unsigned short*)C=*ris; } else { float *u= (float*)A; float *v= (float*)B; float *ris= new float; *ris= *u/ *v; *(float*)C=*ris; } }
quei cout mi servivano per utilizzare un debugging manuale cmq da quei cout ho potuto vedere che cmq vengono presi giusti i valori nelle rispettive i-esime posizioni dei vettori A e B e anche il risultato *ris è giusto . Ma quando vado a stampare ( tramite un altro sottoprogramma ) il vettore C , mi da valori random. In conlusione penso che il problema sia nel comando *(unsigned short*)C= *ris; ---> non è giusto fare così? se si o se no mi potreste dire come potrei fare?
Se non vi è chiaro vi posso incollare tutto il programma che è diviso in 3 file.
Grazie in anticipo ,
Alessandro
aaa