Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Програмирование.docx
Скачиваний:
2
Добавлен:
17.09.2019
Размер:
116.82 Кб
Скачать
  1. Лінійний алгоритм

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

1. Колобок втік від бабусі з дідусем. 2. Колобок зустрів зайця. Оминув його. 3. Колобок зустрів вовка. І його оминув. 4. Колобок зустрів ведмедя. Не повірите - і ведмедя здихався. 5. Колобок зустрів лисицю. Вона його з*їла.

  1. Алгоритм з розгалуженням

Складнішими за організацією є алгоритми, в яких треба не просто виконувати всі підряд задані дії, а приймати рішення, які саме дії виконувати. Отже, алгоритм, в якому та чи інша серія команд реалізується в залежності від виконання заданої умови, називається алгоритмом з розгалудженням.     Розрізняють повну і коротку форму розгалудження. В короткій формі при невиконанні умови ніякі дії не передбачаються. Повну форму розгалудження можна прочитати так: "Якщо умова виконується, то виконати дію 1, інакше виконати дію 2". А коротку - так: "Якщо умова виконується, то виконати дію".

  1. Побудова циклічних алгоритмів

Третій вид алгоритмів - такі, котрі передбачають неодноразове (але скінченне) виконання певної дії (або кількох дій). Це циклічні алгоритми. Дії, які мають повторюватись, називаються тілом циклу. Умова, яка визначає кількість повторень циклу, називається умовою циклу. Зазначена команда/команди виконується Доки наведений логічний вираз справджується.

 

  1. Стандарт мови С++. Алфавіт мови та ключові слова в С++. Директиви препроцесора.

Мова програмування включає алфавіт, із символів якого формуються слова, вирази й оператори. Алфавіт - це набір припустимих символів мови. Усі конструкції мови формуються із символів його алфавіту

Алфавіт мови Сі включає букви, цифри і спеціальні символи

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

Итак директивы препроцессора:

#include

#define

#undef

#if

#else

#endif

#ifdef (#if defined)

#ifndef (#if !defined)

#error

#line

#pragma

  1. Змінні та константи в мові С++.

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

Для визначення констант служить зарезервоване слово Const.

Приклад. Const Min=50; Data=’22.02.73’;

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

Для опису змінних служить зарезервоване слово Var.

Формат. Var <ідентифікатор>:<тип>;

Приклад. Var Sum1,Sum2:real;

!6!. Структура програми в мові С++

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

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

(два алгоритма на выбор)

Оголошення глобальних змінних

int main(список параметрів)

{

послідовність операторів

}

