Basic programming course: 💻Lesson #3 Operations 💻

in hive-145157 •  4 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

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  
Loading...

Your post has been rewarded by the Seven Team.

Support partner witnesses

@seven.wit
@cotina
@xpilar.witness

We are the hope!

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

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

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