У вас вопросы?
У нас ответы:) SamZan.net

з курсу ldquo;Програмуванняrdquo; для студентів 3 курсу спеціальності ldquo;Комп~ютерні системи та мережіrdquo; 7

Работа добавлена на сайт samzan.net:

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 28.12.2024

МІНІСТЕРСТВО ОСВІТИ  ТА НАУКИ УКРАЇНИ

ХАРКІВСЬКИЙ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ РАДІОЕЛЕКТРОНІКИ

Методичні вказівки

до проведення лабораторних занять, та курсової роботи з курсу “Програмування” для студентів 3 курсу спеціальності “Комп’ютерні системи та мережі” 7.091501

Затверджено

Кафедрою ЕОМ

Протокол №1 від 31.08.05

Харків 2005

Методичні вказівки до проведення лабораторних занять,  курсової роботи з курсу “Програмування” для студентів 3 курсу спеціальності “Комп’ютерні системи та мережі” 7.091501/ Упорядники Н.Г.Аксак- Харків: ХНУРЕ, 2005.- 15с.

Упорядники: Н.Г.Аксак


1 ЗАГАЛЬНІ ПОЛОЖЕННЯ

Лабораторний практикум - це важлива складова у вивченні цієї дисципліни. Виконання лабораторних робіт, наведених в данних методичних вказівках, дозволить придбати практичні навички рішення задач різноманітного рівня складності.     

Відповідно до учбово-професійної програми цілями викладання дисципліни є:

знайомство з сучасними інформаційними технологіями;

вивчення апаратних та програмних засобів персональних комп’ютерів;    

вивчення основних принципів алгоритмізації і програмування.  

2 ЦІЛІ ТА ЗАДАЧІ КУРСУ

2.1.Програма знань і уміння 

    У результаті вивчення дисципліни студент повинен

знати:

основи алгоритмізації та принципи програмування на мовах високого рівня ;

основи об’ектно-орієнтованого програмування  на мові С++;

  

вміти:

використовувати методи алгоритмізації та програмування на мовах високого рівня;

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

Студенти-заочники вивчають «Програмування» у відповідності до навчального плану спеціальності (7.091501) один семестр (табл.2.1).

2.2.Мета викладання курсу

Мета викладання курсу :

одержання студентами необхідних знань та навичок програмування на об’ектно-орієнтованій мові С++..

  


3 МЕТОДИЧНІ ВКАЗІВКИ ДО ПІДГОТОВКИ ВИКОНАННЯ ПРАКТИЧНИХ, ЛАБОРАТОРНИХ РОБІТ ТА ЗАВДАНЬ ДЛЯ КОНТРОЛЬНИХ РОБІТ

              

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

Середовище візуальної розробки програм С++ Builder

1.1 Мета роботи

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

1.2 Методичні вказівки до організації самостійної роботи.

При підготовці до виконання роботи необхідно пропрацювати потрібний розділ літератури [15,16,17].

1.3 Опис лабораторної установки

Для усіх робіт завдання виконуються на обчислювальній сітці з встановленням Borland C++ Builder 5.

1.4 Порядок виконання роботи та методичні вказівки до її виконання

На робочому місці починайте знайомство з середовищем візуальної розробки програм С++ Builder 5.

Програма на С++ що виконується, повинна бути уведена та перетворена у програму в системі команд комп’ютера. Це перетворення на першому етапі виконує компілятор, який проглядає текст (часто два поглядання ) та формує об’єктний код, який обробляється компоновщиком. На цьому етапі виконується підключення бібліотек, стиковка окремих модулів програми, тобто розв’язання зовнішніх посилань. Це перетворення виглядає таким чином :

Похідний текст програми    _

< имя >.cpp               |     Препроцесорна обробка,

               |  компіляція

Об’єктний код                      _|

< имя >.obj                             _

     |

Робоча програма      |          Компоновка

< имя >.exe             _|

 

C++ Builder 5 створює ще декілька файлів з різними розширеннями, які зараз не обговорюються.

Зауважимо, що С++ не має засобів взаємодії з користувачем. Так С++ не має операторів уведення-виведення, засобів створення вікон та елементів Windows. Засоби взаємодії (вікна, кнопки, меню та інш. ) звуться  інтерфейсом користувача. Windows – графічна операційна система, яка забезпечує графічний інтерфейс – GUI.  GUI складається з елементів оформлення та управління. Елементи управління керуються мишею. Елементи оформлення пасивні – їх можливо бачити, читати, слухати (звукове оформлення ).

Інтерфейс користувача потребує спеціальних бібліотек. Ці бібліотеки розроблені для різних операційних систем та апаратних платформ, і тому, одна і та ж програма на С++ може виконуватися на різних типах платформ. Для цього необхідно змінити бібліотеку та знову виконати компіляцію. Використання бібліотек для організації GUI викликає значні труднощі. Тому, розроблене середовище яке дає змогу зосередитися не на оформленні інтерфейсу, а на логіці роботи програми.

Різні елементи управління – компоненти (кнопки, перемикачі, значки) переміщуються у вікні за допомогою миші. Програміст лише визначає, як повинна реагувати програма при різних подіях :

  •  якщо клацнути мишею на кнопці;
  •  якщо обрати якийсь пункт меню, тощо.

Візуальні редактори (мастера) кількома запитаннями визначають намір програміста, та іноді дозволяють розробити програму не написавши ні одного оператора.

Після виконання  bcb.exe відкривається середовище розробки (ср), яке містить:

 

рядок меню;

панель швидкого доступу;

палітру компонентів;

інспектор об’єктів;

вікно програми, що розробляється;

рядок стану.

Рядок меню містить такі складові:

File (файл), Edit (правка), Search (пошук), View (перегляд), Project (проєкт),  Run (виконати ), Component (компонент), Database (база даних),  Tools (сервіс), Help (допомога )

File 

має багато пунктів, які інтуїтивно зрозумілі. Запам’ятайте, якщо в кінці строки:

 три крапки, то при виборі цього пункту буде відчинено вікно;

-при виборі цього пункту з’явиться список файлів або варіантів.

Для розробки консольного додатку потрібно вибрати

File/New…

відчиняється вікно:

New Items

в якому вибрати

Console Wizard і клацнути мишею на ОК. У черговому вікні

Console Application Wizard

вибрати :

Window Type     Execution Type

◉  Console     ◉  Exe

      Window (GUI)           DLL

і клацнути мишею на Finish.

В вікні додатку, що розробляється з’явиться ім’я проекту

  project1.cpp

Кожне чергове звертання викликає відкриття project2.cpp,  project3.cpp і так далі.

Відкриття файлу:

 File/Open

Якщо необхідно декілька файлів, то після вибору  File /Open натиснути Ctrl. Натиснув Enter будуть відкриті всі помічені файли.

 File /Reopen дає змогу побачити список нещодавно файлів, були використані та відкрити любий з них (два рази клацнути мишею),

 

File/Close, File/Close all закриває та винищує із пам’яті проект (проекти):

Close-поточний ,Close all- всі.

 File /Exit –вихід із середовища С++ Builder в операційну систему.

 Edit та Search містять команди редагування та пошуку, які будуть розглядатися далі

View містить команди

Project Manager-перегляд структури проекту - графічне зображення файлів у поточному проекті;

Object Inspector (F 11)- інспектор об’єктів; перегляд властивостей об’єктів та їх реакції  на різні події (стає активним вікно Object Inspector);

Class Explorer –переглядач класів (відкривається вікно у вікні програми, що розробляється)

Component List /Window List …-швидкий вибір елементів з тих, до  яких було звернення;

Component List /Debug Windows-використання відладчика - завдання міста зупинки, змінних, які проглядаються та інше.

View/New Edit Window – відкрити чергове вікно редагування;

View/Toolbars - вилучити ( відновити ) окремі елементи середовища розробки на екрані.

Project – містить команди

Add to Project…

Remove from Project…

Добавити та вилучити із проекту деякі елементи;

View Source – в вікні програми, що розробляється відображається поточний проект;

Compile Unit – компіляція поточного файлу  <ім’я>.cpp;

Make <ім’я проекту - компіляція та компоновка тих частин проекту, які були оновлені;

Build <ім’я проекту - компіляція та компоновка проекту в цілому ( і тих частин, які не змінювались після попередньої компіляції )

Options…

- відкриває вікно Project Options з багатьма сторінками ( Linker, Advanced Compiler, C++, Pascal та інші ), користуючись якими можливо настроїти  параметри проекту на потрібний варіант розробки додатку.

Run 

містить команди виконання та відладки (покрокове виконання, установлення контрольних місць, інспектування об’єктів, перегляд змінних та інше) додатку, який був сгенерований.

Tools

містить команди настройки підсистем інтегрованого середовища, надає доступ до інших програмних засобів (наприклад, перегляд та редагування баз даних).

Команда Environment Options – установлення середовища відкриває вікно з такими сторінками:

Preferences – на якій Autosave options, Editor files, Desktop;

Library – відображення, установлення шляхів для бібліотек;

Editor – режим роботи редактора (ins, overwrite по умовчанню, tab = … та інше);

