Informatică, întrebare adresată de greeneyes27, 8 ani în urmă

Citind de la tastatura n numere naturale, sa se calculeze media armonica a lor. Programul sa fie in c++ si fara vectori.As dorii si o explicare la cod destul de amanuntita ca nu vreau doar sa copiez codul vreau si sa l inteleg .Multumesc frumos ! 100 de puncte

Răspunsuri la întrebare

Răspuns de bobita25
0

Răspuns:

#include <iostream>

using namespace std;

double sum;

int main() {

   int n;

   cin >> n;

   for (int i = 1; i <= n; i++) {

       int x;

       cin >> x;

       sum += 1.0 / x;

   }

   double med = n / sum;

   cout << med;

   return 0;

}

Explicație:

Media armonica reprezinta inversul mediei aritmetice a inverselor numerelor si este egala cu:

m_h = \frac{n}{\frac{1}{x_1} + \frac{1}{x_2} + ... + \frac{1}{x_n}  }

unde n reprezinta numarul de termeni, iar x₁, x₂, ..., xₙ sunt numere reale pozitive.

In programul de mai sus, declar o suma "sum", care initial este 0 pentru ca inca nu am facut suma niciunui numar, si este de tip real ( in cazul nostru, double ), pentru ca vrem ca media la final sa fie afisata cu zecimale.
Citesc un numar n care reprezinta numarul de numere naturale.

Urmeaza ca intr-o structura repetitiva for sa citesc cele n numere si sa adaug inversul acestora la suma ( inversul unui numar x este  \frac{1}{x} , in cod scriindu-se ca "1 / x", respectiv " 1.0 / x ", a doua varianta fiind folosita pentru afisarea zecimalelor ).

Dupa ce am citit numerele si am adaugat inversul acestora la suma, calculam media armonica prin formula " n / sum " ( media armonica fiind si aceasta de tip real, in cazul nostru double ).

Observatii:

  • Am folosit " 1.0 / x " in loc de " 1 / x " pentru a asigura ca impartirea este facuta in numere reale, cu zecimale, nu ca numere intregi. Daca foloseam cealalta varianta, inversul acelui numar era rotunjit la un numar intreg, iar acest lucru ar fi dus la un rezultat incorect pentru media armonica.

  • In cod, am descompus media armonica ca fiind " n / sum ", unde n reprezinta numarul de termeni, iar sum este suma inverselor celor n numere naturale ( practic am calculat separat numitorul ).
Alte întrebări interesante