YamIevenhere
28-10-2014, 14:47
Devo acquisire una serie di coordinate ed allocarle dinamicamente in una struct, quindi ordinarle in maniera decrescente secondo la distanza del punto dall'origine 0 0.
Ho provato ad usare un Bubble sort ma non funziona :muro: , ecco il codice:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
typedef struct {
int x, y;
float d_o;
} punto;
int main()
{
FILE *f1;
int i, j, end=0, tempx, tempy;
float tempd_o;
punto *p, *p2;
f1=fopen("punti.txt","r");
if (f1==NULL)
{
printf("Errore nell'apertura del file.\n");
return 0;
}
fscanf(f1,"%d", &end)
p=malloc(end*sizeof(punto));
if(p==NULL)
{
printf("Errore allocazione memoria.\n");
return 0;
}
p2=p;
for(i=0;i<end;i++)
{
fscanf(f1,"%d %d", &p2->x, &p2->y);
p2->d_o=sqrt((p2->x*p2->x)+(p2->y*p2->y));
p2++;
}
fclose(f1);
//Bubble sort
for(i=0;i<end-1;i++)
{
for(j=0;j<end-i;j++)
{
if(p[j].d_o<p[j+1].d_o)
{
tempx=p[j].x;
p[j].x=p[j+1].x;
p[j+1].x=tempx;
tempy=p[j].y;
p[j].y=p[j+1].y;
p[j+1].y=tempy;
tempd_o=p[j].d_o;
p[j].d_o=p[j+1].d_o;
p[j+1].d_o=tempd_o;
}
}
}
return 0;
}
Ho provato ad usare un Bubble sort ma non funziona :muro: , ecco il codice:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
typedef struct {
int x, y;
float d_o;
} punto;
int main()
{
FILE *f1;
int i, j, end=0, tempx, tempy;
float tempd_o;
punto *p, *p2;
f1=fopen("punti.txt","r");
if (f1==NULL)
{
printf("Errore nell'apertura del file.\n");
return 0;
}
fscanf(f1,"%d", &end)
p=malloc(end*sizeof(punto));
if(p==NULL)
{
printf("Errore allocazione memoria.\n");
return 0;
}
p2=p;
for(i=0;i<end;i++)
{
fscanf(f1,"%d %d", &p2->x, &p2->y);
p2->d_o=sqrt((p2->x*p2->x)+(p2->y*p2->y));
p2++;
}
fclose(f1);
//Bubble sort
for(i=0;i<end-1;i++)
{
for(j=0;j<end-i;j++)
{
if(p[j].d_o<p[j+1].d_o)
{
tempx=p[j].x;
p[j].x=p[j+1].x;
p[j+1].x=tempx;
tempy=p[j].y;
p[j].y=p[j+1].y;
p[j+1].y=tempy;
tempd_o=p[j].d_o;
p[j].d_o=p[j+1].d_o;
p[j+1].d_o=tempd_o;
}
}
}
return 0;
}