Display – установлення  типу шрифту (Editor font), розміру шрифту (Size);

Colors – установлення кольору символу, фону.

Панель швидкого доступу

забезпечує  швидкий засіб вибору дії без використання меню. Містить командні кнопки для використання  часто потрібних дій.

Палітра компонентів

містить набір заготівель для елементів управління, з яких буде збиратись інтерфейс програми, що розробляється. Кожен компонент подається значком. Палітра компонентів має 14 панелей, на яких компоненти зібрані по конкретним галузям застосування.

Інспектор об’єктів

використовується для завдання властивостей об’єктів та визначення їх реакції на різні події.

Вікно програми, що розробляється

призначається для розміщення

         вікна візуального проектировщика або

         вікна редактора програм.

Переключення між вікнами клавішею  F12.

Вікно редактора складається з двох панелей :

        переглядання класів;

        редактора вихідного тексту програми.

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

View/Class Explorer

Рядок стану

відображає:

номери поточного рядка та колонки, розділених двокрапкою;

Modified, якщо поточне вікно редагування містить зміни, які не збережені. Після збереження змін у дисковому файлі це повідомлення зникає;

Insert-текст вставляється у поточну позицію, або

Overwrite - заміна тексту у позиції курсору. Клавіша Ins перемикає цей режим.

Приклад рядка стану:

7 : 34    Modified         Insert

   

  1.  Лабораторна робота №1

Розробка та виконання простої програми. Найпростіші конструкції мови.

Змінні та масиви.

2.1 Мета роботи

  •  Ознайомитись з технологією розробки та виконання програм у середовищі C++ Builder.
  •  Ознайомитись з типами даних, які визначають певні множини значень об’єктів та сукупності дій, які можна виконувати над цими об’єктами. Здобути навички опису змінних, масивів, покажчиків. Розглянути уведення-виведення змінних. Масивів по ім’ям та використовуючи показчики.

2.2 Вказівки з підготовки та виконання роботи.

Необхідно пропрацювати потрібний розділ літератури .

Текстовий редактор призначається для  набору вхідних файлів .За умовчанням редактор знаходиться у режимі вставки, коли введений текст розміщується в тому місці, де знаходиться курсор та при цьому текст розсувається вправо.

Режим накладання змінює існуючий текст новим. Перемикання режимів виконується  клавішею Ins.

Необхідно ознайомитися з технологією розробки та виконання програм у середовищі C++ Builder. Для цього опрацювати потрібний розділ літератури. Інформацію про те, яким чином побудувати додаток, C++ Builder здобуває  із файлу проекту. Процедура побудови додатку для роботи під Windows значно сложніша та відрізняється від звичайної схеми, коли вихідний файл з текстом програми обробляється компілятором, потім, якщо  не було помилок, об’єктний модуль надходить компоновщику, після чого формується готовий до виконання файл з розширенням .exe. Для роботи  під Windows, крім файлів з вихідним текстом програми, у процесі розробки, будуються файли форм, ресурсів та деякі інші. У файлах ресурсів зберігаються різні типи графічних зображень, які використовуються у програмі .Файли форм у двійковому коді містять опис форми та усіх її компонентів.

Розробка консольного додатку.

Розглянемо розробку консольного додатку Win32. Такі програми можуть виконуватись під  Windows  95/ 98/ NT. Консольний додаток виконується у такій послідовності.

Після запуску C++ Builder  необхідно закрити автоматично створений проект File/Close all.

Створюється проект для консольного додатку. Для цього використовується команда File/New…

На екрані з’являється вікно для вибору нового елементу, що розобляється  New Items.

В цьому вікні слід обрати елемент  Console Wizard ( Мастер консолі ) та клацнути мишею на ОК.

3    Далі C++ Builder запускає мастер по генерації проекту для консольних додатків, після чого з’являється вікно з назвою Console Application Wizard (Вікно мастера консольних додатків)

4    В цьому вікні по умовчанню задані

                Window Type                                                                 Execution Type

        Console                                                                        ◉  Exe

            Window (GUI)                                                                   Dll

Тому, слід клацнути мишею на Finish. Після чого з’явиться вікно редактора коду, в якому знаходиться шаблон з текстом програми. Далі наберіть програму, використовуючи цей шаблон, або віддалить текст шаблону та наберіть програму знову. При цьому для проекту створюється, як найменше, два файли - вихідний файл проекту з розширенням .срр (його зміст відображається у редакторі коду) та інформаційний файл проекту, який містить установлені програмістом параметри компілятора, імена вихідних та бібліотечних файлів проекту.

