Skip to content

Instantly share code, notes, and snippets.

@Ruthenus
Last active March 28, 2025 12:57
Show Gist options
  • Save Ruthenus/a8dac4d522d8a80f79d6bf9e131f9c51 to your computer and use it in GitHub Desktop.
Save Ruthenus/a8dac4d522d8a80f79d6bf9e131f9c51 to your computer and use it in GitHub Desktop.
Week 14 Homework in IT STEP Academy (loops tasks)
#include <iostream> // для роботи з потоками вводу/виводу
#include <windows.h> // щоб використати функцію SetConsoleOutputCP
#include <cstdlib> // для роботи з генерацією випадкових чисел
#include <ctime> // те саме
#include <string> // щоб застосувати рядковий тип
#include <cmath> // математична бібліотека
#include <iomanip> // для налаштування вирівнювання
using namespace std;
// Завдання на один простий цикл while/do while/for (6 задач)
// ПОЧАТОК КОДУ ЗАДАЧІ
// 3. Загадати випадковим чином 100 цілих чисел у діапазоні від -100
// до 100. Обчислити відсоток позитивних чисел, відсоток негативних
// чисел і відсоток нулів, а також парних чисел і відсоток непарних.
int main()
{
SetConsoleOutputCP(1251);
cout << "\tЗАВДАННЯ I.3\n\n";
// Оскільки маємо отримати 100 чисел, розв'язання задачі
// спростимо, визначаючи відразу відсотки.
// Ініціалізація генератора випадкових чисел
srand(time(0));
// Ініціалізація відсоткового відношення:
short pctPositives = 0; // позитивних цілих чисел
short pctNegatives = 0; // негативних цілих чисел
short pctNuls = 0; // відсоток нулів
short pctEvenNumbers = 0; // парних чисел, нуль – парне число!
short pctOddNumbers = 0; // відсоток непарних чисел
// Обчислення триватимуть, доки не буде перебрано всі цілі числа
// в заданому діапазоні, як парні, так і непарні:
while (pctEvenNumbers + pctOddNumbers < 100) {
// Генеруємо ціле число в діапазоні від -100 до 100:
short intNumber = -100 + rand() % 201;
// Можна швидко підрахувати відсотки:
if (intNumber > 0) { pctPositives++; }
if (intNumber < 0) { pctNegatives++; }
if (intNumber == 0) { pctNuls++; }
if (intNumber % 2 == 0) { pctEvenNumbers++; }
if (intNumber % 2 != 0) { pctOddNumbers++; }
}
cout << "Частка позитивних чисел: " << pctPositives << "%\n";
cout << "Частка негативних чисел: " << pctNegatives << "%\n";
cout << "Частка нулів: " << pctNuls << "%\n";
cout << "Усього " << pctPositives + pctNegatives + pctNuls;
cout << "%, з них:\n";
cout << "\tпарних чисел: " << pctEvenNumbers << "%\n";
cout << "\tнепарних чисел: " << pctOddNumbers << "%\n";
cout << "\n" << string(80, '-') << "\n";
return 0;
}
// КІНЕЦЬ КОДУ ЗАДАЧІ
// ПОЧАТОК КОДУ ЗАДАЧІ
// 4. Написати програму, яка обчислює факторіал введеного числа.
int main()
{
SetConsoleOutputCP(1251);
cout << "\tЗАВДАННЯ I.4\n\n";
long long number; // число, що вводиться
long long factorial; // його факторіал
// З Python більше можливостей, як побачимо далі!
cout << "Щоб обчислити факторіал, ";
cout << "будь ласка, введіть невід'ємне ціле число: \n";
cin >> number;
if (number > 0) {
factorial = number;
for (unsigned long long natural = number; natural > 1; --natural) {
factorial *= natural - 1;
}
cout << "\t\t" << number << "! = " << factorial << "\n";
}
else if (number == 0) {
factorial = 1;
cout << "\t\t0! = 1\n\t\t1! = 1 * 0! = 1\n";
}
else {
cout << "\t\tКОМПЛЕКСНА НЕСКІНЧЕННІСТЬ\n";
//якщо застосувати тип unsigned long long, нічого б не вивело!
}
// Порівняння з обчисленнями на калькуляторі Windows 11 невтішне:
// 15! = 1307674368000 вірно
// 16! = 20922789888000 вірно
// 17! = 355687428096000 вірно
// 18! = 6402373705728000 вірно
// 19! = 121645100408832000 вірно
// 20! = 2432902008176640000 вірно
// 21! = -4249290049419214848 ??? переповнення...
// long long От −9 223 372 036 854 775 808 до 9 223 372 036 854 775 807
// https://learn.microsoft.com/ru-ru/cpp/cpp/data-type-ranges?view=msvc-170
cout << "\n" << string(80, '-') << "\n";
return 0;
}
// КІНЕЦЬ КОДУ ЗАДАЧІ
// ПОЧАТОК КОДУ ЗАДАЧ
// 6. З клавіатури вводиться ціле число. Вивести на екран всі числа,
// на які введене число ділиться без залишку.
// 7. З клавіатури вводиться ціле число. Визначити, чи є воно простим.
// Просте число ділиться без залишку лише на 1 і на саме себе.
int main()
{
SetConsoleOutputCP(1251);
cout << "\tЗАВДАННЯ I.6, I.7\n\n";
unsigned long number;
cout << "Будь ласка, введіть невід'ємне ціле число: ";
cin >> number;
if (number != 0 && number != 1)
{
// Ініціалізація переліку дільників:
string divisors = "\n1, ";
// Кількість дільників числа, крім одиниці та самого себе:
unsigned long k = 0;
// Цикл для перевірки всіх натуральних чисел менших за введене число:
for (unsigned long natural = 2; natural < number; ++natural)
{
if (number % natural == 0) { // якщо число – не просте,
++k; // то розширюємо перелік дільників
// https://en.cppreference.com/w/cpp/string/basic_string/to_string
divisors += to_string(natural) + ", ";
}
}
// Додаємо саме число до списку дільників
divisors += to_string(number) + " – дільники числа.";
cout << divisors << "\n";
// Визначення простоти числа (завдання І.7):
if (k == 0) cout << "Число " << number << " – просте.\n";
}
else if (number == 1) { // Число 1 – особливе!
cout << "\nThe 1 is deficient, highly abundant, "
<< "highly composite number.\n";
}
else { cout << "\nНуль ділиться на будь-яке число!\n"; }
cout << "\n" << string(80, '-') << "\n";
return 0;
}
// КІНЕЦЬ КОДУ ЗАДАЧ
// ПОЧАТОК КОДУ ЗАДАЧІ
// 8. Перевірити, чи є в введеному числі однакові цифри підряд.
int main()
{
SetConsoleOutputCP(1251);
cout << "\tЗАВДАННЯ I.8\n\n";
string number;
cout << "Введіть число: ";
// Тут насправді можна ввести послідовність символів.
cin >> number;
bool identicalSymbols = false;
// Перевіряємо кожну пару сусідніх цифр(символів)
for (int i = 1; i < number.length(); ++i) {
// https://ru.stackoverflow.com/questions/439119/Длина-строки-length
if (number[i] == number[i - 1]) {
identicalSymbols = true;
break;
}
}
if (identicalSymbols) {
cout << "У введеному числі є однакові цифри підряд.\n";
}
else {
cout << "У введеному числі немає однакових цифр підряд.\n";
}
cout << "\n" << string(80, '-') << "\n";
return 0;
}
// КІНЕЦЬ КОДУ ЗАДАЧІ
// ПОЧАТОК КОДУ ЗАДАЧІ
// 9. Визначити, чи є введене число паліндромом. Паліндром — це число,
// яке однаково читається як зліва направо, так і справа наліво,
// наприклад, 1234321. У цьому завданні (як і в інших завданнях)
// не можна використовувати рядки та списки.
int main()
{
SetConsoleOutputCP(1251);
cout << "\tЗАВДАННЯ I.9\n\n";
int number;
cout << "Введіть число, схоже на паліндром: ";
cin >> number;
// Завчасно зберігаємо початкове значення,
int originalNumber = number; // інакше число 0 не є паліндромом....
int palindrome = 0;
while (number > 0) {
int digit = number % 10;
palindrome = digit + 10 * palindrome;
number = number / 10; // тип int, тому ділення цілочисленне
}
if (originalNumber == palindrome) { // if (number == palindrome)
cout << "Число " << originalNumber << " – паліндром!\n";
}
else {
cout << "Число " << originalNumber << " не є паліндромом.\n";
}
cout << "\n" << string(80, '-') << "\n";
return 0;
}
// КІНЕЦЬ КОДУ ЗАДАЧІ
// Завдання на вкладені цикли (3 задачі)
// ПОЧАТОК КОДУ ЗАДАЧІ
// 1. Написати програму, що показує таблицю множення (таблиця Піфагора).
int main()
{
SetConsoleOutputCP(1251);
cout << "\tЗАВДАННЯ II.1\n\n";
// Виведення заголовка таблиці (число, на яке множать)
cout << " |";
for (int i = 1; i <= 10; ++i) {
cout << setw(4) << i; // Вирівнювання стовпців
// https://www.youtube.com/watch?v=k7QATXoF1Rw
}
// Виведення лінії, що розділяє заголовок і саму таблицю
cout << "\n" << string(48, '-') << "\n";
// Цикл для формування таблиці множення
for (int i = 2; i <= 9; ++i) {
// Виведення першої колонки таблиці (число, яке множиться)
cout << setw(3) << i << " |";
// Цикл для множення на числа від 1 до 10
for (int j = 1; j <= 10; ++j) {
cout << setw(4) << i * j;
}
// Перехід на новий рядок після виведення всіх множників
cout << "\n";
}
cout << "\n" << string(80, '-') << "\n";
return 0;
}
// КІНЕЦЬ КОДУ ЗАДАЧІ
// ПОЧАТОК КОДУ ЗАДАЧІ
// 3. Показати на екрані всі восьмизначні числа, цифри яких
// не повторюються і які діляться на 12345 без залишку.
int main()
{
SetConsoleOutputCP(1251);
cout << "\tЗАВДАННЯ II.3\n\n";
// Ініціалізація цифр восьмизначного числа зліва направо:
char cyf1, cyf2, cyf3, cyf4, cyf5, cyf6, cyf7, cyf8;
// Вкладені цикли для перебору цифр
for (cyf1 = 1; cyf1 <= 9; ++cyf1) { // не може починатися з нуля!
for (cyf2 = 0; cyf2 <= 9; ++cyf2) {
// Перевіряємо, чи цифра вже використовується
if (cyf2 == cyf1) { continue; }
for (cyf3 = 0; cyf3 <= 9; ++cyf3) {
if (cyf3 == cyf1 || cyf3 == cyf2) { continue; }
for (cyf4 = 0; cyf4 <= 9; ++cyf4) {
if (cyf4 == cyf1 || cyf4 == cyf2 || cyf4 == cyf3) {
continue;
}
for (cyf5 = 0; cyf5 <= 9; ++cyf5) {
if (cyf5 == cyf1 || cyf5 == cyf2 || cyf5 == cyf3 ||
cyf5 == cyf4) {
continue;
}
for (cyf6 = 0; cyf6 <= 9; ++cyf6) {
if (cyf6 == cyf1 || cyf6 == cyf2 || cyf6 == cyf3 ||
cyf6 == cyf4 || cyf6 == cyf5) {
continue;
}
for (cyf7 = 0; cyf7 <= 9; ++cyf7) {
if (cyf7 == cyf1 || cyf7 == cyf2 ||
cyf7 == cyf3 || cyf7 == cyf4 ||
cyf7 == cyf5 || cyf7 == cyf6) {
continue;
}
for (cyf8 = 0; cyf8 <= 9; ++cyf8)
{
if (cyf8 == cyf1 || cyf8 == cyf2 ||
cyf8 == cyf3 || cyf8 == cyf4 ||
cyf8 == cyf5 || cyf8 == cyf6 ||
cyf8 == cyf7) {
continue;
}
// Формуємо восьмизначне число
int div_12345 = cyf1 * pow(10, 7) +
cyf2 * pow(10, 6) + cyf3 * pow(10, 5) +
cyf4 * pow(10, 4) + cyf5 * pow(10, 3) +
cyf6 * pow(10, 2) + cyf7 * 10 + cyf8;
// Перевіряємо, чи ділиться число
// на 12345 без залишку
if (div_12345 % 12345 == 0) {
cout << div_12345 << "\n";
}
}
}
}
}
}
}
}
}
cout << "\nЦе всі восьмизначні числа, цифри яких не повторюються ";
cout << "та які діляться на 12345 без залишку!\n";
cout << "\n" << string(80, '-') << "\n";
return 0;
}
// КІНЕЦЬ КОДУ ЗАДАЧІ
// ПОЧАТОК КОДУ ЗАДАЧІ
// 6. Користувач вводить дату (по окремості день, місяць, рік).
// Визначити день тижня, що відповідає введеній даті.
int main()
{
SetConsoleOutputCP(1251); // Установка кодування для виведення
SetConsoleCP(1251); // Установка кодування для введення
cout << "\tЗАВДАННЯ II.6\n\n";
int day;
string month; // доцільно врахувати варіації в назві місяця
int year;
cout << "Введіть дату за григоріянським календарем:\n";
cout << "\tчисло: ";
cin >> day;
cout << "\tмісяць: ";
cin >> month;
cout << "\tрік: ";
cin >> year;
// Спочатку розберемося з прийнятними назвами місяців.
// Ініціалізація змінної місяця як недійсне значення:
int monthNum = -1;
if (month == "01" || month == "1" || month == "I" || month == "січня" ||
month == "січень" || month == "СІЧ" || month == "January") {
monthNum = 1;
}
else if (month == "02" || month == "2" || month == "II" ||
month == "лютого" || month == "лютий" || month == "ЛЮТ" ||
month == "February") {
monthNum = 2;
}
else if (month == "03" || month == "3" || month == "III" ||
month == "березня" || month == "березень" || month == "БЕР" ||
month == "March") {
monthNum = 3;
}
else if (month == "04" || month == "4" || month == "IV" ||
month == "квітня" || month == "квітень" || month == "КВІ" ||
month == "April") {
monthNum = 4;
}
else if (month == "05" || month == "5" || month == "V" ||
month == "травня" || month == "травень" || month == "ТРА" ||
month == "May") {
monthNum = 5;
}
else if (month == "06" || month == "6" || month == "VI" ||
month == "червня" || month == "червень" || month == "ЧЕР" ||
month == "June") {
monthNum = 6;
}
else if (month == "07" || month == "7" || month == "VII" ||
month == "липня" || month == "липень" || month == "ЛИП" ||
month == "July") {
monthNum = 7;
}
else if (month == "08" || month == "8" || month == "VIII" ||
month == "серпня" || month == "серпень" || month == "СЕР" ||
month == "August") {
monthNum = 8;
}
else if (month == "09" || month == "9" || month == "IX" ||
month == "вересня" || month == "вересень" || month == "ВЕР" ||
month == "September") {
monthNum = 9;
}
else if (month == "10" || month == "X" || month == "жовтня" ||
month == "жовтень" || month == "ЖОВ" || month == "October") {
monthNum = 10;
}
else if (month == "11" || month == "XI" || month == "листопада" ||
month == "листопад" || month == "ЛИС" || month == "November") {
monthNum = 11;
}
else if (month == "12" || month == "XII" || month == "грудня" ||
month == "грудень" || month == "ГРУ" || month == "December") {
monthNum = 12;
}
else {
cout << "\nВиправте, будь ласка, назву або порядковий номер місяця!\n";
return 0;
}
// Перевірка правильності введення дня:
if (day < 1 || day > 31) {
cout << "\nЗгадайте, скільки днів буває в місяці!\n";
return 0;
}
if ((day == 31) && (monthNum == 4 || monthNum == 6 || monthNum == 9 ||
monthNum == 11)) {
cout << "\nУ цьому місяці 30 днів. Виправте число або місяць!\n";
return 0;
}
if ((day == 30 || day == 31) && monthNum == 2) {
cout << "\nУ лютому 28 днів або, коли рік високосний, 29 днів.\n";
return 0;
}
if (day == 29 && monthNum == 2) {
// Перевірка, чи рік високосний
if (!((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)) {
cout << "\nПомилка! У звичайному році 29 лютого не існує!\n";
return 0;
}
}
// Перевірка року, зважаючи на обмеження програми:
if (year < 1583) {
cout << "\n\tSYSTEM ERROR HAS OCCURRED\n\n";
cout << "Молитвами Папи Григорія XIII виберіть пізнішу дату!\n";
return 0;
}
// Якщо дату введено правильно, то працюємо далі.
// Григоріянський календар установили в п'ятницю, 15 жовтня 1582 р.Б.
// Можна легко порахувати, скільки днів минуло з суботи,
// 1 січня 1583 р.Б.
// Відлік днів
int days = 0; // ініціалізація відліку
days += day - 1; // поправка на перше число
// за місяці, які передували заданому місяцю в заданому році:
for (int mm = 1; mm < monthNum; ++mm) {
if (mm == 4 || mm == 6 || mm == 9 || mm == 11) {
days += 30;
}
else if (mm == 2) {
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
days += 29;
}
else {
days += 28;
}
}
else {
days += 31;
}
}
// за роки, які передували заданому рокові:
for (int yyyy = 1583; yyyy < year; ++yyyy) {
if ((yyyy % 4 == 0 && yyyy % 100 != 0) || yyyy % 400 == 0) {
days += 366; // рік переступний!
}
else {
days += 365;
}
}
// Обчислення дня тижня, зважаючи на те, що 1 січня 1583 р.Б.
// була субота.
int weekDay = (days + 6) % 7;
string weekDayName;
switch (weekDay) {
case 0:
weekDayName = "свята неділя";
break;
case 1:
weekDayName = "понеділок";
break;
case 2:
weekDayName = "вівторок";
break;
case 3:
weekDayName = "середа";
break;
case 4:
weekDayName = "четвер";
break;
case 5:
weekDayName = "п'ятниця";
break;
case 6:
weekDayName = "субота";
break;
}
cout << "\nЦього дня " << weekDayName << ".\n";
cout << "\n" << string(80, '-') << "\n";
return 0;
}
// КІНЕЦЬ КОДУ ЗАДАЧІ
// Завдання на псевдографіку (2 задачi)
// ПОЧАТОК КОДУ ЗАДАЧІ
// 1. Показати на екрані рівнобедрений трикутник висотою N.
int main()
{
SetConsoleOutputCP(1251);
cout << "\tЗАВДАННЯ III.1\n\n";
int n;
cout << "Якої висоти в 'зірочках' повинен бути трикутник? ";
cin >> n;
cout << "\n";
for (int i = 0; i < n; i++) {
cout << "\t";
cout << string(n - i - 1, ' ') << string(2 * i + 1, '^') << "\n";
}
/* РОЗВ'ЯЗАННЯ МОВОЮ PYTHON ВІД 6 СІЧНЯ 2025
n = int(input("Якої висоти в 'зірочках' повинен бути трикутник? "))
print("\n")
for i in range(n):
print("\t" + " " * (n-i-1) + "^" * (2*i + 1))
*/
cout << "\n" << string(80, '-') << "\n";
return 0;
}
// КІНЕЦЬ КОДУ ЗАДАЧІ
// ПОЧАТОК КОДУ ЗАДАЧІ
// 2. Показати на екрані каркас паралелепіпеда розмірністю AxBxC.
int main()
{
SetConsoleOutputCP(1251);
cout << "\tЗАВДАННЯ III.2\n\n";
int a, b, c;
cout << "Ширина паралелепіпеда: ";
cin >> a;
cout << "Висота паралелепіпеда: ";
cin >> b;
cout << "Глибина паралелепіпеда: ";
cin >> c;
cout << "\n";
// Для кожного y і x перевіряємо, чи потрібно вивести зірочку
for (int y = 0; y < b + c; ++y) {
for (int x = 0; x < a + c; ++x) {
// У паралелепіпеда 12 ребер. Отже, верхні ребра:
if (0 <= x && x <= c - 1 && y == c - x - 1) {
cout << "*";
}
else if (c - 1 <= x && x <= c + a - 2 && y == 0) {
cout << "*";
}
// Не забути про перетворення графіків функцій та зайві зірочки.
else if (a - 1 <= x && x <= c + a - 2 && y == c - (x - a) - 2) {
cout << "*";
}
else if (0 <= x && x <= a - 1 && y == c - 1) {
cout << "*";
}
// Бічні ребра
else if (x == c - 1 && 0 <= y && y <= b - 1) {
cout << "*";
}
else if (x == c + a - 2 && 0 <= y && y <= b - 1) {
cout << "*";
}
else if (x == 0 && c - 1 <= y && y <= c + b - 2) {
cout << "*";
}
else if (x == a - 1 && c - 1 <= y && y <= c + b - 2) {
cout << "*";
}
// Нижні ребра
else if (0 <= x && x <= c - 1 && y == c - x + b - 2) {
cout << "*";
}
else if (c - 1 <= x && x <= c + a - 2 && y == b - 1) {
cout << "*";
}
// Ребра можуть не сходитися у вершинах. Через зайві зірочки!
else if (a - 1 <= x && x <= c + a - 2 && y == c - (x - a) + b - 3)
{
cout << "*";
}
else if (0 <= x && x <= a - 1 && y == c + b - 2) {
cout << "*";
}
// Всі інші позиції — пробіли
else {
cout << " ";
}
}
cout << "\n";
}
cout << string(80, '-') << "\n";
return 0;
}
/*
Ширина паралелепіпеда: 50
Висота паралелепіпеда: 20
Глибина паралелепіпеда: 10
**************************************************
** **
* * * *
* * * *
* * * *
* * * *
* * * *
* * * *
* * * *
************************************************** *
* * * *
* * * *
* * * *
* * * *
* * * *
* * * *
* * * *
* * * *
* * * *
* **************************************************
* * * *
* * * *
* * * *
* * * *
* * * *
* * * *
* * * *
** **
**************************************************
*/
// КІНЕЦЬ КОДУ ЗАДАЧІ
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment