SEC 20W3|| Перший код

in Ukraine on Steem2 months ago (edited)

sec20w3.jpg
SDXL 1.0 та photopea

Виявилось що іконка файлів С++ дуже схожа на смайлик, але із плюсами замість очей.

Домашня робота

Завдання 1 Компілятори

В онлайні звичайно простіше, нічого завантажувати не потрібно, але наявні пропозиції не завжди можуть влаштувати дизайном, бути безпечними чи містити відволікаючу рекламу. Спочатку мій вибір прийшовся саме на https://www.onlinegdb.com/. Ніби нічогенько, є різні налаштування, але вилазить різна реклама навіть із встановленим блокувальником для неї й багато напхано різних трекерів, якщо вірити додатковому модулю "борсучок". Потім почав не відображати український шриф, що стало причиною для пошуку іншого. Тож хто зна, чи це взагалі безпечно.

Компіл правильно.png
Знімок екрану компілятора https://onecompiler.com/cpp

Через декілька трапився інший https://onecompiler.com/cpp, що вже значно краще, але панель виводу не можна перемістити в інший бік. Він також має ще одни інструмен, це створення челенджів (потрібна реєстрація), ніби опитування знань чи виконання завдань. Нормальний ніби.

В обох був спільний глюк або то щось з інтернетом, бо від певної кількості запитів нормально перестали обробляти код й виходило попереднє значення до зміни. Ну то таке, але трохи не зручно й другий фактор, це потреба в доступі до мережі й зайвий трафік на обмін даники.

Тому в мене був ще одни, як виявляється готовий варіант. У встановленому дистрибутиві Linux також був наявний текстовий редактор Kate, але не простий, а із підтримкою багатьох форматів файлів, тобто розмітки й форматувння коду під різні мови програмування. Хороша новина в тому, що він вільно розповсюджується і дозволяє компілювати код C++ й відразу виводити результат. Має версії для Windows та MacOS. Тільки щоб це працювало, ще треба встановити clangd. Знайти в репозиторії пакетів інсталяції чи подивитись пояснення на сайті cleng (пошуковик допоможе), бо ще може запустит його чи він сам буде працювати. А потім ще налаштувати сторонній модуль "Compile and Run cpp" на запуск гарячою клавішою, бо довго кожного разу мандрувати контекстним меню, а швидка комбінація буде зручніше ніж у браузері водить мишкою й клацать. Щоб все працювало, новий файл повинен мати формат "Назва.cpp", тобто його треба або створити таким, прописавши після крапочки приналежність .cpp до C++ мови, бо інакше може не копілювати чи видавати помилку. Також легко змінюється розмір шрифту, лише затисненням клавіші Ctrl+прокручування коліщатко мишки (або клавіші - +). Тільки кнопки "Run" там не буде, по зрозумілим причинам або це десь заховано й треба розбиратись, тож хоткей буде значно краще.

Завдання 2

Варіант 1: Знайдіть свій спосіб дійти від 1 до 100 (0.5 бал)

// Для початку добре розібратись із зразком.
#include <iostream>
using namespace std;

int main() {
int a = 1, count_operation = 0;

a = a + 1;  count_operation++;  // 2
a = a * 2;  count_operation++;  // 4
a = a * 2;  count_operation++;  // 8
a = a * 2;  count_operation++;  // 16
a = a * 2;  count_operation++;  // 32
a = a * 2;  count_operation++;  // 64
a = a + 1;  count_operation++;  // 65
a = a + 1;  count_operation++;  // 66
a = a + 1;  count_operation++;  // 67
a = a + 1;  count_operation++;  // 68
a = a + 1;  count_operation++;  // 69
a = a + 1;  count_operation++;  // 70
a = a + 1;  count_operation++;  // 71
a = a + 1;  count_operation++;  // 72
a = a + 1;  count_operation++;  // 73
a = a + 1;  count_operation++;  // 74
a = a + 1;  count_operation++;  // 75
a = a + 1;  count_operation++;  // 76
a = a + 1;  count_operation++;  // 77
a = a + 1;  count_operation++;  // 78
a = a + 1;  count_operation++;  // 79
a = a + 1;  count_operation++;  // 80
a = a + 1;  count_operation++;  // 81
a = a + 1;  count_operation++;  // 82
a = a + 1;  count_operation++;  // 83
a = a + 1;  count_operation++;  // 84
a = a + 1;  count_operation++;  // 85
a = a + 1;  count_operation++;  // 86
a = a + 1;  count_operation++;  // 87
a = a + 1;  count_operation++;  // 88
a = a + 1;  count_operation++;  // 89
a = a + 1;  count_operation++;  // 90
a = a + 1;  count_operation++;  // 91
a = a + 1;  count_operation++;  // 92
a = a + 1;  count_operation++;  // 93
a = a + 1;  count_operation++;  // 94
a = a + 1;  count_operation++;  // 95
a = a + 1;  count_operation++;  // 96
a = a + 1;  count_operation++;  // 97
a = a + 1;  count_operation++;  // 98
a = a + 1;  count_operation++;  // 99
a = a + 1;  count_operation++;  // 100

cout << "Варіант 1: Досягнуто 100 з 1 за " << count_operation << " кроків." << endl;

return 0;
}