5    Для виконання програми  необхідно клацнути мишею на кнопці “Запуск програми” на панелі швидкого доступу. Якщо помилок немає, буде згенерований  ехе-файл і автоматично виконаний.

3  Лабораторна робота №2

3.1 Мета роботи.

3.2 Вказівки з підготовки та виконання роботи.

Необхідно пропрацювати потрібний розділ лекційного матеріалу та. Розробити програму, у якій:

1 Описати змінні усіх типів та показчики на них. Ініціалізувати змінні та покажчики.

2 Вивести значення змінних, використовуючи їх імена та покажчики

3 Описати одно-, двох- та трьохвимірні масиви різних типів (числові, символьні), покажчики на ці масиви та їх перетини;

ініціалізувати масиви та покажчики.

 

Контрольні питання

  1.  Призначення і порядок використання оператора GOTO.
  2.  Особливості організації розгалудження з використанням оператора IF.
  3.  Як організувати вкладення циклів?
  4.  В якій частині циклу можна перевіряти умову його закінчення?
  5.  Що таке цикл з точки зору програмування ?
  6.  Які оператори циклу ви знаєте ?
  7.  Що таке двовимірний масив ?
  8.  Як організувати цикл з лічильником ?

4. Методичні вказівки до організації самостійної роботи студентів

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

Лабораторну роботу виконують в режимі діалогу на персональних ЕОМ, використовуючи мови програмування С++.

Для роботи в інтегрованому середовищі студенти повинні вивчити відповідний матеріал по літературним джерелам .

Після обробки програми й отримання роздруківки студент повинен оформити звіт, в який включаються: найменування теми лабораторної роботи; умова задачі та вихідні дані; схема алгоритму рішення задачі; роздруківки програми.

При захисті лабораторної програми студент повинен зуміти пояснити роботу програми й відповісти на контрольні питання.

Під час виконання роботи студент отримує практичні навички створення й налагодження  програм.

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


5 МЕТОДИЧНІ ВКАЗІВКИ ДО ВИКОНАННЯ КУРСОВОЇ РОБОТИ

5.1 Цілі та задачі курсової роботи

  Мета курсової роботи - отримання практичних навичок використання програмування при вирішенні практичних завдань.

  Задачі курсової роботи: оволодіння сучасними програмними засобами для вирішення практичних завдань; отримання практичних навичок розробки програм; підвищення якості практичної підготовки спеціалістів.

Теорія

Сортування вставками

Один з найпростіших способів відсортувати масив - сортування вставками. У звичайному житті ми зіштовхуємося із цим методом при грі в карти. Щоб відсортувати наявні у вас карти, ви виймаєте карту, зрушуєте карти, що залишилися, а потім вставляєте карту на потрібне місце. Процес повторюється доти, поки хоч одна карта не на місці. Як середнє, так і гірший час для цього алгоритму - O(n2). Подальшу інформацію можна одержати в книжці Кнута [1998].

На мал.5.1(a) ми виймаємо елемент 3. Потім елементи, розташовані вище, зрушуємо вниз - доти, поки не знайдемо місце, куди потрібно вставити 3. Це процес триває на мал.5.1(b) для числа 1. Нарешті, на мал.5.1(c) ми завершуємо сортування, помістивши 2 на потрібне місце.


Мал. 5-1: Сортування вставками
 

Якщо довжина нашого масиву дорівнює n, нам потрібно пройтися по n - 1 елементам. Щораз нам може знадобитися зрушити n - 1 інших елементів, одержуючи алгоритм із часом роботи O(n2).

Сортування вставками ставиться до числа методів сортування по місцю. Інакше кажучи, їй не потрібна допоміжна пам'ять, ми сортуємо елементи масиву, використовуючи тільки пам'ять, займану самим масивом. Крім того, вона є стійкої - якщо серед ключів, що сортируються є однакові, після сортування вони залишаються у вихідному порядку.

Швидке сортування

Хоча ідея Шелла значно поліпшує сортування вставками, резерви ще залишаються. Один з найбільш відомих алгоритмів сортування - швидке сортування, запропоноване Ч.Хоором. Метод і справді дуже швидкий, недарма по-англійському його так і величають QuickSort до невдоволення всіх спелл-чекеров.

Цьому методу потрібно O(n lg n) у середньому й O(n2) у найгіршому разі. На щастя, якщо прийняти адекватні обережності, найгірший випадок украй малоймовірний. Швидкий пошук не є стійким. Крім того, йому потрібно стек, тобто він не є й методом сортування на місці. Подальшу інформацію можна одержати в роботі Кормена [1990].

Теорія

