Potencijalna i kinetička energija

Autor zadatka: Rade Radišić <radisic.rade@uns.ac.rs>

Dat je niz realnih brojeva od maksimalno 30 elemenata. Učitati n pozitivnih elemenata, koji predstavljaju trenutnu visinu u metrima tela u odnosu na tlo. Uneti putem standardnog ulaza masu tela m u kilogramima, koja predstavlja realnu vrednost veću od nule. Za unete visine izračunati i ispisati:

  1. Vrednost ukupne energije u sistemu.

  2. Vrednost najmanje razlike između potencijalne i kinetičke energije za određenu visinu h.

  3. Formirati novi niz u kom će se nalaziti brzine tela koje odgovaraju unetim visinama.

Ispise realnih vrednosti zaokružiti na dve decimale.

Za uneti niz visina [1, 3.4, 5, 2, 0] i masu tela 10kg, očekivani ispis na standardnom izlazu je:

Unesite broj visina: 5
Unesite visine [m]:
h[0] = 1
h[1] = 3.4
h[2] = 5
h[3] = 2
h[4] = 0
Unesite masu tela [kg]: 10

Ukupna energija: 490.50J
Najmanja razlika u energijama: 98.10J
[8.86m/s, 5.60m/s, 0.00m/s, 7.67m/s, 9.90m/s]

Korisne matematičke formule

Zakon održanja energije:

\[E_{uk} = E_1 + E_2 + ... + E_n\]

Gravitaciona potencijalna energija:

\[E_p = mgh\]

gde gravitaciono ubrzanje iznosi:

\[g = 9,81 \frac {m} {s^2}\]

Kinetička energija:

\[E_k = \frac {mv^2} {2}\]

Primer rešenja

 1#include <stdio.h>
 2#include <math.h>
 3
 4#define MAX_SIZE 30
 5
 6int main() {
 7    double h[MAX_SIZE], m, g = 9.81;
 8    int i, n;
 9
10    do {
11        printf("Unesite broj visina: ");
12        scanf("%d", &n);
13    } while(n <= 0 || n > MAX_SIZE);
14
15    printf("Unesite visine [m]:\n");
16    for(i = 0;i < n;i++) {
17        do {
18            printf("h[%d] = ", i);
19            scanf("%lf", &h[i]);
20        } while(h < 0);
21    }
22
23    do {
24        printf("Unesite masu tela [kg]: ");
25        scanf("%lf", &m);
26    } while(m <= 0);
27
28    printf("\n");
29
30    double E_ukupno, max_h = h[0];
31
32    for(i = 1;i < n;i++) {
33        if(max_h < h[i]) {
34            max_h = h[i];
35        }
36    }
37
38    E_ukupno = m * g * max_h;
39    printf("Ukupna energija: %.2lfJ\n", E_ukupno);
40
41
42    double delta_E = E_ukupno;
43    double E_trenutno;
44    
45    for(i = 0;i < n;i++) {
46        E_trenutno = fabs(E_ukupno - 2 * (m * g * h[i]));
47        if(delta_E > E_trenutno) {
48            delta_E = E_trenutno;
49        }
50    }
51
52    printf("Najmanja razlika u energijama: %.2lfJ\n", delta_E);
53
54    double v[MAX_SIZE];
55    double E_pot;
56
57    for(i = 0;i < n;i++) {
58        E_pot = m * g * h[i];
59        v[i] = sqrt(2 * (E_ukupno - E_pot) / m);
60    }
61
62    printf("[");
63    for(i = 0;i < n;i++) {
64        if(i > 0) {
65            printf(", ");
66        }
67        printf("%.2lfm/s", v[i]);
68    }
69    printf("]\n");
70
71    return 0;
72}
73