Варіант 2: Знайти найкращий спосіб, найкоротший (0.5 бал)

Cпочатку було таке рішення:

// Без показу покрокового результату
#include <iostream>
using namespace std;

int main() {
int a = 1, count_operation = 0;

a = a + 1;  count_operation++;  // 2
a = a + 1;  count_operation++;  // 3
a = a * 2;  count_operation++;  // 6
a = a * 2;  count_operation++;  // 12
a = a * 2;  count_operation++;  // 24
a = a + 1;  count_operation++;  // 25
a = a * 2;  count_operation++;  // 50
a = a * 2;  count_operation++;  // 100


cout << "Варіант 2: Досягнуто 100 з 1 за " << count_operation << " кроків." << endl;

return 0;
}

Тільки є один недолік, виводиться вікно відповіді відповідно до кількості рядків і ніяк не показує дійсний результат на кожен рядок, якщо є помилка, то довше шукати. тобто Там може бути сто з гаком, або менше. Накриклад в мене перший рядок чомусь мав значення один, хоча загальний результат першого кроку 2, але не не було показано, тож додаткова інформація більш цікава.

// Із виведенням підрахункового результату, щоб було легше
#include <iostream>
using namespace std;

int main() {
int a = 1, count_operation = 0;

a = a + 1;  count_operation++;  cout << "Крок " << count_operation << ": a = " << a << endl;  // 2
a = a + 1;  count_operation++;  cout << "Крок " << count_operation << ": a = " << a << endl;  // 3
a = a * 2;  count_operation++;  cout << "Крок " << count_operation << ": a = " << a << endl;  // 6
a = a * 2;  count_operation++;  cout << "Крок " << count_operation << ": a = " << a << endl;  // 12
a = a * 2;  count_operation++;  cout << "Крок " << count_operation << ": a = " << a << endl;  // 24
a = a + 1;  count_operation++;  cout << "Крок " << count_operation << ": a = " << a << endl;  // 25
a = a * 2;  count_operation++;  cout << "Крок " << count_operation << ": a = " << a << endl;  // 50
a = a * 2;  count_operation++;  cout << "Крок " << count_operation << ": a = " << a << endl;  // 100

cout << "Варіант 2: Досягнуто 100 з 1 за " << count_operation << " кроків." << endl;

return 0;
}

Варіант 3

Може треба краще подумати. Відносно найкоротшого рішення лише із методом додавання, зекономти кроки не вийде, бо збереження k, теж буде ним.

// Набридло з цим розбираться

#include <iostream>
using namespace std;