Алгоритм розбиває масив, що сортується на розділи, потім рекурсивно сортує кожний розділ. У функції Partition (мал. 5.2) один з елементів масиву вибирається в якості центрального. Ключі, менші центрального варто розташувати ліворуч від нього, ті, які більше, - праворуч.

int function Partition (Array A, int Lb, int Ub);

  begin

  select a pivot from A[Lb]...A[Ub];

  reorder A[Lb]...A[Ub] such that:

    all values to the left of the pivot are <= pivot

    all values to the right of the pivot are >= pivot

  return pivot position;

  end;

procedure QuickSort (Array A, int Lb, int Ub);

  begin

  if Lb < Ub then

    M = Partition (A, Lb, Ub);

    QuickSort (A, Lb, M - 1);

    QuickSort (A, M + 1, Ub);

  end;

Мал. 5.2: Швидкий пошук

На мал. 5.3 (a) у якості центрального обраний елемент 3. Індекси починають змінюватися з кінців масиву. Індекс i починається ліворуч і використається для вибору елементів, які більше центрального, індекс j починається праворуч і використається для вибору елементів, які менше центрального. Ці елементи міняються місцями - див. мал. 5.3 (b). Процедура QuickSort рекурсивно сортує два подмассива, у результаті виходить масив, представлений на мал. 5.3 (c). 


Мал 5.3: Приклад роботи алгоритму Quicksort

У процесі сортування може знадобитися пересунути центральний елемент. Якщо нам повезе, обраний елемент виявиться медіаною значень масиву, тобто розділить його навпіл. Припустимо на хвилинку, що це й справді так. Оскільки на кожному кроці ми ділимо масив навпіл, а функція Partition зрештою перегляне всі n елементів, час роботи алгоритму є O(n lg n).

В якості центрального функція Partition може попросту брати перший елемент (A[Lb]). Всі інші елементи масиву ми порівнюємо із центральним і пересуваємо або вліво від нього, або вправо. Є, однак, один випадок, що безжалісно руйнує цю прекрасну простоту. Припустимо, що наш масив із самого початку відсортований. Функція Partition завжди буде одержувати в якості центрального мінімальний елемент і тому розділить масив найгіршим способом: у лівому розділі виявиться один елемент, відповідно, у правом залишиться Ub - Lb елементів. Таким чином, кожний рекурсивний виклик процедури quicksort усього лише зменшить довжину сортируемого масиву на 1. У результаті для виконання сортування знадобиться n рекурсивних викликів, що приводить до часу роботи алгоритму порядку O(n2). Один зі способів побороти цю проблему - випадково вибирати центральний елемент. Це зробить найгірший випадок надзвичайно малоймовірним.

Реалізація

У наведеній реализації алгоритму на Си оператори typedef T і compGT варто змінити так, щоб вони відповідали даним, збереженим у масиві. У порівнянні з основним алгоритмом є деякі поліпшення:

  •  У якості центрального у функції partition вибирається елемент, розташований у середині. Такий вибір поліпшує оцінку середнього часу роботи, якщо масив упорядкований лише частково. Найгірша для цієї реалізації ситуація виникає у випадку, коли щораз при роботі partition у якості центрального вибирається максимальний або мінімальний елемент.
  •  Для коротких масивів викликається insertSort. Через рекурсію й інших "накладних витрат" швидкий пошук виявляється не настільки вуж швидким для коротких масивів. Тому, якщо в масиві менше 12 елементів, викликається сортування вставками. Граничне значення не критично - воно сильно залежить від якості генерируемого коду.
  •  Якщо останній оператор функції є викликом цієї функції, говорять про хвостову рекурсію. Її має сенс заміняти на ітерації - у цьому випадку краще використається стек. Це зроблено при другому виклику QuickSort на мал. 2.3.
  •  Після розбивки спочатку сортується менший розділ. Це також приводить до кращого використання стека, оскільки короткі розділи сортуються швидше і їм потрібний більше короткий стек.

Функція qsort зі стандартної бібліотеки Си заснована на алгоритмі quicksort. Для цієї реалізації рекурсія була замінена на ітерації. У таблиці 5.1 приводиться час і розмір стека, затрачувані до й після описаних поліпшень.

 

кількість 
елементів

час (µs)

розмір стека

до

после

до

после

16

103

51

540

28

256

1,630

911

912

112

4,096

34,183

20,016

1,908

168

65,536

658,003

460,737

2,436

252

Таблиця 5.1: Вплив поліпшень на швидкість роботи і розмір стека

Сортування Шелла