тип_ возвращаемого _значення f1(список п

{

послідовність операторів

}

тип_возвращаемого_значення f2(список п

{

последовательность операторів

}

.

.

.

тип_возвращаемого_значення fN(список п

{

Послідовність операторів

}

#include <avr/io.h> /* заголовок */

int main(void) /* главная функция: начало программы */

{ /* открывающая скобка в начале программы */

оператор программы;

оператор программы;

...

оператор программы;

} /* закрывающая скобка в конце программы */

!7!. Коментарі в мові С++

Комментарій - це текст, поясняючий текст програми. Комментарі обмежуються одним з способів:

• символами /* */ на початку і наприкінці коментарів;

• символами // - після них до кінця рядка розташовуються коментарі

!8!. Стандартні типи даних в С++

С++ содержит большое количество различных типов

Символьные: char,

Целочисленные знаковые : signed char, short int, int, long int

С плавающей точкой: float, double,

Логический: bool, имеющий значения true и false

Значениями типа char являются целые числа со знаком (signed char) или без знака (unsigned char), которые помещаются в один байт

Плавающие типы используются для работы с вещественными числами, которые представляются в форме записи с десятичной точкой

!9!. Вирази в мові С++. Арифметичні операції. Присвоєння. Оператори інкременту (++) та декременту (--).

Вирази: Числа можно складывать, вычитать, умножать, делить. Знаки можно сравнивать и т.д. То есть из разных величин можно составлять выражения, результат вычисления которых – новая величина

Присвоєння: Левым операндом должна быть переменная. Нельзя записать:

5 = x;

Операнду находящемуся в левой части присваивается значение операнда стоящего в правой части операции:

x = 5;

cout << x; // на экран будет выведено: 5

Теперь в переменной x хранится значение 5. И его можно использовать.

Арифметичні операції: Операции умножения, деления выполняются раньше чем операции суммы, вычитания.

Ділення /

Множення *

Додавання +

Віднімання -

Ділення за модулем %

Присвоєння =

int x = 3;

int y = 10;

int z;

z = x % y; // z = 3

Мы делим три на десять. Результат - 0,3. Отбрасываем ноль и берём остаток. Результат - 3.

Инкремент “++” – это  увеличение на единицу. Декремент “--” – это уменьшение на единицу

Поскольку операция инкремента (как и декремента) используется очень часто, арифметическое устройство процессора может выполнять её на аппаратном уровне, для чего имеется отдельная низкоуровневая команда. При этом инкремент выполняется намного быстрее, чем если бы производилось прибавление единицы к числу обычным способом. Поэтому запись ++x предпочтительнее, чем x = x + 1 или x += 1 10) Математичні функції в мові С++.

abs - абсолютне значення (модуль) acos, acosl - арккосінус asin, asinl - арксінус atan, atanl - арктангенс atan2, atan2l - арктангенс2 cabs, cabsl - абсолютное значение комплексного числа ceil, ceill - округление вверх, наименьшее целое, не меньшее х cos, cosl - косинус cosh, coshl - косинус гиперболический exp, expl - экспонента fabs, fabs - абсолютный модуль дроби floor, floorl - округление вниз, наибольшее целое, не большее х fmod, fmodl - остаток от деления, аналог операции % frexp, frexpl - разделяет число на мантиссу и экспоненту hypot, hypotl - гипотенуза labs - модуль длинного целого ldexp, ldexpl - произведение числа на два в степени exp log, logl - логарифм натуральный log10, log101 - логарифм десятичный modf, modfl - разделяет на целую и на дробную часть poly, polyl - полином pow, powl - степень pow10, pow10l - степень десяти sin, sinl - синус sinh, sinhl - синус гиперболический sqrt, sqrtl - квадратный корень tan, tanl - тангенс tanh, tanhl - тангенс гиперболический

11) Логічні оператори.

Логічні оператори повертають логічне значення на підставі логічних значень його операндов. Є наступні три логічні оператори: AND, OR і NOT.

Оператор AND

Використання :

Expr1 && Expr2

Логічний AND повертає оператор true, якщо обидва логічних вирази та Expr1 і Expr2 мають однакове значення. Інакше, повертається false.

Оператор OR

Використання:

Expr1 || Expr2

Логічний OR' повертає оператор true, якщо хоча б одне з логічних виразів або Expr1 або Expr2 має значення true. Якщо і Expr1 і Expr2 мають значення false, то повертається значення false.

Оператор NOT

Використання:

!Expr

Логічний оператор NOT' - унарний оператор, який заперечує вислів операнда Expr. Тобто якщо Expr мав значення true, то повертає false, і якщо Expr мав значення false, то повертає true.

12) Ввод та вивід даних в мові С++.

Просте виведення здійснюється за допомогою стандартного потоку cout:

cout << "Введіть своє ім’я:"; //Виведення даних

Потік використовує оператор вставки <<, для виведення на стандартний пристрій виведення. Гнучкість використання cout підсилює те, що можна вказувати декілька значень.

cout << cName <<  "–"   // виведення імені << nAge << "років";     // виведення віку

Основна бібліотека введення-виведення потоку в C++ має об’єкт cin і оператор вилучення >>, як двійники об’єкта cout і оператора вставки<< . Так, ввести число можна, записавши:

cin >> nAge; //Введіть вік

Для того, щоб ввести символьний рядок, існує спеціальна функція cin.getline(…), яка має два або три параметри: типу символьний радок, типу int та необов’язковий символ-розділювач (якщо його пропустити, замовчуванням — ’\n’):

