
- •Ф.Б. Рогальський, і.А. Лур'є, н.В. Корніловська
- •Ф.Б. Рогальський, і.А. Лур'є, н.В. Корніловська
- •Передмова
- •Лабораторна робота №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
- •Теоретична частина
- •Ключі доступу
- •Просте спадкування
- •Віртуальні методи
- •Механізм пізнього зв'язування
- •Абстрактні класи
- •Множинне спадкування
- •Відмінності структур і об'єднань від класів.
- •Контрольні питання.
- •Варіанти завдань роботи.
- •Література
- •Рогальський Франц Борисович
Лабораторна робота № 6 Алгоритми обробки одновимірних масивів
Мета роботи: отримати вміння та навички програмування алгоритмів обробки одновимірних масивів
Теоретична частина
Масиви- це група елементів однакового типу (double, float, int і т.п.). З оголошення масиву компілятор повинний одержати інформацію про тип елементів масиву і їхню кількість. Оголошення масиву має два формати:
Специфікатор - типу описатель [константний - вираз];
Специфікатор - типу описатель [ ];
Описатель- це ідентифікатор масиву.
Специфікатор - типузадає тип елементів масиву, що повідомляється. Елементами масиву не можуть бути функції й елементи типу void.
Константний - виразв квадратних дужках задає кількість елементів масиву. Константний - вираз при оголошенні масиву може бути опущено в наступних випадках:
при оголошенні масив ініціалізується,
масив оголошений як формальний параметр функції,
масив оголошений як посилання на масив, явно визначений в іншому файлі.
Кожний константний - вираз в квадратних дужках визначає число елементів по даному вимірі масиву, так що оголошення двовимірного масиву містить два константних - вирази, тривимірного - три і т.д. Відзначимо, що в мові С перший елемент масиву має індекс рівний 0. Якщо ми оголосили масив int a[100], то це означає , що масив містить 100 елементів від a[0] до а[99].
Приклад:
double b[10]; /* вектор з 10 елементів, що мають ініціалізувати тип double */
Дуже важливо вміти ініціалізувати масиви, тобто привласнювати елементам масиву деякі початкові значення. У мові С для цього є спеціальні можливості. Найпростіший спосіб ініціалізації наступний: у процесі оголошення масиву вказати у фігурних дужках список ініціалізаторів:
float farr[6]={1.1,2.2,3.3,4.4.5.5,6.6};
Допускається також оголошення й ініціалізація масиву без явної вказівки розміру масиву. Наприклад:
int mass[]={1,2,3,1,2,3,4};
Проте, якщо масив великий, ця процедура стає довгою та утомлюючою. Для введення масиву використовується цикл із параметром.
Приклад:
Оголошено масив з десяти цілих елементів (int arr[10]). Потрібно ввести значення його елементів
for(i=0;i<10;i++) scanf(“%d”,&arr[i]);
Найпростішими задачами на обробку масиву є задачі на визначення його кількісних характеристик, таких, як сума елементів, їх добуток тощо.
Розглянемо алгоритм знаходження суми елементів масиву X(N). В ньому можна виділити певні дії, що є характерними для задач визначення кількісних характеристик масиву (рис. 6.1).
В таблиці 6.1. наведені аналогічні операції для знаходження таких кількісних характеристик одновимірного масиву X(N):
добуток елементів (
);
кількість елементів К;
середнє арифметичне К елементів (
);
середнє геометричне К елементів (
);
максимальний, мінімальний елемент та його номер.
Таблиця 6.1.
Характеристика масиву |
До циклу |
В циклі |
Після циклу |
1 |
2 |
3 |
4 |
Сума |
S=0 |
S=S+Xi |
Вивід S |
Добуток |
P=1 |
P=P*Xi |
Вивід P |
|
K=0 |
K=K+1 |
Вивід K |
Середнє арифметичне |
S=0; K=0 |
S=S+Xi; K=K+1 |
SA=S/K Вивід SA |
Середнє геометричне |
P=1; K=0 |
P=P*Xi; K=K+1 |
SR=P1/K Вивід SR |
Максимальний елемент |
MAX=X1або MAX=-1020 |
Якщо Xi>MAX, то MAX=Xi |
Вивід MAX |
Максимальний елемент і його номер |
MAX=X1 або MAX=-1020, L=1 |
Якщо Xi>MAX, то MAX=Xi, L= i |
Вивід MAX, L |
1 |
2 |
3 |
4 |
Мінімальний елемент |
MIN=X1або MIN=1020 |
Якщо Xi<MIN, то MIN=Xi |
Вивід MIN |
Мінімальний елемент та його номер |
MIN=X1або MIN=1020 L=1 |
Якщо Xi<MIN, то MIN=Xi , L= i |
Вивід MIN, L |
Завдання 1.В масиві A(M) знайти суму парних елементів, максимальний елемент і його номер.
Програма (Блок-схема представлена на рис. 6.2).
#include <stdio.h>
/*Обробка одновимірного масиву*/
main()
{
float a[100];
int i, m, nom;
float s, max;
printf(“Введіть кількість елементів в масиві:”);
scanf(“%d”,&m);
/*Ввід елементів масиву*/
for(i=0;i<m;i++)
scanf(“%d”,&a[i]);
s=0;
/*Знаходження суми парних елементів*/
for(i=0;i<m;i++)
{
if(a[i]%2==0)s+=a[i];
}
/*Знаходження максимального елементу масиву*/
/*та його номер*/
max=a[0];
for(i=0;i<m;i++)
{
if(a[i]>max)
{
max=a[i];
nom=i;
}
}
printf(“\n””s=%g”,s);
printf(“\n””max=%g nom=%d”,max,nom);
}
Завдання 2.
Задано масив X(M). Сформувати, використовуючи його елементи, масив Y(M) наступним чином: додатні елементи масиву X розмістити на початку масиву Y; відємні елементи масиву X замінити на середнє арифметичне додатних елементів масиву X і розмістити їх в масиві після додатних; нульові елементи розмістити в кінці масиву Y.
Програма (Блок-схема представлена на рис. 3)
#include <stdio.h>
/*Обробка одновимірного масиву*/
main()
{
float x[100];
float y[100];
int i, m, kol, j;
float s, sar;
printf(“Введіть кількість елементів в масиві:”);
scanf(“%d”,&m);
/*Ввід елементів масиву*/
for(i=0;i<m;i++)
scanf(“%d”,&x[i]);
s=0;kol=0;
/*Знаходження суми додатних елементів масиву*/
for(i=0;i<m;i++)
{
if(x[i]>0){s+=x[i];kol++;}
}
sar=s/kol;
/*Формування нового масиву*/
j=0;
for(i=0;i<m;i++)
{
if(x[i]>0)
{
j++;
y[j]=x[i];
}
}
for(i=0;i<m;i++)
{
if(x[i]<0)
{
j++;
y[j]=sar;
}
}
for(i=0;i<m;i++)
{
if(x[i]==0)
{
j++;
y[j]=0;
}
}
printf(“\n”);
for(i=0;i<m;i++) printf(“%g”,y[i]);
printf(“\n””sar=%g”, sar);
}