Метод, запропонований Дональдом Л. Шеллом, є нестійким сортуванням по місцю. Ефективність методу Шелла пояснюється тим, що елементи, що зрушують, швидко попадають на потрібні місця. Середній час для сортування Шелла рівняється O(n1.25), для гіршого випадку оцінкою є O(n1.5). Подальші властивості див. у книжці Кнута [1998].

Теория

На мал. 5.4(a) був наведений приклад сортування вставками. Ми спочатку виймали 1, потім зрушували 3 і 5 на одну позицію вниз, після чого вставляли 1. Таким чином, нам були потрібні два зрушення. Наступного разу нам було потрібно ще два зрушення, щоб вставити на потрібне місце 2. На весь процес нам було потрібно 2 + 2 + 1 = 5 зрушень.

На мал. 5.4(b) ілюструється сортування Шелла. Ми починаємо, роблячи сортування вставками із кроком 2. Спочатку ми розглядаємо числа 3 і 1: витягаємо 2, зрушуємо 3 на 1 позицію із кроком 2, вставляємо 2. Потім повторюємо те ж для чисел 5 і 2: витягаємо 2, зрушуємо вниз 5, вставляємо 2. І т.д. Закінчивши сортування із кроком 2, робимо її із кроком 1, тобто виконуємо звичайне сортування вставками. Усього при цьому нам знадобиться 1 + 1 + 1 = 3 зрушення. Таким чином, використавши спочатку крок, більший 1, ми домоглися меншого числа зрушень.

 


Мал. 5.4: Сортування Шелла

Можна використати самі різні схеми вибору кроків. Як правило, спочатку ми сортуємо масив з більшим кроком, потім зменшуємо крок і повторюємо сортування. У самому кінці сортуємо із кроком 1. Хоча цей метод легко пояснити, його формальний аналіз досить важкий. Зокрема, теоретикам не вдалося знайти оптимальну схему вибору кроків. Батіг[1] провів безліч експериментів і знайшов наступну формулу вибору кроків h для масиву довжини N:

у послідовності h1 = 1, hs+1 = 3hs + 1, ... взяти ht, якщо ht+2 >= N.

Ось декілька перших значень h:

h1 = 1
h2 = (3 x 1) + 1 = 4
h3 = (3 x 4) + 1 = 13
h4 = (3 x 13) + 1 = 40
h5 = (3 x 40) + 1 = 121

Щоб відсортувати масив довжиною 100, насамперед знайдемо номер s, для якого hs >= 100. Відповідно до наведених цифр, s = 5. Потрібне нам значення перебуває двома рядками вище. Таким чином, послідовність кроків при сортуванні буде такою: 13-4-1. Ну, звичайно, нам не потрібно зберігати цю послідовність: чергове значення h перебуває з попередні по формулі

hs-1 = [hs / 3].

Реалізація

У реализации сортування Шелла на Си варто змінити оператори typedef T і порівняння compGT так, щоб вони відповідали даним, збереженим у масиві. Основна частина алгоритму - сортування вставками із кроком h.

5.2 Тематика курсових робіт

1. Даний масив А (5,5). Знайти суму елементів четвертого рядка, визначити кількість додатних елементів. Елементи третього рядка вислідної матриці замінити нулями.

2. Масив D (20) упорядкувати по зростанню методом сортування вставками, знайти максимальний і мінімальний елементи.

3. Скласти матриці  А(6,6) і B(6,6). Елементи третього рядка вислідної матриці замінити нулями. В вислідній матриці підрахувати кількість додатних і від’ємних елементів кожного стовпця.

4. Помножити матрицю B(7,7) на скаляр D=0,2. Знайти суму елементів шостого рядка, визначити кількість додатних елементів.

5. Знайти різницю двох матриць  А(3,4) і B(3,4). В вислідній матриці елементи другого стовпця зменшити на число 5, знайти максимальний і мінімальний елементи.

6.Добуток двох матриць А(4,5) і B(4,5) помножити на скаляр C=5,2. Елементи третього сповбця вислідної матриці замінити одиницями.

7. Матрицю D (8,8) Розбити матрицю на 9 квадратних підматриць розміром 3x3.

8. Масив B(22) упорядкувати по зростанню методом Шелла.  Знайти додатки парних та непарних елементів.

9. Створити масив C з різниць сусідніх елементів масиву B(13). Відсортувати елементи отриманого масиву С по зростанню методом швидкого сортування.

10. Заданий масив C(30). Скласти програму формування масиву сум:

            B(1)=C(1)+C(6)+C(11)+...+C(26)

            B(2)=C(2)+C(7)+C(12)+...+C(27)

            ..............................

Знайти мінімальне та максимальне значення сум.

