SEC-S20W3 Writing the first code

in Ukraine on Steem3 months ago (edited)
Попередні заняття були підготовчими. Від сьогоднішнього уроку почнеться безпосередньо знайомство з кодуванням.

Програмування ми будемо вивчати на базі мов С/С++.

Звісно це дві різних мови, я б міг взагалі сюди додати ще Java/C#. Так як на початку вивчення вони дуже схожі, і відрізняються спочатку лиш вводом/виводом. І більшість особливостей, про які я буду говорити, стосуються цих мов - С/С++/Java/C#


image.png

Професійні програмісти використовують такі інтегровані середовища програмування (IDE) як Visual Studio, Clion, CodeBlocks - нам поки що ці грандіозні монстри не потрібні. Ми будемо вчитися в онлайн компіляторі.

Онлайн компілятор

Отже, перше що вам треба - онлайн компілятор, це те що буде виконувати код ваших програм. Введіть у пошуковику "online c++ compiler" і серед знайдених виберіть той який сподобається.
На скріншоті нижче ви бачите компілятор від https://www.w3schools.com/tryit/trycompiler.asp?filename=demo_cpp
Вагома перевага онлайн компілятора - мінімалізм, тобто якраз для новачка. Звісно є онлайн середовища програмування досить багаті, але початківців вони лиш заплутують.

image.png

В головному вікні слід виділити основні, найнеобхідніші елементи. Гадаю ви без ускладнень знайдете їх у обраних онлайн компіляторах домашньої роботи. 1 - вікно для вводу тексту, коду програми 2 - вікно виводу результатів виконання програми та повідомлень про помилки, воно може бути розташоване праворуч, а може бути знаходитися внизу, під вікном коду. У мене навіть є кнопка переходу - від "знизу" до "праворуч" 3- сама головна кнопка - RUN - вона запускає код програми на виконання 4 - інколи програма потребує вводу даних 5 - вибір мови програмування - С++

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

Перша програма

#include <iostream>
using namespace std;
int main()
{
  // comment
  return 0;
}



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

За традицією в програмуванні перша програма виводить повідомлення
Hello World!а ми скажемо Hello World!\nHello Steemitd!
\n - це спеціальний символ переходу на новий рядок.

cout << "Hello World!"; Не вдаючись в деталі поясню як це працює
<< - передає те що знаходиться праворуч (наш текст "Hello World!") до команди cout яка виводить передане їй на екран, в консоль у вікно виводу.
Запам'ятайте:
cout - це екран/консоль/вікно_виводу, << показують куди відправиться text
Це важливо, бо є команда cin та >> a;
Її розуміти слід так: cin це input, вікно вводу, якщо хочете клавіатура з яких інформація йде у напряму стрілки >>, і відправляє в змінну a
в кінці кожної команди інструкції стоїть ;

А зараз ми підійшли до самого цікавого. Що таке змінна a?

При простому поясненні це можна уявити як коробку для збереження.
Тобто cin >> a; значить що з пристрою вводу(клавіатура) інформація відправиться в змінну/коробку a
В мові С++ таку змінну/коробку необхідно попередньо підготувати(оголосити). Коробка має бути не просто будь яка, а спеціального розміру. В С++ є кілька типів даних.
Їх можна поділити на два види

цілочисельніз плаваючою крапкою
char
shortfloat
intdouble
longlong double
long long

цілочисельні ще бувають signed та unsigned - тобто знакові, та без знакові.
А тип даних char називається символьний, так як призначений зберігати коди символів. А що таке коди - це звичайні числа, тобто char можна також і використовувати для збереження чисел. Але це зараз погана манера, хіба що ви збираєтеся кодувати для пристроїв з дуже малим обсягом пам'яті.
Та про це все іншим разом - бо це доволі велика тема. Ще про змінні ви можете почитати тут
Ми ж на перших порах для простоти будемо завжди використовувати int для цілих чисел, та double для дійсних/дробових.

Складемо першу програму для знаходження суми двох чисел.
по перше їх треба десь взяти - ввести з клавіатури cin >>
а пам'ять під них та під результат слід попередньо підготувати.
int a,b,suma;

Суму обчислити інтуїтивно просто - suma=a+b;
але ніколи не називайте = що це дорівнює, що це рівність
Це зветься присвоїти значення і означає що компілятор с++ спочатку дивиться на праву частину від символу = там знаходиться a+b;
І він зазирає в коробку a , дізнається яка там число, наприклад 3, потім зазирає в коробку b і бачить там число 7, додає ці два числа. І аж потім дивиться на ліву частину від = куди ж покласти результат.
Результат піде в коробку/ змінну - suma;

