Problemem jest mniej-więcej kod od 40 do 80 linijki, utworzyłem pętle, która dla podanej wysokości, oraz masy obiektu powinna obliczyć czas spadku uwzględniając opory powietrza. Co 0,1s pętla oblicza przyspieszenie, siłę oporu, siłę wypadkową i drogę przebytą w czasie, aż wysokość osiągnie zero. Nie wiem gdzie leży problem, tak jakby H nigdy nie osiągało zera. Z góry dziękuję za pomoc, i pozdrawiam!
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int i,j,h, menu, obiekt;
double G, H, M, V, Fo, Fg, A, Cx, pow, D, T,cpd;
do
{
printf("Program oblicza przebieg spadku obiektu z oporem powietrza.\n");
printf("Wybierz jedna z dostepnych opcji: \n\n");
printf("[1]Chce podac wysokosc, z jakiej spada przedmiot.\n");
printf("[2]Chce podac czas, po ktorym przedmiot spadnie na ziemie.\n");
scanf("%d", &menu);
}
while(menu < 1 || menu > 2);
switch(menu) // Menu - przedmiot
{
case 1:
printf("\n[1]Licz dla kropli wody\n");
printf("\n[2]Licz dla kamienia\n");
scanf("%d", &obiekt);
break;
case 2:
printf("\n[1]Licz dla kropli wody\n");
printf("\n[2]Licz dla kamienia\n");
scanf("%d", &obiekt);
break;
default: printf("Zle wprowadzone dane!");
}
switch(obiekt) // Dane obiektu
{
case 1:
Cx=0.6; // Wspolczynnik oporu aerodynamicznego
pow=0.00000314; // Pole powierzchni przekroju prostopadle do ziemi
M=0.002; // Masa w kilogramach
break;
case 2:
Cx=1.05; //wspolczynnik oporu
pow=0.5; //pole powierzchni
printf("Podaj mase kamienia w [kg]\n");
scanf("%lf", &M);
A=G;
Fg=M*G;
G=9.81; //Tutaj okreslam parametry dla kamienia
D=1.2; //Gestosc powietrza
T=0; //Poczatkowy czas spadku
cpd=D*pow*Cx; //Mnoznik wspolczynnika oporu, powierzchni i gestosci powietrza
break;
default: printf("Zle wprowadzone dane!");
}
if(menu==1 && (obiekt==1 || obiekt==2))
{
printf("Podaj wysokosc [m]:\n");
scanf("%lf", &H);
while(H>=0) //Petla, az H osiagnie 0
{
V=A*T;
Fo=(cpd*(V*V))/2; //Obliczanie sily oporu powietrza co 0.1s
H=H-(A*(T*T))/2; //Od podanej drogi odejmujemy droge przebyta w czasie
A=(Fg-Fo)/M; //Przyspieszenie zmieniajace sie co 0.1s
T+=0.1;
}
printf("Przedmiot spadl w czasie: %lf s",T);
}
return 0;
}