Wątek przeniesiony 2016-03-08 17:30 z przez ŁF. Powód: Wątek dotyczący podstaw

Program Obliczający Średnią C++

Odpowiedz Nowy wątek
2016-03-08 01:37
0

Zadanie: Program, który wczytuje w pętli liczby różne od zera i oblicza ich sumę oraz średnią. Wczytanie zera oznacza zakończenie działania pętli i wyświetlenie obliczonych wartości.

edytowany 1x, ostatnio: Wieczny Student, 2016-03-09 03:24
Wielkie Dzięki za pomoc. - Wieczny Student 2016-03-09 03:20
E, a jak jedna z moich wartości będzie uwzględniać ZERO? Raczej brak podanej cyfry/liczby powinno kończyć działanie programu :) - akasei 2016-05-22 12:44

Pozostało 580 znaków

2016-03-08 01:51
2

Odpal Dev C++, przestudiuj tutorial http://www.cplusplus.com/doc/tutorial/ i napisz ten program.

Wskazówka: jeśli już musisz korzystać z Dev C++, to (o ile jeszcze nie używasz) weź chociaż wersję Orwella ( https://sourceforge.net/projects/orwelldevcpp/ ). Stary nieaktualizowany Dev C++ 4.9.9.2 możesz sobie spokojnie odpuścić.

edytowany 2x, ostatnio: Spine, 2016-03-08 01:54

Pozostało 580 znaków

2016-03-08 13:17
kq
14
Wieczny Student napisał(a):

Czekam na odpowiedź.

Naskrobałem coś takiego:

template<typename State>
class Loop
{
    enum ReturnValue{
        FirstIteration = 0,
        ContinueLoop = 1,
        BreakLoop = 2
    };
 
public:
    Loop(State& s) : state_(s) {}
 
    template<typename Body, typename Condition>
    void execute(Body b, Condition c){
        switch(setjmp(loopBuffer_)){
        case FirstIteration:
        case ContinueLoop:
            if(!c(state_)){
                longjmp(loopBuffer_, BreakLoop);
            }else{
                b(state_);
                longjmp(loopBuffer_, ContinueLoop);
            }
        }
    }
 
private:
    State& state_;
    std::jmp_buf loopBuffer_;
};
 
struct AveragingLoopState
{
    int lastRead;
    int count;
    int sum;
};
 
void loopBody(AveragingLoopState& s){
    if(!(cin >> s.lastRead)){ s.lastRead = 0; }
    if(s.lastRead){
        ++s.count;
        s.sum += s.lastRead;
    }
}
 
bool loopCondition(AveragingLoopState const& s){
    return s.lastRead;
}

korzystasz z takiej pętli w ten sposób:

int main()
{
    AveragingLoopState s;
    s.lastRead = -1;
    s.count = 0;
    s.sum = 0;
    Loop<AveragingLoopState> loop(s);
    loop.execute(&loopBody, &loopCondition);
    cout << "Srednia to: " << static_cast<double>(s.sum) / s.count << endl;
}

http://melpon.org/wandbox/permlink/fM22EeFAvNwGMMyL

Mam nadzieję, że nie za późno.


edytowany 1x, ostatnio: kq, 2016-03-08 13:18
Pokaż pozostałe 2 komentarze
Tu jeszcze brakuje wyjątków z jumpem dają interesujące efekty. Ale przy byłam się, brak fabryki, jakiegoś makra, trochę więcej szablonów.... Chyba gorszy dzień miałeś.... :-) - Mokrowski 2016-03-08 14:05
y u no concepts? - pingwindyktator 2016-03-08 14:31
Nie działa tak jak powinno, ale dzięki. - Wieczny Student 2016-03-09 03:22
Jak to nie działa? - kq 2016-03-09 03:24

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0