const int MAX=10;  //Максимальна довжина символьного рядка char cName[MAX+1];  //Символьний масив, для зберігання імені cin.getline(cName, MAX); //Ввести ім’я

Використовується компонент-функція getline(…), щоб ввести рядок символів. Ця функція зберігає знаки в символьному масиві cName. Аргумент MAX визначає максимальну кількість символів, яку можна ввести.

/* Програма на C++, яка ілюструє введення-виведення */ #include <iostream.h> /*включити заголовочний файл – бібліотеки потоку, яка підтримує введення-виведення*/ void main()             // функція main, за замовчуванням {                               // починається виконання програми const int MAX=100;              // оголошення константи int nAge;                               // оголошення простої змінної char cName [MAX+1];     // оголошення одномірного масиву cout <<"Enter your name:";      // запрошення для введення імені cin.getline(cName, MAX);        // введення імені cout <<"Enter your age:";       // запрошення для введення віку cin >>nAge;                             // введення віку cout << "\n\n";                 // пропустити два пустих рядки cout << cName << " is "         // вивести ім'я << nAge << " years old";        //вивести вік }

Потоки

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

  • В Unix і споріднених системах, заснованих на мові програмування C, потік — це джерело або призначення даних, зазвичай індивідуальних байтів або знаків. Потоки — це абстракція, що використовується наприклад при читанні або записі файлів, або при зв'язку з вузлами мережі. Три стандартні потоки передвизначені і доступні для всіх програм. В мові C++ концепція потоків реалізована у бібліотеці iostream і низці похідних від неї. Файлова система може підтримувати багато іменнованих незалежних потоків для одного файлу. Є один головний потік, який передає нормальні дані з файлу. Додаткові потоки можуть використовуватися, щоб запам'ятати іконки, короткий звіт і індексацію інформації, зональну інформацію (для файлів, що завантажуються), тощо.[1]

  • Конвеєри можуть також розумітися, як потоки, також як і будь-яка необмежена (не упакована) інформація, що постачається периферійним пристроєм.

  • У мові програмування Scheme і деяких інших, потік — ліниво оцінена або затримана послідовність елементів даних. Потік може використовуватися так само як список, але останні елементи обчислюються тільки тоді, коли потрібно. Тому потоки можуть представити нескінченні послідовності.[2]

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

Символи escape-послідовності.

