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

Największa, najmniejsza wartość obiektowo (C++)

Object Storage Arubacloud
0 głosów
708 wizyt
pytanie zadane 13 czerwca 2018 w C i C++ przez Sic Dyskutant (8,510 p.)
edycja 13 czerwca 2018 przez Sic

Witam napisałem program, który wyznacza z tablicy wartości największą, najmniejszą i pokazuje średnią.

Program się włącza, jednak dane są domyślne. Dlaczego przyjmuje wartości domyślne a nie te, które zostały zaincjalizowane?

plik nagłówkowy:

#ifndef DANE_H_
#define DANE_H_

namespace SALES
{
        class Sales
        {
                private:
                        static const int QUARTERS = 4;
                        double sale[QUARTERS];
                        double average, max, min;
                public:
                        Sales(double * sales, const int QUARTERS);
                        Sales();
                        void showSales();
        };
}
#endif

plik deklaracji (próbowałem też tutaj zainicjalizować tablicę, jednak również był ten sam efekt):

#include "dane.h"
#include <iostream>

SALES::Sales::Sales(double * sale, const int QUARTERS)
{
        this->min = this->sale[0];
        this->max = this->sale[0];
        this->average = 0;
        for(int i=0; i<this->QUARTERS; i++)
        {
                if(this->sale[i] > this->max)
                        this->max = this->sale[i];
                if(this->sale[i] < this->min)
                        this->min = this->sale[i]; 
                this->average += this->sale[i];
        }
        std::cout << "Największa wartość: " << this->max << "\nNajmniejsza wartość: " << this->min << "\nŚrednia wartość: " << this->average/this->QUARTERS << std::endl;
}

void SALES::Sales::showSales()
{
        std::cout << "Największa wartość: " << max << "\nNajmniejsza wartość: " << min << "\nŚrednia wartość: " << average/QUARTERS << std::endl;
}

plik główny:

#include "dane.h"
#include <iostream>

int main()
{
        double table[4] = {22.11, 3.55, 33.55, 3.56};
        SALES::Sales object(table, 4);
        std::cout << "\n\n";
        object.showSales();
        return 0;
}

 

komentarz 13 czerwca 2018 przez Bondrusiek Maniak (61,370 p.)
Jakie jest pytanie do tego tematu bo za bardzo nie wiem o co Ci chodzi?
komentarz 13 czerwca 2018 przez Sic Dyskutant (8,510 p.)
Dlaczego przyjmuje wartości domyślne a nie te, które zostały zaincjalizowane?

2 odpowiedzi

+1 głos
odpowiedź 13 czerwca 2018 przez Bondrusiek Maniak (61,370 p.)
wybrane 13 czerwca 2018 przez Sic
 
Najlepsza

Witam,

zapominasz przypisać wartości do tablicy np. możesz to zrobić w konstruktorze :

...
SALES::Sales::Sales(double * sale, const int QUARTERS)
{
        for(int i = 0; i < QUARTERS; i++)
        {
            this->sale[i] = *(sale + i);
        }
...

 

1
komentarz 14 czerwca 2018 przez mokrowski Mędrzec (155,460 p.)
std::size_t to typ danych do określania wszelkiego rodzaju rozmiaru kontenerów (ilości elementów w nich zapisanych) i tego typu nieujemnych wielkości. Standard zawsze mapuje go na typ który pomieści największy możliwy kontener (tj ilość elementów) na danej platformie systemowej. W tych kontekstach std::size_t się sprawdza i do tego służy.
1
komentarz 15 czerwca 2018 przez sp00ky Obywatel (1,760 p.)
edycja 15 czerwca 2018 przez sp00ky

@Sic,

 

@sp00ky,

Przyznaję nie zrobiłem tego dokładnie z treścią. Jednak mam pytanie do jednej części tego programu, bo tego nie wiedziałem:

?

1

2

for (int i = 0; i < QUARTERS; i++) {

        std::cout << "Cena #" << i + 1 << ": ";

Przyznaję nie wykorzystywałem jeszcze takie sposobu i całkowicie go nie pojmuję.

To jest zwykła pętla, która pobiera od Ciebie dane do tablicy, przed pobraniem wartości wyświetli w konsoli:

Cena #1: Podajesz cenę
Cena #2: Podajesz cenę
Cena #3: i tak dalej
komentarz 15 czerwca 2018 przez Sic Dyskutant (8,510 p.)
to dlaczego jest "i+1"?
komentarz 15 czerwca 2018 przez Sic Dyskutant (8,510 p.)
Dziękuję muszę częściej z niego korzystać.
komentarz 15 czerwca 2018 przez sp00ky Obywatel (1,760 p.)

@Sic,

Ponieważ pętla startuje od pierwszego elementu tablicy int i = 0 (elementy tablicy liczymy od 0 elementu [0, 1, 2 , 3, ... n] ), a w konsoli ma się wyświetlić Cena #1 (a nie Cena #0), więc do i dodajemy 1. Proponuję poćwiczyć strumienie, aby nabrać trochę wprawy.

+1 głos
odpowiedź 13 czerwca 2018 przez mokrowski Mędrzec (155,460 p.)

dane.h:

#ifndef DANE_H_
#define DANE_H_

#include <cstddef>

namespace SALES
{

class Sales
{
public:
    constexpr static std::size_t QUARTERS = 4;
    Sales(double * sales, std::size_t QUARTERS);
    Sales();
    void showSales();
private:
    double sale[QUARTERS];
    double average;
    double max;
    double min;
};

}
#endif

dane.cpp

#include "dane.h"
#include <iostream>

SALES::Sales::Sales(double * sale, std::size_t QUARTERS)
{
    min = sale[0];
    max = sale[0];
    double sum = 0;
    for(std::size_t i = 0; i < QUARTERS; ++i)
    {
        if(sale[i] > max)
        {
            max = sale[i];
        }
        if(sale[i] < min)
        {
            min = sale[i];
        }
        sum += sale[i];
    }
    average = sum / QUARTERS;
    std::cout << "Największa wartość: " << max
        << "\nNajmniejsza wartość: " << min
        << "\nŚrednia wartość: " << average
        << '\n';
}

void SALES::Sales::showSales()
{
    std::cout << "Największa wartość: " << max
        << "\nNajmniejsza wartość: " << min
        << "\nŚrednia wartość: " << average
        << '\n';
}

main.cpp

#include "dane.h"
#include <iostream>

int main()
{
    double table[] = {22.11, 3.55, 33.55, 3.56};
    SALES::Sales object(table, sizeof(table)/sizeof(*table));
    std::cout << "\n\n";
    object.showSales();
}

 

Podobne pytania

0 głosów
2 odpowiedzi 2,549 wizyt
pytanie zadane 7 listopada 2018 w C i C++ przez ola123 Nowicjusz (180 p.)
0 głosów
0 odpowiedzi 1,086 wizyt
pytanie zadane 20 marca 2020 w Java przez mn130496 Gaduła (3,530 p.)
+2 głosów
1 odpowiedź 319 wizyt

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

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

...