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

question-closed Nie mogę znaleźć błędu w kodzie :(

0 głosów
451 wizyt
pytanie zadane 6 maja 2018 w C i C++ przez F1DZ1 Nowicjusz (190 p.)
zamknięte 6 maja 2018 przez F1DZ1

Witam, robiłem zadanie, w którym użytkownik ma podać ile ma znaków, po czym ma je podać. Program wtedy powinien obliczyć średnią z jego znaków i podać liczbę najbardziej zbliżoną do średniej. Nie rozumiem skąd wynika problem i proszę o pomoc. Może się ten kłopot wydawać bardzo trywialny, ale już trochę siedziałem nad tym zadaniem i nie mam pojęcia gdzie jest usterka.

#include <iostream>
#include <math.h>

using namespace std;
int n, naj, sum, sr;
int tab[100];
int main()
{
    cout << "How many markss do u have: " ;
    cin >> n ;

    for(int i=0; i<n; i++)
    {
        cout << "Enter number: " << i+1 << " ";
        cin >> tab[i];
        sum+=tab[i];
    }

    sr=sum/n;


    for(int i; i<n; i++)
    {
        naj=tab[0];
        if((abs(sr-tab[i]))<(abs(sr-naj)))
        naj=tab[i];
    }

    cout << sr <<endl;
    cout << naj ;

    return 0;
}

 

komentarz zamknięcia: Dostanie odpowiedzi na mój problem
komentarz 6 maja 2018 przez Perseusz Bywalec (2,180 p.)
W drugiej pętli nie przypisałeś wartości iteratorowi
komentarz 6 maja 2018 przez Perseusz Bywalec (2,180 p.)

No i średnią dałeś jako int, jeśli chcesz liczbę przecinkową to powinno być float, a jak zależy Ci na int to nie jestem pewny, ale wynik może być np. 0 albo 1 i wtedy można usunąć najpierw resztę z dzielenia, którą można obliczyć modulo (%) i potem podzielić

1 odpowiedź

+1 głos
odpowiedź 6 maja 2018 przez Qwerty96 Stary wyjadacz (13,580 p.)
wybrane 6 maja 2018 przez F1DZ1
 
Najlepsza
for(int i; i<n; i++)
    {
        naj=tab[0];
        if((abs(sr-tab[i]))<(abs(sr-naj)))
        naj=tab[i];
    }

W każdym obiegu pętli na samym początku nadpisujesz zmienną naj pierwszym elementem tablicy. Poza tym zmienna i nie jest inicjowana na 0.

sr=sum/n;

To jest dzielenie całkowito-liczbowe. Ucinasz w ten sposób część ułamkową średniej.

Zmienne globalne i using namespace std to złe nawyki. Wszystkie zmienne w tym programie powinny być deklarowane w mainie.

komentarz 6 maja 2018 przez F1DZ1 Nowicjusz (190 p.)
Dziękuję bardzo za pomoc, Tylko nie rozumiem w jaki sposób miał bym wyznaczyć średnią.
komentarz 6 maja 2018 przez F1DZ1 Nowicjusz (190 p.)
Napotkałem się również na drugi problem jakim jest to że pokazuje mi funkcje abs, jako nie zdeklarowaną.
komentarz 6 maja 2018 przez Qwerty96 Stary wyjadacz (13,580 p.)
Skoro średnia może być liczbą ułamkową, to powinieneś ją zapisać do zmiennej, która przechowuje liczby zmiennoprzecinkowe, czyli float lub double. Poza tym jak zostawisz zmienne sum i n jako inty, to musisz też rzutować przynajmniej jedną z nich na float (lub double) przy dzieleniu.

Co do abs, to wklej treść błędu. Jak includujesz math.h, to nie powinno być problemu z deklaracją.
komentarz 6 maja 2018 przez F1DZ1 Nowicjusz (190 p.)
Średnią już dostosowałem w miedzy czasie do liczb zmiennoprzcinkowych (float), a w przypadku funkcji abs podmieniłem ją na fabs. Wszystko działa tak jak miało, dziekuję za chęci i czas.

Podobne pytania

0 głosów
1 odpowiedź 492 wizyt
–1 głos
1 odpowiedź 513 wizyt
pytanie zadane 30 maja 2015 w C i C++ przez Lukasz Bywalec (2,320 p.)
0 głosów
3 odpowiedzi 902 wizyt
pytanie zadane 11 września 2015 w C i C++ przez revan95 Początkujący (270 p.)

93,742 zapytań

142,678 odpowiedzi

323,297 komentarzy

63,328 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...