Untitled

 avatar
unknown
plain_text
5 months ago
13 kB
2
Indexable
#include<iostream>
#include<string>
#include<vector>
#include<cmath>

#define k 6.67e-11

//Define the size of bytes
constexpr long double KB = 1024L;
constexpr long double MB = KB*1024L;
constexpr long double GB = MB * 1024LL;
constexpr long double TB = GB*1024LL;
constexpr long double PB = TB * 1024LL;
constexpr long double EB = PB*1024LL;
constexpr long double ZB = EB * 1024LL;

//Define the math size
constexpr long double K = 1000L;
constexpr long double M = K * 1000L;
constexpr long double G = M * 1000L;
constexpr long double T = G * 1000L;
constexpr long double P = T * 1000L;
constexpr long double E = P * 1000L;
constexpr long double Z = E * 1000L;

void build_menu(int&);
void problem1(int&);
void problem2(int&, int&, int&);
void problem3(int&);
void problem4(long double& distance, long double& m1, long double& m2);
void problem5(int& num);
void problem6(float&, float&, float&);
void problem7(float& num);
void problem8(float& num1, float& num2);
void problem9();
void problem10();
void convert_upper(std::string&);

int main() {

	int opt;
	build_menu(opt); 

	return 0;

}

void convert_upper(std::string& str) {
	for (char& ch : str) {
		ch = toupper(ch);
	}
}

void problem1 (int &num) {
	int sum=0;
	do {
		std::cout << "\n\tPlease enter a 3-digit number: ";
		std::cin >> num;
		if (num < 0) {
			num = -num;
		}
		if (num < 100 || num >999) std::cout << "\tInvalid input. Please enter again.\n";
	} while (num < 100 || num >999);
	int b = num;
	while (num != 0) {
		sum += num % 10;
		num /= 10;
	}
	std::cout << "\tThe sum of 3 digits of " << b << " is " << sum << ".";
}

void problem2(int &a, int &b, int &c) {
	int num = 0;
	do {
		std::cout << "\n\tPlease enter the 1st 1-digit number: ";
		std::cin >> a;
		if (a < 1 || a >9) std::cout << "\tInvalid input. Please enter again.\n";
	} while (a < 1 || a >9);
	do {
		std::cout << "\n\tPlease enter the 2nd 1-digit number: ";
		std::cin >> b;
		if (b < 0 || b >9) std::cout << "\tInvalid input. Please enter again.\n";
	} while (b < 0 || b >9);
	do {
		std::cout << "\n\tPlease enter the 3rd 1-digit number: ";
		std::cin >> c;
		if (c < 0 || c >9) std::cout << "\tInvalid input. Please enter again.\n";
	} while (c < 0 || c >9);
	num = a * 100 + b * 10 + c;
	std::cout << "\tThe 3-digit number formed by " << a << ", "
		<< b << ", " << c << " is: " << num << ".";
}

void problem3(int& num) {
	int s = 0;
	do {
		std::cout << "\n\tPlease enter a 3-digit number: ";
		std::cin >> num;
		if (num < 100 || num >999) std::cout << "\tInvalid input. Please enter again.\n";
	} while (num < 100 || num >999);
	const int n = num;
	while (num != 0) {
		s *= 10;
		s += num % 10;
		num /= 10;
	}
	std::cout << "\tThe reverse number of " << n << " is: " << s << ".";
}

void problem4(long double& distance, long double& m1, long double& m2) {
	std::cout << "\n\tPlease enter the distance between 2 bodies (in meters): ";
	std::cin >> distance;
	std::cout << "\tPlease enter the mass of body 1 (in kg): ";
	std::cin >> m1;
	std::cout << "\tPlease enter the mass of body 2 (in kg): ";
	std::cin >> m2;
	long double force = (k * (m1 * m2)) / pow(distance, 2);
	std::cout << "\tThe gravitational force between the 2 bodies: " << force << " (Newton).";
}

