МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
ПРОСТІ ПРОГРАМИ ЛІНІЙНОЇ СТРУКТУРИ
ІНСТРУКЦІЯ ДО ЛАБОРАТОРНОЇ РОБОТИ № 5
З КУРСУ “АЛГОРИТМІЧНІ МОВИ І ПРОГРАМУВАННЯ”
для студентів спеціальностей:
7.160102 «Захист інформації з обмеженим доступом та автоматизація її обробки»
7.160103 «Системи захисту від несанкціонованого доступу»
7.160104 «Адміністративний менеджмент в сфері захисту інформації з обмеженим доступом»
7.160105 «Захист інформації і комп'ютерних системах і мережах»
Затверджено на засiданнi кафедри “Захист інформації”,
протокол №____від___._______2009 р.
Львів – 2009
Прості програми лінійної структури: інструкція до лабораторної роботи №5 з курсу “Алгоритмічні мови і програмування” для студентів спеціальностей 7.160102 «Захист інформації з обмеженим доступом та автоматизація її обробки», 7.160103 «Системи захисту від несанкціонованого доступу», 7.160104 «Адміністративний менеджмент в сфері захисту інформації з обмеженим доступом», 7.160105 «Захист інформації і комп'ютерних системах і мережах».
/ Укл.: В.І. Отенко, Б.Д. Будз, О.І. Гарасимчук - Львів: НУЛП, 2009.- 16 с.
Укладачі: В.І. Отенко, к.т.н., доцент,
О.І. Гарасимчук, к.т.н., доцент,
Б.Д. Будз, асистент.
Відповідальний за випуск: __________________________________.
Рецензент: __________________________________.
Мета роботи - вивчити принципи об’єктно-орієнтованого програмування на прикладі алгоритмічної мови C#. Навчитися складати та відлагоджувати прості розрахункові програми лінійної структури.
1. ОСНОВНІ ТЕОРЕТИЧНІ ВІДОМОСТІ
Головне в мові С# – реалізація принципів об’єктно-орієнтованого програмування (ООП). Об’єктно-орієнтовна методика невіддільна від С# і всі С#-програми в якійсь мірі мають об’єктну орієнтацію. Тому, перш ніж приступати до написання навіть простої С#-програми, необхідно зрозуміти основні принципи ООП.
Для підтримки принципів об’єктно-орієнтованого програмування всі ООП–мови, включаючи С#, мають три характерні риси: інкапсуляцію, поліморфізм і наслідування.
Інкапсуляція – це механізм програмування, який зв’язує код (дії) і дані, якими він маніпулює, і при цьому охороняє їх від втручання зовні і неправильного використання. В об’єктно-орієнтованій мові код і дані можна зв’язати таким чином, що буде створений автономний чорний ящик. В середині цього ящика находиться всі необхідні дані і код. При такому зв’язку коду і даних утворюється об’єкт. Іншими словами, об’єкт – це елемент, який підтримує інкапсуляцію.
Код, дані чи обидві ці складові об’єкта можуть бути закритими в середині нього або відкритими. Закритий код або закриті дані відомі лише іншій частині цього об’єкта і доступні тільки їй. Це означає, що до закритого коду або даних не може отримати доступ жодна інша частина програми, яка існує не в цьому об’єкті. Якщо код або дані є відкритими, то до них (незважаючи на то, що вони визначені всередині об’єкта) можуть отримати доступ інші частини програми. Як правило відкриті частини об’єкта використовуються для забезпечення керованого інтерфейсу з закритими елементами.
Основною одиницею інкапсуляції в С# є клас. Клас визначає форму об’єкта. Він задає як дані, так і код, який буде керувати цими даними. В С# клас використовується для створення об’єктів. Об’єкти – це екземпляри класу. Таким чином, клас – це по суті набір шаблонних елементів, які показують, як побудувати об’єкт.
Коди і дані, які складають клас, називаються членами класу. Дані, визначені в класі називаються змінними екземплярами (instance variable), а код, який оперує цими даними, – методами-членами (member method), або просто методами. «Метод» - це термін, який використовується в С# для позначення підпрограм. Якщо ви знайомі з мовою С або С++, то, можливо, здогадуєтеся про те, що те , що С# – програміст називає методом, С/С++ – програміст називає функцією. А оскільки С# – прямий нащадок С++, термін «функція», також прийнято використовувати, коли мова йде про C#-методи.
Поліморфізм – це властивість яка дозволяє одному інтерфейсу отримувати доступ до цілого класу дій. Розглянемо, наприклад, стек, тобто область пам’яті, яка функціонує за принципом “останній прийшов – першим буде обслужений”. Припустимо що випишете програму, для якої необхідно організувати три різних стека. Один стек призначений для цілочисельних значень, другий для значень з плаваючою комою, а третій для символів. В цьому випадку для реалізації кожного стеку використовується один і той самий алгоритм, не дивлячись на різницю в типах даних що зберігаються. Тобто завдяки поліморфізму в середовищі С# можна створювати один спільний набір “стекових” підпрограм, який обробляє всі три типи стеку.
Концепцію поліморфізму часто виражають такою фразою “один інтерфейс – багато методів”. Це означає, що для виконання групи подібних дій можна розробити спільний інтерфейс.
Наслідування – це процес завдяки якому один об’єкт може отримувати властивості другого. Завдяки наслідуванню підтримується концепція ієрархічної класифікації у вигляді якої організується більшість областей знань.
Якщо б не використовувати ієрархічне подання ознак, для кожного об’єкта необхідно було б в явні формі визначити всі властиві йому характеристики. Але завдяки наслідуванню об’єкту необхідно до визначити лише ті якості, які роблять його унікальними всередині його класу, оскільки цей об’єкт наслідує загальні атрибути свого батьківського класу.
Ідентифікатори
В С# ідентифікатор являє собою ім'я, яке присвоєне методу, змінній чи іншому елементу, визначеному користувачем. Ідентифікатори можуть складатися з одного або декількох символів. Імена мінних повинні починатися з букви або символу підкреслення. Наступним символом може бути буква, цифра і символ підкреслення. Символ підкреслення можна використовувати для покращення читабельності іменні змінної, наприклад max_a. В С# малі та великі букви сприймаються як різні символи. Варто особливо пам’ятати, що ідентифікатор не повинен починатися з цифри. В якості ідентифікаторів не можна використовувати ключові слова мови С# (в мові С# є 77 зарезервованих ключових слів).
Коментарі
Довільний рядок програми, який починається з символів // або /// – є звичайним текстом, призначеним для людини і повністю ігнорується С#. // та /// розглядаються я к еквіваленті символи початку коментарю.
Константи
Додавання перед змінною ключового слова const при її оголошенні та ініціалізації помічає її як константу. Таким чином константа – це змінна значення якої не може бути змінено протягом всього часу тривалості її життя.
const int a=100 //ця величина не може змінюватися.
Типи даних
Типи даних в С# мають особливе значення, оскільки С# строго типізована мова. Це означає, що всі операції перевіряються компілятором на відповідність типів. Некоректні операції не компілюються. Крім того, тип значення визначає, які операції дозволяється виконувати з таким значенням.
В С# строго визначається діапазон та поведінка кожного типа значень.
Типи значень в С# наведені в табл.1
Таблиця 1
Ключове слово
Тип
bool
Логічний, або булевий, надає значення істина/хибність
byte
8-ми розрядний цілочисельний без знака
char
Символьний
decimal
Числовий тип для фінансових обчислень
double
З плаваючою точкою подвійної точності
float
З плаваючою точкою
int
Цілочисельний
long
Тип для представлення довгого цілого числа
sbyte
8-ми розрядний цілочисельний зі знаком
short
Тип для представлення короткого цілого числа
uint
Цілочисельний без знака
ulong
Тип для представлення довгого цілого числа без знаку
ushort
Тип для представлення короткого цілого числа без знаку
Характеристики цілочисельних типів наведені в табл.2:
Таблиця 2
Тип
Розмір в байтах
Діапазон значень
byte
8
0 – 255
sbyte
8
-128 – 127
short
16
-32768 – 326767
ushort
16
0 – 65535
int
32
-2 147 483 648 – 2 147 483 647
uint
32
0 – 4 294 967 295
long
64
-9 223 372 036 854 775 808
– 9 223 372 036 854 775 807
ulong
64
0 – 18 446 744 073 709 551 615
Характеристики типів з плаваючою комою наведені в табл.3:
Таблиця 3
Тип
Розмір в байтах
Діапазон значень
double
8
Від 1.5*10-45 до 3.4*1038
float
16
Від 5*10-324 до 1.7*10308
Керуючі послідовності символів наведені в табл.4.
Таблиця 4
ESC-послідовність
Опис
\a
Звуковий сигнал (дзвінок)
\b
Повернення на одну позицію
\f
Подача сторінки (для переходу на іншу сторінку)
\n
Нова сторінка
\r
Повернення каретки
\t
Горизонтальна табуляція
\v
Вертикальна табуляція
\0
Нуль символ
\’
Одинарні лапки (апостроф)
\”
Подвійні лапки
\\
Зворотна коса риска
Арифметичні оператори
Арифметичні оператори мори С# наведені в табл.5:
Таблиця 5
ОПЕРАТОР
ДІЯ
+
Додавання
-
Віднімання, унарний мінус
*
Множення
/
Ділення
%
Ділення за модулем
--
Декремент
++
інкремент
Дія в С# операторів +,-,* та / співпадає з дією аналогічних операторів в будь-якій іншій мові програмування. Їх можна використовувати для довільних даних числового типу.
Оператори відношення та логічні оператори
Оператори відношення наведені в табл. 6:
Таблиця 6
ОПЕРАТОР
ЗНАЧЕННЯ
==
Рівне
!=
Не рівне
>
Більше
<
Менше
>=
Більше або рівне
<=
Менше або рівне
Логічні оператори наведені в табл.7:
Таблиця 7
ОПЕРАТОР
ЗНАЧЕННЯ
&
І
|
АБО
^
Виключне І
&&
Скорочене І
||
Скорочене АБО
!
НІ
Результат виконання операторів відношення та логічних операторів має тип boolean.
Оператор присвоєння:
Оператор присвоєння позначається одинарним знаком рівності (=). Загальна форма запису оператора присвоєння має наступний вигляд:
Змінна = вираз;
Тип елемента змінна повинен бути співставним з типом елемента вираз.
Пріоритет операторів
В таблиці 8 показано порядок дій операторів в мові С#. оператори у верхній частині таблиці мають найвищий пріоритет (тобто у виразах, які містять декілька операторів, вони обчислюються першими)
Таблиця 8
Група
Оператори
Унарні
+ – ! ~
Множення/ділення
* / %
Додавання/віднімання
+ -
Операції побітового зсуву
<< >>
Відношення
< > <= >=
Порівняння
== !=
Побітовий AND
&
Побітовий XOR
|
Побітовий OR
^
Логічний AND
&&
Логічний OR
||
Присвоєння
= += -= *= /= %= і т.д.
Модифікатори доступу.
До визначення змінної можна додавати модифікатори, які служать для вказування додаткових параметрів змінної. Існують наступні модифікатори доступу: internal, private, protected і public. В оголошенні змінної може вказуватися лише один з цих модифікаторів, за виключенням спільного використання модифікаторів protected та internal. Таким чином існує п’ять можливих рівнів доступу, описані в табл.9:
Таблиця 9
Рівень доступу
Опис
public
Члени доступні з будь-якого місця програми
internal
Члени доступні з будь-якого класу в тому ж модулі програми
protected
Члени доступні лише з поточного класу і всіх його підкласів.
protected internal
Члени доступні для поточного класу і всіх його підкласів в тому ж модулі програми
private
Члени доступні лише з поточного класу
Введення в класи.
Класс – це шаблон, який визначає форму об’єкта. Він захищає як дані так і код , який оперує цими даними. С# використовує специфікацію класу для створення об’єкта. Об’єкти – це екземпляри класу. Таким чином, клас – це множина намірів (планів), які визначають, як повинен бути побудований об’єкт.
Визначаючи клас, ви визначаєте дані, які він містить, і код, який маніпулює цими даними.
Клас створюється за допомогою ключового слова class. Загальна форма визначення класу має наступний вигляд:
Class ім’я класу {
//оголошення змінних
доступ тип змінна 1;
доступ тип змінна 2;
//…
доступ тип змінна N;
// Оголошення методів
доступ тип_повернення метод 1 (параметри)
{
// тіло методу
}
доступ тип_повернення метод 2 (параметри)
{
// тіло методу
}
//…
доступ тип_повернення метод N (параметри)
{
// тіло методу
}
}
Елемент доступу означає специфікатор доступу (наприклад, public), який визначає як до цього члена можна отримати доступ. Специфікатор доступу є необов’язковим, і, якщо він не вказаний, то мається на увазі, що цей член закритий (private). Закриті члени можуть лише використовуватися тільки іншими членами свого класу.
Вважається, що клас повинен визначати лише одну логічну сутність.
Створення об’єктів
Базові типи мови С# (int, char та ін.) являються розмірними та зберігаються в стеці. Об’єкти зі своєї сторони, мають тип посилання і створюються за допомогою ключового слова new:
Time t = new Time()
Тут змінна t не містить значення об’єкта Time, а містить адресу об’єкта (безіменного). Сама змінна t є лише посиланням на цей об’єкт.
Конструктори
Ззовні оператор який створює об’єкт виглядає як виклик методу. Дійсно при створенні екземпляру відбувається звертання до методу. Він називається конструктором і програміст повинен визначити його як частину визначення класу. Задача конструктора полягає в тому, що він повинен створити об’єкт вказаного класу і перевести його в діючий стан. До виклику конструктора об’єкт являє собою неініціалізовану область пам’яті, по закінченню його роботи ця пам'ять містить діючий екземпляр даного класу.
Клас Math
В класі Math визначено багато стандартних математичних операцій. Деякі з методів визначених в класі Math наведені в наступній табл.10:
Таблиця 10
Метод
Опис
Abs (x)
Повертає абсолютне значення x
Acos (x)
Повертає арккосинус x
Asinx (x)
Повертає арксинус x
Atan (x)
Повертає арктангенс x
Log (x)
Повертає натуральний логарифм х
Log (x,y)
Повертає логарифм для параметра х за основою у
Log10 (х)
Повертає логарифм для параметра х за основою 10
Max (x,y)
Повертає більше з значень x, y
Min (x,y)
Повертає менше з значень х, у
Pow (x,y)
Повертає значення х піднесене до степеня у
Round (x)
Повертає значення х округлене до найближчого цілого числа
Sin (x)
Повертає синус параметра х
Sinh (x)
Повертає гіперболічний синус параметра х
Tan (x)
Повертає тангенс параметра х
Tanh (x)
Повертає гіперболічний тангенс параметра х
2. ПОЧАТОК РОБОТИ В СЕРЕДОВИЩІ С#
Запуск Visual Studio 2005. Для запуску Visual Studio 2005 виберіть команду меню ПУСК→ПРОГРАМИ→Microsft Visual C# 2005 Express Edition, або запустіть з робочого стола за допомогою ярлика, як показано на рис.1.
Рис.1. Запуск Microsft Visual C# 2005 Express Edition з меню ПУСК і за допомогою ярлика.
Створення консольної програми. Виберіть в меню команду File→New→Project, Visual Studio відкриє діалогове вікно як показано на рис.2.
Рис.2. Діалогове вікно створення нового проекту.
В панелі Templates виберіть піктограму Console Application, в рядку Name введіть назву свого проекту. Завантажиться шаблон програми, який можна буде редагувати для конкретних завдань. По замовчуванню ім’я консольної програми має назву ConsoleApplication1.
Visual Studio вимагає створення проекту перед тим, як ви зможете почати вводити вихідний текст вашої програми. Проект можна розглядати як кошик, в якому зберігаються всі файли, необхідні для розроблення програми.
Після того як ви натиснете кнопку ОК Visual Studio згенерує файл Program.cs. Розширення вихідних файлів С# - *.cs. Ім’я Program – це ім’я по замовчуванню, яке присвоюється файлу програми.
Вміст вашої першої консольної програми виглядатиме так:
using ...
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
}
}
}
Вздовж лівої границі вікна ви побачите декілька маленьких плюсів (+) і мінусів (-) в квадратиках. Клацніть на знак + біля using ... . Цією дією ви відкриєте область коду – це досить зручна можливість Visual Studio яка дозволяє зменшити кількість тексту на екрані, згортаючи області коду і ховаючи його від очей програміста, але не компілятора.
Області коду помагають сфокусуватись на коді, з яким ви працюєте, приховуючи код, який на даний момент не є необхідним. Деякі блоки коду, такі як блок класів, методів і ін., отримують значки +/- автоматично, без директиви #region. Ви можите включити у вихідний текст власні згортаючі області, добавляючи #region над частиною коду який хочите хгорнути і #endregion після нього.
Запуск на виконання.
Щоб перетворити вихідний текст програми С# у виконавчу програму ConsoleApplication1.exe, скористайтесь командою меню Build→Build ConsoleApplication1. Результатом виконання даної команди буде згенероване повідомлення, в якому буде відображеня службова інформація про результат перевірки. Для запуску програми скористуйтесь командою меню Debug→Start Without Debugging. Програма виведе на екран чорне консольне вікно і одразу завершиться.
Для того щоб відкрити вікно DOS, спробуйте скористатися командою меню Tools→Command Window. Якщо ця команда недоступна у вашому меню Tools, скористуйтесь командою меню Start→All Programs→Microsoft Visual Studio 2005→Visual Studio Tools→Visual Studio 2005 Command Prompt.
Схема програми.
Базова схема всіх консольних програм починається з наступного коду:
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{
class Program
{//Стартова точка програми
static void Main(string[] args)
{
//Ваш код
}
}
}
Програма починає виконання з першого рядка, який йде після назви функції Main(), і закінчується її закриваючою фігурною дужкою. Список директив using може знаходитись безпосередньо до або після рядка namespace ConsoleApplication1 {.
Тіло програми.
Створимо програму привітання.
using System;
namespace ConsoleApplication1
{//Фігурні дужки
//Клас Program – обєкт, який містить код
class Program
{//Це початок програми
//Кожна програма має метод Main()
static void Main(string[] args)
{//Запрошення ввести імя користувача
Console.WriteLine(“Будь-ласка, введіть ваше імя:”);
//Зчитування імя яке вводиться
string sName = Console.ReadLine();
//Вітання користувачу з використання введеного імені
Console.WriteLine(“Добрий день,” +sName);
//Очікування підтвердження користувача
Console.WriteLine(“Нажміть <Enter> для завершення
програми...”);
Сonsole.Read();
//Код Main() на цьому закінчується
}//Кінець функції Main()
}//Кінець класу Program
}//Кінець простору імен ConsoleApplication1
Ядро програми розміщене в блоці вихідного тексту, поміченого як Main():
//Запрошення ввести імя користувача
Console.WriteLine(“Будь-ласка, введіть ваше імя:”);
//Зчитування імя яке вводиться
string sName = Console.ReadLine();
//Вітання користувачу з використання введеного імені
Console.WriteLine(“Добрий день,” +sName);
Ви можете зекономити багато часу, використовуючи при вводі нову можливість – Code Snippets (фрагменти коду), яка полегшує ввід розповсюджених інструкцій, таких як Console.WriteLine. натисніть комбінацію клавіш <Ctrl+K>, і <Ctrl+X> для появи розгортаючого меню Code Snippets. Прокрутіть його до cw і натисніть клавішу <Enter>. Visual Studio вставить в тіло програми інструкцію Console.WriteLine() з точкою вводу між дужками.
Програма почне роботу з першої інструкції С#: Console.WriteLine. Ця команда виводить на екран рядок Будь-ласка, введіть ваше імя:.
Наступна інструкція зчитує рядок введений користувачем і зберігає його в змінній з іменем sName. В останньому рялку виконується обєднання рядків Добрий день з введеним іменем користувача, а також вивід рядка який утворився на екран.
Останні рядки заставляють компютер очікувати, поки користувач не натисне клавішу <Enter>.Ці рядки забезпечують зупинку виконання програми, щоб був час переглянути на екрані результат її роботи.
Побудова блок-схем алгоритмів програм.
Основні умовні графічні позначення для побудови блок-схем алгоритмів програм та правила їх використання наведені в табл.11.
Таблиця 11
Умовне графічне позначення
Правила використання
Початок програми (підпрограми)
Кінець програми (підпрограми)
Введення/виведення даних для стандартних пристроїв введення-виведення (клавіатура, дисплей); у межах блока вказуються ідентифікатори змінних для введдення даних або вирази, значення яких виводяться
Виконання дій; у межах блока вказуються дії, які необхідно виконати. У даному випадку обчислюється значення виразу і обчислене значення присвоюється змінній
Розгалуження алгоритму програми залежно від виконання умови; у межах блоку вказується вираз, результат якого визначає подальший хід виконання алгоритму програми
Виконання циклу; у межах блоку вказуються межі діапазону значень параметру циклу та алгоритм (вираз), за яким змінюється параметр циклу
Виконання підпрограми (процедури чи функції); у межах блоку вказується заголовок (ім’я та параметри) підпрограми(процедури чи функції)
Виведення даних на папір (принтер); у межах блока вказується список виразів, значення яких виводяться
Лінії з’єднань між блоками
Перехід на іншу сторінку; використовуються, якщо блок-схема розташована на кількох сторінках; N і М - відповідно, номер сторінки і блоку до яких здійснюється перехід, К і L -відповідно, номер сторінки і блоку від яких здійснюється перехід
Перехід у межах однієї сторінки; замість цифр можна використовувати літери латинського алфавіту
ЗАВДАННЯ
Домашня підготовка до роботи
Ознайомитися з принципами об’єктно-орієнтованого програмування.
Ознайомитися з типами даних мови С#.
Ознайомитися з операторами та методами Console I Math.
Вивчити правила побудови ідентифікаторів, виразів та присвоєння значень змінним мови С#.
Ознайомитися з умовними графічними позначеннями для побудови блок-схем алгоритмів.
Скласти блок-схему алгоритму та програму мовою С# для розрахунку значення виразу. Забезпечити ввід значень аргументів з клавіатури і вивід результату розрахунку на дисплей. Дані для роботи беруться з табл.12 за вказівкою викладача.
Таблиця 12
№ п/п
Вираз
Значення аргументів
1
x=12.603, y=11.591, z=0.588
2
x=5.678, y=8.942, z=0.588
3
x=0.894, y=10.456
4
x=10.541, z=8.991
5
x=0.489, y=5.441, z=0.291
6
x=12.689, y=0.593, z=1.842
7
x=0.894, y=13.464
8
x=10.894, y=6.445
9
x=8.499, y=0.586, z=1.941
10
x=0.357, y=2.031
11
x=1.769, y=1,235
12
x=0.067, y=3.017
13
x=5.168, z=1.569, y=3.022
14
x=2.134, y=0.129
15
x=0.013, z=1.245
16
y=7.315, z=3.127
17
x=1.839, y=3.821, z=0.349
18
x=1.549, y=7.317
19
x=4.123, y=2.395
20
x=0.712, y=3.161
21
x=166.124, z=15.839
22
x=12.394, y=7.139
23
z=9.761
24
x=2.14, y=0.578
25
x=1.155, y=3.981
26
x=15.241, y=7.118
27
x=2.632, y=0.731
28
x=3.142, z=0.543
29
x=4.112, y=1.628
30
x=2.361, y=1.149
31
x=2.735, z=7.218
32
y=6.153, z=1.001
33
x=2.531, y=0.193
34
x=4.597, y=7.954
35
x=1.413, y=0.057
Робота в лабораторії
1. Ознайомитися з основними засобами введення, відлагодження та компіляції програми системи програмування С#.
2. Ввести в комп'ютер програму, написану мовою С# згідно з отриманим завданням.
3. Відлагодити програму. При необхідності скоригувати блок-схему алгоритму та програму у відповідності з виявленими логічними та синтаксичними помилками.
4. Остаточні версії блок-схеми, програми та отримані результати занести у звіт з лабораторної роботи.
5. Здати та захистити звіт з лабораторної роботи.
3. ЗМІСТ ЗВІТУ
1. Номер і назва лабораторної роботи.
2. Повний текст завдання.
3. Остаточна версія блок-схеми алгоритму.
4. Список ідентифікаторів констант, змінних, процедур і функцій, використаних у блок-схемі алгоритму і програмі, та їх пояснення.
5. Остаточна версія програми.
6. Результати роботи програми.
7. Висновки по роботі.