Hi, I have written a c code that finds euclidean distance between corresponding elements of two 2D arrays. i have taken two text files like this..

9.0444 0.083404 -0.30599 -0.21367 -0.032527 -0.048789 -0.17683 -0.10523 0.050547 -0.028377 -0.06061 -0.0011242 -0.031838
9.164 0.18631 -0.3277 -0.1631 -0.014165 -0.041347 -0.063973 -0.059217 0.1422 -0.076865 -0.22507 -0.24214 -0.069154
9.1688 0.27382 -0.21322 -0.21558 -0.20094 -0.2459 -0.21811 -0.22654 -0.093443 -0.14375 -0.17468 -0.17559 -0.079262
8.9909 0.13161 -0.23827 -0.15121 -0.062505 -0.1702 -0.12139 -0.17619 0.035838 -0.089756 -0.17788 -0.089365 0.076777
8.9626 0.006085 -0.20092 -0.21606 -0.010768 -0.089176 -0.12807 -0.073935 0.081079 0.050701 -0.13336 -0.12325 -0.11199

Number of columns are fixed i.e 13 but rows can vary in millions. code is working well with small text files. But it is not working with large text files due to array size. i need to define array dynamically. but i don't know how to do it. This is what i have done so far..

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(void)
{
    int i=0,j,k,x,count=0,n=0,m=13,p=0,q=13;
    float dis=0.0,s=0.0;
    float avg[100],a[100][100],b[100][100];
    //double dis=0,s=0,avg[100];
    char buf[BUFSIZ];
    FILE *fp1,*fp2,*fp3;
    //clrscr();
    fp1=fopen("a1.txt","r");
    fp2=fopen("a2.txt","r");
    //fp3=fopen("ouput.txt","w");
    while (fgets(buf,sizeof(buf),fp1) != NULL)
    n++; // counting rows of a1.txt

    while (fgets(buf,sizeof(buf),fp2) != NULL)
    p++;    // counting rows of a2.txt
    rewind(fp1);

    for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
        {
            fscanf(fp1,"%f",&a[i][j]);
            printf("%f ",a[i][j]);
        }
        printf("\n");
    }
    printf("\n");
    rewind(fp2);
    for(i=0;i<p;i++)
    {
        for(j=0;j<q;j++)
        {
            fscanf(fp2,"%f",&b[i][j]);
            printf("%f ",b[i][j]);
        }
        printf("\n");
    }
          printf("\n");


    //calculation part

     for(x=0;x<=(n-1);x++)   
     {
     if(count!=(n-p)+1){
        i=x;k=0;
        while(i<(p+x))
        {
            for(j=0;j<q;j++)
            {
                s=s+pow((a[i][j]-b[k][j]),2.0);
                dis=sqrt(s);
            }
            i++;
            k++;

        }
        count++;
        avg[i]=dis;
        printf("\n\n%f\n",avg[i]);

        s=0;
    }
     else
     break;
    fprintf(fp3,"%f\n",avg[i]);

 }
    //getch();
    fclose(fp1);
    fclose(fp2);
    fclose(fp3);
}

Any help is appriciated...Thank you.

Dynamic Array can be allocated with the help of malloc().

Example :
int *p;
p = (int *) malloc ( sizeof(int) * 10 ) ; // array of int of size 10

Edited 3 Years Ago by np complete

what malloc does is basically frees you from having to think too hard about what the size of your array should be during its definition , as it lets you modify memory space on the fly.this and this should get you started.

This article has been dead for over six months. Start a new discussion instead.