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

Zadanie definicji funkcji (c++)

Object Storage Arubacloud
0 głosów
453 wizyt
pytanie zadane 28 kwietnia 2018 w C i C++ przez Sic Dyskutant (8,510 p.)

Witam

Mam zadanie, które chce wykonać zatrzymałem się na jednej z funkcji, która nie mogę w ogóle ruszyć oto kod:

namespace SALES
{
        const int QUARTERS = 4;
        struct Sales
        {
                double sale[QUARTERS];
                double averange, max, min;
        };
} using namespace SALES;

void setSales(Sales & s, const double *ar, int n);

Polecenie:

funkcja ma kopiować najmniejszy z 4 lub n elementów tablicy ar do składowych sales struktury s i oblicza oraz zachowuje w odpowiednich składowych struktury sales wartości: średnią, min, max; Zeruje pozostałe elementy tablicy sales (Jeśli są).

Proszę o podpowiedź.

2 odpowiedzi

+1 głos
odpowiedź 8 maja 2018 przez mokrowski Mędrzec (155,460 p.)
wybrane 8 maja 2018 przez Sic
 
Najlepsza
#include <iostream>
#include <cstddef> // dla std::size_t

//
// Uwagi:
// 1. Wszelkie wielkości (czyli rozmiary tablic, długości napisów itp.), 
//    to typ std::size_t
// 2. Stała QUARTERS jest "globalna w zasięgu przestrzeni nazewniczej".
//    Nie będzie widoczna wtedy poza modułem kompilacji jeśli dasz static.
// 3. Argument * ar to: zmienny wskaźnik na stałe (double * const ar) 
//    a nie jak Ty miałeś: stały wskaźnik na zmienne (const double * ar)
// 4. Przy definicji struktury, elementy są czytelniejsze jeśli są
//    w oddzielnych liniach.
// 5. Lepiej nie używać: using namespace SALES 
//    jako "gołe w całym programie". Przy większych projektach zemsta
//    będzie sroga :)
//    

namespace SALES
{
        static const std::size_t QUARTERS = 4;
        struct Sales
        {
                double sale[QUARTERS];
                double averange;
                double max;
                double min;
        };
}

void setSales(SALES::Sales & s, double * const ar, std::size_t n);

int main()
{
    SALES::Sales sales;
    double values[SALES::QUARTERS] = { 13.22, 99.05, 32.10, 4.55 };
    setSales(sales, values);
}

void setSales(SALES::Sales & s, double * const ar, std::size_t n)
{
    // Jeśli chcesz przypisać w funkcji wszystkie ar[i] -> s.sale[i] to.. 
    //for(std::size_t i = 0; i < SALES::QUARTERS; ++i) {
    //    s.sale[i] = ar[i];
    //}
}

 

komentarz 10 maja 2018 przez mokrowski Mędrzec (155,460 p.)

Zmień linię z:

std::pair<double * const, double * const>

na 

std::pair<const double *, const double *>

Zapewne inaczej będzie to rozwiązywanie problemów z wersją środowiska lub gcc. W nowszych kompilatorach z łatwością się kompiluje..  

komentarz 10 maja 2018 przez Sic Dyskutant (8,510 p.)

Tak zrobiłem pojawił się kolejny.

/tmp/ccAbJz28.o: In function `main':
p_g.cpp:(.text+0x71): undefined reference to `setSales(SALES::Sales&, double const*, unsigned long)'
p_g.cpp:(.text+0x8c): undefined reference to `setSales(SALES::Sales&, double const*, unsigned long)'
p_g.cpp:(.text+0x98): undefined reference to `setSales(SALES::Sales&)'
collect2: error: ld returned 1 exit status

 

komentarz 10 maja 2018 przez mokrowski Mędrzec (155,460 p.)
To jest błąd linkera.. Masz niezgodność nagłówka i pliku *.cpp. Kopiuj uważnie pliki.... wszystkie....

https://wandbox.org/permlink/3qPWmKUYWGV5TnOY
komentarz 10 maja 2018 przez Sic Dyskutant (8,510 p.)
Próbowałem to zrobić jednak za każdym razem, gdy próbuje kompilować usuwa mi plik próbowałem kilku krotnie jednak nie ma sensu dalej kopiować.
komentarz 10 maja 2018 przez mokrowski Mędrzec (155,460 p.)
Z braku informacji co to za IDE, nie wiem co mogę podpowiedzieć. Możesz wszystko umieścić w 1 pliku tak jak to podałem w wandbox.org.
+1 głos
odpowiedź 28 kwietnia 2018 przez sofnir Gaduła (4,690 p.)
Cześć, ale napisz nam dlaczego nie możesz z nią ruszyć? Nie rozumiesz treści zadania? Do funkcji setSales przekazujesz jako argumenty strukturę Sales, tablicę double i parametr n oznaczający ile elementów z tablicy ma być przekazanych do struktury Sales. Następnie w funkcji przekazujesz określoną liczbę tych elementów z tablicy do tablicy znajdującej się wewnątrz struktury Sales i obliczasz wartość średnią, max i min.
komentarz 28 kwietnia 2018 przez Sic Dyskutant (8,510 p.)

Dzięki nie rozumiałem polecenia.

Napisałem kod ale mam błąd w jednym miejscu pokaże tylko ten punkt:

void setSales(Sales & s)
{
      s.sale[QUARTERS] = {13.22, 99.05, 32.10, 4.55};
}

Błąd :

error: cannot convert ‘<brace-enclosed initializer list>’ to ‘double’ in assignment
  s.sale[QUARTERS] = {13.22, 99.05, 32.10, 4.55};

Dlaczego niby ?

1
komentarz 8 maja 2018 przez sofnir Gaduła (4,690 p.)
Sory, że teraz odpisuję nie wiem czy już nei za późno xd To co zrobiłeś to jest lista inicjalizacyjna, której można użyć tylko podczas tworzenia obiektu. Obiekt, z którego korzystasz został już utworzony wcześniej, więc nie możesz tego zrobić w ten sposób. Musisz przypisać każdą z tych wartości osobno np. s.sales[0] = 13.22.
komentarz 8 maja 2018 przez Sic Dyskutant (8,510 p.)
Dziękuję bardzo to było rozwiązanie problemu.!

Podobne pytania

0 głosów
1 odpowiedź 93 wizyt
pytanie zadane 13 lutego 2018 w C i C++ przez Sic Dyskutant (8,510 p.)
0 głosów
2 odpowiedzi 7,792 wizyt
pytanie zadane 28 czerwca 2017 w C i C++ przez Arson90 Nowicjusz (180 p.)
0 głosów
1 odpowiedź 291 wizyt
pytanie zadane 11 stycznia 2021 w C i C++ przez ifuknowme555 Początkujący (410 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

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

...