• 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

42 Warsaw Coding Academy
0 głosów
332 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ź 874 wizyt
0 głosów
2 odpowiedzi 502 wizyt
0 głosów
2 odpowiedzi 1,000 wizyt
pytanie zadane 19 lipca 2018 w C i C++ przez Nowacx02 Obywatel (1,060 p.)

93,385 zapytań

142,384 odpowiedzi

322,540 komentarzy

62,745 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
...