ДЗ 1 — Ввод, арифметика и уравнения
Пять стартовых задач по консольному вводу, базовой арифметике и простым уравнениям.
Редактировать источникЧто внутри
В первом домашнем задании собраны самые базовые упражнения: ввод строки, арифметические действия, решение линейного и квадратного уравнений, а также логическая задача про освещённость комнаты.
1.1 «Имя»
Условие. Нужно запросить имя пользователя, считать одно слово и вывести приветствие.
Как устроено решение. Исходник читает строку в переменную Name, а затем выводит её обратно в консоль. Это минимальный пример на работу с cin и cout.
Что учесть. В сохранённой версии строка приветствия записана в кодировке старого исходника, но сама логика решения остаётся простой и корректной.
#include <iostream>
using namespace std;
string Name;
int main(){
cout << "what is your name:";
if (cin >> Name)
{
cout << "Привет, " << Name;
}
else
{
cout << "Eror";
}
return 0;
}1.2 «Арифметика»
Условие. По двум введённым числам требуется получить сумму, разность, произведение и, если возможно, частное.
Как устроено решение. Сохранённый файл реализует калькулятор на одну выбранную операцию: пользователь вводит два числа и знак +, -, * или /, после чего программа считает результат.
Что учесть. Это решение не печатает все четыре операции подряд, как просит формулировка из PDF, зато хорошо показывает проверку ввода и отдельную обработку деления на ноль.
#include <iostream>
using namespace std;
string Name;
int a, b, d;
int main() {
cout << "Enter first number: " << "\n";
if (cin >> a)
{
cout << "Enter second number: " << "\n";
if (cin >> b)
{
cout << "What to do: +, -, *, /: " << "\n";
if (cin >> Name)
{
if (Name == "+")
{
d = a + b;
cout << "Answer: " << d;
}
else if (Name == "-")
{
d = a - b;
cout << "Answer: " << d;
}
else if (Name == "*")
{
d = a * b;
cout << "Answer: " << d;
}
else if (Name == "/")
{
if (b == 0)
{
cout << "Error";
}
else
{
d = a / b;
cout << "Answer: " << d;
}
}
else
{
cout << "Only: +, -, *, /";
}
}
else
{
cout << "Error";
}
}
else
{
cout << "Error";
}
}
else
{
cout << "Error";
}
}1.3 «Уравнение»
Условие. Для любых b и c нужно решить линейное уравнение bx + c = 0.
Как устроено решение. Программа читает коэффициенты, проверяет случай b != 0, вычисляет корень x = -c / b, а затем отдельно рассматривает вырожденные случаи b = 0.
Что учесть. В текущем коде ответ сохраняется в int, поэтому дробная часть может потеряться. Для защиты полезно проговорить, что математически здесь лучше использовать double.
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
setlocale(0, "");
double b, c;
cout << "Введите первое число:";
if (cin >> b)
{
cout << "Введите второе число:";
if (cin >> c)
{
if (b != 0)
{
int m = (-c) / b;
int r;
if (m == -0)
{
r = 0;
}
else r = m;
cout << "Решение уравнения вида bx + c = 0 равно: " << r << endl;
}
else if (b == 0)
{
if (c == 0)
{
cout << "x любое число";
}
else cout << "нет решений";
}
}
else {
cout << "Ошибка! Вы ввели не число. Пожалуйста, перезапустите приложение и введите тип данных для вычисления!" << endl;
}
}
else {
cout << "Ошибка! Вы ввели не число. Пожалуйста, перезапустите приложение и введите тип данных для вычисления!" << endl;
}
return 0;
}1.4 «Ещё уравнение»
Условие. Нужно решить квадратное уравнение ax^2 + bx + c = 0.
Как устроено решение. Код проверяет несколько веток: полное квадратное уравнение, частные случаи b = 0 или c = 0, а также вырожденный вариант, когда уравнение превращается в линейное или вообще теряет неизвестную.
Что учесть. Это самая объёмная задача в первом ДЗ. Хорошо видно, как через if и else if раскладывается задача на отдельные случаи, а корни находятся через дискриминант.
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
setlocale(0, "");
double a, b, c;
cout << "Введите первое число:";
if (cin >> a) {
cout << "Введите второе число:";
if (cin >> b) {
cout << "Введите третье число:";
if (cin >> c) {
if (b == 0 && a != 0 && c <= 0) {
double x1 = -1 * (sqrt(-c)) / (sqrt(a));
double x2 = (sqrt(-c)) / (sqrt(a));
cout << "Первый корень уравнения равен:" << x1 << endl;
cout << "Второй корень уравнения равен:" << x2 << endl;
return 0;
}
else if (a != 0 && c != 0) {
double d = ((b * b) - 4 * a * c);
cout << "Значение дискриминанта равно:" << d << endl;
if (d < 0) {
cout << "Корней нет";
}
else if (d == 0) {
if ((2 * a) == 0) {
cout << "Ошибка, деление на ноль! Перезапустите приложение!" << endl;
return 0;
}
double x = -b / (2 * a);
cout << "Корень уравнения равен:" << x << endl;
}
else if (d > 0) {
if ((2 * a) == 0) {
cout << "Ошибка, деление на ноль! Перезапустите приложение!" << endl;
return 0;
}
double x1 = (((-b) + (sqrt(d))) / (2 * a));
double x2 = (((-b) - (sqrt(d))) / (2 * a));
cout << "Первый корень уравнения равен:" << x1 << endl;
cout << "Второй корень уравнения равен:" << x2 << endl;
return 0;
}
}
else if (a == 0 && b == 0)
{
if (c == 0)
{
cout << "x любое число" << endl;
}
else if (c != 0) {
cout << "нет решений" << endl;
}
return 0;
}
else if (c == 0) {
if (a == 0) {
cout << "Ошибка, деление на ноль! Перезапустите приложение!" << endl;
return 0;
}
double x = -1 * (b / a);
cout << "Корень уравнения равен:" << x << endl;
return 0;
}
else {
if (b == 0) {
cout << "Ошибка, деление на ноль! Перезапустите приложение!" << endl;
return 0;
}
double x = ((-c) / b);
cout << "Корень уравнения равен:" << x << endl;
return 0;
}
}
else {
cout << "Ошибка! Вы ввели не число. Пожалуйста, перезапустите приложение и введите тип данных для вычисления!" << endl;
}
}
else {
cout << "Ошибка! Вы ввели не число. Пожалуйста, перезапустите приложение и введите тип данных для вычисления!" << endl;
}
}
else {
cout << "Ошибка! Вы ввели не число. Пожалуйста, перезапустите приложение и введите тип данных для вычисления!" << endl;
}
return 0;
}1.5 «Лампа со шторой»
Условие. В комнате светло, если включена лампа или если на улице день и открыты шторы.
Как устроено решение. Программа последовательно спрашивает про день, окно и лампу, валидирует ввод и затем проверяет комбинации состояний через вложенные условия.
Что учесть. В сохранённой версии при открытых шторах выводится Light и днём, и ночью. Для защиты лучше отдельно проговорить, что по условию стоило бы дополнительно учитывать именно время суток.
#include <iostream>
using namespace std;
int Num, a, b, c;
int main()
{
cout << "1 - Yes, 2 - no" << "\n";
cout << "Is it day? (1 or 2): ";
cin >> a;
if ((a == 1) || (a == 2))
{
}
else
{
cout << "Error";
return 0;
}
cout << "Window opened? (1 or 2): ";
cin >> b;
if (b == 1 || b == 2)
{
}
else
{
cout << "Error";
return 0;
}
cout << "Lamp working? (1 or 2): ";
cin >> c;
if (c == 1 || c == 2)
{
}
else
{
cout << "Error";
return 0;
}
if (c == 1)
{
cout << "Light";
}
else
{
if (b == 1)
{
if (a == 1)
{
cout << "Light";
}
else
{
cout << "Light";
}
}
else
{
cout << "Dark";
}
}
}