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

Zadanie z C++

Object Storage Arubacloud
–2 głosów
687 wizyt
pytanie zadane 24 września 2019 w C i C++ przez Mr.Tenebris Nowicjusz (120 p.)
Witam Panowie i Panie, czy znalazłaby się tu jakaś miła osoba która pomogłaby mi z zadaniem z C++?

Zadeklarować i zdefiniować funkcje: int maksimum(int *tab,int n), int mainimum(int *tab,int n), float srednia_arytmetyczna(int *tab,int n) i int ile_mniejszych_od_sredniej(int *tab,int n), które odpowiednio: wyznaczają maksimum i minimum ciągu n-elementowego liczb całkowitych, średnią arytmetyczną wyrazów tego ciągu oraz ilość wyrazów mniejszych od średniej arytmetycznej. W programie głównym wczytać ilość wyrazów w ciągu, zarezerwować miejsce w pamięci na tablicę n-elementową, a następnie wyznaczyć rozstęp ciągu (różnica pomiędzy maksimum a minimum ciągu) oraz ilość wyrazów mniejszych od średniej arytmetycznej.
komentarz 24 września 2019 przez tkz Nałogowiec (42,000 p.)
A masz coś własnego?
komentarz 24 września 2019 przez Mr.Tenebris Nowicjusz (120 p.)
//Wszystko co mam..

int maksimum(int *tab,int n);
int minimum(int *tab,int n);
float srednia_arytmetyczna(int *tab,int n);
int ile_mniejszych_od_sredniej(int *tab,int n);
 
//program glowny:
int main()
{
    //1)zadeklaruj n i pobierz jej wartosc od uzytkownika
 
    //2) zarezerwuj miejsce na tablice n-elementowa i zapisz ja do zmiennej x"
    int* x = ?;
 
    //3) wczytaj elementy ciagu x
    for (int i=0;i<n;i++) {
        cout<<"x["<<i<<"]=";
        cin>>?;
    }
 
    //4) wyznacz minimum i maksimum
    int m1 = ?
    int m2 = ?
    cout<<"Rozstep ciagu wynosi: "<<m2-m1<<endl;
 
    //5) wyznacz ilosc wyrazow mniejszych od sredniej:
    cout<<"Ilosc wyrazow mniejszych od sredniej arytmetycznych: "<<?<<endl;
 
    //6) zwolnij pamiec zarezerwowana na x:
    delete ? ?;
    system("PAUSE");
    return 1;
}
 
//definicje zadeklarowanych funkcji:
int maksimum(int *tab,int n) {
    int m = ?;
    for (int i=1;i<n;i++)
        if (?) m = ?;
    return m;    
}
int minimum(int *tab,int n) {
    ?    
}
float srednia_arytmetyczna(int *tab,int n) {
    ?      
}
int ile_mniejszych_od_sredniej(int *tab,int n) {
    float srednia = ?
    int ilosc = ?;
    for (int i=0;i<n;i++)
        if (?)
           ?
    return ?
}
komentarz 24 września 2019 przez gagyn Stary wyjadacz (11,050 p.)

@Mr.Tenebris, sam napisałeś co trzeba zrobić. Najpierw sam podejdź do zadania, a jak masz konkretny problem to pytaj tutaj na forum. Na powyższe pytanie najprawdopodobniej nie uzyskasz odpowiedzi, ponieważ liczysz na to, że ktoś zrobi wszystko za Ciebie, a to forum nie ma takiego przeznaczenia (no chyba, że w dziale zlecenia, ale wtedy należy się wynagrodzenie takie osobie).

komentarz 24 września 2019 przez Nicekovsky Dyskutant (9,820 p.)
Ma problem bo nie działa mu program i chciał  zapytać właśnie dlaczego. Daruj sobie zbędne komentarze.
komentarz 24 września 2019 przez gagyn Stary wyjadacz (11,050 p.)
Zacząłem pisać swój komentarz zanim pojawił się poprzedni z kodem, więc chodziło mi wtedy o to, że nie było kodu a liczył na to, że ktoś wszystko zrobi za niego. Teraz jak już jest kod to ok.
komentarz 25 września 2019 przez Nicekovsky Dyskutant (9,820 p.)
W takim razie, przepraszam za mój atak ;)

2 odpowiedzi

+2 głosów
odpowiedź 24 września 2019 przez tkz Nałogowiec (42,000 p.)
#include <list>
#include <exception>
#include <new>

#include <cassert>
#include <climits>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <array>
#include <deque>
#include <fstream>
#include <iomanip>
#include <iostream>
#include <iterator>
#include <map>
#include <memory>
#include <mutex>
#include <random>
#include <set>
#include <sstream>
#include <string>
#include <utility>
#include <vector>
#include <thread>
#include <typeinfo>
#include <tuple>
#include <unordered_set>

template <typename T, typename Getter>
void read(T *ptr, size_t n, Getter &&g)
{
    if (!n)
        return;
    g(*ptr);
    read(++ptr, --n, std::forward<Getter>(g));
}

template <typename T, size_t N, typename Getter>
void read(T (&arr)[N], Getter &&g)
{
    read(arr, N, std::forward<Getter>(g));
}
template <typename T>
struct PositiveGetter
{
    void operator()(T &ref) const
    {
        ref = -1;
        std::cout << "Podaj liczbe: " << '\n';
        std::cin >> ref;
        while (!(std::cin))
        {
            std::cout << "Podaj jeszcze raz: " << '\n';
            std::cin.clear();
            std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
            std::cin >> ref;
        }
    }
};
template <typename T>
struct PositiveGetterFactory
{
    PositiveGetter<T> operator()() const
    {
        return PositiveGetter<T>();
    }
};

