- •Практичне заняття.
- •1. Тема .Одномірні масиви даних
- •Обчислити
- •Практичне заняття .
- •1. Тема.Двовимірні масиви даних
- •Обчислити :
- •Практичне заняття.
- •1. Тема .Рядки символів
- •3. Теоритичні відомості.
- •4. Постановка завдання
- •Практичне заняття .
- •1. Тема Типи структури мови Сі
- •3. Теоритичні відомості.
- •4. Постановка завдання
- •Практичне заняття .
- •1. Тема.Динамічний розподіл пам’яті
- •3. Теоритичні відомості.
Практичне заняття .
1. Тема Типи структури мови Сі
2. Мета заняття: : закріпити знання та вміння з розробки МПЗ, СА та програми мовою Сі обробки структур (записів - мова Паскаль)
3. Теоритичні відомості.
Вивчити визначення:
структура;
поле структури.
Вивчити у мові програмування Сі:
опис типів структури;
доступ до полів структури
введення/ виведення структур
обробка масивів структур
Опис типу структури Сі: typedef struct тег {
поле1: тип1;
поле2: тип2; . . .
} ім’я_типу;
мова Паскаль: Type Ім’я_типу = record
поле1: тип1;
поле2: тип2; . . .
end;
4. Постановка завдання
Під час опису типів структур для спрощення роботи та наочності подання інформації нарисувати таблицю з відповідними стовбчиками, а потім визначати типи даних для кожного поля.
Описати тип структуру для подання такого набору даних:
координати точки(2D, 3D);
координати шахової фігури на дошці;
поштова адреса;
номер мобільного телефона;
комплексне число.
Для всіх структур здійснити:
присвоєння даних в поля;
введення, виведення даних.
(в Паскаль програмах оператор приєднання With – do).
Скласти МПЗ, СА та програми мовою Сі (під час аналізу задачі виділити програми-функції).
Відрізок заданий координатами кінців. Визначити довжину відрізка.
Замкнений N-кутник заданий координатами вершин. Визначити його периметр.
Трикутник заданий координатами вершин. Визначити площу трикутника.
Задані координати шахового ферзя (k1, k2). Визначити, чи може він перейти в нову клітинку з координатами (n1, n2).
Описати тип структур для подання часу в форматі гг:хх:сс. Для структур t1, t2:
визначити чи більше t1 ніж t2;
присвоїти t2 час на секунду більший ніж t1;
визначити проміжок часу між t1 та t2, вважаючи, що t1 та t2 моменту часу однієї доби з врахуванням різниці нічного та денного часу (наприклад, 01:00 та 13:00).
Практичне заняття .
1. Тема.Динамічний розподіл пам’яті
2. Мета заняття: закріпити знання та вміння з розробки МПЗ, СА та програми мовою Сі обробки обробки динамічних структур даних.
3. Теоритичні відомості.
Вивчити визначення:
статична та динамічна змінні, куча;
типізований, нетипізований покажчики;
динамічна структура даних;
зв’язаний список, односпрямований , двоспрямований список; стек, черга;
дерево, корінь дерева, лист дерева, степінь вузла, степінь дерева, бінарне дерево, впорядковане дерево, шлях між вузлами дерева, довжина шляху, глибина дерева; обхід дерева.
Вивчити у мові програмування Сі:
адреса змінної, структуру логічної адреси змінної (сегмент пам’яті та зміщення відносно початку сегмента);
змінна-покажчик, розкриття покажчика та взяття адреси змінної;
процедури розподілення пам’яті для типізованих та нетипізованих покажчиків;
явне приведення типів для нетипізованих покажчиків;
реалізація лінійних та ієрархічних структур даних в програмах.
Розподіл пам’яті в Сі Типізований Нетипізований
– malloc, calloc, free
Сі під час виділення пам’яті, наприклад:
int *p;
p=(int*)malloc(…) не потребують
Сі *покажчик *(тип покажчика) покажчик
Створити односпрямований список цілих чисел, які задані в типізованому файлі. Вивести на екран елементи, що розташовані між мінімальним та максимальним елементами списку.
Створити односпрямований список дійсних значень, що отримуються з генератора випадкових чисел. Вивести на екран значення з номерами ряду Фібоначчі.
Створити двоспрямований список дійсних, які вводяться користувачем з клавіатури. Обчислити середнє арифметичне елементів списку.
Створити двоспрямований список рядків, які записані в текстовому файлі. Реалізувати функції додавання рядка після рядка з заданим номером та видалення рядка з заданим номером.
Створити бінарне впорядковане дерево цілих, що задані в типізованому файлі. Обчислити кількість листів цього дерева.
Створити бінарне впорядковане дерево дійсних, що вводяться з клавіатури. Визначити глибину дерева.
Створити бінарне впорядковане дерево символів. Вивести на екран шлях від кореня дерева до вузла з заданим значенням.
Практичне заняття .
1. Тема. Обробка множин
2. Мета заняття: закріпити знання та вміння з розробки МПЗ, СА та програми обробка множин
3. Теоритичні відомості.
Вивчити визначення:
поняття множини та її елементів;
основні означення (множина, скінченна множина, підмножина, власна підмножина, надмножина, мультимножина);
аксіоми теорії множин;
квантори;
універсальна множина, булеан, покриття, розбиття.
Вивчити:
операції над множинами (об’єднання +, перетин *, різниця -, еквівалентність = , нееквівалентність <> );
основні закони теорії множин;
способи задання множини (табличний, за властивістю, за процедурою)
Створити програму обробки множин
за описом
typedef prizv=(prizv1, prizv2, prizv3, prizv4, prizv5, prizv6, prizv7, prizv8, prizv9, prizv10, prizv11); gosti=set of prizv; group=mass[prizv] of gosti; Написати програму, що визначає, чи є в групі group хоча б один студент, побувавший у гостях у всіх інших із групи (g[x]-множини студентів, бувших в гостях у студента з прізвищем х; х не входит в g[x]).
Пояснення - для 6 студентів . name = (vasya, volodya, ira, lida, marina, misha) group = ([volodya, misha], { Володя та Міша були в гостях у Васі (№1 в списку імен) } [vasya, lida, ira, misha], { (у Володі (№2 в списку імен) } [misha, vasya, marina], { (у Іри (№3 в списку імен) } [misha, vasya, ira], { (у Ліди (№4 в списку імен) }
//множина - за описом 9 студентів
// typedef //nаmе=(Вася, Володя, Іра, Марина, Міша, Наташа, Оля, Света, Юля);
//group=array[name] of gosti; */
// Написати програму, що визначає, чи є в групі g:group хоча б один студент,
// побувавший у гостях у всіх інших із групи (g[x]-множество людей,
// множини студентів, бувших в гостях у студента з прізвищем х; х не входит в g[x]).
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <map>
#include <set>
#include <string>
enum T_name
{
Vasya, Volodya, Ira, Marina, Misha, Natasha, Olya, Sveta, Julya,
names_total
};
typedef std::string T_str;
typedef std::set<T_name> T_gosti;
typedef std::map<T_name, T_gosti> T_group;
typedef std::map<T_name, size_t> T_name_visits_total;
typedef std::map<T_name, T_str> T_rus_name;
void random_fill_group(T_group& group)
{
for(int i = 0; i < names_total; ++i)
{
T_gosti gosti;
for(int j = 0; j < names_total; ++j)
{
if(j == i) continue;
if(rand() % 4)
{
gosti.insert(T_name(j));
}
}
group[T_name(i)] = gosti;
}
}
bool get_person_who_has_visited_all
(
const T_group& group,
T_name& name
)
{
T_name_visits_total name_visits_total;
if(group.empty()) return false;
for(T_group::const_iterator host_gosti_it = group.begin();
host_gosti_it != group.end(); ++host_gosti_it)
{
for(T_gosti::const_iterator name_it = host_gosti_it->second.begin();
name_it != host_gosti_it->second.end(); ++name_it)
{
++name_visits_total[*name_it];
}
}
for(T_name_visits_total::const_iterator name_visits_total_it = name_visits_total.begin();
name_visits_total_it != name_visits_total.end(); ++name_visits_total_it)
{
if(name_visits_total_it->second == names_total - 1)
{
name = name_visits_total_it->first;
return true;
}
}
return false;
}
int main()
{
std::locale::global(std::locale(""));
srand(static_cast<unsigned>(time(0)));
T_rus_name rus_name;
rus_name[Vasya ] = "Вася";
rus_name[Volodya ] = "Володя";
rus_name[Ira ] = "Іра";
rus_name[Marina ] = "Марина";
rus_name[Misha ] = "Міша";
rus_name[Natasha ] = "Наташа";
rus_name[Olya ] = "Оля";
rus_name[Sveta ] = "Света";
rus_name[Julya ] = "Юля";
T_group group;
random_fill_group(group);
T_name name;
if( get_person_who_has_visited_all(group, name) )
{
std::cout << rus_name[name]
<< " побував(а) в гостях у всіх інших."
<< std::endl;
}
else
{
std::cout << "у групі не існує студента, що побував в гостях у всіх інших."
<< std::endl;
}
}