
- •Міністерство освіти і науки, молоді та спорту україни Національний університет “Львівська політехніка” Кафедра програмного забезпечення
- •Інструкція
- •1. Правила оформлення та оцінювання роботи
- •Представлення множин числами (бітові маски)
- •3. Пошук наближених коренів системи нелінійних рівнянь
- •4. Деякі відомості з лінійної алгебри
- •5. Пошук перестановок послідовності символів
- •6. Програма з графічним інтерфейсом
- •Варіанти контрольної роботи
Міністерство освіти і науки, молоді та спорту україни Національний університет “Львівська політехніка” Кафедра програмного забезпечення
Інструкція
до виконання розрахунково-графічної роботи з курсу
“Основи програмування”
для базового напрямку “Програмна інженерія”
Затверджено
На засіданні кафедри
програмного забезпечення
Протокол № від
ЛЬВІВ – 2012
1. Правила оформлення та оцінювання роботи
Максимальна кількість балів за роботу становить 10, причому завдання № 1 оцінюється у 2 бали, завдання № 2 – у 3 бали, завдання № 3 – в 1 бал, а завдання № 4 – в 4 бали.
Кожне із завдань оцінюється за 10-бальною шкалою. Сумарна оцінка буде результатом заокруглення числа, що розраховується за формулою:
,
де
,
,
і
– це бали, одержані за перше, друге,
третє та четверте завдання контрольної
роботи, відповідно. Наприклад, якщо
студент одержав 8 балів за завдання №
1, 9 балів – за завдання № 2, 10 балів – за
завдання № 3 і 7 балів – за завдання №
4, то його оцінка складатиме
балів
Оформлена контрольна робота повинна містити наступні розділи:
Титульний аркуш із зазначеним на ньому варіантом завдання. На титульному аркуші повинна бути наступна таблиця оцінювання:
-
№ 1
№ 2
№ 3
№ 4
Σ
Максимальна кількість балів за завдання
10
(2)
10
(3)
10
(1)
10
(4)
40
(10)
Одержані бали за завдання
Текст і-ого завдання контрольної роботи (завдання слід розміщати по порядку);
Блок-схему алгоритму розв’язання завдання;
Текст програми мовою С++;
Екранні знімки щонайменше 3 контрольних прикладів роботи програми;
Висновки.
Програми з графічним інтерфейсом (із застосуванням Windows Forms) оцінюватимуться більшою кількістю балів. Допускається оформляти частину програм як консольне застосування, а частину – як застосування Windows Forms.
При оцінюванні кожного завдання враховується гнучкість коду, його стійкість до помилок, наявність дружнього інтерфейсу програми, доцільність вибору методів розв’язання, “читабельність” коду, акуратність оформлення роботи. Вітається реалізація завдання декількома методами з наступним порівняльним аналізом результатів.
Представлення множин числами (бітові маски)
Для представлення множини, яка може містити до 32 різних елементів від 0 до 31, можна використати ціле число стандартного 32-розрядного цілого типу даних. Можна використати 64-розрядний тип, тоді дозволена кількість елементів зростає до 64 (від 0 до 63, відповідно). В цьому числі, якщо і-тий біт дорівнює 1, то і-тий елемент міститься в множині; якщо ж і-тий біт дорівнює 0, то і-тий елемент в множині відсутній. Ціле число, яким представляється множина, називають бітовою маскою
Стандартні операції над множинами і вирази, що їм відповідають при роботі з масками.
Об’єднання множин: A | B
Перетин множин: A & B
Різниця множин: A & ~B
Доповнення множини: ALL_BITS ^ A (тут ALL_BITS – маска, в якій всі біти, що відповідають елементам домена встановлені в 1)
Додавання і-того елемента в множину (встановлення і-го біту): A |= 1<<i
Видалення і-того елемента: A &= ~(1 << і)
Перевірка, чи і-тий елемент належить множині: (A & (1 << і)) != 0
Нехай потрібно представити числом множину, різниця між максимальним і мінімальним елементами якої становить не більше 32 (або 64). Тоді, взагалі кажучи, кожен елемент множини можна представити як суму деякого “опорного” елемента та “зміщення”, причому всі “зміщення” представляємо числом як окрему множину, а “опорний” елемент – окремим числом. Наприклад, множину {41,56,67} можна представити як суму {41+0,41+14,41+26}, причому множину “зміщень” ({0,14,26}) можна подати як 32-розрядне число, а “опорне” число 41 представити як окреме число типу char. Очевидно, що такий підхід можна розвинути і представляти множину цілих чисел різними підмножинами, кожну з підмножин зберігаючи як число.
Приклад коду для додавання та вилучення елементів множини чисел від 0 до 31.
#include <iostream>
#include <conio.h>
using namespace std;
int main(){
/* число А, власне, і представлятиме множину */
long int A = 0;
char action; /* ця змінна зберігатиме бажану дію, яку слід виконати над множиною */
int item;
cout<<"size of int: "<<sizeof(A)<<endl; /* перевіряємо розмір числа А в байтах */
char goon = 'y'; /* змінна, що служить ознакою продовження роботи з множиною */
while(goon == 'y') {
cout<<"Enter new item, please\t";
cin>>item;
cout<<"Add? (a) Delete? (d)\t";
/* користувач повинен натиснути клавішу a або d; відповідь буде записана у змінну action */
cin>>action;
switch(action){
case 'a': if(item <= 8*sizeof(A)) A|=1<<(item-1);
/* якщо задане користувачем число перевищує індекс старшого розряду маски, про це виводимо відповідне повідомлення */
else cout<<"Item cannot be included in the set A"<<endl; break;
case 'd': if(item <= 8*sizeof(A)) A&=~(1<<(item-1));
else cout<<"Item was not in the set A";break;
default: break;
}
//Виводимо всі елементи множини на екран
cout<<"Current set:\t";
for(int i = 1; i <= 8*sizeof(A); i++) /* множачи кількість байт на 8, одержуємо кількість біт, якими представляється число А, тобто, число елементів у множині */
{/* зсуваємо 1 на 0, 1, 2, (8*sizeof(A)–1) біт вліво, одержуючи при цьому числа, в яких біт з індексом (і-1) встановлений в 1, а решта бітів – у 0. Якщо в множині А присутній елемент з індексом (і-1), то результат побітового “І” буде ненульовим, і в цьому випадку елемент з індексом (і-1) виводимо на екран */
if((A&(1<<(i-1)))!=0) cout<<i<<";";
}
cout<<endl;
cout<<"Are we handling our set? y|n\t";
/* якщо користувач натисне клавішу y, опрацювання множини продовжиться, якщо клавішу n - припиниться */
cin>>goon;
}
_getch();
return 0;
}
Приклад роботи програми показаний на рис. 1.
Рис. 1 Приклад роботи програми додавання/вилучення елементів множини чисел від 0 до 31.
У наведеному коді не передбачено обробку ситуації, коли користувач задає некоректні дані. Крім того, не передбачається ввід від’ємних елементів множини та елементів, що відрізняються між собою більше ніж на 64 одиниці. При виконанні контрольної роботи слід забезпечити можливість доцільного представлення множини декількома підмножинами, зокрема і такими, що містять від’ємні числа.