#include <iostream>
using namespace std;
int main()
{
    int a,b,suma;
    cin>>a;
    cin>>b;
    suma=a+b;
    cout<<suma;
    return 0;
}

Слід зазначити що компілятор не лише додає значення цих двох змінних, він ще й "обчислює" (тобто дізнається) тип результату.
Тобто логічно що коли int +int = int, але те ж саме буде і при діленні.
int / int = int, ніби не логічно, але так воно є. Тому спробуйте поділити 7/2.
Поділіть 199 на 10. Який буде результат, чому?

Але цим можна користуватися. В деяких мовах навіть є спеціальні символи для таких дій, або окремі операції.

Цілочисельна арифметика має дуже важливе значення на початку програмування, і не лише на початку.
Давайте поділимо 15 на 2 -скільки буде? 7.5, але ж в цілу змінну 7,5 не покласти. Туди вміститься лише 7. Тобто 15/2=7
А де ж 0,5? Вірніше як його враховувати щоб не втратити.
Пригадайте зі школи дію ділення з остачею. Багато хто забув про це, Адже в шкільній програмі швидко з'являються дроби, звичайні потім десяткові - і про ділення з остачею забувають.
То що таке остача. Яка остача при діленні 15 на 2?
А що таке множення? Його вигадали щоб замінити дію додавання -
2+2+2+2+2+2= 6 * 2 = 12
То що тоді ділення?
12-2=10
12-2-2=8
12-2-2-2=6
12-2-2-2-2=4
12-2-2-2-2-2=2
12-2-2-2-2-2-2=0
Віднімати більше не зможемо і залишився нуль, тобто остача нуль. А те скільки раз вдалося виконати операцію ділення - частка. 12:2=6
А якщо ми поділимо не 12 а 13?
13-2=11
13-2-2=9
13-2-2-2=7
13-2-2-2-2=5
13-2-2-2-2-2=3
13-2-2-2-2-2-2=1
Тут ми теж віднімати більше не зможемо і залишився один, тобто остача 1. Бо багато отримую відповідей що 13:2 - остача 0.5.
Пояснюючи це так що 13/2=6,5 і ту 6 ціле а остача 0,5 - що не правильно.

%

Ця операція важлива сама по собі, Є навіть ціла тема в алгебрі призначена модулям. Там де числа 7 та 17 однакові за модулем 10, так як дають однакові залишки при діленні на 10. Ця операція - це залишок від ділення.
Тобто ділення можна розглянути в трьох варіантах.
В С подібних мовах операція % завжди цілочисельна з цілочисельнмим операндами.
В Python же зовсім не так, там не така строга типізація і там x=15/2 дасть звичний результат x=7.5
але є спеціальна операція цілочисельного ділення x=15//2 біде рівно 7
Ще цікавіше 15//3.5 буде 4, тобто хоч результат цілочисельний, проте операнди не обов'язково цілочисельні.
Чому так? 15-3,5 = 11,5, - раз
11,5-3,5=8 - два
8-3,5=4,5 - три
4,5-3,5=1 - чотири - ділення закінчено, ми встигли чотири рази відняти 3,5 - тому 15//3,5 = 4. А 15%3,5 = 1 , так як в нашому прикладі залишилася 1 від якої відняти 3.5 вже не виходить.

Дослідіть поведінку операцій / та % таким кодом:
(змініть 45 та 10 на свої числа, спочатку подумки оцініть результат)

#include <iostream>
using namespace std;
int main()
{
    int a=45,b=10;
    cout<<a<<"/"<<b<<"="<<a/b<<endl;
    cout<<a<<"%"<<b<<"="<<a%b<<'\n';
    return 0;
}

cout << a << "/" << b << "=" << a/b; можна було детально розписати

    cout<<a;    // виводимо значення змінної а  45
    cout<<"/";  // виводимо риску ділення       45/
    cout<<b;    // виводимо значення змінної b  45/11
    cout<<"=";  // виводимо знак дорівнює       45/10=
    cout<<a/b;  // виводимо результат ділення   45/10=4 
    cout<<endl; // тут нічого не виведеться, це "невидимий"
                // символ, але наступний вивід почнеться
                // з нового рядка '\n' майже те саме
                // перехід на новий рядок

тут ми формуємо вивід на екран/консоль
але це довго, займає багато рядків, вивід можна об'єднати в один
Та не поспішайте натискати RUN, завжди слід спочатку оглянути код в пошуках помилок, потім подумки запустити код у своїй голові, і виконати цю програму крок за кроком, і лише потім коли ви ніяких помилок не знайшли, слід тиснути RUN. Але помилки будуть!!! Вони є у всіх, цього не варто боятися. Слід навчитися їх помічати та виправляти.

