Алгоритм, програма, мови програмування 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Алгоритм, програма, мови програмування



Комп’ютер (електронна обчислювальна машина (ЕОМ)) – цифрова обчислювальна машина, побудована на електронних компонентах, призначена для автоматизації процесу обробки інформації і обчислень, які виконуються у відповідності з заданим алгоритмом. Складається з центрального процесору, пристроїв оперативної і зовнішньої пам’яті, пристроїв вводу-виводу.

Центральний процесор ЕОМ - центральний пристрій (або комплекс пристроїв) ЕОМ, який виконує арифметичні і логічні операції, задані програмою перетворення інформації, управляє обчислювальним процесом і координує роботу периферійних пристроїв системи. Процесор виконує команди на машинній мові, які зберігаються в оперативній пам’яті. Складається з пристрою керування, арифметико-логічного пристрою і набору регістрів (комірок швидкодіючої пам'яті). Процесору характерна певна система команд.

Пам’ять ЕОМ - частина ЕОМ, призначена для запису, зберігання і видачі інформації, представленій в кодовій формі; утворюється з одного або декількох запам’ятовуючих пристроїв (ЗП). Поділяється на оперативну (або основну), зовнішню (допоміжну) і буферну.

Оперативна пам’ять ЕОМ призначена для тимчасового збереження команд і даних. Кожен елемент пам'яті, називається словом пам'яті, має унікальну адресу, а кожне слово складається з фіксованого числа бітів, зазвичай з 16, 32 або 64 бітів.

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

Програма обчислювальної машини, опис алгоритму рішення задачі, заданий на мові програмування (на машинну мову конкретної ЕОМ переводиться автоматично за допомогою транслятора). Процес складання програм називають програмуванням.

Програмне забезпечення ЕОМ (математичне забезпечення ЕОМ) - комплекс програм, описів і інструкцій, що забезпечують автоматичне функціонування ЕОМ. Розрізняють загальне програмне забезпечення (для організації обчислювального процесу на даній ЕОМ) і спеціальне програмне забезпечення (для вирішення конкретних завдань).

Програмування - процес підготовки завдань для вирішення їх на ЕОМ, що складається з наступних етапів: складання алгоритму; складання програми на мові програмування; трансляція програми з мови програмування на машинну мову.

Системне програмування – програмування базового (загального) програмного забезпечення ЕОМ (операційних систем, трансляторів, сервісних засобів і т.д.)

Прикладне програмування – програмування спеціального програмного забезпечення прикладного характеру, яке призначене для рішення конкретних задач з різних областей (наука, техніка, виробництво, сфера обслуговування, навчання і т.д.)

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

Мови програмування - формальні мови для опису даних (інформації) і алгоритму (програми) їх обробки на ЕОМ. Мови програмування можна розділяти на машинні, низького рівня (мови асемблера) і високого рівня (наприклад, алгоритмічні мови). За рівнем спеціалізації розрізняють спеціальні, спеціалізовані і універсальні мови програмування.

Машинна мова - мова програмування, призначена для представлення програм у формі, яка дозволяє виконувати їх на конкретній ЕОМ. Машинною мовою, також, називають систему команд ЕОМ. Наприклад, система команд процесорів Intel 8086, 386, Pentium.

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

Середовище програмування - набір програм-інструментів, які використовуються для створення програм. Може містити редактор, компілятор або інтерпретатор, бібліотекар, компонувач, завантажувач, налагоджувач, засоби тестування та ін.

Транслятор - в інформатиці, програма ЕОМ, призначена для автоматичного перекладу опису алгоритму з однієї мови програмування на іншу, зокрема на машинну мову. Процес перекладу називається трансляцією. Транслятори поділяються на компілятори і інтерпретатори.

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

Інтерпретатор – транслятор, який почергово виконує команди інтерпретованої програми. Як інтерпретатори працюють мови Basic, LISP, Perl, Python.

Мови високого рівня – машинно-незалежні мови, які імітують природні, використовуючи зручні для сприйняття конструкції, деякі слова розмовної мови і загальноприйняті математичні символи. Поділяються на алгоритмічні (наприклад, Pascal), логічні (наприклад, Prolog) та об’єктно-орієнтовані (наприклад, С++).

Алгоритмічна мова – формалізована мова високого рівня для однозначного запису алгоритмів. Складається з набору символів (алфавіт), синтаксичних правил і семантичних визначень. Є основою мов програмування. Наприклад: Basic, C, Pascal, Fortran, C++, Java.

Еволюція мов програмування відбувалась в такому напрямку: машинні мови і асемблери; непроцедурні алгоритмічні мови; процедурні алгоритмічні мови для структурованого програмування; мови об’єктного і об’єктно-орієнтованого програмування.

Елементи мови програмування

Рекомендована література: [1-14]

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

Алфавіт мови – система нероздільних символів, які використовуються для побудови мови програмування. В алфавіт С++ входять великі і малі латинські літери, арабські цифри, та спеціальні символи: "’()[]{}<>.,;:?!~*+-=/\|#%$&^@_

Синтаксис мови – правила побудови конструкцій мови.

Семантика мови – визначає змістове значення конструкцій мови.

Команди мови (оператори, вказівки, речення, інструкції) – синтаксичні конструкції мови, які будуються з лексем. Наприклад, команди присвоювання, вводу-виводу, циклу, розгалуження.

Вираз – послідовність даних, операторів і розділювачів, яка конкретизує обчислення, наприклад, арифметичні (с.33), логічні вирази. Результатом виконання виразу є значення. Приклад:

y=(x*x+1)/z;//змінній у присвоїти значення виразу (x*x+1)/z

Лексеми (tokens) – неподільні елементи мови, первинні вирази: слова, число, символ операції. У С++ є шість класів лексем: ідентифікатори, ключові слова, константи, рядки, оператори і інші розділювачі.

Ключові слова – зарезервовані ідентифікатори, які використовуються для написання команд, наприклад: double, class, for, if, return.

Директиви препроцесора – команди компілятора, які виконуються на першому етапі компіляції програми (с.31). Приклад:

#include <iostream.h>//директива підстановки файлу iostream.h

Коментар – пояснення вихідного коду програми, який ігнорується компілятором. Приклади:

/*багаторядковий коментар*/

//однорядковий коментар

Дане – поіменована область оперативної пам’яті, в якій зберігається значення певного типу. Даному характерні ім’я, адреса, тип і значення. Приклад:

int x=2;//даному з іменем х і типом int присвоїти значення 2

cout<<&x;//вивести на екран адресу цього даного

Ім’я (ідентифікатор) позначає дане унікальним іменем (змінну, об'єкт, функцію, тип, значення або мітку) (с.32).

Визначення імені (definition) – визначає для імені сутність, до якої воно відноситься, і деколи значення, виділяє пам’ять для об’єкту.

Оголошення імені (declaration) називає тип і ім’я об’єкта, але не виділяє пам’ять для нього, а тільки описує його абстрактні властивості. Оголошення є визначенням, за винятком тих випадків, коли воно описує функції, не задаючи тіла функції (с.41), коли воно містить специфікатор extern і в ньому немає ініціалізації або тіла функції, або коли воно є описом класу. Будь-яка сутність перед використанням повинна бути оголошена. В програмі може бути тільки одне визначення кожного імені і безліч оголошень. Приклади оголошень:

int i;

float x=1.17;

char* p=”String”;

struct s1{int n; float y;};

s1 obj1;

int f (int x){return x*x;};

typedef s1 s2;

Пов’язування (binding) – процес, в результаті якого ім’я або вираз асоціюється з певним атрибутом. Розрізняють раннє (статичне, на етапі компіляції) і пізнє (динамічне, на етапі виконання) пов’язування.

Ініціалізація – указання початкового значення об’єкту, що оголошується. Приклад:

int x=2;//присвоїти змінній х значення 2

Адреса даного – індекс (адреса) комірки оперативної пам’яті, в якій зберігається дане, або з якої воно починається (с.38). Приклад адреси змінної х: &x

Вказівник – це змінна, значенням якої є адреса даного (с.38). Якщо вказівник ні на що не вказує, то він має пусте значення. Приклад:

int *px=&x//створити вказівник px і присвоїти йому адресу змінної x

Область видимості імені – частина програми, де оголошене ім’я та допустиме його використання. Область видимості буває глобальна і локальна (с.42).

Час життя об’єктів (змінних). Якщо тільки програміст не втрутиться явно, об'єкт буде створений при появі його визначення і знищений, коли зникне з області видимості. Об'єкти з глобальними іменами створюються, ініціалізуються (причому тільки один раз) і існують до кінця програми. Якщо локальні об'єкти описані із службовим словом static, то вони також існують до кінця програми (с.42).

Тип даних - визначає допустимі значення даного, а також операції, які можуть виконуватись над ним (с.32). Для кожного типу даних резервується певний обсяг пам’яті (с.32). Тип є конкретне представлення деякої концепції (поняття). Наприклад, наявний в C++ тип float з його операціями +, -, * і т.д. забезпечує обмежену, але конкретну версію математичного поняття дійсного числа. Новий тип створюється для того, щоб дати спеціальне і конкретне визначення поняття, якому ніщо прямо і очевидно серед вбудованих типів не відповідає:

typedef <опис типу> <назва типу>;

Основні типи C++ (с.32):

char - символьний;

int – цілий;

float – дійсний;

double – дійсний подвійної точності;

bool - булевий (логічний);

void – використовується для визначення функції, яка не повертає ніяких значень, або для узагальненого вказівника.

Модифікації основних типів C++ (с.32) утворюються за допомогою слів:

short – для цілих типів,

long - для цілих типів і double,

signed, unsigned - для цілих і символьних типів.

Похідні типи C++:

масиви (с.39);

функції (с.41);

вказівники на об'єкти даного типу (с.38);

посилання на об'єкти даного типу;

константи, що є значеннями даного типу;

класи (с.46);

структури (с.47);

об'єднання (с.47).

Значення – вміст області пам’яті відведеної під дане певного типу.

Літерал – константа, конкретне значення, задане в програмі «буквально», у вигляді послідовності символів. Літерал може бути цілочисельний, символьний, дійсний, рядковий і булевий. Наприклад:

cout<<"x="<<125<<'\n';//"x=", 125, '\n' – літерали

Змінна – дане, значення якого може змінюватися протягом виконання програми. Приклад оголошення змінної:

float a;

Стала (константа) – дане, значення якого не може змінюватися протягом виконання програми. Приклад:

const float a=1.5;

Контроль відповідності типів - це перевірка того, що при присвоюванні змінній, тип виразу сумісний з типом змінної. Строгий контроль характеризується відмовою від виконання, якщо типи відрізняються.

Перетворення (приведення) типів – це операція перетворення значення одного типу до значення іншого типу (с.33). Відбувається тоді коли у виразі зустрічаються дані різного типу. Перетворення може бути явне і неявне. При неявному перетворенні результат за замовчуванням перетворюється до старшого типу. При явному перетворенні програміст вказує до якого типу перетворити змінну. Приклад:

i=(int)c;//явне приведення c до int

Динамічна ідентифікація типів RTTI (Run-Time Type Identification) – механізм, який дозволяє ідентифікувати тип об’єкта при виконанні програми і безпечно виконувати перетворення типів (с.61).

Посилання – змінна, оголошена за допомогою модифікатора "&" і використовується для надання ще одного імені (синоніму) даному. Приклад:

int &x2=x;//посилання x2

Логічний вираз – вираз, значення якого належить до логічного типу. Приклад:

bool x=(2>1)&&(1<=5);//змінній х присвоїти значення логічного виразу

Перерахування (enum) – це унікальний тип даних, значення якого покриваються множиною іменованих констант, які називаються перечислювачами (с.41). Приклад:

enum days {sun,mon,tues,wed,thur,fri,sat};// sun=0, mon=1...

Оператори С++ і їх пріоритети (порядок виконання) (таблиця 1.1)

Усі оператори таблиці, відділені жирною горизонтальною лінією, мають однаковий пріоритет. Пріоритет зменшується "зверху вниз". Наприклад, a+b*c означає a+(b*c), оскільки * має пріоритет вище, ніж +; а вираз a+b-c означає(a+b)-c, оскільки + і - мають однаковий пріоритет, і операції + і - застосовуються "зліва направо".

Таблиця 1.1 - Оператори С++ і їх пріоритети

Оператор Опис Синтаксис
:: Дозвіл області видимості class_name::member
:: Глобальне ::name
. Вибір члена object.member
-> Вибір члена pointer->member
[] Індексування pointer[expr]
() Виклик функції expr(expr_list)
() Структурне значення expr(expr_list)
sizeof Розмір об'єкту sizeof expr
sizeof() Розмір об'єкту sizeof(expr)
++ Постфіксний інкремент lvalue++
++ Префіксний інкремент ++lvalue
-- Постфіксний декремент lvalue--
-- Префіксний декремент --lvalue
~ Доповнення ~expr
! Логічне НЕ !expr
- Унарний мінус -expr
+ Унарний плюс +expr
& Отримання адреси &lvalue
* Розіменування *expr
new Створення (розміщення) new type
delete Знищення (вивільнення) delete pointer
delete[] Знищення масиву delete[] pointer
() Приведення(перетворення) типу (type)expr
. * Вибір члена непрямий object.pointer-to-member
-> * Вибір члена непрямий pointer->pointer-to-member
* Множення expr*expr
Продовження табл. 1.1
/

Ділення expr/expr
% Остача від ділення expr%expr
+ Додавання (плюс) expr+expr
- Віднімання (мінус) expr-expr
<< Зсув вліво expr<<expr
>> Зсув вправо expr>>expr
< Менше expr<expr
<= Менше або рівно expr<=expr
> Більше expr>expr
>= Більше або рівно expr<=expr
== Рівно expr==expr
!= Не рівно expr!=expr
& Порозрядне І expr&expr
^ Порозрядне що виключає АБО expr^expr
| Порозрядне що включає АБО expr|expr
&& Логічне І expr&&expr
|| Логічне АБО expr||expr
?: Операція умови expr?expr:expr
= Просте присвоювання lvalue=expr
*= Присвоювання з множенням lvalue*=expr
/= Присвоювання з діленням lvalue/=expr
%= Присвоювання з узяттям залишку від ділення lvalue%=expr
+= Присвоювання з додаванням lvalue+=expr
-= Присвоювання з відніманням lvalue-=expr
<<= Присвоювання з зсувом вліво lvalue<<=expr
>>= Присвоювання з зсувом вправо lvalue>>=expr
&= Присвоювання з порозрядним І lvalue&=expr
|= Присвоювання з порозрядним що включає АБО lvalue|=expr
^= Присвоювання з порозрядним що виключає АБО lvalue^=expr

 

Команда присвоєння – використовується для присвоєння змінним (об’єктам) значень. Приклади:

a=1.25;

x=a+2;

Команди вводу-виводу – команди, які використовуються для здійснення операцій вводу-виводу на пристрої вводу-виводу (клавіатура, монітор, файл, периферійні пристрої) (с.34). Приклади:

cin>>x;//ввід з клавіатури

cout<<x;//вивід на монітор

Складена команда – використовується для об’єднання кількох команд в одну. Приклад:

{int x=1; cout<<x;}

Керуючі команди - призначені для зміни порядку виконання команд програми. Це команди безумовного переходу, розгалуження, циклу.

Команда безумовного переходу (goto) – використовується для переходу до виконання позначеної команди і наступних за нею команд (с.36). Приклад:

goto a;//перейти на мітку а

a:y=3;//команда під міткою а

Команди розгалуження (if-else, switch) – використовуються для переходу до виконання команд в залежності від значення певного логічного виразу (с.36). Приклад:

if (x>1) x=0;else x=1;//якщо x>1 то x=0, інакше x=1

Команди циклу (for, while, do-while) – використовуються для повтору команд задану кількість раз в залежності від значення певного логічного виразу (с.37). Приклад:

for (x=1;x<5;x++) cout<<x;//вивести на екран: 1234

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

int x=1;

Динамічна пам’ять - пам’ять, яка виділяється для збереження даних у динамічних змінних і вивільняється під час роботи програми. Це дозволяє економно використовувати оперативну пам’ять (с.39). Приклад:

int *pi=new int(2);

Файл – це сукупність даних, які розміщені у постійному запам'ятовуючому пристрої. Для роботи з файлом необхідно відкрити для доступу фізичний файл і пов’язати з ним файлову змінну (об’єкт), виконати операції вводу-виводу і закрити файл. Файли бувають послідовного доступу і довільного (прямого), текстові (містять символи форматування тексту) і бінарні.

Файл послідовного доступу – файл, доступ до записів якого виконується послідовно з першого по останній (с.67).

Файл довільного доступу – файл, доступ до кожного запису якого може виконуватись напряму (с.68).

Підпрограма - це пойменована частина програми, яка містить групу команд і може викликатися з інших частин програми потрібну кількість раз. У підпрограму можуть передаватись дані для обробки (аргументи, фактичні параметри). Підпрограми поділяються на процедури і функції. Результатом виконання функції, на відміну від процедури, є якесь значення. В мові С++ усі підпрограми є функціями (с.41). Приклад:

int sum1(int a,int b)//визначення функції sum1

{return a+b;}//функція повертає значення a+b цілого типу

Прототип функції – опис функції з параметрами і типом результату, але без її реалізації. Приклад:

int sum1(int a,int b=0);

Формальні параметри підпрограми – її локальні змінні, які приймають значення аргументів підпрограми. Приклад:

int sum1(int a,int b)//a,b – формальні параметри

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

cout<<sum1(5,6);//5,6 – фактичні параметри

Передача параметрів по значенню – формальному параметру присвоюється копія значення аргументу (фактичного параметра). Приклад:

cout<<sum1(a=5,b=6);//передача параметрів по значенню

Передача параметрів по посиланню – формальному параметру присвоюється адреса аргументу. У цьому випадку зміна формального параметру впливає на аргумент. Приклад:

cout<<sum2(&a,&b);//передача параметрів по посиланню

Локальна змінна – володіє областю видимості тільки в тій функції або блоці команд де вона оголошена (с.42).

Глобальна змінна - володіє областю видимості в усій програмі (с.42).

Статична змінна (static) – зберігає своє значення після виходу з функції де вона оголошена (с.42). Приклад:

static int k=0;

Простір імен (namespace) – область видимості імен ідентифікаторів, яка використовується для запобігання конфлікту між однаковими іменами. Приклад:

namespace My {int x=1;}//простір імен My

void main()

{cout<<My::x;//вказати область видимості змінної x

using namespace My;//використовувати простір імен My

cout<<x;}

Головна функція (main) – функція, з якої починається виконання програми (с.31). Приклад пустої функції:

void main() {}

Вбудовувана функція (inline) – функція, код якої вкладається в кожній точці виклику. Приклад:

inline int s(int x){return x+2;}

Рекурсія – алгоритмічна конструкція, в якій підпрограма викликає саму себе. Приклад:

long int fact(int x)//рекурсивна функція визначення факторіалу

{if (x>1) return x*fact(x-1);else return 1;}

Масив – іменований впорядкований набір даних одного типу, які зберігаються в послідовно розташованих комірках пам’яті (с.39). Масив складається з елементів, кожен з яких має унікальний індекс. Масиви можуть бути одновимірні і багатовимірні. Приклад:

float A[3];//масив А дійсних чисел розміром 3

A[0]=2.5;//присвоїти елементу масиву А з індексом 0 число 2.5

Рядки – дані або набір даних, які містять сукупність символів. Наприклад, масиви символів (с.43) або рядкові контейнерні класи. Наприклад:

char s[20]="cpp";//масив символів

#include <string>

string s("hello");//об’єкт s класу string

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

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

inte x=1;//невизначений символ inte

int x:=1;//синтаксична помилка

Помилки виконання, або виключні ситуації (exception) виникають на етапі виконання програми та призводять до її аварійного завершення або неправильного функціонування. В мові С++ обробляються за допомогою конструкції try-catch-throw (с.45).

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

 

 



Поделиться:


Последнее изменение этой страницы: 2017-01-24; просмотров: 692; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.191.240.243 (0.087 с.)