int main() {
int a = 1, k = 0, count_operation = 0;

// Перші кроки для збільшення a
a = a + 1;  count_operation++;  cout << "Крок " << count_operation << ": a = " << a << endl;  // 2
a = a * 2;  count_operation++;  cout << "Крок " << count_operation << ": a = " << a << endl;  // 3
a = a + 1;  count_operation++;  cout << "Крок " << count_operation << ": a = " << a << endl;  // 6
a = a * 2;  count_operation++;  cout << "Крок " << count_operation << ": a = " << a << endl;  // 12
a = a * 2;  count_operation++;  cout << "Крок " << count_operation << ": a = " << a << endl;  // 24

// Зберігаємо значення a в k
k = a;     count_operation++;  cout << "Крок " << count_operation << ": k = " << k << endl;  // 24

// Збільшуємо a до 48
a = a * 2;  count_operation++;  cout << "Крок " << count_operation << ": a = " << a << endl;  // 48

// Використовуємо k для досягнення 100
// 72
a = a * 2;  count_operation++;  cout << "Крок " << count_operation << ": a = " << a << endl;
a = a + k;  count_operation++;  cout << "Крок " << count_operation << ": a = " << a << endl;  // 96

cout << "Досягнуто 100 з 1 за " << count_operation << " кроків." << endl;

return 0;
}

Проте застосувавши множення на k, якщо так можна, ніби не заборонено, тоді виходить трохи менше, на один. Відносно інших рішень, економія буде залежати від кількості задіяних для них кроків. А ще його доцільність може коливатись залежно від величини значення, яке треба досягнути, що вплине на кількість послідовних дій дял його отримання.

// із множенням

#include <iostream>
using namespace std;

int main() {
int a = 1, k = 0, count_operation = 0;

// Перші кроки для збільшення a
a = a + 1;  count_operation++;  cout << "Крок " << count_operation << ": a = " << a << endl;  // 2
a = a * 2;  count_operation++;  cout << "Крок " << count_operation << ": a = " << a << endl;  // 3
a = a + 1;  count_operation++;  cout << "Крок " << count_operation << ": a = " << a << endl;  // 6

 // Зберігаємо значення a в k
k = a;     count_operation++;  cout << "Крок " << count_operation << ": k = " << k << endl;  // 24

a = a * 2;  count_operation++;  cout << "Крок " << count_operation << ": a = " << a << endl;  // 12
a = a * 2;  count_operation++;  cout << "Крок " << count_operation << ": a = " << a << endl;  // 24
a = a * k;  count_operation++;  cout << "Крок " << count_operation << ": a = " << a << endl;  // 48


cout << "Досягнуто 100 з 1 за " << count_operation << " кроків." << endl;

return 0;
}

Є ще варіант, із додавання до int n=0, але то більше заплутує, а код і так працює.

Варіант 4

4.1 Будь яке рішення

В мене буде 30, бо згідно із умовами завдання немає перших двух цифр в занзначеному полі, тому буде довільний вибір, воно аби просто було випадкове число відмінне від інших учасників і власне розуміння що відбувається й де це береться ))

#include <iostream>
using namespace std;

int main() {
int a = 1, k = 0, count_operation = 0;

// Перші кроки для збільшення a
a = a + 1;  count_operation++;  cout << "Крок " << count_operation << ": a = " << a << endl;  // 2
a = a * 2;  count_operation++;  cout << "Крок " << count_operation << ": a = " << a << endl;  // 3
a = a + 1;  count_operation++;  cout << "Крок " << count_operation << ": a = " << a << endl;  // 6
a = a + 1;  count_operation++;  cout << "Крок " << count_operation << ": a = " << a << endl;  // 12
a = a * 2;  count_operation++;  cout << "Крок " << count_operation << ": a = " << a << endl;  // 24
a = a * 2;  count_operation++;  cout << "Крок " << count_operation << ": a = " << a << endl;  // 48
a = a + 1;  count_operation++;  cout << "Крок " << count_operation << ": a = " << a << endl;  // 72
a = a + 1;  count_operation++;  cout << "Крок " << count_operation << ": a = " << a << endl;  // 96
a = a + 1;  count_operation++;  cout << "Крок " << count_operation << ": a = " << a << endl;  // 100
a = a + 1;  count_operation++;  cout << "Крок " << count_operation << ": a = " << a << endl;  // 100
a = a + 1;  count_operation++;  cout << "Крок " << count_operation << ": a = " << a << endl;  // 100
a = a + 1;  count_operation++;  cout << "Крок " << count_operation << ": a = " << a << endl;  // 100

cout << "Досягнуто 30 з 1 за " << count_operation << " кроків використовуючи команди +1 та х2" << endl;

return 0;
}

4.2 Найкоротше

Найкоротший шлях відповідно до умов

#include <iostream>
using namespace std;

