#include "pch.h"
#include "stdio.h"
#include "conio.h"
#include "locale.h"
#include <iostream>
using namespace std;

float prov_razm()
{
	int T = 0, i = 0;
	int Y;
	char c;
	char str[256];
	while (T == 0)
	{
		c = _getch();
		if (((c > 47) && (c < 58)) || (c == 13) || (c == 8))
		{

			if (c == 13) { T++; break; }

			str[i] = c;
			i++;
			cout << c;
			Y = atoi(str);

			if ((c == 8) && (i > 0))
			{
				printf(" \0");
				printf("\b");
				i = i - 2;
				str[i] = '\0';
				Y = atoi(str);
			}

		}
	}
	return Y;
}

double G()
{
	cout <<
		"\n\n   Задание 1:"
		"\n\n     100   50"
		"\n     ---  ---"
		"\n     \\    \\       1"
		"\n      >    >  ---------- ;"
		"\n     /    /          2"
		"\n     ---  ---   i + j"
		"\n     i=1  j=1";
	double sum = 0.0;
	int i = 0, j = 0;
	do {
		cout << "\n\n  Введите предел i: ";
		i = prov_razm();
		cout << "\n\n                   i = " << i;
		if ((i < 1) || (i > 100)) cout << "\n  i должно быть меньше 100";
	} while ((i < 1) || (i > 100));
	do {
		cout << "\n\n  Введите предел j: ";
		j = prov_razm();
		cout << "\n\n                   j = " << j;
		if ((j < 1) || (j > 100)) cout << "\n  j должно быть меньше 50";
	} while ((j < 1) || (j > 50));

	for (int k = 1; k <= i; k++)
		for (int l = 1; l <= j; l++)
			sum = sum + (1.0 / (k + (l*l)));
	return sum;
}

double Z()
{
	cout <<
		"\n\n   Задание 2:"
		"\n\n     100   60"
		"\n     ---  ---"
		"\n     \\    \\\t 3    4"
		"\n      >    >  sin(i  + j ) ;"
		"\n     /    /"
		"\n     ---  ---"
		"\n     i=1  j=1";
	double sum = 0;
	int i = 0, j = 0;
	for (int k = 1; k <= i; k++)
		for (int l = 1; l <= j; l++)
			sum += sin(pow(k, 3) + pow(l, 4));
	return sum;
}

double info()
{
	cout <<
		"\t\t***************************************************\n"
		"\t\t|                  Указатели                       |\n"
		"\t\t|  Выполнил     |    Голохвастов Егор, ИНБб-11     |\n"
		"\t\t***************************************************\n"
		"\t\t****** Версия программы 1.0 ******* Год 2019 ******\n"
		"\n  Программа вычисляет сумму по формуле согласно заданию."
		"\n\n   Задание 1:"                  "\t\t\tЗадание 2:"
		"\n\n     100   50"                  "\t\t\t   100   60"
		"\n     ---  ---"                    "\t\t\t   ---  ---"
		"\n     \\    \\       1"            "\t\t   \\    \\\t 3    4"
		"\n      >    >  ---------- ;"       "\t    >    >  sin(i  + j ) ;"
		"\n     /    /          2"           "\t\t   /    /"
		"\n     ---  ---   i + j"            "\t\t   ---  ---"
		"\n     i=1  j=1"                    "\t\t\t   i=1  j=1"
		"\n\n  Для создания программы использовалось приложение Visual Studio 2017.\n"
		"\n********************************************************************************\n";
	return NULL;
}

int prov_menu()
{
	int T = 0;
	char c, str[1];
	while (T == 0)
	{
		c = _getch();
		if (c > 48 && c < 53)
		{
			str[0] = c;
			T = atoi(str);
		}
	}
	return T;
}

double(*menu())()
{
	int choice; /* Номер пункта меню */
	/* Массив указателей на функции: */
	double(*menu_items[])() = { G, Z, info };
	system("cls");
	cout <<
		"\t\t\t\t___МЕНЮ___\n"
		"\n   Выберите пункт меню: \n"
		"\n  1) Задание 1"
		"\n  2) Задание 2"
		"\n  3) О программе"
		"\n  4) Выход\n";
	choice = prov_menu();
	system("cls");
	int i = 0, j = 0;
	do {
		cout << "\n\n  Введите предел i: ";
		i = prov_razm();
		cout << "\n\n                   i = " << i;
		if ((i < 1) || (i > 100)) cout << "\n  i должно быть меньше 100";
	} while ((i < 1) || (i > 100));
	do {
		cout << "\n\n  Введите предел j: ";
		j = prov_razm();
		cout << "\n\n                   j = " << j;
		if ((j < 1) || (j > 100)) cout << "\n  j должно быть меньше 50";
	} while ((j < 1) || (j > 50));
	if (choice < 4 && choice > 0)
		return menu_items[choice - 1];
	else
		return NULL;
}

int main()
{
	setlocale(LC_ALL, "Russian");
	double(*r) (void); /* Указатель на функции .*/
	double t;
	while (1)
	{/* Обращение к меню:  */
		r = menu();
		if (r == NULL)
		{
			return 0;
		}
		/* Вызов выбранной функции */
		t = (*r) ();
		if (t != NULL)
			printf_s("\n\n    Результат: %f\n\n", t);
		system("Pause");
	}
}