void problem5(int& num) {
	long double num2 = 0;
	std::string size;
	do {
		std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
		std::cout << "\n\tPlease enter the unit size of your hard drive(KB -> ZB): ";
		getline(std::cin, size);
		convert_upper(size);
		if (size != "KB" && size != "MB" && size != "GB" && size != "TB" && size != "PB" && size != "EB" && size != "ZB") {
			std::cout << "\tInvalid input. Please enter again.";
		}
	} while (size != "KB" && size != "MB" && size != "GB" && size != "TB" && size != "PB" && size != "EB" && size != "ZB");

	std::cout << "\tPlease enter the storage of your hard drive in (" << size << "): ";
	std::cin >> num;
	if (size == "KB") {
		num2 = num * (K / KB);
	}
	else if (size == "MB") {
		num2 = num * (M / MB);
	}
	else if (size == "GB") {
		num2 = num * (G / GB);
	}
	else if (size == "TB") {
		num2 = num * (T / TB);
	}
	else if (size == "EB") {
		num2 = num * (E / EB);
	}
	else if (size == "PB") {
		num2 = num * (P / PB);
	}
	else if (size == "ZB") {
		num2 = num * (Z / ZB);
	}
	std::cout << "\n\tThe actual storage of the hard drive is: " << num2 << " " << size << ", in contrast to "
		<< num << " " << size << " .";

}

void problem6(float& a, float& b, float& c) {
	float x1 = 0;
	float x2 = 0;
	float delta = 0;

	std::cout << "\n\tPlease enter the real number a: ";
	std::cin >> a;
	std::cout << "\n\tPlease enter the real number b: ";
	std::cin >> b;
	std::cout << "\n\tPlease enter the real number c: ";
	std::cin >> c;
	if (a == 0) {
		if (b != 0) {
			std::cout << "\n\tThis is a linear equation " << b << "x + " << c << " = 0 :"
				<< "\n\tSolutiuon to this equation is " << -c / b;
		}
		else {
			std::cout << "\n\tThis equation has no solutions because both a & b = 0.";
		}
		std::cout << "\n";
		return;
	}
	delta = pow(b, 2) - (4 * a * c);
	if (delta > 0) {
		x1 = (-b + sqrt(delta)) / (2*a);
		x2 = (-b - sqrt(delta)) / (2*a);
		std::cout << "\n\tThere are 2 solutions to the quadratic equation " <<
			a << "*x^2 + " << b << "x + " << c << " = 0 " << ":\n"
			<< "\t\tx1 = " << x1 << "\n\t\t" << "x2 = " << x2;

	}
	else if (delta == 0) {
		x1 = -b / (2 * a);
		std::cout << "\n\tThere is only 1 solution to the quadratic equation " <<
			a << "*x^2 + " << b << "x + " << c << " = 0 " << ":\n"
			<< "\t\tx = " << x1;
	}
	else {
		std::cout << "\n\tThere is no real solution to the quadratic equation "
			<< a << "*x^2 + " << b << "x + " << c << " = 0.";
	}

}

void problem7(float& num) {
	int fee = 0;
	do {
		std::cout << "\n\tPlease enter the number of hours that the car parked at the airport(0-24 hrs): ";
		std::cin >> num;
		if (num < 0 || num >24) std::cout << "\tInvalid input. Please enter again.\n";
	} while (num < 0 || num >24);
	if (0 <= num && num <= 3) fee = 5;
	else if (3 < num && num <= 9) fee = 6 * int(num + 1);
	else if (9 < num && num <= 24) fee = 60;
	std::cout << "\n\tThe parking fee for " << num << " hours: " << "$" << fee << ".";
}

