[ create a new paste ] login | about

Link: http://codepad.org/nYelpetw    [ raw code | output | fork ]

C, pasted on Nov 22:
#include <conio.h>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>

struct pt {int num;int x;int y;};
struct line {float k;float b;};
struct ptD3 {int numD1;int numD2;int x;int y;float r;};

int inorout(struct pt *,struct pt *,struct pt *);//Zapolnenie D2
void enterarr(struct pt *);//Zapolnenie D1
struct line getline(int x1, int y1, int x2, int y2);
int distance(struct pt *,struct pt *,int ,float ,struct ptD3 *);//zapolnenie D3
void GnomeSort(int ,struct ptD3 *);
void swap(struct ptD3 *, int i, int j);

int main()
{
    int i,sizeD1,sizeD2,sizeD3;
    float R=7.2;
    struct pt mug[4]={1,1,1 , 2,15,1 , 3,10,8 , 4,2,14},line[2]={5,-1,-1 , 6,8,15},D1[20],*D2;
    struct ptD3 *D3;
    
    sizeD2=0;
    sizeD3=0;
    
    printf("Vvedite koordinati tochek parami cherez probel.\nroordinati tochki v promezhutke 0<=x<=20 & 0<=y<=20\n");
    enterarr(D1);
 
    D2=(struct pt*)malloc(sizeof(struct pt)*5);
    sizeD2=inorout(D1,D2,mug);
    for(i=0;i<sizeD2;i++)
    {
                     printf("%d %d %d\n",D2[i].num,D2[i].x,D2[i].y) ;                
    } 
    D3=(struct ptD3*)malloc(sizeof(struct ptD3)*5);
    sizeD3=distance(line,D2,sizeD2,R,D3);
    for(i=0;i<sizeD3;i++)
    {
                     printf("D3 UNSORTED %d %d %d %d %f\n",D3[i].numD1,D3[i].numD2,D3[i].x,D3[i].y,D3[i].r) ;                
    } 
    GnomeSort(sizeD3,D3);
    for(i=0;i<sizeD3;i++)
    {
                     printf("d3 SORTED %d %d %d %d %f\n",D3[i].numD1,D3[i].numD2,D3[i].x,D3[i].y,D3[i].r) ;                
    } 
    free(D2);
    free(D3);
    getch();
    return 0;
}
void enterarr(struct pt *arr)
{
       int i;
              
       for(i=0;i<20;i++)
       {
                        arr[i].num=i+1;
                        printf("Enter x and y of point N%d\t",arr[i].num);
                        scanf("%d %d",&(arr[i]).x,&(arr[i]).y);
                                              
                        if(((arr[i]).x < 0 || (arr[i]).x > 20) || ((arr[i]).y < 0 || (arr[i]).y > 20))
                        {
                                      i--;
                                      printf("\tERROR: 0<=x<=20 & 0<=y<=20. REPEAT\n");
                        }
                        printf("\n");
       }  
}