11. В цілочисельному масиві найменший елемент замінити цілою частиною середнього арифметичного, найбільший елемент замінити додатком всіх елементів. Якщо найменших елементів кілька, то замінити останній.

12. Заданий масив А(24). Сформувати масив B(24), в якому на початку будуть розміщені по зростанню всі додатні елементи з масиву А(24), а в кінці - всі від’ємні елементи по спаданню.

13. У матриці  C(4,5)=А(4,5)+B(4,5) поміняти місцями  елементи другого і третього стовпців, елементи стовбця замінити одиницями, елементи пятого стовбця упорядкувати по убуванню.

14. У матриці  C(4,4)=А(4,5)*B(5,4)  і визначити суму першого і шостого рядків. Знайти мінімальні та максимальні елементи у кожному рядку та стовбці.

15. Обчислити суму елементів другого рядка матриці C(8,8)=А(8,5)·B(5,8). Поміняти місцями перший та останній рядки.

16. Розбити матрицю  X(6,6) на чотири квадратних матриці розміром 3x3. Діагональні елементи першої матриці замінити на одиниці, другої – на 2, третьої – на 3, четвертої –на 4.

17. Знайти добуток двох матриць  А(3,5) і B(5,2). Вислідну матрицю транспонувати. Знайти мінімальний та максимальний елементи вислідної матриці.

18. Задані матриці А(5,5) і B(5,5). Отримати нові матриці  C(5,5), D(5,5), Е(5,5), що дорівнюють відповідно різниці, сумі, та додатку матриць  А і B. Знайти мінімальні елементи в матриць в отриманих матрицях.

19. Відсортувати масив  А(30) по спаданню методом швидкого сортування та методом Шелла. Підрахувати кількість дій у кожному медоді.

20. Заданий  масив А(10), парні числа цього масиву записати в масив А1, розмістивши їх по зростанню, непарні записати в масив А2, розмістивши їх по спаданню.

21. Задані масиви А(10) і B(12), відсортувати по спаданню методом Шелла.

  Записати їх в масив  C(22), також відсортований по спаданню. Знайти суми парних та непарних елементів.

22. Обчислити суму елементів в головній діагоналі матриці

     C(5,5)=А(5,5)·B(5,5). Знайти мінімальні та максимальні елементи у кожному рядку висхідної матриці.

23. Дані два масиви  А(10) і B(12). Отримати в масиві С їх перетин (сукупність) елементів, які знаходяться і в А, і в В. На друк вивести масиви А, В, С - усі з текстовими повідомленнями.

24. У матриці порядку 5 переставити стовпці по зростанню сум елементів рядків.

25. Дані матриці А(5,5) і B(5,5). Сформувати матрицю MC, елементи якої дорівнюють 0, якщо відповідний елемент матриці А більший від елемента матриці В, в противному випадку елементи матриці дорівнюють 1.

26. В кожному рядку матриці M(4,4) визначити кількість елементів, що діляться на три та записати їх в масив.

27. У дійсній матриці розміром 6x9 поміняти місцями рядки, що містять найбільший і найменший елементи. Передбачається, що ці елементи зустрічаються один раз і знаходяться в різних рядках.

28. У матриці розміром  5x6 переставити рядки по убуванню значень найменших елементів рядків.

5.3 Структура , зміст  курсової роботи та вимоги до оформлення курсової роботи

  Структура курсової роботи складається з пояснювальної записки з наведеним у ній керівництвом для використання розроблених та використаних програмних засобів.

Пояснювальна записка повинна мати:

1.Титульний лист.

2.Лист з власним завданням.

3.Вступ (де підкреслюється мета, використані засоби програмування та можливе місце впровадження роботи)

4.Теоретича частина (з обґрунтуванням, розглядаються прийняті методи аналізу та програмування).

5.Спеціальна частина (доводиться опис алгоритму та програми, керівництво користувача, де наводяться призначення програми, умови виконання програми).

6.Додаток (текст програми).

7.Використана література.

Обсяг записки складає 10...15 аркушів формату А4.

Текстові документи повинні відповідати ДСТУ 3.008-95.

5.4 Методичні вказівки до виконання курсової роботи

  При виконанні курсової роботи треба користуватись рекомендованою літературою.

Доцільно об’єднати виконання лабораторних робіт і відповідні етапи проектування, але такі етапи, як аналіз завдання та вибір методів моделювання і програмування треба виконати на самому першому етапі після отримання завдання.

