- •Інженерія програмного забезпечення
- •Загальні вимоги до програмного забезпечення
- •Процеси життєвого циклу програмного забезпечення
- •Керування процесом проектування програмного забезпечення
- •Прототипування програмних систем.
- •Архітектурне проектування програмних систем
- •Архітектура розподілених систем
- •Проектування систем реального часу
- •Об‘єктно-орієнтоване проектування програмних систем.
- •Візуальне проектування об‘єктно-орієнтованих систем
- •Динамічні моделі об‘єктно-орієнтованих систем
- •Моделі реалізації об‘єктно-орієнтованих програмних систем
- •Проектування інтерфейсу користувача
- •Тестування програм та систем
- •Структурне тестування програмного забезпечення.
- •Методи та засоби автоматизації тестування програмного забезпення
- •Системне програмування
- •Дати оцінку основним правилам автоматичного перетворення типів.
- •Розкрити сутність адресної арифметики при роботі з вказівниками.
- •Обґрунтувати алгоритм та представити програмний код для реалізації програми, що сумує з 0 по 3 біт першого числа та з 3 по 6 біт другого числа.
- •Розкрийте поняття програмна модель мікропроцесора.
- •Проаналізувати типи даних в мові асемблер.
- •Проаналізувати особливості роботи із масивами в мові асемблер.
- •Проаналізувати структуру програми мовами програмування з родини асемблерів(синтаксис ассемблера).
- •Організувати на асемблері ехе-програму, щоб перекодувати символи строки шляхом додавання до літери строки кодів символів таблиці(Код мовою Asembler).
- •Організувати ехе-програму , щоб перекодувати символи з однієї таблиці в іншу(код мовою асемблера).
- •Організація баз даних
- •Моделі даних: ієрархічна, мережева, реляційна, об‘єктно-реляційна, нереляційна.
- •NoSql або постреляційні бази даних
- •Реляційна модель даних. Операції реляційної алгебри.
- •Нормалізація відношень при проектування реляційної моделі.
- •Поняття первинних ключів. Роль функціональних залежностей. Зовнішні та батьківські ключі.
- •Нормалізація відношень: перша, друга та третя нормальні форми
- •Визначення другої нормальної форми. Правило приведення. Повна функціональна залежність.
- •Визначення третьої нормальної форми. Правило приведення. Транзитивна залежність.
- •Семантичне моделювання та когнітивний аспект.
- •Проектування баз даних: концептуальне, логічне, фізичне
- •Модель «сутність-зв‘язок» або er-модель
- •Нормалізація даних в er-моделі
- •Case-засоби проектування баз даних.
- •Мова маніпулювання даними sql. Побудова запитів.
- •Адміністрування даних. Засоби підтримки цілісності баз даних
Обґрунтувати алгоритм та представити програмний код для реалізації програми, що сумує з 0 по 3 біт першого числа та з 3 по 6 біт другого числа.
Спочатку виконаємо побітове «і» з байтами вигляду 11100000 і 00011100 з наданими числами, це дозволить, потім отримані значення передамо у функцію яка реалізує повний циклічний суматор, тобто у програмі використано рівняння повного суматора.
#include <iostream>
using namespace std;
bool sumator(bool a, bool b, bool cIn, bool* cOut)
{
*cOut = (a & b) | ((a ^ b) & cIn);
return (a ^ b) ^ cIn;
}
char sum(char a, char b)
{
bool perenos = 0;
char result = 0;
for (int i = 0; i < 7; i++)
{
if (sumator((a >> i) & 1, (b >> i) & 1, perenos, &perenos))
{
result = result | (1 << i);
}
}
return result;
}
int main()
{
char a = 10;
char b = 14;
char c = a & 0b00000111;
char d = b & 0b00111000;
char r = sum(c, d);
return 0;
}
Обгрунтувати алгоритм та представити програмний код для реалізації заповнення рядку випадковими значеннями (від -50 до 50) і розробити функцію, що виконує таку обробку символьного рядку: підрахувати кількість сусідніх елементів з однаковими значеннями. При реалізації забороняється користуватися функціями бібліотек мови С++(код мовою С++)
Для генерації випадкових чисел використано трохи змінений метод відрахувань, що реалізовано в функції int get_rand(). Суть методу полягає у наступному: візьмемо дробове число а, з довгою дробовою частиною, помножимо на велике ціле число М, в результаті отримаємо цифру - ціле плюс дрібна частина. Цілу частину результату відкинемо, а дробову візьмемо в якості наступного числа. Проте наша функція буде повертати саме відкинуту цілу частину, яка теж є статистично випадковою величною. Слід зауважити, що цей метод повертає псевдо випадкові числа. Функція для обрахунку однакових елементів є досить простою – параметрами є вказівник на масив та його розмір, потім у циклі за умовою однакових сусідніх елементів відбувається інкрементація лічильника, що підраховує кількість однакових елементів, що і повертає функція.
#include <iostream>
#include <vector>
using namespace std;
static double A0 = 0.00000014;
int N = 50;
int M = 16807;
vector <int> random_number;
int get_rand()
{
double temp = A0 * M;
A0 = temp - (int)temp;
return temp;
}
int calc_indentektive(char* str, int len)
{
int val = 0;
for (int i = 0; i < len - 1; i++)
{
if (str[i] == str[i+1])
{
val++;
}
}
return val;
}
int main()
{
for (int i = 0; i < 50; i++)
{
random_number.push_back((get_rand()%100)-50);
}
char str[23] = "12345678900987654321";
cout << calc_indentektive(str,20);
}
Розкрийте поняття програмна модель мікропроцесора.
Програмна модель мікропроцесора це незалежна від конструктивної реалізації сукупність його регістрів та оперативна пам'ять до якої мають доступ прикладні програми.
Відповідно включає:
- регістри;
- ділянки памяті (сегменти).
Регістр МП - надшвидка оперативна пам'ять всередині процесора, призначена для зберігання проміжних результатів обчислення, або розміщення даних необхідних для роботи процесора.
Регістри МП можна розділити на дві великі групи: - користувацькі регістри; - системні регістри.
Користувацькі регістри:
1. Регістри загального призначення(цілочисельні).
2. Сегментні регістри.
3. Регістри стану та управління.
4. Регістри математичного співпроцесора та мультимедійного розширення (ММХ).
5. Регістри потокового розширення процесора (SSE)
Програмна модель процесора 8086:
Група регістрів загального призначення, що називають також регістрами даних, утворена регістрами АХ, ВХ, СХ і DХ. Кожний з цих 16-бітних регістрів можна використовувати як два 8-бітних регістри: AL, АН, BL, BH, CL, CH, DL і DH. В цій групі регістрів L і Н означають молодші і старші байти відповідних 16-бітових регістрів. Регістри АХ, ВХ, СХ і DХ призначені в основному для збереження даних, однак існує багато команд, які використовують регістри даних на певні функції (табл. 5). Тільки регістри даних можуть використовуватися і як 16-бітні, і як 8-бітні. Усі регістри інших груп – 16-бітові.
Друга група регістрів, які називаються вказівними й індексними регістрами, представлена адресними регістрами SP, BP, SI і DI. Вони призначені для збереження 16-бітних адрес (внутрішньосегментних зміщень) і забезпечують при цьому непряму адресацію та динамічне обчислення ефективної адреси пам'яті. Гнучкість обчислень досягається тим, що ці регістри можуть брати участь в арифметичних і логічних операціях так само, як і регістри попередньої групи. Тому надалі регістри даних і регістри вказівної й індексної груп називаються загальними регістрами.
Вказівні регістри SP і BP призначені для спрощення доступу до даних, що знаходиться в поточному сегменті стека, а не в сегменті даних. Індексні регістри SI і DI містять зміщення, що за замовчуванням відносяться до поточного сегмента даних.
Третю групу регістрів утворюють сегментні регістри CS, DS, SS, ES.
В мікропроцесорі за допомогою 20-бітної фізичної адреси можна адресувати пам'ять обсягом 1 Мбайт. Цей простір пам'яті розділений на логічні сегменти обсягом 64 Кбайт. При виконанні програми можна одночасно звертатися до чотирьох сегментів. Їх базові (початкові) адреси розташовані в сегментних регістрах CS, DS, SS, ES.
Регістр сегмента команд CS (code segment) вказує на поточний сегмент коду (програми), звідки вибираються команди.