Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
10-15.docx
Скачиваний:
3
Добавлен:
17.09.2019
Размер:
44.56 Кб
Скачать

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 також є оператором.

Операторы цикла

Цикл — это последовательность операторов, выполнение которой повторяется до тех пор, пока определенное условие не станет ложным. JavaScript содержит три оператора цикла: for, while и do…while, а также операторы break и continue, которые используются внутри циклов.

Близок к операторам цикла и оператор итерации for…in, используемый при работе с объектами.

Оператор выбора

Оператор выбора switch выполняет ту или иную последовательность операторов в зависимости от значения определенного выражения. Он имеет вид:

switch (выражение)

Оператор for…in

Оператор for…in выполняет заданные действия для каждого свойства объекта или для каждого элемента массива. Он имеет вид:

for (переменная in выражение) оператор

Здесь переменная — это декларация переменной, выражение — любое выражение, значением которого является объект или массив, оператор — любая группа операторов JavaScript; если эти группа содержит более одного оператора, то она должны быть заключена в фигурные скобки {}.

Оператор for…in выполняется следующим образом:

Оператор with

Оператор with задает имя объекта по умолчанию. Он имеет вид:

with (выражение) оператор

Здесь выражение — любое выражение, значением которого является объект, оператор — любая группа операторов JavaScript; если эти группа содержит более одного оператора, то она должны быть заключена в фигурные скобки {}.

Этот оператор действует следующим образом. Для каждого идентификатора в операторе исполняющая система проверяет, не является ли он именем свойства объекта, заданного по умолчанию. Если да, то этот идентификатор считается именем свойства, если же нет, то именем переменной.

Оператор with используется для сокращения размера программного кода и ускорения доступа к свойствам объектов. Например, для доступа к математическим функциям мы должны каждый раз указывать имя объекта Math:

x = Math.cos(Math.PI / 2) + Math.sin(Math.LN10); y = Math.tan(2 * Math.E);

С помощью оператора with этот фрагмент сценария можно существенно укоротить:

with (Math)

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]