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

Zadanie z Odc. 11 od M.Z. Rozwiazanie

VPS Starter Arubacloud
0 głosów
152 wizyt
pytanie zadane 13 sierpnia 2018 w C i C++ przez Jason_Nr_1 Bywalec (2,980 p.)

Witam Serdecznie wszystkich Kodziazy!,

Zamierzam zrobic Prace Domowa z Odc. 11 od MZ, w ktorej chodzi o to, zeby program obliczyl po podaniu wszystkich 5-ciu Ocen Szkolnych Srednia Ocen, to jest latwe, Plus wszystko i podzielic przez Sume,

i wybrac ta najbradziej bliska Ocenie z 5-ciu, to juz jest trudne i trzeba bardziej Glowkowac.

Tak napisalem Zadanie w Kodzie:

#include <iostream>

using namespace std;

int a,b,c,d,e,av,cl;

int main()
{
    cout << "Wypisz wszystkie 5 Ocen Szkolnych: " << endl;
    cin>>a>>b>>c>>d>>e;

    av=(a+b+c+d+e)/5;

    cout<<"Srednia z 5-ciu Ocen Szkolnych to "<<av;

    cl=a/av
    if(b>cl) cl=b;
    if(c>cl) cl=c;
    if(d>cl) cl=d;
    if(e>cl) cl=e;

    /*
    a= 3: 3/3,4= 0,88,
    b= 5: 5/3,4= 1,47,
    c= 1: 1/3,4= 0,29,
    d= 2: 2/3,4= 0,58,
    e= 6: 6/3,4= 1,76,

    Odwrotnie tez nie dziala.
    */

    cout<<"Ocena bedaca najblizej sredniej z ocen to: "<<cl;

    return 0;
}

Macie jakies Interesujace Propozycje, male Podpowiedzi? :)

J.

1 odpowiedź

+1 głos
odpowiedź 13 sierpnia 2018 przez niezalogowany
wybrane 13 sierpnia 2018 przez Jason_Nr_1
 
Najlepsza

Średnia ocen jest źle zrobiona dla zestawu danych {1, 1, 1, 1, 2} średnia wyjdzie 1 co jest błędne. Tam gdzie wykonujesz dzielenie powinieneś skorzystać z rzutowania na jakiś typ zmiennoprzecinkowy. Co za tym idzie średnia nie powinna być typu int.

float av = static_cast<float>(a+b+c+d+e)/5;

Żeby znaleźć ocenę najbliższą średniej oblicz po prostu odległość od średniej. Odejmij i weź wartość bezwzględną - przyda się std::abs z nagłówka <cmath>. Następnie wykonuj to samo działanie i porównuj odległości.

PS. Gdy skończysz zrób to samo, ale z tablicą. Przecież gdyby przykładowo ocen było tysiąc to nikt by nie kopiował i podmieniał tysiąca razy instrukcji warunkowej ;)

komentarz 13 sierpnia 2018 przez Jason_Nr_1 Bywalec (2,980 p.)
Dzieki Stary! :D
komentarz 14 sierpnia 2018 przez Jason_Nr_1 Bywalec (2,980 p.)

@Hipcio, Sluchaj nie zrozumialem, jak dodac wartość bezwzględną ?, gdzie mam wpisac std::abs?

    cl=av-a 
    if(b>cl) cl=b;
    if(c>cl) cl=c;
    if(d>cl) cl=d;
    if(e>cl) cl=e;

    cout<<"Ocena bedaca najblizej sredniej z ocen to: "<<cl;

 

komentarz 14 sierpnia 2018 przez niezalogowany

Wartość bezwzględną musisz umieścić po wykonaniu odejmowania. Gdy średnia będzie większa od danej liczby wynik będzie ujemny, a tego nie chcemy (link).

Teraz dla każdej kolejnej oceny musisz liczyć i porównywać. Jak również przydałoby się zapisywać o którą liczbę chodzi:

float distance = abs(av-a); // bez std::, bo i tak używasz tej przestrzni nazw
int grade_near_avg = a; 

Czyli jeżeli abs(av-b) będzie mniejsze od distance to trzeba będzie przypisać nową odległość i nową najbliższą liczbę.

Podobne pytania

+1 głos
1 odpowiedź 185 wizyt
pytanie zadane 15 września 2017 w C i C++ przez qlucha Obywatel (1,790 p.)
0 głosów
1 odpowiedź 518 wizyt
pytanie zadane 22 stycznia 2016 w Rozwój zawodowy, nauka, praca przez Eraos Nowicjusz (140 p.)
0 głosów
1 odpowiedź 141 wizyt
pytanie zadane 21 listopada 2017 w C i C++ przez Malkow Początkujący (330 p.)

92,454 zapytań

141,262 odpowiedzi

319,089 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...