• 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++

Object Storage Arubacloud
+1 głos
262 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,000 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,000 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ź 477 wizyt
0 głosów
4 odpowiedzi 696 wizyt
pytanie zadane 20 marca 2016 w C i C++ przez Eliro Stary wyjadacz (12,160 p.)
0 głosów
1 odpowiedź 371 wizyt

92,551 zapytań

141,393 odpowiedzi

319,523 komentarzy

61,936 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!

...