int inorout(struct pt *arr1,struct pt *arr2,struct pt *mug)//arr1=D1, arr2=D2, mug=mug
{
       int i,j,size;
       float ynn,ynv,ynl,ynp;
       struct line mug_lines[4];
       
       size=0;
       
       mug_lines[0]=getline(mug[0].x,mug[0].y,mug[1].x,mug[1].y);//AB
       mug_lines[1]=getline(mug[1].x,mug[1].y,mug[2].x,mug[2].y);//BC
       mug_lines[2]=getline(mug[2].x,mug[2].y,mug[3].x,mug[3].y);//CD
       mug_lines[3]=getline(mug[3].x,mug[3].y,mug[0].x,mug[0].y);//DA
       /*printf("%f %f\n",mug_lines[0].k,mug_lines[0].b); 
       printf("%f %f\n",mug_lines[1].k,mug_lines[1].b);
       printf("%f %f\n",mug_lines[2].k,mug_lines[2].b);
       printf("%f %f\n",mug_lines[3].k,mug_lines[3].b);*/
       for(i=0;i<20;i++)
       {
                        //printf("arr1[i] %f\n",(float)arr1[i].x);
                        ynn=mug_lines[0].k*(float)arr1[i].x+mug_lines[0].b;
                        ynv=mug_lines[2].k*(float)arr1[i].x+mug_lines[2].b;
                        ynl=((float)arr1[i].y-mug_lines[3].b)/mug_lines[3].k;
                        ynp=((float)arr1[i].y-mug_lines[1].b)/mug_lines[1].k;
                        //printf("ynn%f ynv%f ynl%f ynp%f\narr[i].y %f \tarr[i].y %f\n",ynn,ynv,ynl,ynp,(float)arr1[i].y,(float)arr1[i].x);
                        if (ynn<=((float)arr1[i].y) && ynv>=((float)arr1[i].y) && ynl<=((float)arr1[i].x) && ynp>=((float)arr1[i].x))
                        {
                                       arr2[size].num=arr1[i].num;
                                       arr2[size].x=arr1[i].x;
                                       arr2[size].y=arr1[i].y;
                                       size++;
                                       if (size%5==0) arr2=(struct pt *)realloc(arr2,sizeof(struct pt)*(size+5));
                        }
       }
       
       return size;       
}
struct line getline(int x1, int y1, int x2, int y2)
{
       float delta_y,delta_x;
       struct line temp;
       
       delta_x=x1-x2;
       delta_y=y1-y2;
       //printf("x1 %d x2 %d y1 %d y2 %d\n",x1,x2,y1,y2);
       //printf("x - %f y - %f\n",delta_x,delta_y);
       temp.k=delta_y/delta_x;
       temp.b=y1-x1*temp.k;
       //printf("k - %f b - %f\n\n",temp.k,temp.b);
       return temp;
}

int distance(struct pt *line,struct pt *D2,int sizeD2,float R,struct ptD3 *D3)
{
    int size,i;
    struct line main_line,normal_line;
    float x0,y0,r;
    
    size=0;
    
    main_line=getline(line[1].x,line[1].y,line[0].x,line[0].y);
    //printf("k=%f b=%f",main_line.k,main_line.b);
    normal_line.k=-1/main_line.k;
    for(i=0;i<sizeD2;i++)
    {
                         normal_line.b=D2[i].y-normal_line.k*D2[i].y;
                         x0=(normal_line.b-main_line.b)/(main_line.k-normal_line.k);
                         y0=(x0*(main_line.k+normal_line.k)+main_line.b+normal_line.b)/2;
                         r=sqrt((x0-D2[i].x)*(x0-D2[i].x)+(y0-D2[i].y)*(y0-D2[i].y));
                         printf("x0=%f y0=%f r=%f\n",x0,y0,r);
                         if (r<=R)
                         {
                                       D3[size].numD1=D2[i].num;
                                       D3[size].numD2=i;
                                       D3[size].x=D2[i].x;
                                       D3[size].y=D2[i].y;
                                       D3[size].r=r;
                                       size++;
                                       if (size%5==0) D3=(struct ptD3 *)realloc(D3,sizeof(struct ptD3)*(size+5));
                         }
                         
    }    
    
    return size;
}

void GnomeSort(int size, struct ptD3 *D3)//swap(D3,i-1,i);
{
     int i,j;
     struct ptD3 x;
     for(i=1;i<size;i++)
     {
          x=D3[i];
          for(j=i-1;j>=0 && D3[j]>x;j--)
          {
                         D3[j+1]=D3[j];
          }
          D3[j+1] = x;          
     }
}

void swap(struct ptD3 *arr, int i, int j)
{
     struct ptD3 temp;
     temp=arr[i];
     arr[i]=arr[j];
     arr[j]=temp;
}


Output:
1
2
3
Line 18: error: conio.h: No such file or directory
In function 'GnomeSort':
Line 163: error: invalid operands to binary >


Create a new paste based on this one


Comments: