Коротко поясніть, для чого потрібні арифметичні, порівняльні та логічні операції.
Комп'ютер на низькому рівні може лиш зберігати та обробляти числа. Для збереження призначені змінні - а для обробки - операції. А раз на примітивному рівні змінні це числа, то і операції на простому рівні це звичайні арифметичні операції. Це вже потім росте і складність поняття змінна - це може бути не лише число, а і текст, масив, картинка, файл. Та все рівно все зводиться до чисел. Операції теж спочатку самі елементарні - додавання, віднімання, множення, ділення. А потім синуси, косинуси, логарифми та матриці. Зі змінними ми розібралися на минулому уроці. Зараз розглянемо операції - їх можна поділити на два види: арифметичні та логічні.
GW BASIC
тут я набираю 10 INPUT "enter a "; A
а потім не набираю наступний, а піднімаюся курсором вгору і редагую прямо по екрану рядок, лиш змінюю 1
на 2
, а A
змінюю B
і головне натиснути ЕНТЕР
дописую останній рядок 30 IF A=B THEN PRINT "EQUAL" ELSE PRINT "NOT EQUAL"
і все!! можна дати команду LIST
і продивитися лістинг програми. Зараз мабуть такий термін як лістинг програми
і не використовують - скажуть код програми
або текст програми
А щоб запустити програму слід дати команду RUN
Це зараз екран може бути в двох режимах віконний та повноекранний - а тоді було багато текстових і багато графічних режимів. Ось тут я перейшов з режиму 80 символів у рядку в режим 40 символів у рядку.
Це був такий собі історичний відступ.
Створіть програму, яка запитує у користувача 2 числа та оцінює, чи збігаються обидва числа.
Я вже був хотів приступити до розв'язування першої задачі і обрати мову де є логічні змінні, але вирішив спробувати розв'язати першу задачу на `Basic`
Я зробив дві змінні a
та g
і поклав туди значення 3 та 9 : a=3 g=9
Потім інтуїтивно я захотів вияснити чи рівні значення цих змінних ? a=g
Правду казати я думав це не спрацює. Я ніколи раніше в Basic
такого не робив. Поява на екрані 0
свідчила про те що ці змінні не рівні. Проте я був ще більше здивований коли я вирішив перевірити ці змінні на не рівність
, тобто чи різні вони. PRINT a<>b
на це отримав відповідь -1
Але ж завжди з істиною асоціюється 1
, а з хибою - 0
. Просто свого часу я з таким не стикався. Навіть в наступній мові яку я почав вивчати не було логічних змін у явному вигляді, там для цього слугували звичайні числа: нуль це хиба, а все що не нуль це істина.
Цікаво у виразі
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
Логічного типу даних у явному вигляді немає. Логічний тип представлений цілими числами: нуль це хиба, а все що не нуль це істина. В стандарті С99 з'являється тип bool
та значення true
та false
, який все рівно представлений числами 0 та 1
C++
І хоча в С++ bool
реалізовано як повноцінний тип, при виводі ми бачимо 1 для true
та 0 для false
, працює також конвертація чисел в bool
тобто можна зустріти в коді while(1) if(5)
замість while(true)
через сумісність з мовою С.
C#
В цій мові тип
bool
ще більш сильніше інтегрований, при виводі True
або False
а не 0/1.А при спробі використати число замість булевого типу, наприклад
while(1)
одержимо помилку Constant value 1 cannot be converted to a bool
Java
Тут 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.
Перетворіть на комп’ютері наведені нижче математичні вирази в арифметичні:
Відмінності між чотирма мовами (С/С++/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
Your post has been rewarded by the Seven Team.
Support partner witnesses
We are the hope!
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Ага, як раз я в цьому і розуміюся 😂. Я більше по рукоділлі та кулінарії
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Сергію , я тупа, пробачте))))
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit