• 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

HackNation - ogólnopolski hackathon
0 głosów
377 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ź 915 wizyt
0 głosów
2 odpowiedzi 551 wizyt
0 głosów
2 odpowiedzi 1,048 wizyt
pytanie zadane 19 lipca 2018 w C i C++ przez Nowacx02 Obywatel (1,060 p.)

93,628 zapytań

142,551 odpowiedzi

323,050 komentarzy

63,133 pasjonatów

Advent of Code 2025

Top 15 użytkowników

  1. 1694p. - dia-Chann
  2. 1676p. - DziarnowskiJ
  3. 1650p. - Łukasz Piwowar
  4. 1640p. - CC PL
  5. 1616p. - Maurycy W
  6. 1607p. - raydeal
  7. 1602p. - Adrian Wieprzkowicz
  8. 1588p. - Tomasz Bielak
  9. 1521p. - Michal Drewniak
  10. 1491p. - Rafał Trójniak
  11. 1471p. - rafalszastok
  12. 1444p. - robwarsz
  13. 1257p. - ssynowiec
  14. 1208p. - Mariusz Fornal
  15. 1116p. - rucin93
Szczegóły i pełne wyniki

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

Kursy INF.02 i INF.03
...