Skip to content

Commit 4bb07e8

Browse files
committed
StackMIREA-0013 // Contenct(feat): procedural-programming upload
1 parent 2400997 commit 4bb07e8

42 files changed

Lines changed: 4715 additions & 13 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 332 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,332 @@
1+
---
2+
title: ДЗ 1 — Ввод, арифметика и уравнения
3+
sidebar_position: 2
4+
description: Пять стартовых задач по консольному вводу, базовой арифметике и простым уравнениям.
5+
slug: /procedural-programming/homework-01-basics
6+
---
7+
8+
## Что внутри
9+
10+
В первом домашнем задании собраны самые базовые упражнения: ввод строки, арифметические действия, решение линейного и квадратного уравнений, а также логическая задача про освещённость комнаты.
11+
12+
## 1.1 «Имя»
13+
14+
**Условие.** Нужно запросить имя пользователя, считать одно слово и вывести приветствие.
15+
16+
**Как устроено решение.** Исходник читает строку в переменную `Name`, а затем выводит её обратно в консоль. Это минимальный пример на работу с `cin` и `cout`.
17+
18+
**Что учесть.** В сохранённой версии строка приветствия записана в кодировке старого исходника, но сама логика решения остаётся простой и корректной.
19+
20+
```cpp title="resources/procedural-programming/дз 1 защищено/имя.cpp"
21+
#include <iostream>
22+
using namespace std;
23+
string Name;
24+
int main(){
25+
cout << "what is your name:";
26+
if (cin >> Name)
27+
{
28+
cout << "Привет, " << Name;
29+
}
30+
else
31+
{
32+
cout << "Eror";
33+
}
34+
return 0;
35+
}
36+
```
37+
38+
## 1.2 «Арифметика»
39+
40+
**Условие.** По двум введённым числам требуется получить сумму, разность, произведение и, если возможно, частное.
41+
42+
**Как устроено решение.** Сохранённый файл реализует калькулятор на одну выбранную операцию: пользователь вводит два числа и знак `+`, `-`, `*` или `/`, после чего программа считает результат.
43+
44+
**Что учесть.** Это решение не печатает все четыре операции подряд, как просит формулировка из PDF, зато хорошо показывает проверку ввода и отдельную обработку деления на ноль.
45+
46+
```cpp title="resources/procedural-programming/дз 1 защищено/Арифметика.cpp"
47+
#include <iostream>
48+
using namespace std;
49+
string Name;
50+
int a, b, d;
51+
int main() {
52+
cout << "Enter first number: " << "\n";
53+
if (cin >> a)
54+
{
55+
cout << "Enter second number: " << "\n";
56+
if (cin >> b)
57+
{
58+
cout << "What to do: +, -, *, /: " << "\n";
59+
if (cin >> Name)
60+
{
61+
if (Name == "+")
62+
{
63+
d = a + b;
64+
cout << "Answer: " << d;
65+
}
66+
else if (Name == "-")
67+
{
68+
d = a - b;
69+
cout << "Answer: " << d;
70+
}
71+
else if (Name == "*")
72+
{
73+
d = a * b;
74+
cout << "Answer: " << d;
75+
}
76+
else if (Name == "/")
77+
{
78+
if (b == 0)
79+
{
80+
cout << "Error";
81+
}
82+
else
83+
{
84+
d = a / b;
85+
cout << "Answer: " << d;
86+
}
87+
}
88+
else
89+
{
90+
cout << "Only: +, -, *, /";
91+
}
92+
}
93+
else
94+
{
95+
cout << "Error";
96+
}
97+
}
98+
else
99+
{
100+
cout << "Error";
101+
}
102+
}
103+
else
104+
{
105+
cout << "Error";
106+
}
107+
}
108+
```
109+
110+
## 1.3 «Уравнение»
111+
112+
**Условие.** Для любых `b` и `c` нужно решить линейное уравнение `bx + c = 0`.
113+
114+
**Как устроено решение.** Программа читает коэффициенты, проверяет случай `b != 0`, вычисляет корень `x = -c / b`, а затем отдельно рассматривает вырожденные случаи `b = 0`.
115+
116+
**Что учесть.** В текущем коде ответ сохраняется в `int`, поэтому дробная часть может потеряться. Для защиты полезно проговорить, что математически здесь лучше использовать `double`.
117+
118+
```cpp title="resources/procedural-programming/дз 1 защищено/уравнение main.cpp"
119+
#include <iostream>
120+
#include <cmath>
121+
using namespace std;
122+
int main()
123+
{
124+
setlocale(0, "");
125+
double b, c;
126+
cout << "Введите первое число:";
127+
if (cin >> b)
128+
{
129+
cout << "Введите второе число:";
130+
if (cin >> c)
131+
{
132+
if (b != 0)
133+
{
134+
int m = (-c) / b;
135+
int r;
136+
if (m == -0)
137+
{
138+
r = 0;
139+
}
140+
else r = m;
141+
cout << "Решение уравнения вида bx + c = 0 равно: " << r << endl;
142+
}
143+
else if (b == 0)
144+
{
145+
if (c == 0)
146+
{
147+
cout << "x любое число";
148+
}
149+
else cout << "нет решений";
150+
}
151+
}
152+
else {
153+
cout << "Ошибка! Вы ввели не число. Пожалуйста, перезапустите приложение и введите тип данных для вычисления!" << endl;
154+
}
155+
}
156+
else {
157+
cout << "Ошибка! Вы ввели не число. Пожалуйста, перезапустите приложение и введите тип данных для вычисления!" << endl;
158+
}
159+
return 0;
160+
}
161+
```
162+
163+
## 1.4 «Ещё уравнение»
164+
165+
**Условие.** Нужно решить квадратное уравнение `ax^2 + bx + c = 0`.
166+
167+
**Как устроено решение.** Код проверяет несколько веток: полное квадратное уравнение, частные случаи `b = 0` или `c = 0`, а также вырожденный вариант, когда уравнение превращается в линейное или вообще теряет неизвестную.
168+
169+
**Что учесть.** Это самая объёмная задача в первом ДЗ. Хорошо видно, как через `if` и `else if` раскладывается задача на отдельные случаи, а корни находятся через дискриминант.
170+
171+
```cpp title="resources/procedural-programming/дз 1 защищено/еще уравнение main.cpp"
172+
#include <iostream>
173+
#include <cmath>
174+
using namespace std;
175+
int main()
176+
{
177+
setlocale(0, "");
178+
double a, b, c;
179+
cout << "Введите первое число:";
180+
if (cin >> a) {
181+
cout << "Введите второе число:";
182+
if (cin >> b) {
183+
cout << "Введите третье число:";
184+
if (cin >> c) {
185+
if (b == 0 && a != 0 && c <= 0) {
186+
double x1 = -1 * (sqrt(-c)) / (sqrt(a));
187+
double x2 = (sqrt(-c)) / (sqrt(a));
188+
cout << "Первый корень уравнения равен:" << x1 << endl;
189+
cout << "Второй корень уравнения равен:" << x2 << endl;
190+
return 0;
191+
}
192+
else if (a != 0 && c != 0) {
193+
double d = ((b * b) - 4 * a * c);
194+
cout << "Значение дискриминанта равно:" << d << endl;
195+
if (d < 0) {
196+
cout << "Корней нет";
197+
}
198+
else if (d == 0) {
199+
if ((2 * a) == 0) {
200+
cout << "Ошибка, деление на ноль! Перезапустите приложение!" << endl;
201+
return 0;
202+
}
203+
double x = -b / (2 * a);
204+
cout << "Корень уравнения равен:" << x << endl;
205+
}
206+
else if (d > 0) {
207+
if ((2 * a) == 0) {
208+
cout << "Ошибка, деление на ноль! Перезапустите приложение!" << endl;
209+
return 0;
210+
}
211+
double x1 = (((-b) + (sqrt(d))) / (2 * a));
212+
double x2 = (((-b) - (sqrt(d))) / (2 * a));
213+
cout << "Первый корень уравнения равен:" << x1 << endl;
214+
cout << "Второй корень уравнения равен:" << x2 << endl;
215+
return 0;
216+
}
217+
}
218+
else if (a == 0 && b == 0)
219+
{
220+
if (c == 0)
221+
{
222+
cout << "x любое число" << endl;
223+
}
224+
else if (c != 0) {
225+
cout << "нет решений" << endl;
226+
}
227+
return 0;
228+
}
229+
else if (c == 0) {
230+
if (a == 0) {
231+
cout << "Ошибка, деление на ноль! Перезапустите приложение!" << endl;
232+
return 0;
233+
}
234+
double x = -1 * (b / a);
235+
cout << "Корень уравнения равен:" << x << endl;
236+
return 0;
237+
}
238+
else {
239+
if (b == 0) {
240+
cout << "Ошибка, деление на ноль! Перезапустите приложение!" << endl;
241+
return 0;
242+
}
243+
double x = ((-c) / b);
244+
cout << "Корень уравнения равен:" << x << endl;
245+
return 0;
246+
}
247+
}
248+
else {
249+
cout << "Ошибка! Вы ввели не число. Пожалуйста, перезапустите приложение и введите тип данных для вычисления!" << endl;
250+
}
251+
}
252+
else {
253+
cout << "Ошибка! Вы ввели не число. Пожалуйста, перезапустите приложение и введите тип данных для вычисления!" << endl;
254+
}
255+
}
256+
else {
257+
cout << "Ошибка! Вы ввели не число. Пожалуйста, перезапустите приложение и введите тип данных для вычисления!" << endl;
258+
}
259+
return 0;
260+
}
261+
```
262+
263+
## 1.5 «Лампа со шторой»
264+
265+
**Условие.** В комнате светло, если включена лампа или если на улице день и открыты шторы.
266+
267+
**Как устроено решение.** Программа последовательно спрашивает про день, окно и лампу, валидирует ввод и затем проверяет комбинации состояний через вложенные условия.
268+
269+
**Что учесть.** В сохранённой версии при открытых шторах выводится `Light` и днём, и ночью. Для защиты лучше отдельно проговорить, что по условию стоило бы дополнительно учитывать именно время суток.
270+
271+
```cpp title="resources/procedural-programming/дз 1 защищено/Лампа со шторой.cpp"
272+
#include <iostream>
273+
using namespace std;
274+
int Num, a, b, c;
275+
276+
int main()
277+
{
278+
cout << "1 - Yes, 2 - no" << "\n";
279+
cout << "Is it day? (1 or 2): ";
280+
cin >> a;
281+
if ((a == 1) || (a == 2))
282+
{
283+
}
284+
else
285+
{
286+
cout << "Error";
287+
return 0;
288+
}
289+
cout << "Window opened? (1 or 2): ";
290+
cin >> b;
291+
if (b == 1 || b == 2)
292+
{
293+
}
294+
else
295+
{
296+
cout << "Error";
297+
return 0;
298+
}
299+
cout << "Lamp working? (1 or 2): ";
300+
cin >> c;
301+
if (c == 1 || c == 2)
302+
{
303+
}
304+
else
305+
{
306+
cout << "Error";
307+
return 0;
308+
}
309+
if (c == 1)
310+
{
311+
cout << "Light";
312+
}
313+
else
314+
{
315+
if (b == 1)
316+
{
317+
if (a == 1)
318+
{
319+
cout << "Light";
320+
}
321+
else
322+
{
323+
cout << "Light";
324+
}
325+
}
326+
else
327+
{
328+
cout << "Dark";
329+
}
330+
}
331+
}
332+
```

0 commit comments

Comments
 (0)