- •Ф.Б. Рогальський, і.А. Лур'є, н.В. Корніловська
- •Ф.Б. Рогальський, і.А. Лур'є, н.В. Корніловська
- •Передмова
- •Лабораторна робота №1 Інтегроване середовище програмування системи
- •Теоретична частина
- •Компоненти інтегрованого середовища
- •Головне меню
- •Системне меню
- •Clear (Стерти) – видаляє обраний фрагмент тексту, але не заносить його в текстовий буфер.
- •Replace (Замінити) – відображає блок діалогу, що дозволяє вводити шуканий текст і текст, на який його варто замінити.
- •Size/Move (Змінити розмір/Перемістити) – використовується для того, щоб змінити розмір чи місце розташування активного вікна.
- •Створення першої програми
- •Контрольні питання
- •Мова програмування Сі Використовувані символи
- •Константи
- •Приклади цілих констант
- •Ідентифікатор
- •Використання коментарів у тексті програми
- •Типи даних та їх оголошення
- •Категорії типів даних Ключові слова для визначення основних типів даних
- •Стандартні функції
- •Специфікатори формату
- •Команди формату
- •Стандартні заголовні файли
- •Пріоритети операцій і порядок обчислень
- •Контрольні питання
- •Варіанти завдань роботи
- •Лабораторна робота № 3 Оператори управління
- •Теоретична частина
- •Умовний оператор if
- •If (вираз) оператор-1; [else оператор-2;]
- •Оператор switch
- •Оператор break
- •Оператор for
- •Оператор goto
- •Зразок виконання завдання
- •Контрольні питання
- •Оператор switch.
- •Оператор break.
- •Варіанти завдань роботи
- •Лабораторна робота № 4
- •Оператор do while
- •Оператор continue
- •Оператор return
- •Контрольні питання
- •Варіанти завдань роботи
- •Лабораторна робота № 5 Функції і прототипи функцій
- •Теоретична частина
- •Прототипи функцій
- •Метод половинного ділення
- •Зразок виконання завдання
- •Контрольні питання
- •Варіанти завдань роботи
- •Лабораторна робота № 6 Алгоритми обробки одновимірних масивів
- •Теоретична частина
- •Контрольні запитання
- •Варіанти завдань роботи
- •Лабораторна робота №7 Сортування даних
- •Теоретична частина
- •Обмінне сортування
- •Інші методи сортування
- •Контрольні питання
- •Варіанти завдань роботи
- •Лабораторна робота № 8 Алгоритми обробки двовимірних масивів
- •Теоретична частина
- •Перетворення одновимірних масивів у двовимірні та навпаки
- •Контрольні питання
- •Варіанти завдань роботи
- •Лабораторна робота n 9 Прийоми програмування з використанням покажчиків.
- •Теоретична частина
- •Зв’язок між покажчиками та масивами
- •Покажчики на багатовимірні масиви.
- •Операції з покажчиками
- •Приклад:
- •Масиви покажчиків
- •Контрольні питання
- •Методичні вказівки
- •Приклад виконання завдання по обробці рядків
- •Приклад виконання програми
- •Варіанти завдань роботи
- •Лабораторна робота n10 Директиви препроцесора.
- •Теоретична частина Препроцесор мови с
- •Директива #еrrоr
- •Директива #include
- •Директиви умовної компіляції
- •Визначені макроси.
- •Контрольні питання
- •Варіанти завдань роботи.
- •Лабораторна робота 11 Друк кодової таблиці.
- •Теоретична частина.
- •Особливості типу char
- •Файл ctype.H
- •Рекомендації зо вибору імен змінних і функцій
- •Контрольні питання
- •Додатки
- •Методика виконання роботи
- •Варіанти завдань роботи
- •Вид таблиці символів:
- •Лабораторна робота 12 Рядки. Потокове введення/виведення у мові с.
- •Теоретична частина
- •Функції для роботи з рядками
- •Рядки і числові типи даних
- •Робота з файлами
- •Контрольні питання.
- •Додатки
- •Варіанти завдань роботи .
- •Лабораторна робота 13
- •Теоретична частина.
- •Контрольні питання
- •Варіанти завдань роботи.
- •Лабораторна робота 14
- •Теоретична частина
- •Ключі доступу
- •Просте спадкування
- •Віртуальні методи
- •Механізм пізнього зв'язування
- •Абстрактні класи
- •Множинне спадкування
- •Відмінності структур і об'єднань від класів.
- •Контрольні питання.
- •Варіанти завдань роботи.
- •Література
- •Рогальський Франц Борисович
Лабораторна робота №7 Сортування даних
Мета роботи: отримати вміння та практичні навички розв’язання задач сортування на прикладі сортування елементів числових масивів.
Теоретична частина
Під сортуванням в програмуванні розуміють процес розміщення елементів в порядку зростання або спадання їх значень. Наприклад, нам треба розмістити елементи в числовому масиві A (5, 0, -5, 3, -8) за зростанням та спаданням їх значень. В результаті маємо: за зростанням – A (-8, -5, 0, 3, 5); за спаданням – A (5, 3, 0, -5, -8).
Існують різні методи сортування (обмінне сортування, сортування методом вибору, сортування методом перестановки за індексами, турнірне сортування, сортування вставкою та ін.). Більш детально з методами сортування можна ознайомитися в навчальній літературі [].
Обмінне сортування
Метод добре відомий також під назвою (російською мовою)«пузырьковая сортировка». Тут менші значення елементів подібно до легких бульбашок повітря піднімаються вгору. Метод базується на порівнянні пари сусідніх елементів та перестановці їх в потрібному порядку. Сортування вважається закінченим, якщо в ході перегляду масиву не було здійснено жодної перестановки.
Розглянемо масив А= (3, 0, 8, 2, -4), що треба упорядкувати в порядку зростання значень елементів. Порівнюючи сусідні елементи (ai та аi+1), бачимо, що їх необхідно поміняти місцями, якщо аi > аi+1. Масив буде змінюватися при кожному його перегляді. Звернемо увагу на те, як найменший елемент (-4) повільно переміщується в початок масиву.
В результаті одержимо: після першого перегляду: А=(0, 3, 2, -4, 8);після другого перегляду:А=(0, 2, -4, 3, 8);після третього перегляду:А=(0, -4, 2, 3, 8);після четвертого перегляду:А=(-4, 0, 2, 3, 8).
При перегляді масиву цикл треба завершати на передостанньому елементі, тому що порівнюються i-й та (i+1)-й елементи. Для упорядкування масиву A(N)достатньоN-1послідовних переглядів. Дійсно, в розглянутому масиві А(5) із останнього місця найменший елемент перемістився на перше місце за чотири перегляди масиву.
Таким чином, алгоритм сортування складається з двох циклів: внутрішнього, в якому проводиться перестановка необхідних елементів, та зовнішнього, що організує повторні перегляди масиву (рис. 7.1). Крім того, необхідно передбачити також виведення елементів вхідного та упорядкованого масивів.
Існує декілька модифікацій наведеного методу, які дозволяють зменшити кількість перевірок та час роботи програми. Наприклад, ввівши допоміжну змінну («прапорець»), можна перевірити настання моменту скінчення сортування (рис. 7.2).
При упорядкуванні за зростанням у циклі перевіряється умова ai > ai+1. Неважко побачити, що при упорядкуванні за спаданням треба перевіряти умовуai < aj+1.
Приклад 1.Задано масив D(M) та натуральні числа L, N. Упорядкувати за спаданням значень елементи, розміщені між елементами з індексом L та індексом N. Для розв’язання задачі застосуємо метод «прапорця».
#include <stdio.h>
main()
{
float d[100];
int i,m,n,l,flag;
float tmp;
m2:printf(“Ведіть розмірність масиву m та індекси l та n”);
scanf(“%d%d%d”, &m, &l, &n);
if(l>=1&&n>l&&n<=m)
{
for(i=0;i<m;i++) scanf(“%g”, &d[i]);
printf(“Неупорядкований масив:”);
for(i=0;i<m;i++) printf(“%g”,d[i]);
printf(“\n”);
m1:flag=1;
for(i=l;i<n;i++)
{
if(d[i]<d[i+1])
{
tmp=d[i];d[i]=d[i+1];d[i+1]=tmp;flag=0;
}
}
if(flag==0) goto m1;
printf(“Упорядкований масив:”);
for(i=0;i<m;i++) printf(“%d”,d[i]);
}
else goto m2;
return 0;
}
Приклад 2.Задано масив A(N). Упорядкувати його в порядку зростання значень елементів. Блок-схема алгоритму подана на рис. 7.3.
#include <stdio.h>
main()
{
int a[100];
int i,j,n,tmp;
printf(“Ведіть розмірність масиву”);
scanf(“%d”,&n);
for(i=0;i<n;i++) scanf(“%g”, &a[i]);
printf(“Неупорядкований масив:”);
for(i=0;i<n;i++) printf(“%g”,a[i]);
printf(“\n”);
for(i=0;i<n;i++){
for(j=i;j<10;j++){
if(a[j]<a[j+1]){tmp=a[j];a[j]=a[j+1];a[j+1]=tmp;}
}
}
printf(“Упорядкований масив:”);
for(i=0;i<n;i++) printf(“%d”,a[i]);
printf(“\n”);
return 0;
}