#include <iostream>
using namespace std;
int main()
{
    int mynumber=49;
    //Declaration of variables c1 for the first digit and c2 for the second digit of my number.
    int c1, c2;
    с1=mynumber/10;
    c2=mynumber%10;
    cout<<"First digit of "<< mynumber << " - "<< c1;
    cout<<" and second digit - "<<c2<<"\n";
    return 0;
}

Тобто наприклад mynumber=3954;
тоді mynumber/100 буде 39 - відкидання двох останніх цифри, а mynumber%100 буде 54 - дві останні цифри
mynumber/10 буде 395 - відкидання останньої цифри, а mynumber%/10 буде 4
mynumber/1000 буде 3 - відкидання трьох останніх цифри, а mynumber%/10 буде 954
тобто комбінуючи % та / можна дістати будь-яку цифру з числа.

Наприклад mynumber=73961054; // витягнемо(дізнаємося) четверту від кінця цифру
дане число можна поділити на 1000: 73961054 / 1000 = 73961
а тепер найдемо залишок від ділення числа на 10.
73961%10=1;

Щоб не повторювати тут мною вже сказане про змінні прочитайте мою відповідь домашню роботу на урок №2 від @alejos7ven також якщо забажаєте можете глянути відповіді на цю тему інших

Головне що = означає присвоїти значення, занести, покласти.
int a = 70; по перше змінну треба оголосити вказавши її тип при першій появі. І занести в неї значення 70. Первинне занесення значення зветься ініціалізація. Тоді як int b; просто оголошення змінної з вказанням її типу. Коли я запитаю а чому зараз дорівнює b? Яке там зберігається значення? Більшість скажуть що нічого, тобто нуль. Але це не вірно! Там буде сміття, тобто будь яке значення. Може бути нуль, а може його і не бути.

int a = 70;
a=a+1;  // а претвориться на 71
a++;    // а знов збільшиться на 1, буде 72
++a;    // а знов збільшиться на 1, буде 73
a+=7;   // тут а збільшиться на 7, буде 80
a=70;   // а знов 70

є аналогічні операції і для віднімання -a--; --a; a-=7; a=a-4;
для інших дій a*=2; a/=5; a%=4;

Домашнє завдання

1. Online compiler (IDE) - 1 бал

Оберіть собі середовище програмування. Звісно це може бути повноцінна IDE, але який же Ви тоді початківець?)))) Можете обирати мову програмування за бажанням. Знайдіть та вкажіть необхідні для початку роботи елементи. Нагугливши наприклад "Online C++ compiler". Їх буде десятки, оберіть собі кращий за першим враженням. Звісно Ви потім зрозумієте певні нюанси середовища і в подальшому зможете собі обрати інший, більш зручний. Бажано щоб у кожного студента у відповіді було своє відмінне від інших середовище. Знайдіть та покажіть 1) вікно вводу коду, 2)вікно виводу результатів 3) кнопку RUN та 4) Вікно вводу даних - якщо цей пункт не знайдете, не хвилюйтеся, я покажу.

2. Знову від 1 до 100 - 5 бали

Можна використовувати лише два види операцій; +1 та x2. Треба з 1 зробити 100. Ніяких інших операцій нема - дехто на минулому уроці робив -1 - це зовсім інша операція. Це завдання з попереднього уроку слід виконати в трьох варіантах:

  • (0.5 бал) - знайдіть свій спосіб дійти від 1 до 100 ефективний чи ні в цьому завданні не важливо.
  • (0.5 бал) - знайти найкращий спосіб, найкоротший. В минулому уроці ніхто це не знайшов. Шукайте!
  • (1 бал) - якщо крім +1 та x2 можна ще створити додаткову змінну int k;то скільки кроків це зекономить, в змінну не можна класти певне число, наприклад 7 чи 23. Можна лише зафіксувати на певному кроці k=n значення змінної n.

(1+1+1) Але дійти треба не до 100, а кожен до свого числа.

Зайдіть у свій профіль з кількості підписників візьміть перші дві цифри, у мене це 28 (від числа 285). Додайте до нього 21. 28+21=49. Це і є ваший варіант для завдання. Запам'ятайте його!!!
Тобто вам слід дійти від 1 до 49( у всіх вас будуть свої, різні числа) виконуючи лише операції +1 та x2

image.png

Розв'язую свій варіант

#include <iostream>
using namespace std;
int main()
{
    int a=1, count_oparation=0;
    a=a+1;  count_oparation++;  //2
    a=a*2;  count_oparation++;  //4
    a=a+2;  count_oparation++;  //6
    a=a*2;  count_oparation++;  //12
    a=a*2;  count_oparation++;  //24
    a=a*2;  count_oparation++;  //48
    a=a+1;  count_oparation++;  //49
    cout<<"I reached 49 from 1 in "<< count_oparation <<" steps by using +1 and x2 commands";
    return 0;
}

