for (double x = 0, y = 0; cin >> x >> y;)
{
cout << "(x, y) within the figure == " << in_figure(x, y) << endl;
}
return EXIT_SUCCESS;
}
0300-ternary_operator.cpp
// ternary_operator.cpp
#include
#include
using namespace std;
// Проверить попадание в круг.
bool in_circle(float x, float y,
float cx, float cy, float r)
// координаты центра круга и его радиус
{
// Константы -- после инициализации значения не изменяются.
const float dx = x - cx,
dy = y - cy;
return dx * dx + dy * dy <= r * r;
}
// Проверить попадание в прямоугольник.
bool in_rectangle(float x, float y,
float left, float right, float bottom, float top)
// координаты левой, правой, нижней и верхней граней
{
return left <= x && x <= right // && -- "и"
&& bottom <= y && y <= top;
}
// Проверить попадание в заданную фигуру.
bool in_figure(float x, float y)
{
// фигура может быть представлена как пересечение полуплоскости и
// объединения трёх фигур: двух прямоугольников и сегмента круга
return (in_rectangle(x, y, 2.0, 4.0, -5.0, 5.0)
|| in_rectangle(x, y, -4.0, -2.0, -5.0, 5.0) // || -- "или"
|| in_circle(x, y, -2.0, 0.0, 5.0)) && x >= -4.0;
}
int main()
{
cout << "Enter a sequence of coordinates x, y: ";
// Определение переменных; условие продолжения; последнее действие на каждом повторении.
for (double x = 0, y = 0; cin >> x >> y;)
{
cout << "(" << x << ", " << y << ") " <<
(in_figure(x, y)? "is": "is not") // "тернарный оператор": условие в выражении
<< " inside the figure" << endl;
}
return EXIT_SUCCESS;
}
0310-for.cpp
// for.cpp
#include
#include
using namespace std;
int main()
{
// Определение переменных; условие продолжения; последнее действие на каждом повторении.
for (int i = 1; i <= 10; ++i) // ++i --> i = i + 1
{
cout << "i == " << i << "\ti squared == " << i * i << endl;
}
return EXIT_SUCCESS;
}
0320-for_for.cpp
// for_for.cpp
// Двойной цикл for.
#include
#include
using namespace std;
// Таблица умножения.
int main()
{
// Определение переменных; условие продолжения; последнее действие на каждом повторении.
for (int i = 1; i <= 10; ++i) // ++i --> i = i + 1
{
for (int j = 1; j <= 10; ++j)
{
cout << i << "*" << j << "\t== " << i * j << endl;
}
}
return EXIT_SUCCESS;
}
0330-products_table.cpp
// products_table.cpp
#include
#include
using namespace std;
// Таблица умножения.
int main()
{
// Строчка.
for (int i = 1; i <= 10; ++i)
{
// Столбец.
for (int j = 1; j <= 10; ++j)
{
cout << i * j << " ";
}
cout << endl;
}
return EXIT_SUCCESS;
}
0340-iomanip_setw.cpp
// iomanip_setw.cpp
#include
#include
#include // "Манипуляторы потока".
using namespace std;
// Таблица умножения.
int main()
{
// Строчка.
for (int i = 1; i <= 10; ++i)
{
// Столбец.
for (int j = 1; j <= 10; ++j)
{
// Манипулятор setw вставляет пробелы (до четырёх), если выведено менее 4 символов.
cout << setw(4) << i * j;
}
cout << endl;
}
return EXIT_SUCCESS;
}
0350-cat.cpp
// cat.cpp
#include
#include
using namespace std;
// Читаем из потока ввода символы и пишем их в поток вывода.
int main()
{
for (char ch; cin.get(ch);)
cout.put(ch);
return EXIT_SUCCESS;
}
0351-cat_2.cpp
// cat_2.cpp
// Вариант на основе вывода в поток буфера другого потока.
#include
#include
using namespace std;
// Читаем из потока ввода символы и пишем их в поток вывода.
int main()
{
cout << cin.rdbuf();
return EXIT_SUCCESS;
}
0355-char_subst.cpp
// char_subst.cpp
#include
#include
using namespace std;
// Читаем из потока ввода символы и пишем их в поток вывода,
// подменяя некоторые на другие (e -> i, o -> u, a -> o).
int main()
{
for (char ch; cin.get(ch);)
{
char output = ch;
if (ch == 'e')
output = 'i';
else if (ch == 'o')
output = 'u';
else if (ch == 'a')
output = 'o';
cout.put(output);
}
return EXIT_SUCCESS;
}
0360-count_lines.cpp
// count_lines.cpp
#include
#include
#include
using namespace std;
// Читаем из потока ввода строки, выводим их в поток вывода,
// а в конце выводим их количество в отдельной строке.
int main()
{
int amount = 0;
for (string line; getline(cin, line); ++amount)
cout << line << endl;
cout << amount << endl;
return EXIT_SUCCESS;
}
0370-size_t.cpp
// size_t.cpp
#include
#include
#include
using namespace std;
// Читаем из потока ввода строки, выводим их в поток вывода,
// а в конце выводим их количество в отдельной строке.
int main()
{
size_t amount = 0; // Тип "количество", не может быть отрицательным.
for (string line; getline(cin, line); ++amount)
cout << line << endl;
cout << amount << endl;
return EXIT_SUCCESS;
}
0380-line_unique_0.cpp
// line_unique_0.cpp
#include
#include
#include
using namespace std;
// Читаем из потока ввода строки, выводим их в поток вывода,
// пропуская подряд идущие повторяющиеся строки.
int main()
{
// Нет ли здесь ошибок?
for (string last, next; getline(cin, next);)
{
if (last != next)
{
cout << next << endl;
last = next;
}
}
return EXIT_SUCCESS;
}
0390-line_unique.cpp
// line_unique.cpp
#include
#include
#include
using namespace std;
// Читаем из потока ввода строки, выводим их в поток вывода,
// пропуская подряд идущие повторяющиеся строки.
int main()
{
// Первая строка -- особый случай.
string last;
if (!getline(cin, last))
return EXIT_FAILURE; // Не смогли прочитать и одной строки.
cout << last << endl; // Вывести первую строку.
// Продолжить работу с остатком файла.
for (string next; getline(cin, next);)
{
if (last != next)
{
cout << next << endl;
last = next;
}
}
return EXIT_SUCCESS;
}
0395-spinning_pipe.cpp
// spinning_pipe.cpp
#include
int main()
{
while (true) std::cout
.put('|').flush().put('\b')
.put('/').flush().put('\b')
.put('-').flush().put('\b')
.put('\\').flush().put('\b');
}
0396-spinning_pipe_waiting.cpp
// spinning_pipe_waiting.cpp
#include
#include
#include // sleep
#include // суффикс ms (C++14)
// Выполнить "следующий фрагмент работы".
// Для примера мы просто ждём 200мс.
bool do_next_job()
{
using namespace std::chrono_literals;
std::this_thread::sleep_for(200ms);
// C++11-вариант:
// std::this_thread::sleep_for(std::chrono::milliseconds(200));
return true;
}
int main()
{
static char sprite[] = "|/-\\";
for (unsigned s = 0;; s = (s + 1) % 4)
{
std::cout.put(sprite[s]).flush();
if (!do_next_job())
break;
std::cout.put('\b');
}
return EXIT_SUCCESS;
}
0398-reverse_lines.cpp
// reverse_lines.cpp
#include
#include
#include
using namespace std;
struct Line
{
Line *prev;
string line;
};
int main()
{
Line *last = nullptr;
// Чтение строк.
for (string line; getline(cin, line);)
{
Line *new_line = new Line;
new_line->prev = last;
new_line->line = line;
last = new_line;
}
// Вывод строк в обратном порядке.
while (last)
{
cout << last->line << '\n';
Line *old_line = last;
last = last->prev;
delete old_line;
}
return EXIT_SUCCESS;
}
0399-void_list.cpp
// void_list.cpp
#include
using namespace std;
///////////////////////////////////////////////////////////////////////////////
// Следующие 4 функции ничего не знают о содержимом списка.
/// Возвращает ссылку на указатель на следующее звено звена link.
void*& next(void *link)
{
return *(void**)link;
}
/// Вставляет link перед head и возвращает link (теперь это -- новая голова списка).
void* insert_head(void *head, void *link)
{
next(link) = head;
return link;
}
/// Вычисляет длину списка.
size_t size(void *head)
{
size_t sz = 0;
for (; head; head = next(head))
++sz;
return sz;
}
/// Указатель на функцию, выполняющую удаление звена.
using Link_delete = void(*)(void*);
/// Удаляет список, используя пользовательскую функцию удаления.
void delete_list(void *head, Link_delete link_delete)
{
Do'stlaringiz bilan baham: |