template <typename It>
std::pair<double, size_t> getAverageAndAboveAveragesCount(It b, It e)
{
    auto sum = std::accumulate(b, e, 0.0, std::plus<double>{});
    auto avg = sum / std::distance(b, e);

    auto above = std::count_if(b, e, [&](double val) { return val > avg; });
    return std::make_pair(avg, above);
}

template <typename It>
std::pair<double, size_t> minimumAndMaximumInTheRange(It b, It e)
{
    auto sum = std::accumulate(b, e, 0.0, std::plus<double>{});
    auto avg = sum / std::distance(b, e);

    auto above = std::count_if(b, e, [&](double val) { return val > avg; });
    return std::make_pair(avg, above);
}

template <class ForwardIt>
std::pair<ForwardIt, ForwardIt>
minimumOrMaximumArrayElement(ForwardIt first, ForwardIt last)
{
    using value_type = typename std::iterator_traits<ForwardIt>::value_type;
    return std::minmax_element(first, last, std::less<value_type>());
}
//do poprawy

int main()
{
    unsigned n{0};
    std::cin >> n;
    double *tab = new double[n];

    auto factory = PositiveGetterFactory<double>();
    auto getter = factory();
    read(tab, n, getter);

    auto [c, d] = getAverageAndAboveAveragesCount(tab, tab + n);
    auto [a,b] = minimumOrMaximumArrayElement(tab, tab+n);
    std::cout << "srednia: " << c << '\n';
    std::cout << "wiekszych niz srednia: " << d<< '\n';
    std::cout << "najmniejszy: " << *a << '\n';
    std::cout << "najwiekszy: " << *b << '\n';
    std::cout << "dystans: " << abs(a-b) << '\n';

    return 0;
}

 

komentarz 24 września 2019 przez gagyn Stary wyjadacz (11,050 p.)
Chciało Ci się to pisać? xD
komentarz 24 września 2019 przez tkz Nałogowiec (42,000 p.)
Myślę, że wykorzystanie nowego standardu oraz STL jest okey. Autor pytania nie będzie musiał się męczyć z starym standardem. A kod nie jest mój w 100%. Na szczęście mam dostęp do internetu.
komentarz 24 września 2019 przez gagyn Stary wyjadacz (11,050 p.)
Domyślam się z jakiej to strony ;)
komentarz 24 września 2019 przez tkz Nałogowiec (42,000 p.)
Od Krzaqu(a), nie wiem jak się to odmienia.
0 głosów
odpowiedź 24 września 2019 przez gagyn Stary wyjadacz (11,050 p.)
edycja 24 września 2019 przez gagyn
//2) zarezerwuj miejsce na tablice n-elementowa i zapisz ja do zmiennej x"
    int* x = ?;
 
...

//6) zwolnij pamiec zarezerwowana na x:
    delete ? ?;

Poczytaj coś o tablicach dynamicznych. https://www.p-programowanie.pl/cpp/tablice-dynamiczne/

 

   //4) wyznacz minimum i maksimum
    int m1 = ?
    int m2 = ?

tutaj po prostu przypisujesz wynik swoich funkcji min i max:

int m1 = maksimum(x, n);

i analogicznie dla m2.

 

//1)zadeklaruj n i pobierz jej wartosc od uzytkownika
 

Nie chcę być nie miły czy coś, ale serio? wczytywanie wartości do zmiennej? to chyba jest druga lekcja c++, zaraz po hello world. Poczytaj o cin >>.

 

int maksimum(int *tab,int n) {
    int m = ?;
    for (int i=1;i<n;i++)
        if (?) m = ?;
    return m;    
}

int m = tab[0]; // przypisujesz pierwszy element jako aktualną maksymalną wartość

if ( tab[i] > m ) m = tab[i];

Tak powinien wyglądać warunek sprawdzania w pętli czy ta wartość jest maksymalną.

Polecam poczytać o wyznaczaniu wartości minimalnej w maksymalnej.

 

Edit:

Jeszcze sprawdzanie ile mniejszych od średniej:

int ile_mniejszych_od_sredniej(int *tab,int n) {
    float srednia = ?
    int ilosc = ?;
    for (int i=0;i<n;i++)
        if (?)
           ?
    return ?
}

Najpierw musisz policzyć średnią, czyli zrób nową funkcję do liczenia średniej i w niej najpierw zsumuj wszystkie wartości z tablicy, a potem podziel przez n.

Następnie wynik funkcji liczącej średnią przypisz do float srednia.

int ilosc = ?

Tutaj najzwyczajniej przypisujesz na początku 0.

 

    for (int i=0;i<n;i++)
        if (?)
           ?

Warunek w pętli ma sprawdzać czy dany element tablicy (tab[i]) jest mniejszy od średniej.

Podobne pytania

–1 głos
1 odpowiedź 179 wizyt
pytanie zadane 8 lipca 2019 w C i C++ przez martin1724 Użytkownik (690 p.)
0 głosów
0 odpowiedzi 481 wizyt
pytanie zadane 1 grudnia 2019 w C i C++ przez Karolus Użytkownik (510 p.)
0 głosów
2 odpowiedzi 694 wizyt
pytanie zadane 27 września 2021 w C i C++ przez polandonion Mądrala (7,100 p.)

92,633 zapytań

141,503 odpowiedzi

319,883 komentarzy

62,015 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!

...