3. Степінь - 1 бал

В мові С/С++ немає степіня, a5 тобто п'яту степінь слід виконувати так: int a5=a*a*a*a*a; я хочу сказати що немає операції такої, а функція є :int p5=pow(a,5); Щоб ви не шукали цю операцію як наприклад в Python p5=a**5 або p5=a^5 як у BASIC.
В С/С++ операція ^ та ^= але вона означає зовсім інше.

Сподіваюся пам'ятаєте з математики що a5 * a7 = a5+7 = a12

Візьміть своє число, я беру своє 49 і додаю його цифри та ще додаю 7: 4+9+7=16
Треба написати програму піднесення числа до 16 степеня - всіх вас будуть різні числа.

#include <iostream>
using namespace std;
int main()
{
    int a=3,pow;    //   3^16
    pow=a*a;        // 3^2
    pow=pow*pow;    // 3^4
    pow=pow*pow;    // 3^8
    pow=pow*pow;    // 3^16
    cout<<a<<"\n";
    return 0;
}

3. Розкладання на цифри - 3 бали

Знов візьміть зі свого профілю двоцифрове число, що брали раніше.

1 бал Напишіть програму розкладу його на цифри. А як тепер його зібрати з цифр назад у число? Як перевернути число. Іншими словами розвернути. наприклад як з 93 отримати 39.

1 бал Візьміть перші три цифри зі свого профілю (кількість підписників або постів) - розкладіть його на цифри.

1 бал Знайдіть у своєму профілі чотири цифрове число(виписавши перші цифри, або скомбінувавши його з інших, дві перші від одного та дві перші іншого.) Або випадкове число - головне щоб його не було в інших домашніх роботах. Розкладіть його на цифри - перша цифра Х, друга цифра - Х, третя цифра - Х, четверта цифра - Х

Наступні уроки будуть вже пов'язані з цим, тому що виконувати там завдання вам слід розібратися в цих.
Завтра я опублікую допис зі словами Ask.Me де ви зможете задавати мені питання якщо вам треба додаткові пояснення.

Правила проведення

Публікувати можна на будь-якій мові, в будь якій спільноті чи просто у власному блозі, посилання на вашу роботу додайте сюди коментарем

Щоб я швидко знайшов, перевірив та оцінив ваші роботи залиште посилання в коментарі під цим текстом а в роботі поставите тег #sec20w3sergeyk

Порекомендуйте прийняти участь своїм двом-трьом друзям.

Роботи слід опублікувати з Monday 23 Sep 24 to Sunday 29 Sep 24

Ваші роботи будуть мною оцінені та відібрані п'ять кращих робіт



About me

Sort:  
 3 months ago 

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

Так.. я так само🫣
Ні чого не зрозуміла, але дуже цікаво👍

 3 months ago 

Ну ти поки що на таких конкурсах не заморочуйся, знайомся з самою платформою

Ну то ж звісно)
Я кажу про цю роботу, що не кожен зможе так розжувати👍

 3 months ago 

https://steemit.com/hive-145157/@luxalok/sec-20w3-or-or-pershii-kod


#include <iostream>
using namespace std;
int main()
{
int a=3,pow;    //   3^16
pow=a*a;        // 3^2
pow=pow*pow;    // 3^4
pow=pow*pow;    // 3^8
pow=pow*pow;    // 3^16
cout<<a<<"\n";
return 0;
}

cout<<a<<"\n"; - виводить 3 після компіляції, таж хіба має бути?
cout<<pow<<"\n"; - дає реузльтат 43046721))

 3 months ago 

і? помилився - то не страшно

 3 months ago 

Бувають думки, що то частина завдань ))

@tipu curate

;) Holisss...

--
This is a manual curation from the @tipU Curation Project.

 3 months ago 

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

 3 months ago 

у мене я б не сказав що складніші завдання як для новачків.... але так, ледь складніші, і їх побільше це раз - але все рівно я робив їх з огляду на непідготовлених
тому спочатку раджу виконати завдання @alejos7ven а вже потім приступати до мого. час до кінця тижня ще є
також варто глянути на роботи інших студентів @kouba01 @ahsansharif
та не лякатися що продвинуті учні відповідають дуже широко і часто виходять за рамки завдання. Відповідати в стилі новачків їм статус не дозволяє))) Слід уважно читати умови домашнього завдання, а виходити за рамки - то вже за власним бажанням

 3 months ago 

Я вибрала цей урок, мені хочеться погратися скриптами. Легкі завдання не для мене)) Як що не впораюсь, то ж не покажу результату))

Your post has been rewarded by the Seven Team.

Support partner witnesses

@seven.wit
@cotina
@xpilar.witness

We are the hope!