Лекція
1. Місце програмування у сучасному житті
Комп’ютерна програма - послідовність інструкцій, призначена для використання керуючим
пристроєм обчислювальної системи (комп’ютера, програмованого
пристрою)
Виконання програми пов’язане з обробкою інформації
Інформація
- відомості про стан системи (об’єкта), які можуть існувати незалежно від системи (об’єкта)
Інформація не може бути передана, прийнята або
збережена в чистому вигляді. Носієм її є повідомлення. Таким чином, інформація
не існує сама по собі, а лише через використання носія
Збереження, обробка, передача інформації часто реалізується через переведення у
числову (кодову) форму. Це виконується не обов’язково комп’ютером!
Властивості
інформації :
<об’єктивність
< повнота
< достовірність
< адекватність
< доступність
< актуальність
Інформатика — теоретична та
прикладна (технічна, технологічна) дисципліна, що вивчає структуру і загальні
властивості інформації, а також методи і (технічні) засоби її створення,
перетворення, зберігання, передачі та використання в різних галузях людської
діяльності
Фундаментом інформатики є використання
обчислювальних систем і, відповідно, програмування!
Кодування -
встановлення співвідношення (таблиці
співвідношення) двох систем формальних об’єктів (переклад, шифрування та інше).
Кодом зветься форма представлення повідомлень,
в яких реалізовано деякі правила, що забезпечують відповідність між
повідомленнями і кодовими символами
Історія
розвитку обчислювальної техніки
Накопичення та класифікація інформації
(табулятори, стрічкові та карткові накопичувачі)
Складні методи обробки інформації для різних
галузей (персональні комп’ютери,
мікроконтролери)
Обробник
може бути:
< апаратним
< програмним
(програмно-апаратним)
Операнд — частина машинної команди, що визначає об’єкт, з яким виконується дія
Архітектура
комп’ютера
включає в себе:
< Архітектуру процесора
< Особливості реалізації
підсистеми пам’яті
< Реалізацію зовнішньої
периферії
< Оточення процесора
< Структуру зв’язків
Архітектура
процесора включає в себе:
< Систему команд
< Орієнтацію на визначені
типи даних
< Структуру блоку
виконання операцій
< Структуру системи
регістрів
< Структуру внутрішніх зв’язків
Система
команд повинна
забезпечувати:
< Однозначність
інтерпретації
< Функціональну
повноту
< Ефективність
реалізації
< Обмеженість та
нарощуваність
Включає у
себе формат (принципи побудови) та сукупність усіх можливих варіантів команди
Транслація
(в програмуванні) — перетворення
програми, яка подана однією мовою, в еквівалентну програму іншою мовою
Режими:
< Компіляція
< Інтерпретація
< Часткова компіляція (з подальшою інтерпретацією)
< Just in Time
Трансляція. Рівні мов/команд
< Мови високого
рівня
< Проміжний код
< Асемблер (мова низького рівня)
< Система команд
процесора
Проблеми
розробки програмних засобів
< Ефективність виконання
< Ефективність розробки
< Швидке зростання розмірів коду та його складності
< Стійкість,
надійність
< Сумісність
Засоби
розробки повинні забезпечити:
< підготовку та редагування тексту програми
< попередню
перевірку синтаксису
< Трансляцію та
збірку в рамках проекту
< Виконання
< Трасування та
відладку
< Розробку
ресурсів (допоміжних елемен-тів, необхідних для реалізації програми)
< Комфортність роботи розробника
< Систему
допомоги
Проект — (в комп’ютерних технологіях) сукупність файлів, які обробляються разом для реалізації результату
Лекція
2. Основи алгоритмізації
Аналогові та
цифрові засоби обчислення
Дія
аналогового комп’ютера заснована на операціях з неперервними фізичними
сигналами, що дозволяє виконувати операції (наприклад додавання, множення,
диференціювання або інтегрування) практично
миттєво, у реальному масштабі часу
Реалізація
може бути:
< механічною
< електричною
< оптичною
Недоліки:
< низька точність
< погана адаптивність
Причина
низької точності – саме неперервність сигналів, які використовуються
в аналоговому комп’ютері
Головний спосіб боротьби з цим – перехід до дискретного представлення даних, найпростішою реалізацією якого є ряд натуральних чисел
Плата за такий
перехід – потреба виконання (розгортання в часі) послідовності операцій
Звідси
ускладнення – потреба алгоритмізації (програмування), тобто визначення порядку дій
Система може
бути розділена на апаратну частину (неадаптовану) і програмну (що може
адаптуватись)
Дискретна обробка
Заснована на
використанні кодування сигналів числами
Кодування - встановлення співвідношення (таблиці співвідношення) двох систем формальних об’єктів. (переклад, шифрування та інше).
Робота з кодованими даними
Вимагає
визначення (домовленості про):
< спосіб
інтерпретації коду
< набір операцій
< узгодження логіки виконання (програмної частини системи) з виконавцем
команд і системою збереження кодових даних
Системи
числення
Дискретна обробка даних заснована на використанні кодування сигналів числами
сукупність
способів і засобів запису чисел для проведення підрахунків
Узгодження
з апаратною реалізацією:
< призводить до бінарної системи даних
Звідси – орієнтація на використання двійкової системи числення
Двійкова система числення
Для
довільної позиційної системи числення з основою N :
X=xm*Nm+xm-1*Nm-1+...+x2*N2 +x1*N1+x0*N0
Записується xmxm-1...x2x1x0
Наприклад, у звичній десятковій системі
2451=2*103+4*102+5*101+1*100
24.173=2*101+4*100+1*10-1+7*10-2 +3*10 -3
Якщо замість 10 взяти основу 2
10011=1*24+0*23+0*22+1*21+1*20=
1*16+0*8+0*4+1*2+1*1=19
0.1101=1*2-1+1*2-2+0*2-3+1*2-4 +…
10011.1101= 10011.0 + 0.1101
Поняття алгоритму
Алгоритм – система правил
виконання деякого процесу, що призводить до результату за обмежений час
Класичне визначення
Алгоритм – точний опис
виконання в зазначеному порядку операцій з деякої системи, що забезпечує розв’язок задеч певного класу за лічену кількість
кроків
Алгоритм – Система правил виконання обчислювального процесу, що обов'язково приводить до розв'язання певного класу задач після скінченного числа операцій
Властивості
алгоритму:
<детермінованість
(у буд-який момент часу однозначно визначає стан)
деяке виключення – статистичний алгоритм
<
результативність (обов’язкове
завершення результатом)
< завершуваність
(обмеженість кількості кроків)
< масовість (застосовуваність до довільного набору даних
в рамках певної задачі або класу задач)
<
зрозумілість (використовуються тільки
команди, зрозумілі виконувачу)
< елементарність
(кожен крок алгоритму має бути простим, елементарним, можливість виконання
якого не викликає сумнівів)
< дискретність (розчленованість процесу виконання алгоритму на окремі кроки)
Вважається,
що алгоритм не має помилок, якщо він забезпечує результат при буд-яких
допустимих наборах даних
Якщо при
деякому наборі даних алгоритм призводить до неправильного результату, або не
дає результату взагалі, він вважається таким, що має помилки
Ефективність
алгоритму
Для довільної задачі може існувати багато різних алгоритмів, що забезпечують досягнення результату.
Але різні алгоритми,
а в загальному випадку – при певних
особливостях набору даних – потребують різної кількості кроків (або часу
виконання, або інших ресурсів)
В загальному випадку ефективність алгоритму можна визначити за кількістю усіх потрібних для отримання результату ресурсів для даного класу задач з врахуванням усереднення (зваженого усереднення) по можливим наборам даних
Класифікація алгоритмів
Найпоширеніші
види алгоритмів:
< лінійний
алгоритм
< розгалужений
алгоритм
< циклічний алгоритм
< рекурсивний алгоритм
< паралельний
алгоритм
< статистичний алгоритм
Лінійним називається алгоритм, у якому операції виконуються послідовно, одна за
одною
Виконання кожної наступної операції починається тільки після завершення попередньої
Апаратні компоненти реалізації лінійного алгоритму
Порядок дій:
< вибірка команди
< інтерпретація команди
< вибірка
операнда (операндів)
< виконання команди
< запис результату
Апаратні
компоненти реалізації лінійного алгоритму
< арифметико-логічний
пристрій
< акумулятор
< запам’ятовуючий пристрій
< регістр(и)
Найпоширеніші
види алгоритмів:
x< лінійний
алгоритм
x< розгалужений алгоритм
x< циклічний
алгоритм
< рекурсивний
алгоритм
< паралельний алгоритм
< статистичний алгоритм
Рекурсивний
алгоритм Приклад – реалізація
факторіалу може бути досягнута рекурсією
|n!=n*(n-1)!
при n>0
|n!=1 при n=0
Рекурсивним
називається алгоритм, при якому виконується звернення до себе
Блок-схема
Рівень деталізації
< На рівні команд
процесора
< На рівні
окремих операцій
< На рівні
виразів
< На рівні модулів
Основні
блок-схеми алгоритму
«ОВАЛ» - Термінатор
«Прямокутник» - Загальна операція або блок
«РОМБ» - Рішення про
галуження
«ПАРАЛЕЛОГРАМ» - Обробка вводу/виводу
«Трапеція» - Цикл
Лекція 3. Алгоритм та мова програмування
Реалізація алгоритму через мову програмування
Значення
правильної алгоритмізації для досягнення результату
Нагадаємо:
Вважається, що алгоритм не має помилок, якщо
він забезпечує результат при буд-яких допустимих наборах даних
Різні алгоритми, а в загальному випадку – при певних особливостях
набору даних – потребують різної кількості кроків (або часу виконання, або
інших ресурсів)
Необхідно забезпечити засоби зручного і
ефективного запису і реалізації алгоритмів
Мови програмування будуються з викорис-танням зрозумілих за іншими мовами і системами відображення інформації елементів і структур
Мова – знакова система,
яка співвідносить змістовність понять з типовим написанням (кодуванням)
Зазвичай довільна мова має такі рівні:
< семантичні конструкції (речення)
< слова (словник мови)
< символи (літери, цифри, умовні знаки тощо)
Мови програмування будуються в рамках такої ж структуризації
Алфавіт мови
В довільній
мові визначається множина (набір) символів, що можуть використо-вуватись.
С# дозволяє
застосовувати:
< літери
латиниці A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v
w x y z , символ _
< цифри 0 1 2 3 4 5 6 7 8
9
< спеціальні
символи , . ; : ? ‘ ! | / \ ~ * + - ( ) { } < >
[ ] # % & ^ = “
< роздільники
(невидимі) пробіл, табуляція, перевод рядка, повернення каретки, нова сторінка
< керуючі
послідовності \+ деяка літера, або слово (наприклад \t – табуляція, \n – перевод рядка)
Синтаксис мови
Включає в себе
набір правил на рівні слів та утворень з слів
Лексеми (слова) C# :
< ідентифікатори
< ключові слова
< знаки операцій
< літерали
< роздільники
Правила утворення:
< перший символ – літера ( та символ _ )
< наступні – літери, цифри
< довжина необмежена
< великі і маленькі літери розрізняються
Літерали (засіб представлення
даних) C#:
< цілочисельний
123 -35 Ox7F0с OX7F0C
< дійсний
12.0 .21 -123.345 -12.35E-5
< символьний
‘s‘ ‘\x07‘
< рядковий
"text
sample " "text s\x61mple"
< булевський
true
false
Роздільники C#:
< комбінації символів-роздільників
Змінні,
вирази, інструкції
Змінна – комірка у пам’яті для збереження деякого блоку даних (наприклад, числа, рядка)
До типізації
даних повернемося пізніше
Зараз
формально будемо використовувати
int для визначення цілої змінної та
double – для дійсної
Вираз – рядок,
який визначає значення
Використовуючи
вираз можна міняти значення змінної, ім’я (ідентифікатор) якої розташований в лівій
частині
В правій
частині не можна використовувати ім’я змінної, якій не було присвоєне жодне значення
Інструкція – завершений вираз
програми, що вимагає виконання.
У C# обов’язковим чином завершується “;”
Визначення – опис однієї, чи декількох змінних – тільки створення змінних без жодного виконання! Також завершується “;”
Для об’єднання декількох інструкцій (та
визначень) у блок (комбіновану інструкцію) використовуються операторні дужки { }
Допускається
включення декількох інструкцій в один рядок та розпис інструкції на декілька
рядків
Операторі і
операнди
Rez= Operand1*Operand2
Rez= Rez+Operand3
Зміні за
посиланням
Створення змінної фактично означає:
< виділення деякої області
пам’яті за адресою якої можна розміщати і отримувати дані (наприклад,
число)
< зв’язати цю область пам’яті з деяким ім’ям (ідентифікатором)
< ініціалізувати змінну (необов’язково), тобто
записати в цю область деякого
початкового значення
За способом встановлення відповідності ідентифікатора і даних можна поділити :
< змінні за значенням (Value type)
< змінні за посиланням (Reference type)
Пам’ять для розміщення даних може виділятись:
< статичним чином описом змінної (змінні за значенням, value type)
< динамічним чином оператором new по відношенню до описаної змінної
(змінні за посиланням, reference type)
Опис змінної посилкового типу тільки виділяє місце для збереження адреси, а для виділення пам’яті та ініціалізації статичної комірки адресою (тобто для фактичного створення динамічної змінної) використовується оператор new!
Консольним
застосуванням називається система засобів взаємодії користувача з комп'ютером,
заснована на використанні текстового (літерно-цифрового) режиму дисплея або
аналогічних – наприклад, командного рядка
Може отримувати дані :
< з командного рядка під час запуску
< з консолі (клавіатури)
< з файлу (файлів) під час роботи
< у вікно консолі (на
екран монітора)
<Може виводити дані :
< у файли
Може бути запущена з іншої програми, в тому числі невидимим!
В Visual Studio використовується дворівневе утворення :
< рішення (solution)
< проект (project)
Лекція 4. Структуризація програми
Потреби і засоби структуризації
На рівні виконання:
Структуризація
“Програма – файл”
< Основу програми при для її виконання складає виконуваний файл
< Програма може використовувати декілька виконуваних файлів, які між собою обмінюються даними
Інтерфейсна та
виконуюча частина
Для обміну
даними окремі виконувані файли
повинні мати спільний інтерфейс
Інтерфейс (interface — поверхня розділу, перегородка) — сукупність засобів і методів взаємодії між елементами системи
Програмний (логічний) інтерфейс — сукупність програмних засобів, необхідних для взаємодії різних
елементів інформаційних систем, що на потребують спеціального апаратного
забезпечення
Повинен існувати також інтерфейс з зовнішнім
світом, наприклад
Інтерфейс користувача або інтерфейс програма-користувач
Інтегральний та модульний програмні продуки
< Інтегральна програма включає усе функціональне навантаження
застосування у єдиний виконуваний файл
< Модульне застосування реалізується як набір окремих виконуваних
модулів, що взаємодіють між собою та з зовнішнім світом
Оболонка – частина
застосування, яка забезпечує взаємодію інтерфейсу користувача з виконуваними
модулями
На рівні
розробки:
Структуризація “файл – підпрограма (функція)”
< Спробуємо розібратись, для чого це потрібно
Потреби
структуризації тексту
Структуризація
тексту програми забезпечує
< скорочення тексту за рахунок зменшення кількості дублювання
< спрощення візуального сприйняття тексту програми
< спрощення відладки за рахунок можли-вості роботи з майже відокремленим
фрагментом тексту
< повторне використання коду (бібліотеки)
Структуризація
може бути реалізована:
< Розбиттям тексту на декілька файлів
< Поцедурним програмуванням (використан-ням підпрограм)
< об’єктним програмуванням
Функції
Підпрограма
(процедура, функція, метод) – поіменована чи ідентифікована іншим чином
частина програмного коду, який може бути викликаний (багато разів) з різних
частин програми
Підпрограма може бути використана для :
< Економія коду при багаторазових викликах
< Структуризації програми з метою спрощення її
розуміння
< Взаємодії окремих частин програми
Функції. Проголошення підпрограми у мовах високого рівня
Для однозначного визначення потрібно:
< унікальне ім’я (ідентифікатор) або адреса
< При однаковому імені (не адресі !) – відмінність хоча б у чомусь
Сигнатура функції - частина опису об’явлення функції, яка забезпечує однозначну ідентифікацію (у різних мовах – різна ! )
Обмін даними з підпрограмою
Для передачі даних у підпрограму використовується список параметрів:
- Список формальних параметрів використо-вується при описі функції та складається з перерахування імен з вказуванням їх типів
- Список фактичних параметрів при виклику функції складається з перерахування імен змінних, чисел або виразів. За структурою є “калькою” списку формальних параметрів
Повернення значення (необов’язкове):
реалізується можливістю простого викорис-тання отриманого з функції значення присвоєнням або в арифметичноми чи іншому виразі.
може бути реалізоване через параметри!
Орієнтація на використання підпрограм зазвичай називають процедурною концепцію програмування
На сучасному етапі вона отримала розиток в об’єктному (об’єктно-орєнтованому) програму-ванні
Об’єкти
Клас – об’єднання даних (полів,
властивостей) та функцій (методів) у деяку сутність, яка сприймається як
ціле (інкапсуляція)
Під класом розуміють опис, тобто визначення
складного типу
Реалізацію (екземпляр) класу називають об’єктом
Вводиться також поняття структури (в різних
мовах визначаються різним чином!) - у C# об’єкт за значенням, на відміну
від класів, які задаються за посиланням.
Основні перевага об’єктного підходу
в програмуванні:
< більш чітка структуризація програми на рівні розробки
< як результат спрощення розробки та
забезпечення кращої надійності
Бібліотека – збірка класів
чи підпрограм для вирішення близьких по тематиці задач
Бібліотеки містять первинний код та дані, допоміжні для реалізації та інтеграції нових можливостей в програмні рішення
Бібліотека реалізує свою функціональність
через набір функцій або класів (в залежності від мови програмування)
Бібліотека може бути реалізована :
< як початковий текст, що включається до програми (текстова)
< об’єктні файли, що приєднуються при компіляції (статична)
< специфічні виконувані файли, що завантажуються під час виконання
основної програми (динамічна – DLL)
Бібліотека
класів C#
В сучасних мовах програмування значна частина функціональності
реалізується через даяку бібліотеку класів (див. Solution Explprer-> References)
Математичні функції (Забезпечуються полями та методами класу Math
)
Простором імен називається множина яка об’єднує довільний набір
ідентифікаторів (імен), в тому числі ієрархічно нижчі простори імен.
5.
Типізація даних
Потреба типізації
Довільні дані в пам’яті комп’ютера пред-ставлені бінарним кодом деякої
довжини
1001010011011001
Таким чином змінна визначається:
< адресою початку
блоку даних
< довжиною блоку
даних
< способом
інтерпретації бінарного коду
Роздільна обробка цілих та дійсних
чисел
Операції з дійсними числами суттєво відрізняються алгоритмічно через
складний формат дійсного числа в експоненціальній формі
Сучасний процесор має апаратні засоби для роботи з різними типами
(цілочисельний та дійсний конвеєри)
Операції виконуються с операндами одного типу і однакової довжини
Причина використання даних різної довжини
Точність операції обмежується довжиною мантіси (для дійсного числа) та
динамічним діапазоном (для цілого числа)
Зайва довжина операндів призводить до збільшення витрат пам’яті та в деяких випадках
до сповільнення обчислень
Ланцюжок операцій призводить до накопичення похибки
Основні (прості) типи
В більшості мов задаються словами з мно-жини зарезервованих слів
В C# ці зарезервовані слова
фактично є псевдонімами відповідних структур
Числові типи призначені для підтримки роботи з числами (найбільш вагома
частина програми)
Якщо числові типи призначені для підтримки роботи з числами, то
булевський тип в основному забезпечує логіку галужень програми
Приймає два значення:
< true
< false
Текстові змінні забезпечують значну частину обміну інформації між людиною
і програмою
Константи
Деяка поіменована величина, яка не міняє своє значення
Єдине призначення – забезпечення зручності розробки програми (зменшення
ймовірності помилки)
Перерахування
Є набором поіменованих значень (констант)
enum Days { Sat, Sun, Mon, Tue,
Web, Thu, Fri};
enum color{ red = 100, blue = 200, green = 300 };
Також виключно для забезпечення зручності програмування
Перетворення типів
Неявне перетворення виконується автоматично для узгодження типів операндів
у виразах та виконання присвоєння при його можливості умові відсутності
втрати точності
double X=2;
double
angle = X * 180 / Math.PI;
Неявне перетворення виконується автоматично для узгодження типів
операндів у виразах та виконання присвоєння при його можливості умові
відсутності втрати точності
int i_angle
= (int) angle;
int rez =
(int) (X * 180) / (int)Math.PI;
Неявне перетворення виконується автоматично для узгодження типів
операндів у виразах та виконання присвоєння при його можливості умові відсутності
втрати точності
Явне перетворення виконується вказуванням типу у дужках перед іменем
змінної або виразом
Явне перетворення також можна виконати викликами спеціально призначених
для цього методів
S =
angle.ToString();
S=”123.45”;
Double D =
Convert.ToDouble(s);
Масиви
Відносяться до складного типу
(мають внутрішню структуризацію)
Масивом називається індексований набір елементів одного типу
int [] A1 =
new int [10];
int[] A2 =
{ 1,2,3,4,5,6}
int [,] AA1
= new int [10,5];
int[,] AA2
= {{2,-2,1},{3,-22,2}, {0,4,3}};
int [][] AAA1 = new int [10][];
Можна створювати багатовимірний масив
Можна створювати масив масивів
Відносяться до складного типу
(мають внутрішню структуризацію)
Іншими представниками складного типу є
< структури
< класи
Статичні поля і методи
Характеризують параметри та характер поведінки цілого класу а не
конкретного його екземпляру
Для опису “статичності” використовується зарезервоване слово static
class
Program
static void Main(string[] args) {
Int32 Rez;
MyClass.D2 = 3;
Rez = MyClass.F2(5);
MyClass MC = new MyClass();
MC.D1 = 4;
MC.F1 (6);
}
class MyClass {
public int Dl = 1; static public int D2 = 2 ; // public static int D2 = 2; public int Fl(int
arg)
{
return arg * Dl;
}
static public int F2(int
arg) {
return arg * D2;
}
}
Статичним можна визначити навіть клас
Не можна
створити екземпляр статичного класу!
Відповідно
такий клас на може мати нестатичних членів (полів та методів)
static
class MyStatiClass
{
static
public int D;
static
public int F1(int arg)
{
return 0;
}
}
6. Основи
розробки проекту
Забезпечення якості програмування
Життєвий цикл програми
·
Розробка програми
·
Внутрішнє тестування
розробником
·
Зовнішнє тестування
·
Супроводження
Показники якості
< Функціональна
придатність (здатність виконувати завдання у повному обсязі, стандартність)
< Надійність (низька
ймовірність збоїв)
< Застосовуваність
(зрозумілість, простота використання)
< Ефективність (потреба у
ресурсах)
< Здатність до
супроводження (тестованість, можливість аналізу, змінюваність, адаптовність,
стабільність, структурованість)
Загальна культура
програмування
Якісна модульність
< Складний проект повинен
мати план структуризації на рівні виконуваних модулів, тобто план архітектурної
будови
< Верхній рівень ієрархії
повинен бути максимально коротким і
визначати “план дій”
< Рекомендується для
окремого класу використовувати окремий файл
< Треба забезпечувати
чітке розбиття функціональності по класах і методах
Стандарт оформлення коду включає:
< стиль завдання імен
(ідентифікаторів)
< стиль відступів
< розташування операторних
дужок
< використання пробілів у
виразах
< стиль коментування
Вибір імен
< Не жертвувати
зрозумілістю читання за рахунок спрощення написання
< Не використовувати
зайвих префіксів типу Угорської нотації (?)
< Відмовитись від
підкреслення як частини імені (?)
< Не використовувати
зайвих скорочень
< Не використовувати
відмінність тільки у регістрі
< Використовувати
максимально прості та зрозумілі імена
Стиль коментування
< Коментарі повинні
описувати наміри програміста а не код
< Те, що може бути
зрозумілим безпосеред-ньо з тексту програми, не повинно виноситись у коментар
< Коментар може
використовуватись для вимикання частини коду
< В процесі відладки можна
коментуванням анотовувати перевірені ділянки тексту
< Документуючий коментар
використову-ється програмою-генератором документації
Спрощення розробки
Використання готових текстів
< Збирайте колекції
опублікованих рішень
< Розробляйте власні
програми так, щоб надалі можна було використовувати їх як фрагменти інших проектів
< При наборі рядка і
навіть класу часто можна поруч взяти інший фрагмент тексту, який потім
відредагувати
Використання прототипів
< Використовуйте готові
бібліотеки
< Якомога більшу частину
розробки виконуйте як бібліотеку, прийнятну для подальшого використання
Культура використання типів
< Правильно розподіляйте
змінні по цілим і дійсним, знаковим і беззнаковим типам
< Використання float та коротких цілих типів призводить тільки до економії пам’яті
< Використовуйте за
можливістю статичні змінні, константи, перерахування
< Структури використовуйте
як спосіб об’єднання різнотипних даних без складної
обробки. Альтернативою є клас.
Культура використання числових даних
< Числа, які
використовуються в декількох місцях, виносьте як змінну або константу
< Числа, які в даній
задачі мають “фізичний” або “матеріальній” зміст, виносьте як змінні з чітким
вибором імені змінної
< Уникайте незгрупованих
(масивами, структурами тощо) числових даних
Резервне копіювання
< Треба зберігати не менше
двох екзем-плярів проекту на різних комп’ютерах або з
використанням змінного носія
< Носій для перенесення
даних не вважа-ється резервним
< Якщо використовується шифрування треба запобігти втраті ключа
< Треба слідкувати за
технічних станом резервних носіїв
Збереження версій
< Слід періодично
копіювати поточний стан проекту як версію
< Накопичені версії треба
класифікувати зручним для вас чином по датах
< Наприкінці робочого дня
обов’язково виконуйте резервне копіювання версій
< Для збереження версій
зручно викорис-товувати їх архівування
Відладка
Під час відладки потрібні наступні дії:
< Відстеження правильності
шляху виконання
< Перевірка правильності
значень змінних
Основні шляхи реалізації:
< Використання відгадчиків
< Створення журналу
Характерні помилки
Для цілих чисел
< цілочисельне ділення
< перевищення динамічного
діапазону
Для цілих чисел
< цілочисельне ділення
< перевищення динамічного
діапазону
Для дійсних чисел
< малоймовірний
“ідеальний” нуль в роз-рахунках (крім прямого присвоєння)
< сумнівна “ідеальна”
рівність чисел
Для масивів
< вихід за межі масиву
< початковий елемент
(повинен адресуватись з номером 0)
< інші помилки адресації
Виключення
Виключення або виключна ситуація – дія комп’ютера, яка за якихось причин не може бути коректно завершена, наприклад
ділення на нуль
Якщо не виконати обхід виключення, подальше
виконання програми втрачає сенс
7. Обробка літерної інформації
Потреби
обробки тексту
< інтерпретація вхідного потоку даних
< формування вихідного потоку даних
< модифікація інтерфейсу користувача під час виконання
< обробка текстової текстова інформація як безпосередніх даних
Збереження текстової інформації
Збереження
текстової інформації
Довільний
текст є сукупністю літер, які об’єднані у слова, що розділені
спеціальними симвлами-роздільниками
Бітова глибина
літери
< однобайтове кодування
< UNICODE
Основні методи :
< масив літер
< рядок
Основні типи для роботи з літерними даними :
char ch;
Char Ch;
char[]
chArray;
Char[]
ChArray;
String s;
String S;
Парсінг
Парсінг або
синтаксичний аналіз — в інформатиці
процес аналізу вхідної послідовності символів, з метою розбору граматичної
структури у відповідності із заданою формульною граматикою
Основні методи
Конструктор – спеціальний блок інструкцій, що
викликається при створенні об’єкту (екземпляра
класу)
//constructors
of String
String s1 =
new String(charArr);
String s2 =
new bew Strubg(Ch,10);
String s3 =
new String(charArr2,2,3);
//
ініціалізація присвоєнням
string a;
a="Hello
";
string b
="world";
string c =
b;
// взаємні
перетвореня чисел і тексту
int value=
Convert.ToInt32(Ch);
s3 =
value.ToString();
Char[] Ch =
a.ToCharArray();
Доступ до
літери
Ch = charArr1[3];
for ( int n
= 0 ; n < longString.Length; n++)
Ch = longString[n];
Об’єднання (конкатікація)
string concated
= String.Concat(a, “ plus”, “ and…”);
string sum
= a + “ plus” + “ and…”;
a+=b;
a+="!";
a=String.Concat("a=",
123, ", b= ", value);
a =
"A="+123+", b= "+
value;
Великі і
маленькі літери
Chr1=
Char.ToLower(Chr1);
Chr2=
Char.ToUppger(Chr1);
a = a.ToLower();
a =
a.ToUpper();
Порівняння
int result = String.Compare(a, "good
morning"); result = String.Compare(a, "GOOD
morNInG",
StringComparison.OrdinallgnoreCase); result = strl.CompareTo(str2);
if (strl.Equals("abc"))
{
}
if (strl.StartsWith("AB") && strl.EndsWith("cd"))
{
}
Пошук
int index = data_in.IndexOf('p');
index = data_in.IndexOf("npa");
index = data_in.IndexOf('p', 10);
index = data_in.IndexOf("pa", index + 1);
index = data_in. IndexOf ("pst" , 25, 10);
index = data_in.IndexOf('p', 25, 5);
index = data_in.IndexOf("PH", StringComparison.OrdinallgnoreCase);
char[] delimiters ={ ' ', ',', '.', '-', ';' };
index
= data_in.IndexOfAny(delimiters);
index
= data_in.LastlndexOf('e');
index
= data in.LastlndexOf("pa");
Видалення,
вставка, заміна
int N = a.IndexOf("ni");
if
(N>=0) a = a.Remove(N);
N =
a.IndexOf('d');
if (
N>=0) a=a.Remove(N,3);
a=
a.Insert(3,"****");
a=a.Replace('*','-');
Розбірка,
підготовка до парсінгу
string[]
words = data_in.Split(delim_char_array);
Операції з літералами
bool res =
Char.IsDigit(ch);
res =
Char.IsLetter(ch);
res -
Char.IsUpper(ch);
res =
Char.IsLetterOrDigit(string_sample, char_pos);
res =
Char.IsWhiteSpace(string_sample, char_pos);
Форматування
int A =
123;
double B =
1.25e-10;
data_out=String.Format(A(intger)=(0;G},
B(real)={1:E}",A,B);
Лекція
7+. Повторення.
Операнд — частина машинної
команди, що визначає об’єкт, з яким виконується дія
Лінійний
алгоритм
Лінійним називається алгоритм, у якому операції
виконуються послідовно, одна за одною
Виконання кожної наступної операції
починається тільки після завершення попередньої
Основні
блок-схеми алгоритму
«ОВАЛ» - Термінатор
«Прямокутник»
- Загальна
операція або блок
«РОМБ» - Рішення про
галуження
«ПАРАЛЕЛОГРАМ» - Обробка вводу/виводу
«Трапеція» - Цикл
Змінна – комірка у пам’яті для збереження деякого блоку даних (наприклад, числа, рядка)
Зазначимо, що C# є жорстко типізованою мовою! Тобто при визначенні
об’єкту (змінної) обов’язково треба задати його тип.
int t=0XaF;
double R = 12.34
R = 2e-3;
char ch1 = 'a';
char ch2 = '\x07';
string s = "text s\x61mple";
В більшості мов задаються словами з мно-жини
зарезервованих слів
// integer types by
keywords sbyte
SB
= 10; short
Sh
= 10; int
I
= 10; long
L
= 10;
// unsigned integer
types by keywords byte B = 10; ushort USh =10; uint UI = 10; ulong UL = 10;
//real types by
keyword float
F = 10.OF; double D = 10.0; decimal Dec = 100;
// has a greater
precision and a smaller range, which makes it suitable for // financial and
monetary calculations. ±1.0e-28 to
±7.9e28
//nonnumerical
types by keyword
bool Bool = true;
char ch = 'S';
string S = "text
string";
object Obj = 1; ///The object type is
an alias for Object
В C# ці
зарезервовані слова фактично є псевдонімами відповідних структур
// integer types by
structure System.SByte sSB = 10; Intl6 sSh = 10 ; Int32 si = 10; Int64 sL = 10;
// unsigned integer
types by structure Byte sB = 10; UIntl6 sUSh = 10; UInt32 sUI = 10; UInt32 sUL =10;
//real types by
structure Single
sF = 10.OF; Double sD = 10.6; Decimal sDec = 100;
// nonnumerical
types by structure
Boolean sBool = true;
Char sCh = 'S';
String sS = "text
string";
За способом
встановлення відповідності ідентифікатора і даних можна поділити :
< змінні за значенням (Value type)
Ім’я
змінної -> Комірка з даними
< змінні за посиланням (Reference type)
Ім’я змінної -> Комірка для адреси [Куча (heap) -> Комірка з даними]
Пам’ять для розміщення даних може виділятись:
< статичним чином описом
змінної
(змінні за значенням, value type)
< динамічним чином
оператором new по відношенню до описаної змінної (змінні за посиланням, reference type)
Опис змінної
посилкового типу тільки виділяє місце для збереження адреси, а для виділення
пам’яті та ініціалізації статичної комірки адресою (тобто для фактичного
створення динамічної змінної) використовується оператор new!
Масиви
Відносяться до складного типу (мають внутрішню
структуризацію)
Масивом називається індексований набір елементів
одного типу
//масиви
int[] Al = new int[10];
int[] A2 ={ 1,
2, 3(
4, 5, б };
int[,] AA1 = new int[10, 5];
int[,] AA2 ={{2,-2,1}, {3,
-22, 2 }, { 0,
4, 3 } };
int[] [] AAA1 = new int [10] [] ;
Можна створювати багатовимірний масив
Можна створювати масив масивів
Підпрограма (процедура, функція, метод) – поіменована
чи ідентифікована іншим чином частина програмного коду, який може бути
викликаний (багато разів) з різних частин програми
Підпрограма може бути
використана для :
< Економія коду при
багаторазових викликах
< Структуризації програми з метою спрощення її розуміння
< Взаємодії окремих
частин програми
class Program {
static void Main(string[] args) {
Fl(l, 2, 3)
;
// int D =
Fl(l, 2, 3);
//Error ! int Rez = F2(2, 3,
4); F2(4, 5, 6) ;
}
static void Fl(int Dl, int D2, double
D3)
{
}
static int F2(int Dl, int D2, double D3) {
return 10;
}
}
Клас – об’єднання даних
(полів, властивостей) та функцій (методів) у деяку сутність, яка
сприймається як ціле (інкапсуляція)
Під класом розуміють
опис, тобто визначення складного типу
Реалізацію (екземпляр)
класу називають об’єктом
Вводиться також
поняття структури (в різних мовах визначаються різним чином!) - у C# об’єкт за значенням, на відміну від класів, які
задаються за посиланням.
class Program {
static void Main(string[] args)
{
int Rez;
MyStruct MS;
MyClass MC;
MS.D1=100;
MS.D2 = 12; //will be error if it is commented!!! Rez = MS.Fl(lO) ;
MC = new
MyClass(); MC.D1 = 100; Rez = MC.PI(5);
}
struct MyStruct i
public int Dl;
public int D2;
public int Fl(int Param)
{
return Param * Dl + D2;
}
}
class MyClass {
public int Dl = 1; //!!!!! public int D2 = 5; public
int Fl(int Param) {
return Param * Dl + D2;
}
}
Підпрограма може бути
використана для :
class Program {
static void Main(string[] args) {
Fl(l, 2, 3)
;
// int D =
Fl(l, 2,
3); //Error ! int Rez = F2(2, 3,
4); F2(4, 5, 6) ;
}
static void Fl(int Dl, int D2, double
D3)
{
}
static int F2(int Dl, int D2, double D3) {
return 10;
}
}