Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
M3 PratW .doc
Скачиваний:
1
Добавлен:
24.08.2019
Размер:
248.83 Кб
Скачать

Практичне заняття .

1. Тема Типи структури мови Сі

2. Мета заняття: : закріпити знання та вміння з розробки МПЗ, СА та програми мовою Сі обробки структур (записів - мова Паскаль)

3. Теоритичні відомості.

Вивчити визначення:

  • структура;

  • поле структури.

Вивчити у мові програмування Сі:

опис типів структури;

доступ до полів структури

введення/ виведення структур

обробка масивів структур

Опис типу структури Сі: typedef struct тег {

поле1: тип1;

поле2: тип2; . . .

} ім’я_типу;

мова Паскаль: Type Ім’я_типу = record

поле1: тип1;

поле2: тип2; . . .

end;

4. Постановка завдання

Під час опису типів структур для спрощення роботи та наочності подання інформації нарисувати таблицю з відповідними стовбчиками, а потім визначати типи даних для кожного поля.

  1. Описати тип структуру для подання такого набору даних:

  1. координати точки(2D, 3D);

  2. координати шахової фігури на дошці;

  3. поштова адреса;

  4. номер мобільного телефона;

  5. комплексне число.

Для всіх структур здійснити:

  • присвоєння даних в поля;

  • введення, виведення даних.

(в Паскаль програмах оператор приєднання With – do).

  1. Скласти МПЗ, СА та програми мовою Сі (під час аналізу задачі виділити програми-функції).

  1. Відрізок заданий координатами кінців. Визначити довжину відрізка.

  2. Замкнений N-кутник заданий координатами вершин. Визначити його периметр.

  3. Трикутник заданий координатами вершин. Визначити площу трикутника.

  4. Задані координати шахового ферзя (k1, k2). Визначити, чи може він перейти в нову клітинку з координатами (n1, n2).

  1. Описати тип структур для подання часу в форматі гг:хх:сс. Для структур t1, t2:

  1. визначити чи більше t1 ніж t2;

  2. присвоїти t2 час на секунду більший ніж t1;

  3. визначити проміжок часу між t1 та t2, вважаючи, що t1 та t2 моменту часу однієї доби з врахуванням різниці нічного та денного часу (наприклад, 01:00 та 13:00).

Практичне заняття .

1. Тема.Динамічний розподіл пам’яті

2. Мета заняття: закріпити знання та вміння з розробки МПЗ, СА та програми мовою Сі обробки обробки динамічних структур даних.

3. Теоритичні відомості.

Вивчити визначення:

  • статична та динамічна змінні, куча;

  • типізований, нетипізований покажчики;

  • динамічна структура даних;

  • зв’язаний список, односпрямований , двоспрямований список; стек, черга;

  • дерево, корінь дерева, лист дерева, степінь вузла, степінь дерева, бінарне дерево, впорядковане дерево, шлях між вузлами дерева, довжина шляху, глибина дерева; обхід дерева.

Вивчити у мові програмування Сі:

  • адреса змінної, структуру логічної адреси змінної (сегмент пам’яті та зміщення відносно початку сегмента);

  • змінна-покажчик, розкриття покажчика та взяття адреси змінної;

  • процедури розподілення пам’яті для типізованих та нетипізованих покажчиків;

  • явне приведення типів для нетипізованих покажчиків;

  • реалізація лінійних та ієрархічних структур даних в програмах.

Розподіл пам’яті в Сі Типізований Нетипізований

– malloc, calloc, free

Сі під час виділення пам’яті, наприклад:

int *p;

p=(int*)malloc(…) не потребують

Сі *покажчик *(тип покажчика) покажчик

  1. Створити односпрямований список цілих чисел, які задані в типізованому файлі. Вивести на екран елементи, що розташовані між мінімальним та максимальним елементами списку.

  2. Створити односпрямований список дійсних значень, що отримуються з генератора випадкових чисел. Вивести на екран значення з номерами ряду Фібоначчі.

  3. Створити двоспрямований список дійсних, які вводяться користувачем з клавіатури. Обчислити середнє арифметичне елементів списку.

  4. Створити двоспрямований список рядків, які записані в текстовому файлі. Реалізувати функції додавання рядка після рядка з заданим номером та видалення рядка з заданим номером.

  5. Створити бінарне впорядковане дерево цілих, що задані в типізованому файлі. Обчислити кількість листів цього дерева.

  6. Створити бінарне впорядковане дерево дійсних, що вводяться з клавіатури. Визначити глибину дерева.

  7. Створити бінарне впорядковане дерево символів. Вивести на екран шлях від кореня дерева до вузла з заданим значенням.

Практичне заняття .

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;

    }

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]