/**
 * Copyright (c) 2016 Nicolás A. Ortega
 * License: GNU GPLv3
 */
#include <stdio.h>
#include <math.h>

inline double func(double x);

int main(void) {
	double a, b;
	printf("Enter \"min, max\": ");
	scanf("%lf, %lf", &a, &b);

	unsigned int parts;
	printf("Number of parts: ");
	scanf("%u", &parts);

	double lRect, rRect, mRect, trap, simp;
	lRect = rRect = mRect = trap = simp = 0;
	for(unsigned int i = 0; i < parts; ++i) {
		double p0 = a + (i * (b - a) / parts);
		double p1 = p0 + ((b - a) / parts);
		lRect += func(p0) * (p1 - p0);
		rRect += func(p1) * (p1 - p0);
		mRect += func((p0 + p1) / 2) * (p1 - p0);
		trap += (func(p0) + func(p1)) / 2 * (p1 - p0);
		simp += (p1 - p0) / 6 * (func(p0) + func(p1) + 4 * func((p0 + p1) / 2));
	}

	printf("Left Rectangle: %lf\n", lRect);
	printf("Right rectangle: %lf\n", rRect);
	printf("Middle Point Rectangle: %lf\n", mRect);
	printf("Trapezoidal: %lf\n", trap);
	printf("Simpson: %lf\n", simp);

	return 0;
}

double func(double x) {
	return pow(x, 3.0) + 4.0 * x - 2.0;
}