void problem8(int& num1, int& num2) {
	do {
		std::cout << "\n\tPlease enter the starting temperature(int): ";
		std::cin >> num1;
		std::cout << "\n\tPlease enter the ending temperature(int): ";
		std::cin >> num2;
		if (num2 <= num1) std::cout << "\n\tInvalid inputs. Please neter again.\n";
	} while (num2 <= num1);
	
	for (int i = num1; i <= num2; i++) {
		float v = 331.3 + 0.61 * i;
		std::cout << "\n\tAt " << i << " degrees Celsius the velocity of sound is " << v << " (m/s).\n";
	}
}

void problem9() {
	struct point {
		double x;
		double y;
	};
	point p1, p2;
	std::cout << "\n\tPlease enter the x-coordinate of point 1: ";
	std::cin >> p1.x;
	std::cout << "\n\tPlease enter the y-coordinate of point 1: ";
	std::cin >> p1.y;
	std::cout << "\n\tPlease enter the x-coordinate of point 2: ";
	std::cin >> p2.x;
	std::cout << "\n\tPlease enter the y-coordinate of point 2: ";
	std::cin >> p2.y;
	double m = 0;
	m = (p2.y - p1.y) / (p2.x - p1.x);
	double c = 0;
	c = p1.y - p1.x * m;
	std::cout << "\n\tThe linear function of the 2 points (" << p1.x << "," << p1.y << "), "
		<< "(" << p2.x << ", " << p2.y << "): " << "y = " << m << "x + " << c;
}

void problem10() {

	//Zodiac structure
	struct zodiac {
		std::string name;
		int starting_month;
		int ending_month;
		int starting_date;
		int ending_date;
};
	zodiac zodiac_sign[] = {
		{"Capricorn", 12, 1, 22, 19},
		{"Aquarius", 1, 2, 20, 18},
		{"Pisces", 2, 3, 19, 20},
		{"Aries", 3, 4, 21, 19},
		{"Taurus", 4, 5, 20, 20},
		{"Gemini", 5, 6, 21, 21},
		{"Cancer", 6, 7, 22, 22},
		{"Leo", 7, 8, 23, 22},
		{"Virgo", 8, 9, 23, 22},
		{"Libra", 9, 10, 23, 22},
		{"Scorpio", 10, 11, 23, 21},
		{"Sagittarius", 11, 12, 22, 21},
	};

	//Birthday structure
	std::string s;
	bool opt = true;
	bool check;
	struct birthday {
		int day, month, year;
	};
	birthday u;
	do {
		do {
			check = true;
			do {
				std::cout << "\n\tPlease enter the day of your birth: ";
				std::cin >> u.day;
				if (u.day < 1 || u.day >31) std::cout << "\n\tInvalid input. Please enter again.\n";
			} while (u.day < 1 || u.day >31);

			do {
				std::cout << "\n\tPlease enter the month of your birth: ";
				std::cin >> u.month;
				if (u.month < 1 || u.month >12) std::cout << "\n\tInvalid input. Please enter again.\n";
			} while (u.month < 1 || u.month >12);

			do {
				std::cout << "\n\tPlease enter the year of your birth: ";
				std::cin >> u.year;
				if (u.year < 1924 || u.year >2024) std::cout << "\n\tInvalid input. Please enter again.\n";
			} while (u.year < 1924 || u.year >2024);

			if (u.month == 4 || u.month == 6 || u.month == 9 || u.month == 11) {
				if (u.day > 30) std::cout << "\n\tYou have entered invalid day of birth. Please enter again.\n";
			}
			if (u.month == 2) {
				if (u.year % 4 == 0) {
					if (u.day > 29) std::cout << "\n\tYou have entered invalid day of birth. Please enter again.\n";
					check = false;
				}
				else {
					if (u.day > 28) std::cout << "\n\tYou have entered invalid day of birth. Please enter again.\n";
					check = false;
				}
			} 
			if (check == true) {
				for (const auto& zodiac : zodiac_sign) {
					if ((u.month == zodiac.starting_month && u.day >= zodiac.starting_date) ||
						(u.month == zodiac.ending_month && u.day <= zodiac.ending_date)) {
						std::cout << "\n\tYour zodiac sign is " << zodiac.name << ".\n";
						break;
					}
				}
			}
		}while (check == false);

		
		do {
			std::cout << "\n\tDo you want to continue calculating (Yes/No): ";	
			std::cin.ignore();
			getline(std::cin, s);
			convert_upper(s);
			if (s == "YES") opt = true;
			else if (s == "NO") opt = false;
			else {
				std::cout << "\n\tInvalid option. Please enter again.\n";
				opt = true;
			}
		} while (s != "YES" && s != "NO");
	} while (opt == true);
}


