Program Obliczający Średnią C++

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.

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ć.

15
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.

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