int main() {
int a = 1, count_operation = 0;

// Перші кроки для збільшення a
a = a + 1;  count_operation++;  cout << "Крок " << count_operation << ": a = " << a << endl;  // 2
a = a + 1;  count_operation++;  cout << "Крок " << count_operation << ": a = " << a << endl;  // 3
a = a * 2;  count_operation++;  cout << "Крок " << count_operation << ": a = " << a << endl;  // 6
a = a + 1;  count_operation++;  cout << "Крок " << count_operation << ": a = " << a << endl;  // 12
a = a * 2;  count_operation++;  cout << "Крок " << count_operation << ": a = " << a << endl;  // 24
a = a + 1;  count_operation++;  cout << "Крок " << count_operation << ": a = " << a << endl;  // 48
a = a * 2;  count_operation++;  cout << "Крок " << count_operation << ": a = " << a << endl;  // 72

cout << "Досягнуто 30 з 1 за " << count_operation << " кроків використовуючи команди +1 та х2" << endl;

return 0;
}

4.3 Із додатковим збереження k до змінної n

//лише додавання
#include <iostream>
using namespace std;

int main() {
int a = 1, k = 0, count_operation = 0;

// Перші кроки для збільшення a
a = a + 1;  count_operation++;  cout << "Крок " << count_operation << ": a = " << a << endl;  // 2
a = a * 2;  count_operation++;  cout << "Крок " << count_operation << ": a = " << a << endl;  // 4
a = a + 1;  count_operation++;  cout << "Крок " << count_operation << ": a = " << a << endl;  // 5
a = a * 2;  count_operation++;  cout << "Крок " << count_operation << ": a = " << a << endl;  // 10

// Зберігаємо значення a в k
k = a;     count_operation++;  cout << "Крок " << count_operation << ": k = " << k << endl; // 10 зафіксовано для використання в потрібному місці

a = a * 2;  count_operation++;  cout << "Крок " << count_operation << ": a = " << a << endl;  // 20
a = a + k;  count_operation++;  cout << "Крок " << count_operation << ": a = " << a << endl;  // 30

cout << "Досягнуто 30 з 1 за " << count_operation << " кроків використовуючи +1 та х2 й k" << endl;

return 0;
}

З множенням на один кром менше.

#include <iostream>
using namespace std;

int main() {
int a = 1, k = 0, count_operation = 0;

// Перші кроки для збільшення a
a = a + 1;  count_operation++;  cout << "Крок " << count_operation << ": a = " << a << endl;  // 2
a = a + 1;  count_operation++;  cout << "Крок " << count_operation << ": a = " << a << endl;  // 4
 // Зберігаємо значення a в k
k = a;     count_operation++;  cout << "Крок " << count_operation << ": k = " << k << endl; // 10 зафіксовано для використання в потрібному місці
// 5
a = a * k;  count_operation++;  cout << "Крок " << count_operation << ": a = " << a << endl;
a = a * k;  count_operation++;  cout << "Крок " << count_operation << ": a = " << a << endl;  // 10
a = a + k;  count_operation++;  cout << "Крок " << count_operation << ": a = " << a << endl;  // 30

cout << "Досягнуто 30 з 1 за " << count_operation << " кроків використовуючи +1 та х2 й k" << endl;

return 0;
}

Завдання 3

Довільні числа, беру 30 та додаю 8, тоді маємо 11 степінь. З цього виходить, що число 30 буде піднесене в 11 степінь.

#include <iostream>
#include <cmath>
#include <iomanip> // Для   використання fixed та setprecision

using namespace std;

int main() {
double base = 30;
double exponent = 11.0;
double result = pow(base, exponent);

cout << fixed << setprecision(0); // Встановлюємо формат виведення на ціл число
cout << base << "^" << exponent << " = " << result << endl; // Буде 17714700000000000, а 3 в 11 теж саме, але без нулів .

return 0;
}

Матимемо 17714700000000000, а 3 в 11 теж саме, але без нулів і і можна застосувати простіший обрахунок.

Завдання 4

4.1

#include <iostream>

int main() {
int number = 71;

int onesDigit = number % 10; // Одиниці
int tensDigit = (number / 10) % 10; // Десятки

std::cout << "Цифра одиниць: " << onesDigit << std::endl;
std::cout << "Цифра десятків: " << tensDigit << std::endl;

return 0;
}

