Untitled

 avatar
unknown
plain_text
14 days ago
9.5 kB
3
Indexable
//1432-05_Kolpisnkii_AM_Kontrolnaya

#include <windows.h>    //подключить русский ввод-вывод
#include <iostream>     //ввод-вывод данных
#include <iomanip>      //библиотека для форматирования числа
#include <math.h>		//библиотека math
#include <stdlib.h>		//функции srand(), rand()
#include <cctype>		//функции is…()
#include <string>		//функция strlen()
#include <stdio.h>		//функция gets()
#include <conio.h>		//для отрисовки графика
#include <fstream>		//для операций и чтения и записи
using namespace std;    //чтобы не писать каждый раз std перед функциями вызываемыми из библиотеки

const int MSIZE = 21;

int main()
{
	setlocale(0, "");	//отображение кириллицы на экране

	int mas[MSIZE];
	int masx[MSIZE];
	int masy[MSIZE];

	double y1, y2, x, b, e, d;
	int w, x10, x10y1, x10y2, yy, xx, N, ys, ys1, yc, yc1, kk;
	
Begin:

	system("cls");

	w = 0;
	b = 0; d = 0; e = 0; x = 0;
	cout << "Введите диапазон крайних значения для X для функции sin(e^-x) и cos(e^-x)\n";
	cout << "Значение минимум: \n";
	cin >> b;
	cout << "Значение максимумум: \n";
	cin >> e;

List:
	cout << endl;
	do {
		cout << "Введите желаемое действие: \n";
		cout << "1. Вывести таблицу. \n";
		cout << "2. Записать результаты в файл. \n";
		cout << "3. Вывести график sin. \n";
		cout << "4. Вывести график cos. \n";
		cout << "5. Ввести новые данные. \n";
		cout << "6. Выйти. \n";
		cin >> N;

		if (N == 1) goto Table;
		if (N == 2) goto Rec;
		if (N == 3) goto GraphS;
		if (N == 4) goto GraphC;
		if (N == 5) goto Begin;

	} while (N != 6);
	goto End;

GraphC:
	system("cls");
	w = 3;
	goto Func;

GraphS:
	system("cls");
	w = 2;
	goto Func;

Rec:
	system("cls");
	w = 1;
	goto Func;

Table:
	system("cls");
	w = 0;

Func:

	if (b <= 0 || e <= 0) { d = (abs(b) + abs(e)) / 20; }
	if (b <= 0 && e <= 0) { d = (abs(b) - abs(e)) / 20; }
	if (b >= 0 && e >= 0) { d = (e - b) / 20; }
	x = b;

	if (w == 1) {
		ofstream out;					// поток для записи
		out.open("D:\\Fun_table.txt");  // окрываем файл для записи
		if (out.is_open())
		{
			out.precision(4);
			out << "-------------------------------------------------\n";
			out << "| Таблица функции y = sin(e^-x) и y = cos(e^-x) |\n";
			out << "-------------------------------------------------\n";
			out << "|   Значение:   |   sin(e^-x)   |   cos(e^-x)   |\n";
			out << "-------------------------------------------------\n";
		}
	} // вывод значений таблицы на экран
	cout << "-------------------------------------------------\n";
	cout << "| Таблица функции y = sin(e^-x) и y = cos(e^-x) |\n";
	cout << "-------------------------------------------------\n";
	cout << "|   Значение:   |   sin(e^-x)   |   cos(e^-x)   |\n";
	cout << "-------------------------------------------------\n";
	for (int i = 1; i <= 21; i++) {
		y1 = sin(exp(-x));
		y2 = cos(exp(-x));
		cout.precision(4);
		cout << "|  " << fixed << setw(8) << x << setw(6) << "|" << setw(10) << y1 << setw(6) << "|" << setw(10) << y2 << setw(7) << "|\n";

		if (w == 1) {
			ofstream out("D:\\Fun_table.txt", std::ios::app);
			if (out.is_open()) {
				out.precision(4);
				out << "|  " << fixed << setw(8) << x << setw(6) << "|" << setw(10) << y1 << setw(6) << "|" << setw(10) << y2 << setw(7) << "|\n";
			}
		}
		x = x + d;
	}
	cout << "-------------------------------------------------\n";
	if (w == 1) {
		ofstream out("D:\\Fun_table.txt", std::ios::app);
		if (out.is_open()) {
			out << "-------------------------------------------------\n";
		}
		out.close();
	}
	if (w == 1) {
		cout << "\nЗапись в файл произведена" << endl;
	}
	if (w == 2 || w == 3)
		goto Graph1;

	goto List;

Graph1: //расчет графиков с масштабированием вывода значений по осям

	if (w == 2 || w == 3) {
		x = b;

		cout << endl;
		cout << endl;

		for (int i = 0; i < MSIZE; ++i) {
			y1 = sin(exp(-x));
			y2 = cos(exp(-x));
			x10 = x * 10.0; x10y1 = y1 * 10.0; x10y2 = y2 * 10.0; // увеличиваем значения в 10 раз, чтобы привязать масштаб десятичных к единицам
			masx[i] = x10; mas[i] = x10y1; masy[i] = x10y2;
			x = x + d;
		}

		int max = masx[0], min = masx[0];	// высчитываем значения минимума и максимума по Х
		for (int i = 0; i < MSIZE; ++i) {
			if (masx[i] < min) {
				min = masx[i];
			}
			if (masx[i] > max) {
				max = masx[i];
			}
		}

		for (int i = 0; i < MSIZE; ++i) {

			masx[i] = (i * 4);			//задаем шаг Х по горизонтали не меньше 3, не больше 4.5 - масштаб будет от 60 до 90 клеток

			if (mas[i] > 0) {			// привязываем к Y значения синуса
				ys = 10.0 - mas[i];
				mas[i] = ys;
			}
			if (mas[i] <= 0) {
				ys1 = abs(mas[i]);
				mas[i] = ys1 + 10;
			}

			if (masy[i] > 0) {			// привязываем к Y значения косинуса
				yc = 10.0 - masy[i];
				masy[i] = yc;
			}
			if (masy[i] <= 0) {
				yc1 = abs(masy[i]);
				masy[i] = yc1 + 10;
			}
		}
	} // вывод самих графиков sin и cos

	if (w == 2) {
		int k = -3; kk = 13,

			cout << setw(9) << "^ РћСЃСЊ Y" << setw(44) << "y = sin(e^-x)" << "\n";
		for (int i = -3; i < 24; ++i)
		{
			if (k % 10 == 0) {
				cout << setw(2) << (kk / 10) << "|";
			}
			if (k % 10 != 0) {
				cout << setw(3) << "|";
			}

			k++; kk--;

			for (int j = 0; j < 86; ++j) {

				for (int ms = 0; ms < 21; ++ms) {
					yy = mas[ms];
					xx = masx[ms];
					if (j == xx && i == yy) {
						cout << "*";
					}
				}
				if (j == 84 && i == 10) { cout << setw(10) << "-> РћСЃСЊ РҐ"; }
				else {
					cout << " ";
				}
			}	cout << endl;
		}
		cout << "  ";
		for (int j = 0; j < 86; ++j) {
			cout << "-";
		} cout << "-> РћСЃСЊ РҐ \n";
		cout.precision(1);
		cout << setw(5) << b << setw(44) << e - d * 10 << setw(40) << e << "\n";
		cout << endl;
		cout << endl;
		cout << endl;
		goto List;
	}

	if (w == 3) {

		int g = -3, gg = 13;
		cout << setw(9) << "^ РћСЃСЊ Y" << setw(44) << "y = cos(e^-x)" << "\n";
		for (int i = -3; i < 24; ++i)
		{
			if (g % 10 == 0) {

				cout << setw(2) << (gg / 10) << "|";
			}
			if (g % 10 != 0) {
				cout << setw(3) << "|";
			}

			g++; gg--;

			for (int j = 0; j < 86; ++j) {

				for (int ms = 0; ms < 21; ++ms) {
					yy = masy[ms];
					xx = masx[ms];
					if (j == xx && i == yy) {
						cout << "*";
					}
				}
				if (j == 84 && i == 10) { cout << setw(10) << "-> РћСЃСЊ РҐ"; }
				else {
					cout << " ";
				}
			}	cout << endl;
		}
		cout << "  ";
		for (int j = 0; j < 86; ++j) {
			cout << "-";
		} cout << "-> РћСЃСЊ РҐ \n";
		cout.precision(1);
		cout << setw(5) << b << setw(44) << e - d * 10 << setw(40) << e << "\n";
		cout << endl;
		cout << endl;
		cout << endl;
	}
	goto List;

End:

	return 0;
}
Leave a Comment