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

Zadanie domowe z filmiku 11 kursu C++

42 Warsaw Coding Academy
+1 głos
363 wizyt
pytanie zadane 26 listopada 2019 w C i C++ przez marzena12345 Użytkownik (770 p.)

Witam, są to moje początki z programowaniem, a zadanie domowe z filmiku 11 jest pierwsze, jakie rozwiązuje więc proszę o wyrozumiałość :) 

W zadaniu chodzi o to aby podać 5 liczb, a program wskazuje która z nich jest najbliższa wartości średniej z wcześniej podanych 5 liczb.

Mój zamysł jest taki, że od średniej odejmuję każdą z podanych na początku liczb. I najmniejsza wartość bezwzględna z tego odejmowania daje mi liczbę najbliżej średniej.

oznaczenia mam dosyć chaotyczne, więc dodam legendę

a,b,c,d,e -> liczby podawane na początku

s- średnia

x1, x2, x3, x4, x5 - wyniki działań "średnia-liczba początkowa"

Wydawało mi się, ze funkcję if zrobiłam na wzór z filmiku 11, a zamiast jednego wyrażenia wyświetlają mi się wszystkie (jakoby wszystkie podane liczny były najbliższe średniej) 

Czy mam błąd w fukncji ? Czy może mój tok myślenia jest zły ... Za wszelkie podpowiedzi i uwagi będę wdzięczna. 

 

#include <iostream>
#include <cmath>

using namespace std;
float a,b,c,d,e;

int main()
{
    cout << "Podaj piec liczb oddzielonych spacja:" << endl;
    cin>>a>>b>>c>>d>>e;
    float s;
    s=(a+b+c+d+e)/5;
    cout<<"srednia wynosi: "<<s<<endl;


    if (s<0)
        s*(-1);
float x1, x2, x3, x4, x5;
    x1=s-a;
    x2=s-b;
    x3=s-c;
    x4=s-d;
    x5=s-e;

   int m=fabs(x1); cout<< "Najblizsza sredniej to liczba "<<a<<endl;
    if (fabs(x2)<m) m=x2; {cout<< "Najblizsza sredniej to liczba "<<b<<endl;}
    if (fabs(x3)<m) m=x3; {cout<< "Najblizsza sredniej to liczba "<<c<<endl;}
    if (fabs(x4)<m) m=x4; {cout<< "Najblizsza sredniej to liczba "<<d<<endl;}
    if (fabs(x5)<m) m=x5; {cout<< "Najblizsza sredniej to liczba "<<e<<endl;}



    return 0;
}

 

komentarz 26 listopada 2019 przez tkz Nałogowiec (42,020 p.)

#include <iostream>
#include <cmath>
 
using namespace std;
float a,b,c,d,e;
 
int main()
{
    cout << "Podaj piec liczb oddzielonych spacja:" << endl;
    cin>>a>>b>>c>>d>>e;
    float s;
    s=(a+b+c+d+e)/5;
    cout<<"srednia wynosi: "<<s<<endl;
 
 
    if (s<0)
        s*(-1);
float x1, x2, x3, x4, x5;
    x1=s-a;
    x2=s-b;
    x3=s-c;
    x4=s-d;
    x5=s-e;
 
   int m=fabs(x1);
    if (fabs(x2)>m) m=x2;
    else if (fabs(x3)>m) m=x3;
    else if (fabs(x4)>m) m=x4;
    else if (fabs(x5)>m) m=x5;
     {cout<< "Najblizsza sredniej to liczba "<<m<<endl;}
 
 
    return 0;
}


komentarz 27 listopada 2019 przez marzena12345 Użytkownik (770 p.)
tylko wtedy 'm' to będzie ta różnica pomiędzy średnią a liczbą początkową, a mi chodzi o to, że kiedy przykładowo x4 jest najmniejsze to wyświetla się komunikat, że liczba 'd' jest najbliższa średniej itd.. :)

 

x- to liczby pomocnicze w celu odnalezienia liczby najbliższej średniej spośród liczb a,b,c,d,e
komentarz 27 listopada 2019 przez niezalogowany
1)  int m=fabs(x1);  // int to kryminał 


2)//lepiej tak (znajdź nawias)

if (fabs(x2)<m){ m=x2; cout<< "Najblizsza sredniej to liczba "<<b<<endl;}

//zamiast 
if (fabs(x2)<m) m=x2; {cout<< "Najblizsza sredniej to liczba "<<b<<endl;} 

3)//to robi nic

if (s<0)

        s*(-1);

//i dobrze bo dla ujemnych by nie działało
temp = a;

int m=fabs(x1); cout<< "Najblizsza sredniej to liczba "<<temp<<endl;

if (fabs(x2)<m) {temp=b; cout<< "Najblizsza sredniej to liczba "<<temp<<endl;} 

 

komentarz 27 listopada 2019 przez tkz Nałogowiec (42,020 p.)
Co do 3, zauważ, że jest to pod if'em. Dla ujemnych autorka zastosowała wartość bezwzględną. To, że nigdzie jej nie przypisała, to inna sprawa. Sama metoda ma sesns.
komentarz 27 listopada 2019 przez niezalogowany
Dawno miałem matematykę i niewiele pamiętam. Może masz rację.

1 odpowiedź

0 głosów
odpowiedź 27 listopada 2019 przez mmarszik Mądrala (7,390 p.)

Wygodniej z uzyciem tablic. Dla dowolnej ilości liczb tak:

#include <iostream>
#include <cmath>
#include <vector>

int main(int argc, char *argv[]) {
    size_t iloscLiczb;
    std::cout << "Podaj ilosc liczb: ";
    std::cin >> iloscLiczb;
    std::vector<double> liczby(iloscLiczb);
    double suma = 0;
    for( size_t i=0 ; i<liczby.size() ; i++) {
        std::cout << "Podaj liczbe [" << (i+1) << "]:";
        std::cin >> liczby[i];
        suma += liczby[i];
    }
    double srednia = suma / liczby.size();
    size_t min=0;
    for( size_t i=1 ; i<liczby.size() ; i++ ) {
        if( fabs(srednia-liczby[min]) > fabs( srednia-liczby[i] ) ) {
            min = i;
        }
    }
    std::cout << "Srednia wynosi: " << srednia << std::endl;
    std::cout << "Liczba najblizsza sredniej jest na pozycji: " << (min+1) << " i jest rowna: " << liczby[min] << std::endl;

    return 0;
}

 

Podobne pytania

0 głosów
1 odpowiedź 692 wizyt
0 głosów
4 odpowiedzi 1,093 wizyt
pytanie zadane 20 marca 2016 w C i C++ przez Eliro Stary wyjadacz (12,160 p.)
0 głosów
1 odpowiedź 466 wizyt

93,377 zapytań

142,379 odpowiedzi

322,527 komentarzy

62,724 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

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...