Riscrivo il messaggio lasciato prima con le correzioni, grazie per le dritte:
Ciao a tutti!
Sono nuova del forum. Sto scrivendo un codice in C che mi permetta di creare tre vettori T0, T1, T2 di dimensioni n ciascuno.
Per ognuno di essi, parto generando due distinti array di valori random, rispettivamente tra (0,p) e tra (0,n).
In seguito, ricavo T0, T1, T2, andando a moltiplicare, la prima volta, il primo valore del primo array con il primo elemento elevato alla zero del secondo array; la seconda volta, il secondo valore del primo array, con il secondo del secondo array, elevato alla prima; la terza volta, il terzo valore del primo array con il terzo valore elevato alla seconda del secondo array; ed infine, la quarta volta, il quarto valore del primo array con il quarto valore,elevato alla terza, del secondo array.
Faccio la somma dei quattro valori ricavati e colloco il risultato nella prima posizione del vettore che sto costruendo in quel momento, tra T0, T1, T2.
Ripeto l'operazione andando a scorrere gli array.
Il codice che mi esegue quanto spiegato sopra è il seguente:
Compilo con linux:codice:#include <stdio.h> #include <stdlib.h> #include <time.h> #include <math.h> main(){ //parametri: unsigned long long p = pow(2, 33)-1; unsigned long long n = pow(2, 32); // array per T0: unsigned long long aa[p]; unsigned long long ab[n]; //array per T1: unsigned long long ac[p]; unsigned long long ad[n]; //array per T2: unsigned long long ae[p]; unsigned long long af[n]; unsigned long long T0[n]; unsigned long long T00[n]; unsigned long long T01[n]; unsigned long long T02[n]; unsigned long long T03[n]; unsigned long long T1[n]; unsigned long long T10[n]; unsigned long long T11[n]; unsigned long long T12[n]; unsigned long long T13[n]; unsigned long long T2[n]; unsigned long long T20[n]; unsigned long long T21[n]; unsigned long long T22[n]; unsigned long long T23[n]; srand(time(NULL)); // calcolo di T0 int ia; //genero le ai for(ia=0; ia< p; ia++) { aa[ia] = rand() % p + 1; // aa[] è il vettore che contiene i valori di a0,a1,...,an // printf("aa[ia]=%llu\n", aa[ia]); } int ib; // genero le xi for(ib=0 ; ib< n ; ib++) { ab[ib] = rand() % n + 1; // ac[] è il vettore che contiene il vettore x0,...,xn // printf("ab[ib]=%llu\n", ab[ib]); } int ic; for (ic=0; ic< n; ic++){ T00[ic]= aa[ic] * (abs(floor(pow(ab[ic], 0)))) % p; T01[ic]= aa[ic+1] * (abs(floor(pow(ab[ic], 1)))) % p; T02[ic]= aa[ic+2] * (abs(floor(pow(ab[ic], 2)))) % p; T03[ic]= aa[ic+3] * (abs(floor(pow(ab[ic], 3)))) % p; T0[ic] = T00[ic] + T01[ic] + T02[ic] + T03[ic]; } int id; for(id=0; id< n; id++){ printf("T0[id]=%llu\n", T0[id]); } // calcolo di T1 int ie; for(ie=0; ie< p; ie++){ ac[ie]= rand() % p +1; // printf("ac[ie]=%llu\n", ac[ie]); } int ig; for(ig=0; ig< n; ig++){ ad[ig]= rand() % n +1; // printf("ad[ig]=%llu\n", ad[ig]); } int ih; for (ih=0; ih< n; ih++){ T10[ih]= ac[ih] * (abs(floor(pow(ad[ih], 0)))) % p; T11[ih]= ac[ih+1] * (abs(floor(pow(ad[ih], 1)))) % p; T12[ih]= ac[ih+2] * (abs(floor(pow(ad[ih], 2)))) % p; T13[ih]= ac[ih+3] * (abs(floor(pow(ad[ih], 3)))) % p; T1[ih]= T10[ih] + T11[ih] + T12[ih] + T13[ih]; } int ii; for(ii=0; ii< n; ii++){ printf("T1[ii]=%llu\n", T1[ii]); } // calcolo di T2 int il; for(il=0; il< p; il++){ ae[il]= rand() % p +1; // printf("ae[il]=%llu\n", ae[il]); } int im; for(im=0; im< n; im++){ af[im]= rand() % n +1; // printf("af[im]=%llu\n", af[im]); } int in; for (in=0; in< n; in++){ T20[in]= ae[in] * (abs(floor(pow(af[in], 0)))) % p; T21[in]= ae[in+1] * (abs(floor(pow(af[in], 1)))) % p; T22[in]= ae[in+2] * (abs(floor(pow(af[in], 2)))) % p; T23[in]= ae[in+3] * (abs(floor(pow(af[in], 3)))) % p; T2[in]= T20[in] + T21[in] + T22[in] + T23[in]; } int io; for(io=0; io< n; io++){ printf("T2[io]=%llu\n", T2[io]); } }
$ gcc prova.c -o prova -lm
$./prova
E viene fuori 'Segmentation fault'!
Sareste così gentili da dirmi dove e cosa sbaglio?
Grazie

Rispondi quotando