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

Problem z programem ''zadaniem domowym" - znajdowanie liczby najbliższej średniej

Object Storage Arubacloud
0 głosów
271 wizyt
pytanie zadane 24 marca 2019 w C i C++ przez Thyrz Nowicjusz (150 p.)

Witam serdecznie,
Z góry zaznaczam że przejrzałem podobne tematy i nie widziałem osoby która by podeszła do problemu z podobnego kąta. Oraz zaznaczam że jestem bardzo początkującym ''kodziarzem''.
Jak w temacie, mam pewien problem. Chcę ten program zrobić aby był jak najbardziej elastyczny, czyli zawsze się zachowywał tak samo niezależnie od tego ile liczb wprowadzi użytkownik (większość osób ogranicza liczbę wprowadzonych liczb do 5). Podszedłem do problemu podobnie jak większość ludzi zajmujących się tym zadaniem domowym - poprzez obliczenie wartości bezwzględnej wynikłej z odjęcia średniej od danej liczby. Jednakże program ma tendencję do randomowego wybierania sobie liczb. Co należy zrobić aby zawsze wybierał tę właściwą, najbliższą? Znajomy który jest zawodowym programistą mówił że to jakiś problem z pamięcią - aczkolwiek ja się jeszcze nie znam.

Z góry dziękuję za pomoc.

 

#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <math.h>
#include <cmath>

using namespace std;

int main()
{
    int ilosc;
    int kolejna;
    cout << "Ilosc liczb: ";
    cin >> ilosc;

    float tablica[ilosc];

    for (kolejna=0; kolejna<ilosc; kolejna++)
    {
        cout << "Podaj wartosc " << kolejna+1 << " liczby: ";
        cin >> tablica[kolejna];
    }

    cout << " " << endl;

    float suma = 0;

    for (kolejna=0; kolejna<ilosc; kolejna++)
    suma+=tablica[kolejna];
    cout << " " << endl;

    float srednia = 0;
    srednia=suma/ilosc;
    cout << "Srednia ze wszystkich liczb to: " << srednia << endl;

    cout << " " << endl;

    float bezwzgledna[kolejna];

    for (kolejna=0; kolejna<ilosc; kolejna++)
    {
        bezwzgledna[kolejna]=tablica[kolejna]-srednia;

        if (bezwzgledna[kolejna]<0)
            bezwzgledna[kolejna] = (-bezwzgledna[kolejna]);
        cout << "Wartosc bezwzgledna " << setprecision(3) << kolejna+1 << " : " << bezwzgledna[kolejna] << endl;
    }

    cout << " " << endl;

    int indeksMinimalna;
    float minimalna = bezwzgledna[0];
    for (kolejna=0; kolejna<ilosc; kolejna++)
    {
        if (minimalna>bezwzgledna[kolejna])
            indeksMinimalna=kolejna;
    }
    cout << "Minimalna wartosc bezwzgledna: " << minimalna << endl;
    cout << "Wartosc najblizsza sredniej: " << tablica[indeksMinimalna] << endl;

    delete [] tablica;
    delete [] bezwzgledna;

    return 0;
}

 

1 odpowiedź

+1 głos
odpowiedź 24 marca 2019 przez Mateusz Pawlak Użytkownik (960 p.)
wybrane 23 maja 2019 przez Thyrz
 
Najlepsza
 int indeksMinimalna;
    float minimalna = bezwzgledna[0];
    for (kolejna=0; kolejna<ilosc; kolejna++)
    {
        if (minimalna>bezwzgledna[kolejna])
            indeksMinimalna=kolejna;
    }
    cout << "Minimalna wartosc bezwzgledna: " << minimalna << endl;
    cout << "Wartosc najblizsza sredniej: " << tablica[indeksMinimalna] << endl;
 
    delete [] tablica;
    delete [] bezwzgledna;
 
    return 0;

w tym miejscu w kodzie znalazłem błąd. Mianowicie przed pętlą for do zmiennej "minimalna przypisujesz wartość pierwszej komorki tablicy "bezwzgledna" i porownujesz z resztą komórek tej wartosci. Brakuje przypisania nowej wartosci do zmiennej minimalna w momencie znalezienia takiej ponieważ przez całą pętle for porównujesz wartosci z  wartoscia  w pierwszej komórce tablicy . Podaje poprawiony kod poniżej:

int indeksMinimalna;
    float minimalna = bezwzgledna[0];
    for (kolejna=0; kolejna<ilosc; kolejna++)
    {
        if (minimalna>bezwzgledna[kolejna])
        {
            indeksMinimalna=kolejna;
            minimalna = bezwzgledna[kolejna];
        }
    }

i powinno śmigać aż miło ;) 

Pozdrawiam

Podobne pytania

+1 głos
1 odpowiedź 545 wizyt
0 głosów
2 odpowiedzi 397 wizyt
0 głosów
2 odpowiedzi 684 wizyt
pytanie zadane 19 lipca 2018 w C i C++ przez Nowacx02 Obywatel (1,060 p.)

92,567 zapytań

141,420 odpowiedzi

319,615 komentarzy

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

...