Escape послідовності (символьні об'єкти)

деякі символи, такі як <, використовуються в html y спеціальному

значенні, тому повинний існувати засіб їхнього вираження, як символьних

даних усередині самого документа або в url. ці символи кодуються

спеціальними послідовностями. escape послідовності або, точніше, символьні

об'єкти, являють собою метод уявлення спеціальних символів. наприклад,

escape послідовність < позначає символ "менше ніж" (<). прийнято

використовувати такі нотації (відповідності)

Символ

escape посл-ть

Символ

<

<

>

>

&

&

"

"

Безвідривна прогалина

 

Слова, розділені цією

прогалиною, завжди розташовуються

на одній строчці

©

©

Копирайт

о

°

Знак градуса

®

®

зарегистрир. торг. Марка

"

”

Подвійні закриваючі лапки

"

“

Подвійні відкриваючі лапки


подвійні лапки (") можуть використовуватися й у межах звичайного

тексту. зауважимо, що точка з комою є частиною escape послідовності, але в

принципі вона може бути опущена. проте одні браузери опрацюють такий код

html, a інші можуть і не зрозуміти.

у escape послідовності важливий варіант написання символів, тобто

різняться заголовні і малі літери. наприклад, амперсанд (&) не може бути

подана як &амр (escape послідовність - невизначена). escape послідовність

ä i ä - а умляут (а диерезис, написання а із двома точками над ній) -

позначає два різних символи і дає д і д. escape послідовність написана

прописними буквами ідентифікується як ä.

необхідність у вищезгаданих escape послідовностях виникає із синтаксису

html. насправді, escape послідовності існують для всіх символів у наборі iso

latin i. є escape послідовності, що розуміють не всі браузери. такими

послідовностями користуватися не рекомендується.

13)Вказівники

В інформатиці існує цілий ряд задач, у яких використовуються динамічні структури даних. Динамічними структурами даних вважаються такі, розмір яких заздалегідь невідомий і (чи) змінюється в процесі виконання програми, чи розмір структури перевищує 64 Кбайт. Зв'язані структури є динамічними до них відносяться: списки, стеки, черги, графи, дерева..     Динамічне розміщення даних передбачає використання динамічної пам'яті. Динамічна пам'ять (куча) - це оперативна пам'ять комп'ютера, надана програмі при її роботі за винятком сегмента даних, стека, пам'яті використовуваної системними і резидентними програмами, і власне тілом самої програми, що виконується. Розмір динамічної пам'яті можна встановлювати з середовища чи із самої програми спеціальними директивами компілятора.     Кучі спочатку завжди вільна і заповнюється від нижніх адрес в області кучі. За станом кучі можна стежити за допомогою спеціально визначених у мові Pascal перемінних типу вказівник (Pointer):  HeapOrg - містить у собі адреса початку кучі, її значення не змінюється в процесі виконання програми;  HeapPtr - містить у собі початок ще невикористаної безперервної ділянки кучі. Кожен раз, коли в кучі розміщається нова змінна, значення цього вказівника змінюється на розмір цієї перемінної;  FreePtr - указує на кінець кучі (список вільних блоків кучі).

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

    Усі вказівники мають однаковий розмір - 4 байт. Значення вказівників представляються у вигляді двох величин типу Word ( сегмент : зсув) і розташовуються в статичній пам'яті. Їх не можна ввести з клавіатури і вивести на пристрої виведення. Для значень вказівників визначена константа Nil. Її значення 0000:0000. Існує два види вказівників: типізовані і нетипізовані. Вони сумісні між собою, але ті величини на які вони вказують несумісні.

Динамічна пам’ять

Динамічна пам`ять представляє собою масив пронумерованих комірок, які не мають імені; адреса першої такої комірки записана у вказівник. Динамічна пам`ять не очищується до завершення програми. Відповідальність за неї повністю покладається на програміста. Область динамічної пам`яті не може бути використана повторно, поки не буде звільнена явно. Перевагою динамічної пам`яті є те, що доступ до даних в ній можна отримати лише з використанням тих функцій, які володіють доступом до вказівника на динамічну пам`ять. Це дозволяє уникнути випадкової зміни даних.

Команди new та delete.

В С++ управление памятью сводится к использованию операторов new или delete. Для разных классов кода могут использоваться различные политики выделения памяти, которые в случае необходимости используют оператор new, относящийся к данному классу. В противном случае, глобальные операторы new или delete должны быть переопределены. Операторы могут быть загружены одним из способов, показанных в листинге 2.

Листинг2. Загрузка операторов new или delete

void* operator new(size_t size);

void operator delete(void* pointerToDelete);

-OR-

void* operator new(size_t size, MemoryManager& memMgr);

void operator delete(void* pointerToDelete, MemoryManager& memMgr);

Переопределение оператора new зависит от размера выделенной свободной памяти, значение которого указано в первом аргументе. Оператор delete очищает эту память. Обратите внимание, что эти команды только выделяют и перераспределяют память, а не вызывают соответствующие конструкторы или деструкторы. Конструктор загружается в память, выделенную оператором new, а оператор delete вызывается только после того, как деструктор уничтожит объект.

Во втором варианте new является оператором placement new, которому присвоен аргумент MemoryManager, как правило, являющийся структурой данных для выделения свободной памяти, в которую затем загружается конструктор объекта. Исходя из задач данного руководства, мы рекомендуем использовать первый вариант использования операторов new или delete поскольку размещение переменных приводит к значительному увеличению количества аргументов MemoryManager& в пользовательском коде, тем самым, входя в противоречие с удобством для пользователя.

Мы используем класс MemoryManager для выделения и перераспределения памяти с помощью операторов new и delete, служащих в качестве контейнера для следующих команд класса MemoryManager, как показано в листинге 3:

Листинг 3. Использование операторов new, new[ ], delete и delete[ ] в качестве оболочки.

MemoryManager gMemoryManager; // Memory Manager, глобальная переменная

void* operator new (size_t size)

{

return gMemoryManager.allocate(size);

}

void* operator new[ ] (size_t size)

{

return gMemoryManager.allocate(size);

}

void operator delete (void* pointerToDelete)

{

gMemoryManager.free(pointerToDelete);

}

void operator delete[ ] (void* arrayToDelete)

{

gMemoryManager.free(arrayToDelete);

}

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

  • фіксоване ім'я (назва файлу) (послідовність символів, число чи щось інше, що однозначно характеризує файл);

  • певне логічне представлення і відповідні йому операції читання/запису.

На практиці це іменований блок інформації, який зберігається на носії інформації.

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

В інформатиці використовується наступне визначення: файл - це впорядкована сукупність даних, що зберігається на диску і займає іменовану область зовнішньої пам'яті. Згідно з термінологією, прийнятою в програмуванні, файл — це довільний блок інформації, пристрій вводу-виводу. Кожна комп'ютерна програма відкриває принаймні три файли стандартних потоків: вхідний файл (stdin), вихідний файл (stdout), файл виводу повідомлень про помилки (stderr). Вхідний файл зазвичай асоціюється із клавіатурою, вихідний файл та файл виводу помилок- із екраном терміналу, проте кожен із цих файлів може бути перенаправлений на інший носій інформації, наприклад, на дисковий файл, про який мовилося вище, на мережу, яка також є файлом, на контролер будь-якого периферійного пристрою комп'ютера, зчитувача інформації тощо. Файлом може бути також ділянка оперативної пам'яті програми.

Зчитування даних з файлу

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

Тому що типізовані файли мають компоненти фіксованої довжини, існує можливість організувати прямий доступ. Для організації прямого доступу до компонент файлу існують стандартні процедури Seek, FilePos, FileSize :

 

Seek(,);

FilePos();

FileSize().

 

Процедура Seek здійснює прямий доступ до будь-якого компонента файлу. Тут - позиція покажчика компонент файлу. Вона може приймати наступні значення:

+1 - установити покажчик на наступну компонент;

-1 - установити покажчик на попередню компонент;

і - установити покажчик на i-ту компоненту.

Процедура FilePos визначає номер поточної позиції у файлі, а точніше номер поточної компоненти.

Процедура FileSize визначає розмір зазначеного файлу - кількість компонент. Нумерація компонентів починається з нуля.

Приклад:

 

Type RecFile = record { запис даних по студенту }

Fam, Name, Otch : string[15];

GodR : word;

NGrup : string[10];

     end;

Var i : integer;

      Buf : RecFile;

      FilStud : file of RecFile;

Begin

   Assign(FilStud, 'Stud.dat');

   Reset(FilStud);

   i:= FileSize;

   WriteLn('У файлі ', і, ' компонент');

    Seek(FilStud, і-1);

    Read(FilStud, Buf);

    Buf.God:= '1973';

    Seek(FilStud, -1);

    Write(FilStud, Buf);

    Close(FilStud);

End.

 

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

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

 

Reset(, );

ReWrite(, ).

 

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

Читання компонентів з файлу і запис їх у файл виконується процедурами BlockRead і BlockWrite:

 

BlockRead(, ,<<span style="">  компонент, що зчитуються за один раз >, [,]);

BlockWrite(,,, [,<  компоненти, що записуються >]).

15) Умовний оператор

Управління послідовністю дій, під час виконання сценарію, виконувався за допомогою операторів. JavaScript містить стандартний набір операторів, успадкований від мов C++ та Java:

  • умовний оператор if…else;

  • оператор вибору switch;

  • операторы циклу for, while, do…while, break и continue;

  • оператор ітерації for…in;

  • оператор вказання обекту with;

Будь який вираз JavaScript також є оператором.