ЛІТЕРАТУРА

  1.  Кнут Д. Искусство программирования для ЭВМ. Т.1,Основные алгоритмы. Пер. с англ. М:,Мир,1976
  2.  Кнут Д. Искусство программирования для ЭВМ. Т.2,Получисленные алгоритмы. Пер. с англ. М:,Мир,1977
  3.  Кнут Д. Искусство программирования для ЭВМ. Т.3,Сортировка и поиск. Пер. с англ. М:,Мир,1978
  4.  Вирт Н. Алгоритмы и структуры данных. – М:, Мир,1989г.
  5.  Рейнгольд Є.,Нивергельт Д.,Део Н.  Комбинаторные алгоритмы,теория и практика. -М:, Мир,1980г.
  6.  Ахо А.,Хопкрофт Д.,Ульман Д.   Построение и анализ вычислительных алгоритмов.  -М:, Мир,1979г.
  7.  Буч Г.  Обьектно-ориентированный анализ и проектирование с примерами приложений на С++,2-е изд./Пер. с англ.-М.:”Издательство БИНОМ”,СПб:   ”Невский Диалект”,1998-560с.
  8.    Страуструп Б.Язык программирования С++,3-е изд./Пер. с англ.-СПб.:М.:”Невский Диалект”-”Издательство   БИНОМ”, 1999г.-991с
  9.    Шилдт Г.Самоучитель С++, 3-е изд./Пер. с англ.-  СПб.:BHV-  Санкт-Петербург,  1998г.-800с.      
  10.  Шилдт Г.Программирование на Borland C++ для профессионалов /Пер. с англ.- Мн.:OOO”Попурри”,1998г.-800с. Шилдт Г.Теория и практика С++: пер. с англ.- СПб: BHV–Санкт–Петербург, 1999.-416с.
  11.  Бондарев В.М.,Марченко Ю.С.  Программирование на    языке C++:Учебное пособие.-Харьков:ХТУРЭ,1998.-108с.
  12.  Подбельский В.В.,Фомин С.С.   Программирование на   языке Cи:Учебное пособие.-2-е доп.изд.-М.:  Финансы и  статистика, 1999.-600с.
  13.  Проценко В.С. та ін.   Техніка програмування мовою  Сі.: Навчальний посібнік. -К.:Либідь,1993г.
  14.  Калверт Ч. и др. Borland C++ Builder 3. Энциклопедия пользователя: Пер. с англ.-К.:Изд.”ДиаСофт”, 1998.-800с.
  15.  Программирование на С++: Учебн. Пособие/Под ред.А.Д. Хомоненко. -СПб.:КОРОНАпринт, 1999.-256с.
  16.  Бобровский С.И.Самоучитель программирования на языке      С++ в системе Borland C++ Builder 4.0 Изд.”ДЕСС”,-М.,1999.-286с.

ПРИМІТКА: Консультації по виконанню контрольної та курсової робіт   можно  одержати по електронної пошті:  axak@kture.kharkov.ua

Методичні вказівки до проведення лабораторних занять, виконання контрольних робіт та курсової роботи з курсу “Програмування” для студентів 3 курсу спеціальності “Комп’ютерні системи та мережі” 7.091501/ Упорядники Н.Г.Аксак- Харків: ХНУРЕ, 2005.- 15с.

Упорядники: Н.Г.Аксак

                           

__

PAGE  18




1. На тему- Министр финансов Выполнили- студентки ФЭФ 13 Нгуен Ча Ми Полетаева Ксения Научный ру
2. История Индии и архивное дело в Индии XIX в
3. правовых актов. Специфика власти и социального регулирования в первобытном обществе
4. пробел между другими символами на место пробела можно затем вписать другой символ т
5. Астагфируллах Прошу прощения у Аллаха Аллахумма антассаляму ва минкассалям Табаракта йа заль
6. Конспект зачетного урока по математике (3 класс)
7. реферат дисертації на здобуття наукового ступеня кандидата медичних наук Київ ~ Дисертац.1
8. Тема- Эволюция коллизионного метода
9. а Осложнения- разрыв при беременности т
10. История оренбургского региона.html
11. мы вместо я думается вместо думаю
12. Тема безработицы довольно актуальна для любого современного государства в том числе и России
13. реферату Економіка країн чорноморського регіону пісдя розпаду Радянського союзуРозділ Міжнародні відноси
14.  2013 г Настоящим подтверждаем что представитель рекламного агентства ООО ИНДЕКС ГРУПП
15.  Курчатовский район
16. РЕФЕРАТ диссертации на соискание ученой степени кандидата экономических наук Москва1996 1
17. на тему- Кибернетика ~ наука об управлении
18. Методические рекомендации по выполнению контрольных работ по курсу Организация деятельности участкового у
19. Автоматическая система управления питания котельных агрегатов
20. Тема 1 Насыщенные и ненасыщенные углеводороды Опыт 1