Program liczy potencjal grawitacyjny. Jednak mam problem z zapetleniem, zeby liczylo dla kolejnych punktow. Program sie kompiluje, ale przy wlaczeniu sie zawiesza. Poradzi ktos jak to ominac?
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define g 9.81
struct punkt{
int x;
int y;
float masa;
};
void zapisywanie_do_pliku(float V1) {
FILE *zapisz;
zapisz=fopen("wynik.txt","wt");
fprintf(zapisz,"%.2f\n", V1);
printf("\nPotencjal zapisano do pliku wynik.txt!\n");
fclose(zapisz);
}
// Wzor na potencjal V1(r)=(-gM1)/r1
int main(){
int dimx, dimy, i, j, p, k, l;
float r1, r2, V1;
int **tablica;
char c;
struct punkt p1, p2, p3;
printf("Podaj dla ilu punktow chcesz policzyc potencjal?\n");
scanf("%d", l);
for(k=0;k<l;k++)
{
do{
printf("Potencjal grawitacyjny\n\n");
printf("Podaj szerokosc tablicy ...wieksza od 1...\n");
scanf("%d", &dimx);
if(dimx<1){
printf("Szerokosc tablicy nie moze byc mniejsza od 1!\n");
}
}while(dimx<1);
do{
printf("Podaj wysokosc tablicy ...wieksza od 1...\n");
scanf("%d", &dimy);
if(dimy<1){
printf("Wysokosc tablicy nie moze byc mniejsza od 1!\n");
}
}while(dimy<1);
do{
printf("Potencjal grawitacyjny\n\n");
system("cls");
printf("Podaj x punktu, w ktorym chcesz policzyc potencjal.\n");
scanf("%d", &p1.x);
if(p1.x<0 && p1.x>(dimx)){
printf("Podany x nie znajduje sie w tablicy!\n");
}
}while(p1.x<0 && p1.x>(dimx));
do{
printf("Podaj y punktu, w ktorym chcesz policzyc potencjal.\n");
scanf("%d", &p1.y);
if(p1.y<0 && p1.y>(dimy)){
printf("Podany y nie znajduje sie w tablicy");
}
}while(p1.y<0 && p1.y>(dimy));
do{
do{
printf("Potencjal grawitacyjny\n\n");
system("cls"); // Pierwsze cialo, wspl x, wspl y, masa
printf("Podaj x pierwszego ciala.\n");
scanf("%d", &p2.x);
if(p2.x<0 && p2.x>(dimx)){
printf("Podany x nie znajduje sie w tablicy!\n");
}
}while(p2.x<0 && p2.x>(dimx));
do{
printf("Podaj y pierwszego ciala.\n");
scanf("%d", &p2.y);
if(p2.y<0 && p2.y>(dimy)){
printf("Podany y nie znajduje sie w tablicy!\n");
}
}while(p2.y<0 && p2.y>(dimy));
if(p2.x==p1.x && p2.y==p1.y){
printf("Podane x, y pokrywaja sie z pierwszym punktem. Podaj jeszcze raz inne.\n");
}
}while(p2.x==p1.x && p2.y==p1.y);
printf("Podaj mase pierwszego ciala.\n");
scanf("%f", &p2.masa);
do{
do{
printf("Potencjal grawitacyjny\n\n");
system("cls");
printf("Podaj x drugiego ciala.\n");
scanf("%d", &p3.x);
if(p3.x<0 || p3.x>(dimx)){
printf("Podany x nie znajduje sie w tablicy!\n");
}
}while(p3.x<0 && p3.x>(dimx));
do{
printf("Podaj y drugiego ciala.\n");
scanf("%d", &p3.y);
if(p3.y<0 && p3.y>(dimy)){
printf("Podany y nie znajduje sie w tablicy!\n");
}
}while(p3.y<0 && p3.y>(dimy));
if(p2.x==p1.x && p2.y==p1.y){
printf("Podane x, y pokrywaja sie z pierwszym punktem. Podaj jeszcze raz inne.\n");
}
}while(p3.x==p2.x && p3.y==p2.y);
printf("Podaj mase drugiego ciala.\n");
scanf("%f", &p3.masa);
tablica=(int**)malloc(dimx*sizeof (*tablica)); //alokowanie tablicy
for(i=0; i<dimx; i++){
tablica[i]=(int *)malloc(dimy * sizeof (**tablica));
}
printf("Potencjal grawitacyjny\n\n");
system("cls");
printf("\np1x %d p2x %d p1y %d p2y %d\n", p1.x, p2.x, p1.y, p2.y); //liczenie R1
r1=sqrt(((p1.x-p2.x)*(p1.x-p2.x))+((p1.y-p2.y)*(p1.y-p2.y)));
printf("\n%f\n", r1);
//liczenie R2
r2=sqrt(((p2.x-p3.x)^2)+((p2.y-p3.y)^2));
printf("\n%f\n", r2);
//liczenie potencjalu w punkcie podanym przez uzytkownika
V1=((-g*p2.masa)/r1)-((g*p3.masa)/r2);
printf("Potencjal w danym punkcie wynosi %f\n\n", V1);
zapisywanie_do_pliku(V1);
for(i=0; i<dimx; ++i){ //zwalnianie pamieci
free(tablica[i]);
}
free(tablica);
printf("\n\nKONIEC!\n");
getchar();
getchar();
return 0;
}
}