void build_menu(int& opt) {
	do {
		do {
			system("cls");
			std::cout << "\t\tCHU VAN NHAT MINH - MSSV:20232506\n\n";
			std::cout << "\tThe homework consists of 10 problems. Enter 11 to EXIT program.\n";
			std::cout << "\tPlease enter an integer to choose the problems (1-11): ";
			std::cin >> opt;
			if (opt < 1 || opt >11) {
				std::cout << "\n\tInvalid input. PLease enter again.\n\n\t";
				system("pause");
			}
		} while (opt < 1 || opt >11);

		std::string list[11] = {
			"Calculate the sum of digits of a three-digit number",
			"Merge three number into one" ,
			"Print the reverse of a 3-digit number",
			"Calculate the gravitational force between the bodies.",
			"Storage capacity of the hard drive.",
			"Solve the quadratic equation ax^2 + bx + c = 0 with a,b,c are real numbers provided by users.",
			"Calculate the parking fee by inputing number of hours.",
			"Calculate the velocity and temperature in 1 degree increment.",
			"Calculate the slope between 2 points (x1,y1) and (x2,y2).",
			"Write an astrology program.",
			"PROGRAM ENDED. THANK YOU!\n",
		};
		int* arr;
		switch (opt) {
		case 1: {
			std::cout << "\n\t" << list[0] << "\n";
			arr = new int;
			problem1(*arr);
			std::cout << "\n\n\t";
			delete arr;
		} break;
		case 2: {
			std::cout << "\n\t" << list[1] << "\n";
			arr = new int[3];
			problem2(*(arr), *(arr + 1), *(arr + 2));
			std::cout << "\n\n\t";
			delete[] arr;
		} break;
		case 3: {
			std::cout << "\n\t" << list[2] << "\n";
			arr = new int;
			problem3(*arr);
			std::cout << "\n\n\t";
			delete arr;
		} break;
		case 4: {
			std::cout << "\n\t" << list[3] << "\n";
			long double* a = new long double[3];
			problem4(a[0], a[1], a[2]);
			std::cout << "\n\n\t";
			delete[] a;
		}break;
		case 5: {
			std::cout << "\n\t" << list[4] << "\n";
			arr = new int;
			problem5(*arr);
			std::cout << "\n\n\t";
			delete arr;
		} break;
		case 6: {
			std::cout << "\n\t" << list[5] << "\n";
			float* b = new float[3];
			problem6(b[0], b[1], b[2]);
			std::cout << "\n\n\t";
			delete[] b;
		} break;
		case 7: {
			std::cout << "\n\t" << list[6] << "\n";
			float hours;
			problem7(hours);
			std::cout << "\n\n\t";
		}break;
		case 8: {
			std::cout << "\n\t" << list[7] << "\n";
			arr = new int[2];
			problem8(arr[0], arr[1]);
			std::cout << "\n\n\t";
			delete arr;
		} break;
		case 9: {
			std::cout << "\n\t" << list[8] << "\n";
			problem9();
			std::cout << "\n\n\t";
		} break;
		case 10: {
			std::cout << "\n\t" << list[9] << "\n";
			problem10();
			std::cout << "\n\n\t";
		}break;
		case 11: {
			std::cout << "\n\t" << list[10] << "\n";
			std::cout << "\n\t";
		}break;
		}
		system("pause");
	} while (opt != 11);
}
Editor is loading...
Leave a Comment