- •Лабораторна робота №1. Тема: Побудова блок-схем алгоритмів засобами програми Word 2010.
- •Хід роботи
- •Лабораторна робота № 2. Тема: Робота та знайомство в середовищі програмування. Запуск програм на виконання. Редагування тексту.
- •Теоретичні відомості
- •Хід роботи
- •Лабораторна робота №3. Тема: Побудова алгоритмів за допомогою DiagramDesigner.
- •Теоретичні відомості
- •Хід роботи
- •Лабораторна робота №4. Тема:Створення лінійних програм. Процедури вводу та виводу в машинному коді. Описати кожний рядок програми в звіті рукописом!!!!!!!!!!!!!!!!!
- •Теоретичні положення
- •Лабораторна робота №5. Тема: Написання програм використовуючі математичні функції. Освоєння арифметичних операторів. Описати кожний рядок програми від руки.
- •Лабораторна робота №6. Тема: Написання програм використовуючи логічні значення Boolean.
- •Теоретичні відомості
- •Булеві значення.
- •Детальний розпис програми:
- •Лабораторна робота №7. Тема: Типи в програмах.
- •Теоретичні положення
- •Хід роботи
- •Лабораторна робота №8. Тема: Оператор вибору в циклах середовища пргограмування.
- •Хід роботи
- •Оператор вибору варiанту.
- •Циклiчнi алгоритми.
- •Циклiчнi алгоритми
- •Лабораторна робота №9. Тема: Використання процедур та функцiй. Звукові можливості Паскаля.
- •Теоретичні відомості
- •Хід роботи
- •Лабораторна робота №10. Тема: Використання перелiчуваного та обмеженого типу даних.
- •Теоретичні відомості
- •Хід роботи
- •Лабораторна робота №11. Тема: Одновимiрнi масиви.
- •Теоретичні відомості
- •1. Одновимірні масиви (рядки, вектори):
- •Можна і так:
- •Хід роботи
- •Двовимiрнi масиви.
- •Лабораторна робота №12. Тема: Використання множин.
- •Теоретичні відомості
- •Хід роботи
- •Лабораторна робота №13. Стандартн і модулі Crt, Dos, System, Graph, Printer. Робота з клавiатурою
- •Теоретичні відомості
- •Іі семестр. Мова програмування с Лабораторна робота №13. Тема: Проста програма на с: друк рядка тексту
- •Лабораторна робота №14. Тема: Арифметика в с. Використання операцій рівності і відношення
- •Лабораторна робота №15 . Тема: Структурна розробка програм. Структура вибору if. Структура вибору if/else. Структура повторення while
- •Операції інкремента і декремента
- •Лабораторна робота №16. Тема: Структурна розробка програм. Структура вибору if. Структура вибору if/else. Структура повторення while
- •Основи структур повторення while
- •Структура повторення for
- •8. Напишіть і запустіть програму на виконання що написана нижче. Потім напишіть програму що кінцевим числом виведе на екран ваш номер варіанту по списку.
- •Лабораторна робота №17. Тема: Програмні модулі в с. Функції математичної бібліотеки
- •Генерація випадкових чисел
- •Рекурсія
- •Обчислення факторіалів рекурсивною функцією
- •Лабораторна робота №18. Тема: Приклади роботи з масивами
- •Передача масивів у функції
- •Лабораторна робота №19. Тема: Сортування масивів
- •Пошук в масивах
- •Двійковий пошук в сортованому масиві
- •Ініціалізація багатовимірних масивів
- •Лабораторна робота №20. Тема: Покажчики
- •Лабораторна робота №21. Тема: Покажчики
- •Лабораторна робота №22. Тема: Форматоване введення/вивід
- •Лабораторна робота №23. Тема: Використання прапорів в рядку управління форматом printf
- •Лабораторна робота №24. Тема: Використання прапорів в рядку управління форматом printf
- •Лабораторна робота №25. Тема: Структури, об′єднання, операції з бітами і перечисленнями
- •10.18. Використання перечислення Лабораторна робота №26. Тема: Створення файлу послідовного доступу
Лабораторна робота №19. Тема: Сортування масивів
Мета: Освоїти роботу із сортуванням масивів.
Хід роботи
1. Напишіть дану програму, проаналізуйте її. Змініть значення SIZE 10 на свій номер по списку.
/* Програма сортує значення масиву в порядку зростання */ include <stdio.h> define SIZE 10 main () { int a[SIZE] = {2, 6, 4, 8, 10, 12, 89, 68, 45, 37}; int i, pass, hold;
printf("Data items in original order\n"); for (i = 0; i <= SIZE - 1; i++) printf("%4d", a [i]); for (pass = 1; pass <= SIZE - 1; pass++) /* проходів */ for (i = 0; i <= SIZE - 2; I++) /* один прохід */ if (a[i] > a[i + 1]){ /* одне порівняння */ hold = a[i] ; /* одна перестановка */ a[i] = a[i + 1]; a[i + 1] = hold; } printf(" \nData items in ascending order\n"); for (i = 0; i <= SIZE - 1; i++) printf("%4d" a [i]); printf("\n"); return 0; } Data items in original order 2 6 4 8 10 12 89 68 45 37 Data items in ascending order 2 4 6 8 10 12 37 45 68 89 Лістингу 6.15. Сортування масиву бульбашковим методом |
Сортування даних (тобто розташування даних в деякому спеціальному порядку, наприклад, за збільшенням або убуванню) є одним з найбільш важливих застосувань комп'ютера. Банк сортує усі чеки по номерах рахунків, щоб у кінці кожного місяця можна було підготувати особисті банківські декларації. Телефонні компанії сортують списки своїх рахунків по прізвищах і, усередині прізвищ, по іменах, щоб полегшити пошук телефонних номерів. Практично кожній організації доводиться сортувати які-нибудь дані (і у багатьох випадках - великі масиви даних). Сортування даних є захоплюючою проблемою, що вимагає найінтенсивніших зусиль дослідників в області інформатики. У цій главі ми обговоримо, можливо, найпростішу з відомих схем сортування. Програма сортує значення елементів десятиелементного масиву а в порядку їх зростання. Використовувана нами методика називається бульбашковим сортуванням або сортуванням зануренням, оскільки менші значення, подібно до повітряних бульбашок у воді, поступово "спливають" у верхню частину масиву, тоді як великі значення опускаються вниз. Метод вимагає декількох проходів по масиву. На кожному проході порівнюються послідовні пари елементів. Якщо елементи розташовані в зростаючому порядку (чи якщо їх значення співпадають), ми нічого не міняємо. Якщо елементи пари розташовані в убуваючому порядку, їх значення в масиві міняються місцями. |
Спочатку програма порівнює а[0] і а[1], потім а[1] і а[2], потім а[2] і а[3] і так далі, поки порівняння а[8] і а[9] не завершить прохід. Зверніть увагу, що хоча існує 10 елементів, виконується тільки дев'ять порівнянь. Із-за способу проведення послідовних порівнянь велике значення за один прохід може переміститися в масиві на багато позицій вниз, а невелике значення може переміститися тільки на одну позицію вгору. За перший прохід найбільше значення гарантовано опускається в нижній елемент масиву а[9]. За другий прохід друге за величиною значення гарантовано опускається в а[8]. За дев'ятий прохід дев'яте за величиною значення виявляється в а[1]. В результаті цього найменше значення залишається в а[0], отже для сортування масиву потрібно тільки дев'ять проходів, навіть якщо він складається з десяти елементів.
Сортування виконується за допомогою вкладеного циклу for. У разі потреби перестановки вона виконується шляхом трьох привласнень
hold = а[i];
а [ i ] = а [ i + 1 ] ;
а [i + 1] = hold;
де в додатковій змінній hold тимчасово зберігається одне з двох обмінюваних значень. Перестановка не може бути виконана тільки двома привласненнями
а [ i ] = а [ i + 1 ] ;
а [ i + 1] = а [ i ] ;
Якщо, наприклад, a[i] рівне 7 і a[i + 1] рівне 5, то після першого привласнення обидва значення дорівнюватимуть 5 і значення 7 буде втрачено. Звідси необхідність в додатковій змінній hold.
Головним достоїнством бульбашкового сортування є те, що її легко запрограмувати. Проте бульбашкове сортування виконується повільно. Це стає очевидним при сортуванні великих масивів. У вправах ми розробимо досконаліші версії бульбашкового сортування. Нині вже розроблені набагато ефективніші методи сортування, чим бульбашкова. Пізніше ми досліджуємо деякі з них. У поглиблених курсах навчання програмуванню методи сортування і пошуку розглядаються більш повно.
Приклад: обчислення середнього значення, медіани і найбільш вірогідного значення з використанням масивів
Тепер розглянемо значніший приклад. Комп'ютери часто застосовуються для збору і аналізу результатів різних досліджень і опитувань громадської думки. Програма аналізу даних опитування використовує масив response, що ініціалізував 99-у (див. символічну константу SIZE) відповідями опитування. Кожна з відповідей представлена числом від 1 до 9. Програма обчислює середнє, медіану і найбільш вірогідне з 99 значень.
Середнім значенням називається середньоарифметичне цих 99 значень. Функція mean обчислює середнє значення шляхом підсумовування 99 елементів і ділення результату на 99.
Медіаною називається "Серединне значення". Функція median визначає медіану шляхом виклику функції bubbleSort для сортування масиву відповідей в порядку зростання і вибору середнього елементу answer[SIZE / 2] відсортованого масиву. Майте на увазі, що у разі парного числа елементів медіана повинна обчислюватися як середнє значення двох "серединних" елементів. Функція median нині не забезпечує такої можливості. Для виведення масиву response викликається функція printArray.
2. Напишіть дану програму, проаналізуйте її. Змініть значення SIZE 99 на свій номер по списку.
/* Ця програма виробляє аналіз даних опитування.
Вона обчислює середнє значення, медіану і найбільш вірогідне значення */'
#include <stdio.h>
#define SIZE 99
void mean (int []);
void median (int []);
void mode(int [], int []);
void bubbleSort(int []);
void printArray(int []);
main ( )
{
int frequency[10] = {0},
response [SIZE = {6,7,8,9,8,7,8,9,8,9,
7,8,9,5,9,8,7,8,7,8,
6,7,8,9,3,9,8,7,8,7,
7,8,9,8,9,8,9,7,8,9,
6,7,8,7,8,7,9,8,9,2,
7,8,9,8,9,8,9,7,5,3,
5,6,7,2,5,3,9,4,6,4,
7,8,9,6,8,7,8,9,7,8,
7,4,4,2,5,3,8,7,5,6,
4,5,6,1,6,5,7,8,7};
mean(response);
median(response);
mode(frequency, response);
return 0;
}
void mean(int answer [])
int j, total = 0 ;
printf("%s\n%s\n%s\n", ''********", " Mean", "********");
for ( j = 0 ; j<=SIZE - l; j + + )
total += answer[j];
printf("The mean is the average value of the data\n"
"items. The mean is equal to the total of\n"
"all the data items devided by the number \n"
"of data items (%d). The mean value for \n"
"this run is: %d / %d = %.4f\n\n"
SIZE, total, SIZE, (float) total / SIZE);
}
void median(int answer[])
{
printf("\n%s\n%s\n%s\n%s"
"****************","Mean", "********",
"The unsorted array of responses is");
printArray(answer);
bubbleSort (answer);
printf ( "\n\nThe sorted array is");
printArrav(answer);
printf("\n\nThe median is element %d of \n"
"the sorted %d element array.\n"
"For this run the median is %d\n\n",
SIZE / 2, SIZE, answer[SIZE / 2));
void mode(int treq[], int answer[])
{
int rating, j, h, largest=0, modeValue=0;
printf ("\n%s\n%s\n%s\n"
"*********","Mode","*********");
for (rating=l; rating <= 9; rating++)
freq[rating] = 0;
for (j = 0; j <= SIZE - 1; j+ + )
++freq[answer[j]];
printf ("%s%lls%19s\n\n%54s\n%54s\n\n"
""Response","Frequency", "Histogram",
"1 1 2 2", "5 0 5 0 5");
for (rating=l; rating <= 9; rating++){
printf("%8d% lld ", rating, freq[rating]);
if (freq(rating)> largest){
largest = freq[rating] ;
modeValue = rating;
}
for (h =1; h <= freq[rating]; h++)
printf ("*");
printf("\n");
}
printf("The mode is the most frequent value.\n"
"For this run the mode is %d which occured"
" %d times.\n", modeValue, largest);
}
void bubbleSort (int a [ ])
{
int pass, j, hold;
for (pass=1; pass <= SIZE - 1; pass++)
for (j =0; j <= SIZE - 2; j+ + )
if (a [ j] > a[j +1]){
hold = а [ j ] ;
а [ j ] = а [ j +1 ] ;
a[j+1] = hold;
}
}
void printArray (int a[])
{
int j;
for (j=0; j <= SIZE - 1; j++) {
if (j % 20 == 0)
printf ("\n");
printf("%2d", a[j ] );
}
}
Програма аналізу даних опитування
Найбільш вірогідним значенням називається значення, яке найчастіше зустрічається серед 99 відповідей. Функція mode визначає найбільш вірогідне значення шляхом підрахунку числа відповідей кожного типу і вибору з них значення з найбільшою сумою. Ця версія функції mode не обробляє випадок декількох рівних сум, як в позаминулій програмі. Функція будує також гістограму для допомоги у визначенні найбільш вірогідного значення графічно. В наступній програмі міститься пробний прогін цієї програми. Цей приклад включає більшість стандартних методик, що зазвичай вимагаються в завданнях, пов'язаних з масивами, у тому числі передачу масиву у функцію.
********
Mean
********
The mean is the average value of the data
items. The Mean is equal to the total of
all the data items divided byy the number
of data items (99). The mean value
for this run is: 681 / 99 = 6.8788
********
Median
********
The unsorted array of responses i is
6 7 8 9 8 7 8 9 8 9 7 8 9 5 9 8 7 8 7 8
6 7 8 9 3 9 8 7 8 7 7 8 9 8 9 8 9 7 8 9
6 7 8 7 8 7 9 8 9 2 7 8 9 8 9 8 9 7 5 3
5 6 7 2 5 3 9 4 6 4 7 8 9 6 8 7 8 9 7 8
7 4 4 2 5 3 8 7 5 6 4 5 6 1 6 5 7 8 7
The sorted array is
1 2 2 2 3 3 3 3 4 4 4 4 4 5 5 5 5 5 5 5
5 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7
7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8
8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9
The median is element 49 of
the sorted 99 element array.
For this run the median is 7
********
Mode
********
Response Frequency Histogram
1 1 2 2
0 5 0 5
1 1
Лабораторна робота №1. Тема: Побудова блок-схем алгоритмів засобами програми Word 2010. 3
Лабораторна робота № 2. Тема: Робота та знайомство в середовищі програмування. Запуск програм на виконання. Редагування тексту. 5
Лабораторна робота №3. Тема: Побудова алгоритмів за допомогою DiagramDesigner. 6
Лабораторна робота №4. Тема:Створення лінійних програм. Процедури вводу та виводу в машинному коді. 8
Лабораторна робота №5. Тема: Написання програм використовуючі математичні функції. Освоєння арифметичних операторів. 10
Лабораторна робота №6. Тема: Написання програм використовуючи логічні значення Boolean. 12
Лабораторна робота №7. Тема: Типи в програмах. 15
Лабораторна робота №8. Тема: Оператор вибору в циклах середовища пргограмування. 17
Лабораторна робота №9. Тема: Використання процедур та функцiй. Звукові можливості Паскаля. 21
Лабораторна робота №10. Тема: Використання перелiчуваного та обмеженого типу даних. 25
Лабораторна робота №11. Тема: Одновимiрнi масиви. 27
Лабораторна робота №12. Тема: Використання множин. 30
ІІ семестр. Мова програмування С 34
Лабораторна робота №13. Тема: Проста програма на С: друк рядка тексту 34
Лабораторна робота №14. Тема: Арифметика в С. Використання операцій рівності і відношення 35
Лабораторна робота №15 . Тема: Структурна розробка програм. Структура вибору if. Структура вибору if/else. Структура повторення while 38
Лабораторна робота №16. Тема: Структурна розробка програм. Структура вибору if. Структура вибору if/else. Структура повторення while 41
Лабораторна робота №17. Тема: Програмні модулі в С. Функції математичної бібліотеки 47
Лабораторна робота №18. Тема: Приклади роботи з масивами 57
Лабораторна робота №19. Тема: Сортування масивів 67
Лабораторна робота №20. Тема: Покажчики 80
Лабораторна робота №21. Тема: Покажчики 97
Лабораторна робота №22. Тема: Форматоване введення/вивід 116
Лабораторна робота №23. Тема: Використання прапорів в рядку управління форматом printf 122
Лабораторна робота №24. Тема: Використання прапорів в рядку управління форматом printf 125
Лабораторна робота №25. Тема: Структури, об′єднання, операції з бітами і перечисленнями 128
Лабораторна робота №26. Тема: Створення файлу послідовного доступу 138
7 23 **********************
8 27 ****************************
9 19 ******************
The mode is the most frequent value.
For this run the mode is 8 which occurred 27 times.
Приклад виконання програми аналізу даних опитування