Сім переходить до одиниць, а один до десятків. Тоді й буде перетасовка й стане 17, а щоб поміняти знову, треба виконати код для 17. (тільки знімок екрану, на 73, але це суті та принципеу не змінює.

розбір цифр.png
Знімок екрану компілятора https://onecompiler.com/cpp

4.2

#include <iostream>

int main() {
int number = 718;

int onesDigit = number % 10; // Одиниці
int tensDigit = (number / 10) % 10; // Десятки
int hunsDigit = (number / 100) % 10;                    // Сотні

std::cout << "Цифра одиниць: " << onesDigit << std::endl;
std::cout << "Цифра десятків: " << tensDigit << std::endl;
std::cout << "Цифра сотнів: " << hunsDigit << std::endl;

return 0;
}

Потрібно додати іще одного рядка із формулою int hunsDigit = (number / 100) % 10; // Сотні та відповідно до нього додати вивід для "Цифра сотрів:"

4.3

Як у попередніх кроках, але іще додати й змінити назви у виведенні інформації скомпільованого коду:

#include <iostream>

int main() {
int number = 3718;

int onesDigit = number % 10; // Одиниці
int tensDigit = (number / 10) % 10; // Десятки
int hunsDigit = (number / 100) % 10;                    // Сотні
int thouthDigit = (number / 1000) % 10;                    // Тисячі

std::cout << "Перша цифра: " << onesDigit << std::endl;
std::cout << "Друга цифра: " << tensDigit << std::endl;
std::cout << "Третя цифра: " << hunsDigit << std::endl;
std::cout << "Четверта цифра: " << thouthDigit << std::endl;

return 0;
}

цифри 4.3 .png
Знімок екрану компілятора https://onecompiler.com/cpp


Цікава знахідка в компіляторі

Була виявлена, ще одна цікава функція в онлайн компіляторі, це збереження коду після натиснення Run
тоді до адреси https://onecompiler.com/cpp додається спеціальник код, і можна ділитись посиланням на результат, https://onecompiler.com/cpp/42t5fw4se, що може буде корисним для багатьог задач під час навчання, як-то перевінка роботи, бо там багатенько вкладок можна додавати, лише відповідну назву присвоювати і багато іншого. Потрібно, щоб скомпільовано було саме код, бо тоді посилання буде видавати помилку 404. Також після натиснення Run, обробляє запит лише першої вкладки, навіть коли вона не активована, щоб працювало на іншій, її слітд теж перейменувати в Main, і так змінювати, це якийсь глюк, або це лише в мене. Проте загалом, інструмент ніби хороший.

Унікальність компілятора.png


Висновок

Це було цікаво, але із іншої точко зору та отриманого досвіду. Так, в моєму випадку перевіряється можливіть опанування чи хочаб можливіть розібратись в деяких принципах програмування із допомогою сучасних технологічних річень. Тож в першу чергу не можу цілковито заявити, що це все є наслідком власної інтелектуальнох праці, бо інакше буде дуже дуже дуже довго, а так трохи швидше, але теж часу чимало треба. Це полегшує створення структури коду (на початку навчання), бо як далі буде не знаю. Глянуввши, після завершення, до публікації, що там в інших учасників і виявилось, що мене понесло хто зна якими шляхами. Загалом можна зазначити, що такий підхід покращує розуміння, бо якщо просто дивитись на текст завдання та теоретичний матеріал, то зовсім ніякого результату.


P.S Please do not promote this post on other social networks like X and others. Thank you!


Запрошую прийняти участь @АрхангелМихаїл @АрхангелРафаїл @Квеорт (формально для виконання умов).


#ukraine #sec20w3 #sec20w3sergeyk #club5050 #steemexclusive

Sort:  
Loading...

TEAM 4

Congratulations! Your post has been upvoted through steemcurator06. Good post here should be..


post1.png

Curated by : @jyoti-thelight
 2 months ago 

Дякую

 2 months ago 

Несучий світло, ти розумний )))

Coin Marketplace

STEEM 0.21
TRX 0.20
JST 0.034
BTC 90913.25
ETH 3176.54
USDT 1.00
SBD 2.97