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