• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Pętla obliczająca siłę oporu powietrza. C

Object Storage Arubacloud
0 głosów
186 wizyt
pytanie zadane 23 stycznia 2020 w C i C++ przez MatthewRose Nowicjusz (140 p.)

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;
}

 

komentarz 23 stycznia 2020 przez niezalogowany

A=G; A=?

komentarz 23 stycznia 2020 przez MatthewRose Nowicjusz (140 p.)
Niżej jest G=9.81; czyli jak rozumiem A też będzie równe 9.81?
komentarz 23 stycznia 2020 przez niezalogowany
to nie klasa musi być wyżej chyba.
komentarz 23 stycznia 2020 przez MatthewRose Nowicjusz (140 p.)
Problem jest w tym, że pętla while działa w nieskończoność jak tak sobie podejrzałem, tak jakby H nigdy nie osiągało 0...
komentarz 23 stycznia 2020 przez tkz Nałogowiec (42,000 p.)
 A=G;
 Fg=M*G;
 G=9.81;   

To nie ma sensu. Definiujesz A, G, gdzie G jest... No nie wiadomo w sumie czym. 

komentarz 23 stycznia 2020 przez niezalogowany
Nie mam kompilatora pod ręką. Ale jak przypiszesz A jakąś wartość to jest to samo?

wyrzuć printf () w pętli A i H
komentarz 23 stycznia 2020 przez tkz Nałogowiec (42,000 p.)
while(H>=0)

Dopóki H jest większe bądź równe 0. 

Zmień na H<=0

1 odpowiedź

+1 głos
odpowiedź 23 stycznia 2020 przez Patrycjerz Mędrzec (192,320 p.)
  1. printf("[1]Chce podac wysokosc, z jakiej spada przedmiot.\n");
    printf("[2]Chce podac czas, po ktorym przedmiot spadnie na ziemie.\n");

    Komunikaty nie pokrywają się z działaniem kodu.

  2. default: printf("Zle wprowadzone dane!"); // linia 36

    Ten kod nigdy się nie wykona, gdyż uniemożliwia to warunek pętli do-while.

  3. A=G;
    Fg=M*G;
    G=9.81;

    Używasz niezainicjalizowanej zmiennej `G`. Taka zmienna może zawierać cokolwiek (zależnie od środowiska i kompilatora). Przypisz więc wartość przyspieszenia przed przypisaniem wartości siły ciążenia. Również po wybraniu pierwszego obiektu zmienne `A`, `G`, `Fg`, `D`, `T` i `cpd` nie zostaną zainicjalizowane.

  4. while(H>=0)
    

    Większy sens ma chyba warunek `H > 0`, ale to jedynie twoje założenie.

Podobne pytania

0 głosów
1 odpowiedź 549 wizyt
pytanie zadane 27 maja 2018 w SPOJ przez Kamil Paradowski Użytkownik (620 p.)
–2 głosów
1 odpowiedź 662 wizyt
pytanie zadane 26 października 2018 w C i C++ przez xFreezQ Nowicjusz (150 p.)
+1 głos
2 odpowiedzi 430 wizyt
pytanie zadane 28 stycznia 2017 w C i C++ przez qlucha Obywatel (1,790 p.)

92,556 zapytań

141,404 odpowiedzi

319,560 komentarzy

61,942 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...