Właśnie zauważyłem że program nie zapisuje do pliku wszystkich przecinających się okręgów oraz błędnie sprawdza, które się przecinają.
Oto kod po przeróbkach:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define _USE_MATH_DEFINES
#include <math.h>
#define ROZMIARTABLICY 10
struct wspolrzedneOkregu{
int x;
int y;
int promien;
};
struct wspolrzedneOkregu wspolrzedne[ROZMIARTABLICY];
void stworzOkregi(){
srand(time(NULL));
int i;
for(i=0; i<10; i++){
wspolrzedne[i].x=rand()%21-10;
wspolrzedne[i].y=rand()%21-10;
wspolrzedne[i].promien=abs(rand()%21-10);
}
}
int kwadrat(int x){
return x*x;
}
int dlugosc(struct wspolrzedneOkregu wsp1, struct wspolrzedneOkregu wsp2){
return kwadrat(wsp1.y-wsp2.y)+kwadrat(wsp1.x-wsp2.x);
}
void zapisDoPliku(){
int i, j;
for(i=0; i<ROZMIARTABLICY; i++){
for(j=i+1; j<ROZMIARTABLICY; j++){
FILE *fp;
fp=fopen("przecinajaceSieOkregi.txt", "a+");
fprintf (fp, "Okregi przecinajace sie:\nx=%d y=%d r=%d\tx=%d y=%d r=%d\n", wspolrzedne[j].x, wspolrzedne[j].y, wspolrzedne[j].promien, wspolrzedne[i].x, wspolrzedne[i].y, wspolrzedne[i].promien);
fclose (fp);
}
}
}
void sprawdzPrzecinanie(wspolrzedneOkregu wspolrzedne[]){
int i, j;
for(i=0; i<ROZMIARTABLICY; i++){
for(j=i+1; j<ROZMIARTABLICY; j++){
if (dlugosc(wspolrzedne[j], wspolrzedne[i]) < kwadrat(wspolrzedne[j].promien+wspolrzedne[i].promien));
printf("\nOkregi przecinajace sie:\nx=%d y=%d r=%d\tx=%d y=%d r=%d\n", wspolrzedne[j].x, wspolrzedne[j].y, wspolrzedne[j].promien, wspolrzedne[i].x, wspolrzedne[i].y, wspolrzedne[i].promien);
zapisDoPliku();
}
}
}
void sortowanieOkregow(wspolrzedneOkregu wspolrzedne[], int rozmiar){
int i, j;
wspolrzedneOkregu temp;
for(i=0; i<rozmiar-1; i++){
for(j=0; j<rozmiar-1-i; j++){
if(wspolrzedne[j].promien > wspolrzedne[j+1].promien){
temp=wspolrzedne[j+1];
wspolrzedne[j+1]=wspolrzedne[j];
wspolrzedne[j]=temp;
}
}
}
for(i=0; i<rozmiar-1; i++)
printf("Okrag (x=%d y=%d r=%d) ma pole: %.2f\n", wspolrzedne[i].x, wspolrzedne[i].y, wspolrzedne[i].promien, M_PI*(wspolrzedne[i].promien*wspolrzedne[i].promien));
}
int main(){
stworzOkregi();
sprawdzPrzecinanie(wspolrzedne);
sortowanieOkregow(wspolrzedne, ROZMIARTABLICY);
return 0;
}
EDIT:Ok już rozumiem czemu zapisywał tylko jeden okrąg (głuptas ze mnie :), już poprawiłem w kodzie ). Teraz jedyny problem to przecinanie, które nie działa jak powinno.