Basic programming course: 💻Lesson #3 Operations 💻

in Ukraine on Steem27 days ago

Коротко поясніть, для чого потрібні арифметичні, порівняльні та логічні операції.


Комп'ютер на низькому рівні може лиш зберігати та обробляти числа. Для збереження призначені змінні - а для обробки - операції. А раз на примітивному рівні змінні це числа, то і операції на простому рівні це звичайні арифметичні операції. Це вже потім росте і складність поняття змінна - це може бути не лише число, а і текст, масив, картинка, файл. Та все рівно все зводиться до чисел. Операції теж спочатку самі елементарні - додавання, віднімання, множення, ділення. А потім синуси, косинуси, логарифми та матриці. Зі змінними ми розібралися на минулому уроці. Зараз розглянемо операції - їх можна поділити на два види: арифметичні та логічні.


image.png

GW BASIC

Захотілося мені згадати старі добрі часи коли не було ні дискет(лише у вчителя - на вчителевому ПК, до наших комп'ютерів підключалися магнітофони), ні операційних систем ні інтернету. І чорно-білі монітори. Текстового редактора не було, був екранний редактор - якщо бігати курсором по екрану і натискати ЕНТЕР - поточний рядок завжди виконувався.


599.gif

тут я набираю 10 INPUT "enter a "; A а потім не набираю наступний, а піднімаюся курсором вгору і редагую прямо по екрану рядок, лиш змінюю 1 на 2, а A змінюю B і головне натиснути ЕНТЕР
дописую останній рядок 30 IF A=B THEN PRINT "EQUAL" ELSE PRINT "NOT EQUAL"
і все!! можна дати команду LIST і продивитися лістинг програми. Зараз мабуть такий термін як лістинг програми і не використовують - скажуть код програми або текст програми
А щоб запустити програму слід дати команду RUN


23454.gif



Це зараз екран може бути в двох режимах віконний та повноекранний - а тоді було багато текстових і багато графічних режимів. Ось тут я перейшов з режиму 80 символів у рядку в режим 40 символів у рядку.

Це був такий собі історичний відступ.

Створіть програму, яка запитує у користувача 2 числа та оцінює, чи збігаються обидва числа.


Я вже був хотів приступити до розв'язування першої задачі і обрати мову де є логічні змінні, але вирішив спробувати розв'язати першу задачу на `Basic`

image.png

Я зробив дві змінні a та g і поклав туди значення 3 та 9 : a=3 g=9 Потім інтуїтивно я захотів вияснити чи рівні значення цих змінних ? a=g Правду казати я думав це не спрацює. Я ніколи раніше в Basic такого не робив. Поява на екрані 0 свідчила про те що ці змінні не рівні. Проте я був ще більше здивований коли я вирішив перевірити ці змінні на не рівність, тобто чи різні вони. PRINT a<>b на це отримав відповідь -1 Але ж завжди з істиною асоціюється 1, а з хибою - 0. Просто свого часу я з таким не стикався. Навіть в наступній мові яку я почав вивчати не було логічних змін у явному вигляді, там для цього слугували звичайні числа: нуль це хиба, а все що не нуль це істина.


image.png

Цікаво у виразі k=b=c перше = це операція присвоювання, а друге = це операція порівняння!!! Я спробував піти далі k=b=c=a=n але логіку прослідкувати не зміг, та покинув цю ідею. Мова Basic занадто стара як і Pascal, у нас їх вже давно не вивчають, та рік тому одна студентка з Франції просила допомогти їй з Pascal!!! Я був здивований, і найшов цьому єдине пояснення - напевне у них багато софту написано і працює на Pascal/Deplhi і треба програмісти щоб підтримувати наявний софт.

INPUT "Enter a - ";a
INPUT "Enter b - ";b
PRINT "The number ";a;" is equal ";b;" ";a=b;" (0 means false/ -1 means true)"
PRINT "The number ";a;" is not equal ";b;" ";a<>b;" (0 means false/ -1 means true)"

Довелося написати такий код, адже логічних змінних немає і слова true false доводиться виводити текстом

Перейду до сучасних мов програмування. Та розгляну як ці мови відрізняються.

C

image.png

Логічного типу даних у явному вигляді немає. Логічний тип представлений цілими числами: нуль це хиба, а все що не нуль це істина. В стандарті С99 з'являється тип bool та значення true та false, який все рівно представлений числами 0 та 1

C++

image.png

І хоча в С++ bool реалізовано як повноцінний тип, при виводі ми бачимо 1 для true та 0 для false, працює також конвертація чисел в bool тобто можна зустріти в коді while(1) if(5) замість while(true) через сумісність з мовою С.

C#

image.png

В цій мові тип bool ще більш сильніше інтегрований, при виводі True або False а не 0/1.
А при спробі використати число замість булевого типу, наприклад while(1) одержимо помилку Constant value 1 cannot be converted to a bool

Java


image.png

Тут Java веде себе аналогічно до C# лиш тип не bool, а boolean і значення true``false з маленької літери як в С++. Аналогічно немає прямої конвертації між логічним та числовим типом даних. Тобто змішувати/заміняти типи даних int та bool в Java/C# не можна. a=true+7*fasle; - буде помилка.
А в С/С++ - можна a=true+7*fasle; - не буде помилки
Можна подумати що на стороні С/С++ більш нікого немає - та ні,
деякі сучасні мови ведуть себе так само: Python, JavaScript, PHP
А на стороні Java/C# - Swift, Go, Rust, Dart.

Перетворіть на комп’ютері наведені нижче математичні вирази в арифметичні:


image.png

Відмінності між чотирма мовами (С/С++/Java/C#) сильніше видно при операціях вводу/виводу, і те як оформлюється головна функція. Арифметичні ж та логічні операції на 99.9% схожі.
В першу чергу змінні треба оголосити, ініцалізувати можна прямо при оголошенні.

int y=(8-2)*(5+4);
float x=8/2+9/9;
float z=(4+8)*3/(2/3);

перші дві рядки в жодній з мов не викликають проблем, проблема з'явиться в третьому рядку - ділення на нуль. Так як 2/3=0 Тут виконується цілочисельне ділення, ціле/ціле=ціле
В мовах С/С++ це float z=(4+8)*3/(2/3); можна виправити винуватця на 2.0/3 або 2/3.0 тут вже один з операндів типу double а отже і тип виразу буде не int а double
Але в мовах Java/C# і це не допоможе - виною те що 2.0 типу double а змінну ми оголосили float
Так коли ми виправимо код на:

int y=(8-2)*(5+4);
float x=8/2+9/9; // or int x=8/2+9/9;
double z=(4+8)*3/(2.0/3);

У всіх чотирьох мовах буде вірний результат.
Але так як у всіх виразах фігурують числа які ми бачимо можна оголосити різні типи, якщо ж числа невідомі - краще всі оголосити double

Оцініть, чи результати 3 операцій є більшими або дорівнюють 0 (>=), і покажіть це на екрані.


Відповідь має бути одна про всі три змінні? Чи про кожну окремо? - Зроблю і так і так.

int y=(8-2)*(5+4);
float x=8/2+9/9; // or int x=8/2+9/9;
double z=(4+8)*3/(2.0/3);
bool xmorethanzero = x>=0;
bool ymorethanzero = y>=0;
bool zmorethanzero = z>=0;
bool allmorethanzero = (y>=0)*(x>=0)*(z>=0);
allmorethanzero = xmorethanzero * ymorethanzero * zmorethanzero;
allmorethanzero = xmorethanzero & ymorethanzero & zmorethanzero;
allmorethanzero = xmorethanzero && ymorethanzero && zmorethanzero;
cout<<"x>=0 "<<xmorethanzero<<endl; 
cout<<"y>=0 "<<ymorethanzero<<endl; 
cout<<"z>=0 "<<zmorethanzero<<endl; 
cout<<"all x and y and z >=0 "<<allmorethanzero <<endl; 

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

Запрошую до участі спробувати програмування - @strecoza @olesia @diodao



About me

Sort:  
Loading...

Your post has been rewarded by the Seven Team.

Support partner witnesses

@seven.wit
@cotina
@xpilar.witness

We are the hope!

 27 days ago 

Ага, як раз я в цьому і розуміюся 😂. Я більше по рукоділлі та кулінарії

 27 days ago 

Сергію , я тупа, пробачте))))

CONGRATULATIONS!!

Your post has been supported by TEAM SHINING STARS. We support quality posts, good comments anywhere, and any tags.


1000152665.gif

Curated by : @wilmer1988

Coin Marketplace

STEEM 0.18
TRX 0.16
JST 0.030
BTC 68137.22
ETH 2695.47
USDT 1.00
SBD 2.74