Теми за държавен изпит.pdf
Document Details
Uploaded by ValuableSodalite
Tags
Full Transcript
Съдържание Тема 1................................................................................................................................................... 3 1.Математически и логически основи на компютърните системи................................................. 3 Бройни системи......
Съдържание Тема 1................................................................................................................................................... 3 1.Математически и логически основи на компютърните системи................................................. 3 Бройни системи................................................................................................................................. 3 Двоични функции............................................................................................................................. 4 Кодиране на информация................................................................................................................ 4 - Кодове за грешки.............................................................................................................................. 5 Представяне на дискретна информация...................................................................................... 5 Двоично допълнение (Метод за представяне на отрицателни числа).................................... 6 Дробни числа: Представяне чрез плаваща запетая (IEEE 754 стандарт).............................. 6 Представяне на аналогова информация....................................................................................... 7 Допълнителни важни точки:.......................................................................................................... 7 Практически приложения:............................................................................................................. 8 Архитектура на фон Нойманов компютър.................................................................................. 8 Допълнителни важни аспекти:.................................................................................................... 10 Практически примери и приложения:....................................................................................... 11 Дискретна математика.................................................................................................................. 12 Формални езици и граматики...................................................................................................... 12 Крайни автомати............................................................................................................................ 13 Теория на графите.......................................................................................................................... 13 Допълнителни теми и важни аспекти......................................................................................... 14 Дискретна математика (допълнително)..................................................................................... 14 Формални езици и граматики (допълнително)......................................................................... 15 Крайни автомати (допълнително)............................................................................................... 15 Теория на графите (допълнително)............................................................................................. 15 Приложения..................................................................................................................................... 16 Процедурно програмиране............................................................................................................ 16 Типове данни................................................................................................................................... 17 Структури от данни........................................................................................................................ 17 Операции и изрази.......................................................................................................................... 17 Основни управляващи конструкции.......................................................................................... 18 Програмни части и връзки между тях........................................................................................ 18 Структурно и модулно програмиране........................................................................................ 18 Допълнителни важни аспекти...................................................................................................... 19 Допълнителни важни аспекти:.................................................................................................... 19 Примери за процедурни програмни езици (допълнително)................................................... 20 Алгоритми и структури от данни................................................................................................ 20 Рекурсия и итерация...................................................................................................................... 21 Стек, опашка, списък, двоично дърво и основни операции с тях......................................... 21 Основни алгоритми за сортиране и търсене.............................................................................. 22 Графи и обхождането им................................................................................................................ 25 Обектно-ориентирано програмиране (ООП)............................................................................. 26 Класове и обекти............................................................................................................................. 26 Наследяване..................................................................................................................................... 27 Херметизация (Енкапсулация)..................................................................................................... 27 Полиморфизъм................................................................................................................................ 28 Обектно-ориентирано проектиране............................................................................................ 29 Примерен код за обектно-ориентирано проектиране.............................................................. 30 Тема 7................................................................................................................................................. 30 Логическо програмиране................................................................................................................. 30 Примерен код в Пролог................................................................................................................. 33 Функционално програмиране...................................................................................................... 34 Примерен код................................................................................................................................... 36 Функционално програмиране в Java............................................................................................... 36 Типични приложения........................................................................................................................ 38 Заключение........................................................................................................................................ 38 Операционни системи.................................................................................................................... 39 Управление на паметта.................................................................................................................. 39 Управление на процесорите.......................................................................................................... 40 Файлова система............................................................................................................................. 40 Потребителски интерфейс............................................................................................................. 41 Примерен код................................................................................................................................... 41 Инструменти за създаване на програми..................................................................................... 42 Редактори.......................................................................................................................................... 42 Свързващи редактори.................................................................................................................... 42 Транслатори..................................................................................................................................... 42 Преместваеми асемблери и зареждаща програма.................................................................... 43 Средства за тестване...................................................................................................................... 43 Заключение...................................................................................................................................... 44 Интерфейси...................................................................................................................................... 44 Методи и средства за комуникация човек-компютър............................................................. 45 Осигуряване на навигацията и на изискванията на потребителите.................................... 45 Графичен потребителски интерфейс (GUI)............................................................................... 46 Типични приложения на GUI....................................................................................................... 47 Технология на софтуерното производство................................................................................. 47 Бази данни........................................................................................................................................ 49 Релационни бази данни.................................................................................................................. 50 Транзакции....................................................................................................................................... 52 Компютърна графика.................................................................................................................... 52 Компютърни мрежи........................................................................................................................ 55 Локални компютърни мрежи (LAN)........................................................................................... 55 Комуникационен модел TCP/IP (Интернет).............................................................................. 56 Изкуствен интелект (ИИ).............................................................................................................. 57 Методи за търсене........................................................................................................................... 58 Знания и представяне на знания.................................................................................................. 60 Компютърна лингвистика............................................................................................................ 61 Тема 1 1.Математически и логически основи на компютърните системи Бройни системи 1. Бройни системи Дефиниция: Бройната система е начин за представяне на числа с помощта на определен набор от символи. Видове бройни системи: o Десетична (децимална) система: Основата е 10 (символи: 0-9). o Двоична (бинарна) система: Основата е 2 (символи: 0 и 1). o Осмична система: Основата е 8 (символи: 0-7). o Шестнадесетична (хексадецимална) система: Основата е 16 (символи: 0-9 и A-F). 2. Запис на числата в позиционна бройна система Позиционен запис: Числото се представя като сума от произведения на цифрите и основата, повдигната на степен, съответстваща на позицията на цифрата. o Пример (десетична система): 1234=1⋅103+2⋅102+3⋅101+4⋅1001234 = 1 \cdot 10^3 + 2 \cdot 10^2 + 3 \cdot 10^1 + 4 \cdot 10^01234=1⋅103+2⋅102+3⋅101+4⋅100 o Пример (двоична система): 10112=1⋅23+0⋅22+1⋅21+1⋅20=11101011_2 = 1 \cdot 2^3 + 0 \cdot 2^2 + 1 \cdot 2^1 + 1 \cdot 2^0 = 11_{10}10112 =1⋅23+0⋅22+1⋅21+1⋅20=1110 3. Алгоритми за преобразуване на записа От десетична към двоична: o Делим числото на 2 и записваме остатъка. o Продължаваме да делим частното на 2, докато получим 0. o Остатъците, записани отзад напред, дават двоичното число. o Пример: 13 -> 1101 (13/2 = 6 остатък 1, 6/2 = 3 остатък 0, 3/2 = 1 остатък 1, 1/2 = 0 остатък 1). От двоична към десетична: o Умножаваме всяка цифра от двоичното число по 2, повдигната на степен съответстваща на позицията й. o Пример: 1101 -> 1*2^3 + 1*2^2 + 0*2^1 + 1*2^0 = 13. Двоични функции 4. Двоични функции на една и две променливи Основни операции: NOT, AND, OR, XOR. o NOT (отрицание): Превръща 1 в 0 и обратно. o AND (конюнкция): Дава 1 само ако и двете променливи са 1. o OR (дизюнкция): Дава 1 ако поне една от променливите е 1. o XOR (изключващо или): Дава 1 ако точно една от променливите е 1. 5. Пълна система от двоични функции Пълна система: Набор от логически операции, чрез които може да се представи всяка друга логическа функция. Примери за пълни системи: {AND, OR, NOT}, {NAND}, {NOR}. Кодиране на информация 6. Кодиране на информация Бинарен код: Представяне на данни чрез битове (0 и 1). - Кодове за грешки Хемингов код Хеминговият код е метод за корекция на грешки, който добавя контролни битове към двоичните данни, за да може да се откриват и коригират грешки при преноса на данни. Пример: Да вземем 4-битови данни: 1011. 1. Добавяне на контролни битове: o Определяме позициите на контролните битове. В този случай ще използваме 3 контролни бита (P1, P2, P4), които ще поставим на позициите 1, 2 и 4. o Данните ще бъдат разположени на останалите позиции: _ P1 _ P2 1 P4 0 1 1 (подредбата е отдясно наляво). 2. Изчисляване на контролните битове: o P1: Проверява битовете на позиции 1, 3, 5, 7. Резултат: P1=1⊕1⊕1=1P1 = 1 \oplus 1 \oplus 1 = 1P1=1⊕1⊕1=1. o P2: Проверява битовете на позиции 2, 3, 6, 7. Резултат: P2=0⊕1⊕1=0P2 = 0 \oplus 1 \oplus 1 = 0P2=0⊕1⊕1=0. o P4: Проверява битовете на позиции 4, 5, 6, 7. Резултат: P4=1⊕0⊕1⊕1=0P4 = 1 \oplus 0 \oplus 1 \oplus 1 = 0P4=1⊕0⊕1⊕1=0. Така, пълният код е: 1 0 1 0 0 1 1. CRC (Цикличен Редундансен Код) CRC е по-сложен метод за откриване на грешки, използван в мрежовите протоколи и дисковите устройства. CRC използва деление на двоични числа с помощта на полином. Представяне на дискретна информация 7. Представяне на цели и дробни числа Цели числа: Представят се чрез фиксиран брой битове. o Знакови числа: Използва се допълнителен бит за знака (0 за положителни, 1 за отрицателни). Двоично допълнение (Метод за представяне на отрицателни числа) Двоичното допълнение (Two's complement) е метод за представяне на отрицателни числа в компютърните системи. Пример: Представяне на числото -5 в 8-битова система. 1. Записване на числото 5 в двоична форма: 00000101. 2. Инвертиране на битовете (One's complement): 11111010. 3. Добавяне на 1: 11111010 + 1 = 11111011. Така, -5 е представено като 11111011. - **Дробни числа**: Представят се чрез плаваща запетая (IEEE 754 стандарт). Дробни числа: Представяне чрез плаваща запетая (IEEE 754 стандарт) IEEE 754 стандарт Този стандарт използва следния формат за представяне на дробни числа: Знак (S): 1 бит (0 за положителни, 1 за отрицателни). Експонента (E): 8 бита за 32-битовите числа (преместена с биас). Мантиса (M): 23 бита за 32-битовите числа (без водещата 1). Пример: Представяне на числото -5.75 в 32-битов формат: 1. Знак: 1 (отрицателно число). 2. Десетична дроб: o 5.75 = 5 + 0.75. o 5 в двоична форма: 101. o 0.75 в двоична форма: 0.11. o Така, 5.75 = 101.11. 3. Нормализиране: 1.0111 x 2^2. 4. Експонента (с биас 127): 2 + 127 = 129 -> 10000001. 5. Мантиса: 01110000000000000000000. Така, IEEE 754 представянето е: 1 10000001 01110000000000000000000. Това обяснение обхваща основните принципи и примери за тези теми. Ако имаш допълнителни въпроси или искаш повече детайли по някоя от темите, не се колебай да питаш! Представяне на аналогова информация 8. Представяне на образ и звук Образ: Представя се чрез пиксели, всеки с определен цвят (RGB модел). Звук: Представя се чрез цифрови сигнали, които са дискретизация на аналоговите звукови вълни. Допълнителни важни точки: Кодиране на информация (допълнение) ASCII и Unicode: o ASCII (American Standard Code for Information Interchange): 7-битов код за представяне на текстови символи. Поддържа 128 символа. o Unicode: Стандарт за кодиране на символи, който може да представи над 143,000 символа. Използва различни енкодинги, като UTF-8, UTF-16 и UTF- 32. Допълнителни логически функции: XNOR (еквивалентност): Дава 1, ако и двете променливи са еднакви. NAND (не-AND): Дава 1, ако поне една от променливите е 0. NOR (не-OR): Дава 1, ако и двете променливи са 0. Допълнителни алгоритми за преобразуване: От осмична към двоична: o Всяка осмична цифра се представя с 3 двоични цифри. o Пример: 57_8 = 101 111_2. От шестнадесетична към двоична: o Всяка шестнадесетична цифра се представя с 4 двоични цифри. o Пример: 1F_16 = 0001 1111_2. Логически схеми и булева алгебра: Булева алгебра: Математическа структура за работа с логически променливи и оператори. Логически схеми: Реализация на логически функции чрез електронни компоненти като AND, OR, NOT гейтове. Карти на Карно: Метод за минимизация на булеви функции чрез графично представяне. IEEE 754 (допълнение): Поднормални числа: Представят малки числа, близки до нула, които не могат да бъдат нормализирани. Безкрайности и NaN: o Положителна и отрицателна безкрайност се представят със специфични битови комбинации. o NaN (Not a Number) се използва за представяне на резултати от недефинирани операции като 0/0. Представяне на аналогова информация (допълнение): Честота на дискретизация (Sampling Rate): Броят на дискретни измервания на аналоговия сигнал за секунда. По-висока честота води до по-точно представяне на оригиналния сигнал. Квантоване (Quantization): Процесът на преобразуване на непрекъснати амплитуди на сигнала в дискретни стойности. Компресия: Техники за намаляване на размера на данните. Например, JPEG за изображения и MP3 за аудио. Практически приложения: Цифрови и аналогови конвертори (ADC и DAC): Компоненти, използвани за преобразуване на аналогови сигнали в цифрови и обратно. Шумоустойчивост: Използване на кодове за грешки и други методи за откриване и коригиране на грешки при предаване на данни. Синхронизация: Методи за поддържане на времево съответствие между изпращача и получателя на данни. Тема 2 Архитектура на фон Нойманов компютър 1. Класификация и исторически данни Исторически контекст: Архитектурата на фон Нойман е предложена от Джон фон Нойман през 1945 година и представлява основата на повечето съвременни компютърни системи. Основни принципи: o Единна памет за данни и инструкции. o Изпълнение на инструкции последователно. o Използване на машинен език за програмиране. 2. Обща схема и предназначение на основните компоненти Основни компоненти: o Централен процесор (CPU): Изпълнява инструкциите на програмата. o Основна памет (RAM): Съхранява данните и инструкциите, които CPU използва. o Вход/изходни устройства (I/O): Позволяват взаимодействие с периферни устройства. o Системна шина: Свързва всички компоненти и осигурява комуникация между тях. 3. Централен процесор (CPU) Съставни части: o Арифметико-логическо устройство (ALU): Извършва аритметични и логически операции. o Управляващо устройство (CU): Координира изпълнението на инструкциите. o Регистри: Бърза памет вътре в CPU за временно съхранение на данни и инструкции. 4. Основна памет (RAM) Характеристики: o Времеви достъп: RAM позволява бърз достъп до данни. o Волатилна памет: Данните се губят при изключване на захранването. 5. Машинен език и изпълнение на машинна програма Машинен език: Ниско ниво на програмиране, състоящо се от бинарни кодове, които CPU може директно да изпълнява. Цикъл на изпълнение: o Fetch (извличане): Четене на инструкцията от паметта. o Decode (декодиране): Преобразуване на инструкцията в сигнали за изпълнение. o Execute (изпълнение): Изпълнение на операцията от CPU. 6. Паралелизъм Типове паралелизъм: o Instruction-level parallelism (ILP): Изпълнение на множество инструкции едновременно. o Data-level parallelism (DLP): Изпълнение на една и съща операция върху множество данни. o Task-level parallelism (TLP): Изпълнение на различни задачи едновременно. 7. Видове адресиране и позиционна независимост на програмите Видове адресиране: o Непосредствено адресиране: Операндът е част от инструкцията. o Пряко адресиране: Адресът на операнда се съдържа в инструкцията. o Косвено адресиране: Адресът на операнда е съхранен в регистър или друга памет. o Регистрово адресиране: Операндът е съхранен в регистър. Позиционна независимост: Програмите могат да бъдат изпълнявани на различни адреси в паметта, без да се налага да бъдат променяни. 8. Система за вход/изход и система за прекъсване Вход/изходни операции (I/O): o Памет-картувани I/O: I/O устройствата са адресирани като част от паметта. o Портово-картувани I/O: I/O устройствата имат отделни адреси от паметта. Система за прекъсване: o Позволява на CPU да реагира на събития като получаване на данни от периферни устройства или грешки в изпълнението. 9. Периферни устройства Класификация на периферни устройства: o Входни устройства: Клавиатури, мишки, скенери. o Изходни устройства: Монитори, принтери. o Входно-изходни устройства: Твърди дискове, SSD, USB устройства. Допълнителни важни аспекти: Контролни уреди и тактова честота: Тактова честота: Определя скоростта на изпълнение на инструкциите в процесора. Измерва се в херци (Hz). Контролни уреди: Отговарят за генерирането на тактовите сигнали и синхронизацията на работата на различните компоненти на системата. Кеш памет: Кеш памет: Малка и бърза памет, разположена между основната памет и процесора, която съхранява често използвани данни и инструкции. Нива на кеш памет: L1 (най-бърз и най-малък), L2, L3 (по-бавни и по-големи). Архитектурни принципи: Harvard архитектура: Отделна памет за данни и инструкции, позволяваща едновременен достъп до тях. CISC (Complex Instruction Set Computer): Комплексен набор от инструкции с множество адресиращи режими. RISC (Reduced Instruction Set Computer): Прост набор от инструкции, оптимизиран за бързо изпълнение. Памет с произволен достъп (RAM) и постоянна памет (ROM): DRAM (Dynamic RAM): Изисква периодично обновяване на данните. SRAM (Static RAM): Не изисква обновяване, по-бърза и по-скъпа от DRAM. ROM (Read-Only Memory): Постоянна памет, използвана за съхранение на фърмуер. Система за прекъсвания: Типове прекъсвания: o Маскируеми прекъсвания: Могат да бъдат игнорирани или отложени от процесора. o Немаскируеми прекъсвания: Важни прекъсвания, които не могат да бъдат игнорирани. Вектори на прекъсвания: Адреси в паметта, където се съхраняват рутините за обработка на прекъсвания. Паралелизъм (допълнение): Суперскаларни архитектури: Използват множество изпълнителни единици за паралелно изпълнение на инструкции. Многоядрени процесори: Процесори с множество ядра, които могат да изпълняват различни задачи едновременно. Виртуална памет: Концепция за виртуална памет: Позволява използването на по-голямо адресно пространство чрез използване на физическа памет и дисково пространство. Страници и странични таблици: Разделяне на виртуалното адресно пространство на малки блокове (страници) и използване на таблици за съпоставяне на виртуални адреси към физически адреси. Системни шини и комуникация: Системни шини: Различни видове шини като данни, адресни и контролни шини, които осигуряват комуникация между компонентите на компютъра. PCI (Peripheral Component Interconnect): Шина за свързване на периферни устройства към компютъра. USB (Universal Serial Bus): Универсален интерфейс за свързване на периферни устройства. Практически примери и приложения: Съвременни процесори: Intel, AMD, ARM и техните архитектури. Операционни системи: Как архитектурата на фон Нойман се отразява в дизайна на операционните системи като Windows, Linux и macOS. Вградени системи: Използването на фон Нойман архитектурата в микроконтролери и вградени системи. Тема 3 Дискретна математика Дискретната математика изучава математически структури, които са дискретни, т.е. не са непрекъснати. Основните области на дискретната математика включват: 1. Теория на множества Множества: Колекции от обекти. Операции с множества: Обединение, пресичане, разлика и допълнение. Картезианско произведение: Множество от всички подредени двойки, съставени от два други множества. 2. Логика Изчислителна логика: Проучва истинностни стойности (истина/лъжа) и логически операции (AND, OR, NOT, импликация и еквивалентност). Логически изрази: Формули, които използват логически операции. Формални езици и граматики 1. Формални езици Дефиниция: Формален език е множество от думи (крайни последователности от символи), които принадлежат на определен азбучен набор. Алфавит: Краен набор от символи. Дума: Крайна последователност от символи от даден алфавит. 2. Граматики Дефиниция: Формална граматика е набор от правила, които описват как думите в езика могат да бъдат формирани. Компоненти на граматиката: o Нетерминални символи: Символи, които могат да бъдат заместени. o Терминални символи: Символи, които не могат да бъдат заместени (алфавитът на езика). o Начален символ: Специален нетерминален символ, от който започва производството. o Продукционни правила: Правила, които описват как нетерминалните символи могат да бъдат заместени. 3. Типове граматики (Чомски йерархия) Тип 0: Неограничени граматики. Тип 1: Контекстно-зависими граматики. Тип 2: Контекстно-свободни граматики. Тип 3: Регулярни граматики. Крайни автомати 1. Дефиниция Краен автомат: Математически модел на изчислително устройство с крайно състояние. 2. Компоненти на краен автомат Множество от състояния: Краен набор от състояния. Алфавит: Краен набор от входни символи. Преходна функция: Функция, която определя преминаването от едно състояние в друго. Начално състояние: Състояние, от което започва автоматът. Множество от крайни състояния: Състояния, в които автоматът може да завърши изпълнението си. 3. Видове крайни автомати Детерминирани крайни автомати (DFA): За всеки входен символ и текущо състояние има точно едно следващо състояние. Недетерминирани крайни автомати (NFA): За всеки входен символ и текущо състояние може да има повече от едно следващо състояние. Теория на графите 1. Дефиниция Граф: Състои се от множество върхове (или възли) и множество ръбове (или ребра), които свързват двойки върхове. 2. Видове графи Прости графи: Графи без мултиръбове и бримки. Ориентирани графи (диграфи): Графи с насочени ръбове. Планарни графи: Графи, които могат да бъдат начертани в равнината без пресичане на ръбовете. Свързани графи: Графи, в които има път между всяка двойка върхове. 3. Специални видове графи Дървета: Свързани ациклични графи. Бипартитни графи: Графи, чиито върхове могат да бъдат разделени на две неприпокриващи се множества, така че всеки ръб свързва върхове от различни множества. 4. Основни концепции Степен на връх: Броят на ръбовете, свързани с върха. Път и цикъл: Последователност от върхове, свързани с ръбове, където пътят не повтаря върхове, а цикълът се връща към началния връх. Ейлеров път и цикъл: Път или цикъл, който минава през всеки ръб на графа точно веднъж. Хамилтонов път и цикъл: Път или цикъл, който минава през всеки връх на графа точно веднъж. Допълнителни теми и важни аспекти Приложения на формалните езици и крайни автомати Компилатори и интерпретатори: Използват формални граматики за анализ на синтаксиса на програмите. Регулярни изрази: Използват се за търсене и манипулация на текст в различни програми. Приложения на теорията на графите Мрежи и комуникации: Моделиране на мрежови структури и алгоритми за най- къс път, маршрутизиране и т.н. Социални мрежи: Анализ на социални графи за разбиране на връзките и взаимодействията между индивиди или групи. Дискретна математика (допълнително) Комбинаторика Факториел (n!): Произведение на всички положителни цели числа до n. Използва се за броене на подреждания. Биномни коефициенти: Представят броя на начините за избиране на k елемента от n елемента. Изразяват се като (nk)=n!k!(n−k)!\binom{n}{k} = \frac{n!}{k!(n- k)!}(kn)=k!(n−k)!n!. Пермутации: Подреждане на всички елементи в определен ред. Комбинации: Избор на подмножества от елементи без да се взима предвид редът. Формални езици и граматики (допълнително) Регулярни езици и автомати Регулярни езици: Езици, които могат да бъдат описани чрез регулярни изрази и разпознавани от детерминирани и недетерминирани крайни автомати. Теорема на Клини: Всяко множество, което може да бъде разпознато от краен автомат, може да бъде описано с регулярни изрази и обратното. Контекстно-свободни граматики Безконтекстни граматики (CFG): Граматики, в които продукционните правила имат формата A→γA \rightarrow \gammaA→γ, където A е нетерминален символ, а γ\gammaγ е произволна последователност от терминални и нетерминални символи. Парсинг (разбор): Процесът на анализ на синтактичната структура на входните данни съгласно дадена граматика. Често използван в компилаторите. Крайни автомати (допълнително) Минимизация на детерминиран краен автомат (DFA) Алгоритъм на Хопкрофт: Използван за минимизация на броя на състоянията на DFA. Еквивалентни състояния: Състояния, които могат да бъдат обединени без промяна на езика, разпознат от автомата. Пушдаун автомати (PDA) Дефиниция: Краен автомат с допълнителна стека памет. Използва се за разпознаване на контекстно-свободни езици. Компоненти: Състояния, входен алфавит, стеков алфавит, преходна функция, начално състояние, начално стеково символ и крайни състояния. Теория на графите (допълнително) Алгоритми за графи Алгоритъм на Дейкстра: Намиране на най-късите пътища от един връх до всички останали в претеглен граф без отрицателни тегла. Алгоритъм на Прим: Намиране на минимално покриващо дърво в свързан претеглен граф. Алгоритъм на Крускал: Друг алгоритъм за намиране на минимално покриващо дърво, като добавя ръбове по нарастващ ред на теглата. Специални видове графи (допълнително) Двуделни графи (bipartite graphs): Графи, чиито върхове могат да бъдат разделени на две множества така, че всеки ръб свързва връх от едното множество с връх от другото. Планарни графи: Графи, които могат да бъдат начертани в равнината без ръбовете да се пресичат. Експлоатират се за визуализации и при проектиране на печатни платки (PCB). Изоморфизъм на графи Изоморфизъм на графи: Два графа са изоморфни, ако съществува биекция между множествата им върхове, която запазва съседството. Приложения Формални езици и крайни автомати Компилатори и интерпретатори: Използват граматики и автомати за анализ и изпълнение на програмен код. Регулярни изрази в текстови редактори: Използват се за търсене и манипулиране на текст. Теория на графите Мрежови анализи: Използват се за анализ на мрежови структури в компютърни мрежи, социални мрежи и други. Оперативни изследвания и логистика: Оптимизация на транспортни маршрути, анализ на потоци и др. Тема 4 Процедурно програмиране. Основни принципи. Типове данни. Структури от данни. Операции и изрази. Основни управляващи конструкции. Програмни части и връзки между тях. Структурно и модулно програмиране. Процедурно програмиране 1. Основни принципи Процедурна абстракция: Разделяне на програмата на подпрограми (функции или процедури), които изпълняват конкретни задачи. Модуляризация: Разделяне на програмата на отделни, независими модули, които могат да бъдат разработвани и тествани отделно. Контрол на потока: Използване на управляващи конструкции за контрол на изпълнението на програмата. Типове данни 2. Основни типове данни Примитивни типове данни: o Цели числа (int): Представляват цели числа. o Дробни числа (float, double): Представляват реални числа с плаваща запетая. o Знакове (char): Представляват отделни символи. o Булеви (bool): Представляват логически стойности (истина/лъжа). Съставни типове данни: o Масиви (arrays): Колекции от елементи от един и същ тип, достъпни чрез индекс. o Структури (structs): Групи от променливи от различни типове, организирани под едно име. o Списъци (lists): Динамични колекции от елементи, достъпни чрез последователност. Структури от данни 3. Основни структури от данни Масиви: Фиксирана дължина, достъп до елементи чрез индекс. Свързани списъци (linked lists): Списъци, състоящи се от елементи (възли), които съдържат данни и указател към следващия елемент. Стекове (stacks): Последователност от елементи, в която достъпът е възможен само до последно добавения елемент (LIFO - Last In, First Out). Опашки (queues): Последователност от елементи, в която достъпът е възможен само до първо добавения елемент (FIFO - First In, First Out). Дървета (trees): Йерархични структури, състоящи се от върхове и ръбове, като всеки връх може да има множество деца, но само един родител. Хеш таблици (hash tables): Структури, които осигуряват бърз достъп до елементи чрез хеширане на ключовете. Операции и изрази 4. Основни операции и изрази Аритметични операции: +, -, *, /, % (остатък при деление). Логически операции: && (AND), || (OR), ! (NOT). Операции за сравнение: ==, !=, >, =, (b) ? (a) : (b)) Сигнали и обработка на изключения Сигнали: Асинхронни събития, които прекъсват изпълнението на програмата и предизвикват изпълнението на специални обработващи функции (handlers). o Пример: Сигналите в Unix системите, като SIGINT, SIGTERM. Обработка на изключения: Механизми за обработка на грешки и изключения, които възникват по време на изпълнението на програмата. Примери за процедурни програмни езици (допълнително) C: Използван за системно програмиране, операционни системи, компилатори. Pascal: Използван за обучение и развитие на структурно програмиране. Fortran: Използван за научни и инженерни изчисления. BASIC: Използван за обучение и разработка на приложения. Тема 5 Алгоритми и структури от данни 1. Абстрактни типове данни (ADT) Дефиниция: Абстрактен тип данни е математически модел за структурата на данни, който е дефиниран чрез набор от стойности и операции върху тези стойности. Примери: o Стек (Stack): LIFO структура от данни с операции push и pop. o Опашка (Queue): FIFO структура от данни с операции enqueue и dequeue. o Списък (List): Последователност от елементи с операции за добавяне, премахване и достъп до елементите. o Двоично дърво (Binary Tree): Йерархична структура с върхове и ръбове, където всеки връх има най-много две деца. Рекурсия и итерация 2. Рекурсия Рекурсия: Метод, при който функция извиква сама себе си. o Основни компоненти: Базов случай и рекурсивен случай. o Пример: Факториел на число. int factorial(int n) { if (n == 0) return 1; else return n * factorial(n - 1); } 3. Итерация Итерация: Метод за повторно изпълнение на блок от код чрез цикли като for, while и do-while. o Пример: Итеративно изчисление на факториел. int factorial(int n) { int result = 1; for (int i = 1; i arr[j+1]) { int temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } } Selection Sort: Намира най-малкия елемент в списъка и го разменя с първия елемент. Повтаря процеса за останалата част от списъка. void selectionSort(int arr[], int n) { for (int i = 0; i < n-1; i++) { int min_idx = i; for (int j = i+1; j < n; j++) { if (arr[j] < arr[min_idx]) min_idx = j; } int temp = arr[min_idx]; arr[min_idx] = arr[i]; arr[i] = temp; } } Insertion Sort: Вмъква всеки елемент от неотсортирната част в правилната позиция в отсортирната част. void insertionSort(int arr[], int n) { for (int i = 1; i < n; i++) { int key = arr[i]; int j = i - 1; while (j >= 0 && arr[j] > key) { arr[j + 1] = arr[j]; j = j - 1; } arr[j + 1] = key; } } Merge Sort: Разделя списъка на две половини, сортира всяка половина рекурсивно и след това ги слива. void merge(int arr[], int l, int m, int r) { int n1 = m - l + 1; int n2 = r - m; int L[n1], R[n2]; for (int i = 0; i < n1; i++) L[i] = arr[l + i]; for (int j = 0; j < n2; j++) R[j] = arr[m + 1 + j]; int i = 0, j = 0, k = l; while (i < n1 && j < n2) { if (L[i] Int sumList [] = 0 sumList (x:xs) = x + sumList xs -- Функция за обръщане на списък reverseList :: [a] -> [a] reverseList [] = [] reverseList (x:xs) = reverseList xs ++ [x] Функции от по-висок ред haskell -- Функция за филтриране на списък filter' :: (a -> Bool) -> [a] -> [a] filter' _ [] = [] filter' p (x:xs) | p x = x : filter' p xs | otherwise = filter' p xs -- Пример за използване на filter' evenNumbers = filter' even [1, 2, 3, 4, 5, 6] -- Връща: [2, 4, 6] Нека разгледаме как Java може да се използва за функционално програмиране чрез примери. Функционално програмиране в Java Ламбда изрази Ламбда изразите са кратки начини за дефиниране на анонимни функции (функции без име) и са основна част от функционалното програмиране в Java. Пример за ламбда израз: java import java.util.function.Function; public class LambdaExample { public static void main(String[] args) { // Ламбда израз за функция, която увеличава числото с 1 Function increment = x -> x + 1; // Използване на ламбда израза System.out.println(increment.apply(5)); // Извежда 6 } } Функции от по-висок ред Java позволява създаването на функции от по-висок ред чрез използването на интерфейси от пакета java.util.function, като Function, Predicate, Consumer, и Supplier. Пример за функции от по-висок ред: java import java.util.Arrays; import java.util.List; import java.util.function.Predicate; import java.util.stream.Collectors; public class HigherOrderFunctionExample { public static void main(String[] args) { List numbers = Arrays.asList(1, 2, 3, 4, 5, 6); // Функция от по-висок ред: filter Predicate isEven = x -> x % 2 == 0; List evenNumbers = numbers.stream().filter(isEven).collect(Collectors.toList()); System.out.println(evenNumbers); // Извежда [2, 4, 6] } } Обработка на списъци с потоци (Streams) Streams API в Java позволява лесна и ефективна обработка на колекции от данни. Пример за обработка на списъци: java import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class StreamsExample { public static void main(String[] args) { List numbers = Arrays.asList(1, 2, 3, 4, 5, 6); // Използване на Streams за обработка на списък List squaredNumbers = numbers.stream().map(x -> x * x).collect(Collectors.toList()); System.out.println(squaredNumbers); // Извежда [1, 4, 9, 16, 25, 36] } } Типични приложения Паралелни операции с потоци Java Streams API също така позволява паралелна обработка на данни, което е особено полезно за големи колекции от данни. Пример за паралелни потоци: java import java.util.Arrays; import java.util.List; public class ParallelStreamsExample { public static void main(String[] args) { List numbers = Arrays.asList(1, 2, 3, 4, 5, 6); // Използване на паралелни потоци за обработка на списък int sum = numbers.parallelStream().mapToInt(x -> x).sum(); System.out.println(sum); // Извежда 21 } } Заключение Докато Java не е чисто функционален език, тя предлага множество функционални програмни техники чрез ламбда изрази, интерфейси от пакета java.util.function и Streams API. Това позволява на програмистите да използват функционален стил на програмиране и да се възползват от предимствата на функционалното програмиране. Тема 9 Операционни системи 1. Предназначение Операционната система (ОС) е софтуер, който управлява хардуера на компютъра и предоставя услуги за изпълнение на програми. ОС служи като посредник между потребителя и хардуера на компютъра. 2. Класификация Еднопотребителски и многопотребителски: Еднопотребителските ОС позволяват работа на един потребител в даден момент, докато многопотребителските ОС поддържат едновременно работа на няколко потребители. Еднозадачни и многозадачни: Еднозадачните ОС изпълняват само една програма в даден момент, докато многозадачните ОС могат да изпълняват множество програми едновременно. Детерминирани и недетерминирани: Детерминираните ОС имат предвидимо поведение при изпълнение на задачи, докато недетерминираните могат да имат непредсказуеми резултати. Разпределени ОС: Управляват множество компютри и ресурси, разпределени в мрежа. 3. Основни компоненти Ядро (Kernel): Основният компонент на ОС, който управлява ресурсите на системата (процесори, памет, периферни устройства). Драйвери на устройства: Софтуер, който позволява на ОС да комуникира с хардуерните устройства. Файлова система: Организира и управлява съхранението на данни. Потребителски интерфейс (User Interface): Интерфейсът, чрез който потребителите взаимодействат с ОС (CLI или GUI). 4. Принципи за изграждане Монолитни ядра: Всички компоненти на ОС са интегрирани в едно цяло. Микроядра: Основните функции на ОС са разделени на малки, независими компоненти, които комуникират помежду си. Модулярност: ОС е изградена от независими модули, които могат да бъдат добавяни или премахвани при необходимост. Виртуализация: Позволява на ОС да изпълнява множество виртуални машини на един физически компютър. Управление на паметта 5. Управление на паметта Статично и динамично разпределение на памет: Статичното разпределение определя размера на паметта по време на компилация, докато динамичното разпределение я определя по време на изпълнение. Фрагментация: Проблем, при който наличната памет е разпределена на малки, несвързани блокове, които не могат да бъдат използвани ефективно. 6. Виртуална памет Пейджинг (Paging): Разделяне на физическата памет на малки, фиксирани блокове (страници), които се разпределят на процесите. Сегментиране (Segmentation): Разделяне на паметта на логически сегменти с различни размери, които отразяват структурите на програмата. Таблици на страниците (Page Tables): Структури от данни, които поддържат съответствие между виртуалните и физическите адреси. Управление на процесорите 7. Управление на процесорите Планиране на процесите (Process Scheduling): Алгоритми, които определят реда на изпълнение на процесите. o FCFS (First-Come, First-Served): Процесите се изпълняват в реда на пристигането си. o SJF (Shortest Job First): Процесите с най-кратко време за изпълнение се изпълняват първи. o Round Robin: Всеки процес получава равен интервал от време за изпълнение. o Приоритетно планиране (Priority Scheduling): Процесите се изпълняват на базата на приоритети. 8. Управление на периферните устройства Входно-изходни операции (I/O Operations): ОС управлява взаимодействието с периферните устройства като клавиатури, мишки, принтери и дискове. Буфериране (Buffering): Използване на буфери за съхранение на данни временно по време на прехвърляне между устройството и паметта. Кеширане (Caching): Използване на бърза памет за съхранение на често използвани данни, за да се ускори достъпът до тях. Файлова система 9. Файлова система Организация на файловете: Файловете се организират в директории и поддиректории. Достъп до файлове: Определя начина, по който файловете се четат, записват и модифицират. Типове файлови системи: FAT, NTFS, ext, HFS+ и др. Контрол на достъпа: Права за четене, запис и изпълнение, които се задават на файловете и директориите. Потребителски интерфейс 10. Потребителски интерфейс CLI (Command Line Interface): Текстов интерфейс, при който потребителите въвеждат команди, за да взаимодействат с ОС. GUI (Graphical User Interface): Графичен интерфейс, при който потребителите използват мишка и клавиатура, за да взаимодействат с ОС чрез графични елементи като икони и прозорци. Примерен код Управление на паметта (C) c #include #include int main() { int *arr; int n; printf("Enter number of elements: "); scanf("%d", &n); // Динамично разпределяне на памет arr = (int*)malloc(n * sizeof(int)); if (arr == NULL) { printf("Memory allocation failed\n"); return 1; } for (int i = 0; i < n; i++) { arr[i] = i + 1; } printf("Elements of the array: "); for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } // Освобождаване на паметта free(arr); return 0; } Тема 10 Инструменти за създаване на програми 1. Среди за разработка Среда за разработка на софтуер (Integrated Development Environment, IDE) е софтуерен пакет, който осигурява комплекс от инструменти за разработка на софтуер. Някои от най-използваните среди за разработка включват: Visual Studio: IDE на Microsoft за разработка на приложения на различни езици, включително C#, VB.NET, C++ и др. Eclipse: Свободен IDE, използван предимно за Java разработка, но поддържа и много други езици чрез плъгини. IntelliJ IDEA: Популярен IDE за Java, но също така поддържа много други езици и технологии. Xcode: IDE на Apple за разработка на приложения за iOS и macOS. PyCharm: Специализирано IDE за Python разработка. Редактори Редактори са основни инструменти за писане на програмен код. Те могат да бъдат прости текстови редактори или по-усъвършенствани с поддръжка на синтаксис, автоматично допълване и други функции. Прости редактори: Notepad, Nano. Разширени редактори: Visual Studio Code, Sublime Text, Atom, Vim, Emacs. Свързващи редактори Свързващи редактори (linkers) са инструменти, които комбинират различни обекти файлове (object files) и библиотеки в един изпълним файл (executable file). Те решават символи и адреси, които са реферирани в различни модули. Статично свързване: Всички необходими библиотеки се включват директно в изпълнимия файл. Динамично свързване: Библиотеките се зареждат по време на изпълнение. Транслатори Транслатори са програми, които преобразуват код от един програмен език в друг. Те включват компилатори, интерпретатори и асемблери. Видове транслатори: Компилатори: Превеждат програмен код от високо ниво на машинен код (напр. GCC за C/C++, javac за Java). Интерпретатори: Изпълняват програмен код ред по ред, без да го превеждат в машинен код предварително (напр. Python интерпретатор). Асемблери: Превеждат асемблерен код на машинен код (напр. NASM, MASM). Основни етапи на компилация: 1. Лексикален анализ (Lexical Analysis): Разделяне на кода на токени. 2. Синтактичен анализ (Parsing): Построяване на синтактично дърво от токените. 3. Семантичен анализ (Semantic Analysis): Проверка на правилността на програмата. 4. Оптимизация (Optimization): Подобряване на ефективността на кода. 5. Генериране на код (Code Generation): Превод на оптимизирания код в машинен код. 6. Свързване (Linking): Свързване на обектните файлове и библиотеките в един изпълним файл. Преместваеми асемблери и зареждаща програма Преместваеми асемблери Преместваеми асемблери генерират код, който може да бъде зареден и изпълнен на различни адреси в паметта. Това се постига чрез използване на релокиращи записи (relocation records), които позволяват коригиране на адресите по време на зареждането. Зареждаща програма (Loader) Зареждаща програма (loader) е софтуер, който зарежда изпълнимия файл в паметта и го подготвя за изпълнение. Тя изпълнява следните задачи: o Четене на изпълнимия файл. o Разпределяне на памет за програмата. o Релокация на адресите, ако е необходимо. o Инициализация на изпълнението на програмата. Средства за тестване Средствата за тестване са инструменти и методологии, използвани за проверка на коректността, ефективността и надеждността на софтуера. Видове тестване: Юнит тестване (Unit Testing): Тестване на отделни модули или компоненти на програмата. o Инструменти: JUnit за Java, pytest за Python. Интеграционно тестване (Integration Testing): Тестване на комбинации от модули, които работят заедно. Системно тестване (System Testing): Тестване на цялата система като цяло. Приемателно тестване (Acceptance Testing): Проверка дали системата отговаря на изискванията и очакванията на потребителя. Регресионно тестване (Regression Testing): Проверка дали новите промени не са въвели нови грешки в системата. Примерен код за юнит тестване на Java: java import static org.junit.jupiter.api.Assertions.*; import org.junit.jupiter.api.Test; public class CalculatorTest { @Test public void testAddition() { Calculator calc = new Calculator(); int result = calc.add(2, 3); assertEquals(5, result); } @Test public void testSubtraction() { Calculator calc = new Calculator(); int result = calc.subtract(5, 3); assertEquals(2, result); } } Заключение Това е основният преглед на темата за инструментите за създаване на програми, включително среди за разработка, редактори, свързващи редактори, транслатори, преместваеми асемблери, зареждаща програма и средства за тестване. Ако имаш допълнителни въпроси или искаш да разгледаме някой аспект по-подробно, не се колебай да ми кажеш! Тема 11 Интерфейси 1. Дефиниция и видове интерфейси Интерфейсът е точката на взаимодействие между две системи. В контекста на компютърните системи, това е начинът, по който потребителите взаимодействат със софтуера и хардуера. Видове интерфейси: Потребителски интерфейс (User Interface, UI): Интерфейсът, чрез който потребителите взаимодействат с компютърната система. o Графичен потребителски интерфейс (GUI): Интерфейс, базиран на графични елементи като икони, бутони и менюта. o Текстов потребителски интерфейс (Text User Interface, TUI): Интерфейс, базиран на текст и командни редове. Програмни интерфейси (Application Programming Interface, API): Интерфейсите, чрез които различни софтуерни компоненти комуникират помежду си. Хардуерни интерфейси: Интерфейси между различни хардуерни компоненти (напр. USB, HDMI). Методи и средства за комуникация човек-компютър 2. Основни методи за комуникация Входни устройства: Клавиатура: Основно устройство за въвеждане на текстова информация. Мишка: Устройство за посочване и кликване върху графични елементи на екрана. Тъчпад: Устройство за посочване, обикновено интегрирано в лаптопи. Тъчскрийн: Екран, който разпознава докосвания с пръсти или стилус. Гласови команди: Технологии за разпознаване на говор, които позволяват на потребителите да управляват компютъра чрез глас. Жестове: Използване на камери и сензори за разпознаване на движения и жестове. Изходни устройства: Монитор: Устройство за визуално представяне на информацията. Принтер: Устройство за печатане на документи. Говорители и слушалки: Устройства за звуков изход. Осигуряване на навигацията и на изискванията на потребителите 3. Принципи на добрия дизайн на потребителския интерфейс Основни принципи: Консистентност: Елементите и действията трябва да бъдат последователни и предвидими. Достъпност: Интерфейсът трябва да бъде достъпен за потребители с различни възможности. Интуитивност: Потребителите трябва лесно да разбират как да използват интерфейса без необходимост от обучение. Ефективност: Интерфейсът трябва да позволява на потребителите да постигат целите си бързо и ефективно. Обратна връзка: Интерфейсът трябва да предоставя ясна обратна връзка за действията на потребителя. Методи за осигуряване на навигация: Менюта: Организирани списъци с команди и опции. Бутони и икони: Графични елементи, които представляват команди и действия. Навигационни ленти: Ленти, които предоставят бърз достъп до основни функции и секции на приложението. Търсачки: Полета за търсене, които позволяват на потребителите да намират информация бързо. Графичен потребителски интерфейс (GUI) 4. Основни компоненти на GUI Компоненти: Прозорци: Основните области на екрана, където се показва информацията. Менюта: Навигационни елементи, които съдържат списъци с опции. Икони: Графични изображения, които представляват файлове, програми или действия. Бутони: Елементи за изпълнение на команди. Диалогови прозорци: Прозорци, които изискват взаимодействие от потребителя. Полета за въвеждане на текст: Места, където потребителите могат да въвеждат текстова информация. Пример за GUI на Java (с помощта на Swing): java import javax.swing.*; public class SimpleGUI { public static void main(String[] args) { // Създаване на рамка JFrame frame = new JFrame("Simple GUI"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(300, 200); // Създаване на бутон JButton button = new JButton("Click me"); frame.getContentPane().add(button); // Добавяне на бутона към рамката // Показване на рамката frame.setVisible(true); } } 5. Инструменти за създаване на GUI Инструменти: JavaFX: Модерен инструмент за създаване на GUI приложения на Java. Swing: По-стар инструмент за създаване на GUI приложения на Java. Qt: Кросплатформена библиотека за създаване на GUI приложения. Tkinter: Стандартната библиотека за създаване на GUI приложения на Python. Типични приложения на GUI Примери: Офис приложения: Текстови процесори, електронни таблици, презентационни програми. Уеб браузъри: Програми за достъп до интернет и сърфиране в мрежата. Игри: Интерактивни приложения за забавление. Мултимедийни приложения: Програми за обработка на аудио и видео. Тема 12 Технология на софтуерното производство 1. Модели на софтуерното производство Водопаден модел (Waterfall Model) Етапи: o Изисквания: Събиране и анализ на изискванията. o Дизайн: Планиране на архитектурата и дизайна на системата. o Имплементация: Програмиране и кодиране. o Тестване: Проверка и валидация на системата. o Интеграция: Внедряване на системата. o Поддръжка: Коригиране на грешки и подобрения. Плюсове: Лесен за разбиране и управление. Минуси: Няма гъвкавост, трудно се адаптира към променящи се изисквания. Спирален модел (Spiral Model) Етапи: o Планиране: Дефиниране на цели, алтернативи и ограничения. o Анализ на риска: Идентифициране и анализ на рисковете. o Разработка и валидиране: Проектиране, програмиране и тестване. o Оценка и планиране: Преглед и планиране на следващата фаза. Плюсове: Гъвкав, позволява оценка и управление на рисковете. Минуси: Комплексен, изисква много внимание към детайлите. Итеративен и инкрементален модел (Iterative and Incremental Model) Етапи: o Итерации: Проектът се разработва на малки итерации, всяка от които добавя нови функционалности. Плюсове: Гъвкавост, възможност за адаптиране към променящи се изисквания. Минуси: Може да доведе до претоварване с множество итерации. 2. Жизнен цикъл на софтуера (Software Development Life Cycle, SDLC) Жизненият цикъл на софтуера описва всички фази на разработка и поддръжка на софтуерния продукт. o Фази: 1. Планиране: Дефиниране на целите и обхвата на проекта. 2. Анализ на изискванията: Събиране и анализ на потребителските изисквания. 3. Дизайн: Проектиране на архитектурата и дизайна на системата. 4. Имплементация: Кодиране на системата. 5. Тестване: Валидация и проверка на системата. 6. Инсталиране и внедряване: Интеграция на системата в работната среда. 7. Поддръжка и поддръжка: Коригиране на грешки и осигуряване на подобрения. 3. Унифициран процес (Unified Process) Унифицираният процес е итеративен и инкрементален модел на разработка на софтуер, който използва UML (Unified Modeling Language) за документиране на процеса. o Фази: 1. Иницииране: Дефиниране на обхвата и целите на проекта. 2. Елабориране: Подробен анализ и проектиране на системата. 3. Конструиране: Реализация на системата чрез итерации. 4. Преход: Внедряване и предаване на системата на крайните потребители. Работни потоци: Всеки етап съдържа различни работни потоци, като бизнес моделиране, анализ и дизайн, имплементация, тестване и разгръщане. 4. Работни потоци (Workflows) Основни работни потоци: Бизнес моделиране: Анализ и моделиране на бизнес процесите. Изисквания: Събиране и документиране на изискванията. Анализ и дизайн: Проектиране на архитектурата и детайлите на системата. Имплементация: Програмиране и кодиране. Тестване: Проверка и валидация на системата. Разгръщане (Deployment): Инсталиране и внедряване на системата в производствената среда. Поддръжка: Поддръжка и усъвършенстване на системата след внедряване. 5. Планиране Основни елементи на планирането: Определяне на цели и обхват: Дефиниране на основните цели и обхвата на проекта. Създаване на график: Определяне на времеви рамки и етапи на проекта. Разпределение на ресурси: Определяне на необходимите ресурси (човешки, финансови, материални). Оценка на разходи: Изчисляване на разходите по проекта. Управление на времето: Оптимизация на времето за изпълнение на задачите. 6. Справяне с рискове Основни елементи на управлението на рисковете: Идентификация на рисковете: Идентифициране на потенциалните рискове, които могат да възникнат по време на проекта. Анализ на рисковете: Оценка на вероятността и въздействието на идентифицираните рискове. Планиране на реакцията на рисковете: Разработване на планове за минимизиране или елиминиране на рисковете. Мониторинг и контрол на рисковете: Наблюдение и управление на рисковете по време на изпълнението на проекта. Тема 13 Бази данни 1. Обща характеристика и предназначение Базите данни са организирани колекции от данни, които се използват за съхранение, управление и извличане на информация. Те са проектирани да поддържат големи количества данни и да предоставят бърз и ефективен достъп до тях. Предназначение: Съхранение на данни: Дългосрочно и надеждно съхранение на големи обеми от данни. Управление на данни: Организиране, индексиране и управление на данни. Извличане на данни: Бързо и ефективно извличане на необходимата информация. Сигурност и контрол на достъпа: Управление на достъпа до данните и осигуряване на тяхната сигурност. 2. Модели на бази данни Основни модели: Релационен модел: Организиране на данните в таблици (релации), свързани помежду си чрез ключове. Това е най-широко използваният модел. Йерархичен модел: Данните са организирани в дървовидна структура, където всеки възел има един родител и множество деца. Мрежов модел: Разширение на йерархичния модел, което позволява възлите да имат множество родители. Обектно-ориентиран модел: Данните се представят като обекти, подобно на обектно-ориентираното програмиране. NoSQL модел: Включва различни видове модели като документи, графи, ключ- стойност и колонки, които не следват релационната схема. 3. Архитектура на бази данни Основни компоненти на архитектурата: Система за управление на бази данни (DBMS): Софтуер, който управлява базата данни и осигурява интерфейс за потребителите и приложенията. Схема на базата данни: Логическата структура на базата данни, която определя как данните са организирани и как се свързват помежду си. Физическо съхранение: Местоположението и начинът на съхранение на данните на физически носители. Потребители: Различни типове потребители, които взаимодействат с базата данни (крайни потребители, администратори на бази данни, разработчици). Релационни бази данни 4. Релационен модел Основни понятия: Таблица (Relation): Сет