logo
kl3495

Рівень мови програмування

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

Будь-який алгоритм, як ми знаємо, є послідовність розпоряджень, виконавши які можна за кінцеве число кроків перейти від початкових даних до результату. Залежно від ступеня деталізації розпоряджень зазвичай визначається рівень мови програмування — чим менше деталізація, тим вище рівень мови.

По цьому критерію можна виділити наступні рівні мов програмування:

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

Мови високого рівня діляться на:

Достоїнства і недоліки машинних мов

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

При програмуванні на машинній мові програміст може тримати під своїм контролем кожну команду і кожен елемент пам'яті, використовувати всі можливості наявних машинних операцій.

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

Тому у разі, коли потрібно мати ефективну програму, яка в максимальному ступені враховує специфіку конкретного комп'ютера, замість машинних мов використовують близькі до них машино-орієнтовані мови (асемблери).

Мова асемблера

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

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

Програми, написані на мові асемблера, вимагають значно меншого об'єму пам'яті і часу виконання. Знання програмістом мови асемблера і машинного коду дає йому розуміння архітектури машини. Не дивлячись на те, що більшість фахівців в області програмного забезпечення розробляють програми на мовах високого рівня, таких, як Object Pascal або C, найбільш могутнє і ефективне програмне забезпечення повністю або частково написане на мові асемблера.

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

Як приклад приведемо програму на мові асемблера для IBM РС. Програма обчислює значення а = b + з для цілих а, b і з:

            .MODEL SMALL             .DATA b         DW     5 c         DW     3 a         DW     ?           .CODE begin   MOV   AX,@DATA           MOV     DS,AX           MOV     AX,B           ADD     AX,C           MOV     A,AX           MOV     AH,4CH           INT       21H           END     begin

Директива   .MODEL   задає механізм розподілу пам'яті під дані і команди. Директива   .DATA   визначає початок ділянки програми з даними. Директиви   DW  задають типи змінних і їх значення. Директива   .CODE   визначає початок ділянки програми з командами. Команди   MOV   Ax,@data   і   MOV     Ds,ax записують адресу сегменту даних в регістр   DS   (Data Segment). Для обчислення а використовуються команди   MOV     AX, B,   ADD     AX, C   і   MOV     A, AX. У директиві   END   задана мітка першої виконуваної програми програми begin.

Переклад програми з мови асемблера на машинну мову здійснюється спеціальною програмою, яка називається асемблером і є, по суті, простим транслятором.

Переваги алгоритмічних мов перед машинними

Основні переваги такі:

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

Компоненти алгоритмічної мови

Алгоритмічну мову (як і будь-яку іншу мову) утворюють три його складові: алфавіт, синтаксис і семантика.

Алфавіт — це фіксований для даної мови набір основних символів, тобто "букв алфавіту", з яких повинен складатися будь-який текст на цій мові, — ніякі інші символи в тексті не допускаються.

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

Семантика визначає смислове значення пропозицій мови. Будучи системою правил тлумачення окремих мовних конструкцій, семантика встановлює, які послідовності дій описуються тими або іншими фразами мови і, зрештою, який алгоритм визначений даним текстом на алгоритмічній мові.

Поняття використовувані алгоритмічними мовами

Кожне поняття алгоритмічної мови має на увазі деяку синтаксичну одиницю (конструкцію) і визначувані нею властивості програмних об'єктів або процесу обробки даних.

Поняття мови визначається у взаємодії синтаксичних і семантичних правил. Синтаксичні правила показують, як утворюється дане поняття з інших понять і букв алфавіту, а семантичні правила визначають властивості даного поняття

Основними поняттями в алгоритмічних мовах зазвичай є наступні.

1.  Імена (ідентифікатори) — уживаються для позначення об'єктів програми (змінних, масивів, функцій і ін.).

2.  Операції. Типи операцій:

3.  Дані — величини, що обробляються програмою. Є три основні види даних: константи, змінні і масиви.

Приклади констант:

4.  Вирази — призначаються для виконання необхідних обчислень, складаються з констант, змінних, покажчиків функцій (наприклад, exp(x)), об'єднаних знаками операцій.

Вирази записуються у вигляді лінійних послідовностей символів (без підрядкових і надрядкових символів, "багатоповерхових" дробів і так далі), що дозволяє вводити їх в комп'ютер, послідовно натискаючи на відповідні клавіші клавіатури.

Розрізняють вирази арифметичні, логічні і рядкові.

5.  Оператори (команди). Оператор — це найбільш крупне і змістовне поняття мови: кожен оператор є закінченою фразою мови і визначає деякий цілком закінчений етап обробки даних. До складу операторів входять:

Оператори підрозділяються на виконуваних і невиконуваних. Невиконувані оператори призначені для опису даних і структури програми, а виконувані — для виконання різних дій (наприклад, оператор привласнення, оператори введення і виводу, умовний оператор, оператори циклу, оператор процедури і ін.).

Стандартні функції

При вирішенні різних завдань за допомогою комп'ютера буває необхідно обчислити логарифм або модуль числа, синус кута і так далі

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

Таблиця стандартних функцій шкільної алгоритмічної мови

Назва іматематичнепозначенняфункції

Покажчикфункції

  Абсолютна величина (модуль) 

  | х |  

  abs(x)  

  Коріньквадратний

 

  sqrt(x)

  Натуральнийлогарифм 

  ln x

  ln(x)

  Десятковийлогарифм 

  lg x

  lg(x)

  Експонента (ступіньчисла е ~ 2.72)

  ex

  exp(x)

  Знак числа  x  ( - 1,  якщо х<0;   0,  якщоx = 0;  1,  якщоx >0) 

  sign x

  sign(x)

  Цілачастиначисла х (тобто максимальне цілечисло,не більшех)

 

  int(x)

  Мінімумз чисел х таy

 

  min(x,y)

  Максимум з чисел х таy

   

  max(x,y)

  Частное відділенняцілогох на цілеy

   

  div(x,y)

  Залишок від діленняцілогох на цілеy

 

  mod(x,y)

  Випадкове число в диапазонівід0 до х - 1

 

  rnd(x)

  Синус (кутв радіанах) 

  sin x

  sin(x)

  Косинус (кутв радіанах)

 cos x

  cos(x)

  Тангенс (кутв радіанах)

  tg x

  tg(x)

  Котангенс (кутв радіанах)

  ctg x

  ctg(x)

  Арксинус (головнезначенняв радіанах)

  arcsin x 

  arcsin(x)

  Арккосинус (головнезначенняв радіанах)

  arccos x

  arccos(x)

  Арктангенс (головнезначенняв радіанах)

  arctg x

  arctg(x)

  Арккотангенс (головнезначенняв радіанах) 

  arcctg x

  arcctg(x)

Як аргументи функцій можна використовувати константи, змінні і вирази. Наприклад:

sin ( 3.05 ) min ( a, 5)

sin ( x ) min ( a, b )

sin ( 2 * y + t / 2 ) min ( a + b , a * b )

sin((exp(x) + 1) ** 2) min(min(a, b), min(c, d))

Кожна мова програмування має свій набір стандартних функцій.

Арифметичні вирази

Арифметичні вирази записуються по наступних правилах:

Приклади запису арифметичних виразів

Математичнийзапис

Запис на школьнійалгоритмичній мові

x * y / z

x / ( y * z ) або x / y / z

( a**3 + b**3 ) / ( b*c )

( a[i+1] + b[i-1] ) / ( 2*x*y )

( -b + sqrt(b*b - 4*a*c)) / ( 2*a )

(x<0)

sign(x) * abs(x) ** (1/5)

0.49 * exp(a*a - b*b) + ln(cos(a*a)) ** 3

x/(1 + x*x/(3 + (2*x)**3))

Типові помилки в записі виразів:

5x + 1 a + sin x ((a + b)/c**3

Пропущений знак множення між 5 і х Аргумент x функції sin x не поміщений в дужки Не вистачає закриваючої дужки