Code:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
double random(); // Funkcja generuje liczbę losową.
void prosta(double *wsk1, double *wsk2); // Funkcja wyznacza prostą.
double minimum(int n); // Funkcja szuka najblizszego punktu.
double maksimum(int n); // Funkcja szuka najdalszego punktu.
FILE* f; // W pliku są umieszczone wszystkie badane punkty.
FILE* g; // Jest w nim drukowany wzór prostej.
FILE* h; // W nim znajduje się punkt leżący najbliżej i punkt leżący najdalej prostej.
double *odl;
int i,j,n;
void main()
{
int m;
double a1,a2,b1,b2,max,min,xp,yp;/* a1 i b1 są to odpowiednio współczynnik kierunkowy i stała danej prostej.
a2 i b2 określają wzór prostej prostop. do danej i przechodzącej przez P(losx,losy)
Punkt (xp,yp) jest miejscem przecięcia się dwóch prostych. */
double *losx,*losy;
double *wsk1,*wsk2;
wsk1=&a1;
wsk2=&b1;
f=fopen("punkty.dat","wt");
g=fopen("wzor.dat","wt");
h=fopen("Max i min.dat","wt");
if(!f||!g||!h)
{
printf("Blad otwarcia pliku\n");
exit(-1);
}
printf("Sposrod ilu punktow lezacych na plaszczyznie chcesz wybrac tej najblizej i najdalej lezacy ??\n");
scanf("n = %d", &n);
losx=(double*)malloc(n*sizeof(double));
losy=(double*)malloc(n*sizeof(double));
odl=(double*)malloc(n*sizeof(double));
if((losx==NULL)||(losy==NULL)||(odl==NULL))exit(0);
srand((unsigned)time(NULL));
prosta(&a1,&b1);
for(i=0;i<n;i++)
{
j=i;
*(losx+j)=random();
*(losy+j)=random();
fprintf(f,"%g \t %g \n",(losx+j),(losy+j));
}
if(b1<0)
{
fprintf(g,"y = %g x %g",a1,b1);
}
else
{
fprintf(g,"y = %g x + %g ",a1,b1);
}
a2=-1./a1;
for(i=0;i<n;i++)
{
j=i;
b2=(*(losy+j))+(*(losx+j))/a1;
xp=(b2-b1)/(a1-a2);
yp=(a2*b1-a1*b2)/(a2-a1);
*(odl+j)=sqrt((xp-(*(losx+j)))*(xp-(*(losx+j)))+(yp-(*(losy+j)))*(yp-(*(losy+j))));
printf("tablica %d --- %g",i,(odl+j));
}
min=minimum(n);
max=maksimum(n);
printf("Wybierz\n(1) - wyswietlic wyniki na ekranie\n(2) - zapisac wyniki do pliku\n");
scanf("%d", &m);
switch(m)
{
case 1:
{
printf("%g - punkt lezacy najblizej prostej\n",min);
printf("%g - punkt lezacy najdalej prostej\n",max);
break;
}
case 2:
{
fprintf(h,"Punkt lezacy najblizej prostej\t%g\n",min);
fprintf(h,"Punkt lezacy najdalej prostej\t%g\n",max);
break;
}
}
fclose(f);
fclose(g);
fclose(h);
}
double random()
{
double v;
v=rand();
return(v);
}
void prosta(double *wsk1, double *wsk2)
{
double x1,x2,y1,y2;
x1=random();
y1=random();
x2=random();
y2=random();
*wsk1=(y1-y2)/(x1-x2);
*wsk2=(x2*y1-x1*y2)/(x2-x1);
}
double minimum(int n)
{
double mini;
odl=(double*)malloc(n*sizeof(double));
mini=*odl;
for(i=0;i<n;i++)
{
j=i;
if(mini<(*(odl+j)))
{
mini=(*(odl+j));
}
}
return(mini);
}
double maksimum(int n)
{
double maks;
odl=(double*)malloc(n*sizeof(double));
maks=*odl;
for(i=0;i<n;i++)
{
if(maks>(*(odl+j)))
{
maks=(*(odl+j));
}
}
return(maks);
}
Wiem że ten program można napisać krócej, ale ja muszę go zrobić w ten sposób. Miałem tylko zamienić tablicę zdeklarowaną na 100 elementów na tablicę n-elementową (gdzie o ilości elementów decyduje użytkownik). Proszę o pomoc. Program z tablicą 100-elementową działał, a teraz już nie.
Z góry dziękuję za pomoc.