- •Загальні положення ...………………………………………………………….........3
- •Загальні положення
- •1 Організація введення і виведення даних та розв’язання задач з простою змінною
- •1.1 Мета роботи
- •1.2 Вказівки до організації самостійної роботи студентів
- •1.2.1 Використання операторів введення
- •#Define sp " "
- •Int main ( )
- •Int main ( )
- •Int main ( )
- •Void main ( )
- •For ( [ вир1 ]; [ вир2] ;[ вир3 ] ) оператор;,
- •Void main ( )
- •Void main ( )
- •1.5 Контрольні питання
- •1.6 Варіанти індивідуальних завдань
- •2 Розв’язання задач c використанням одновимірних і двовимірних масивів
- •2.1 Ціль роботи Прищепити студентам навички розв’язання задач з використанням одновимірних і двовимірних масивів, складних циклів і використання покажчиків.
- •2.2 Методичні рекомендації з організації самостійної роботи студентів
- •Void main( )
- •Void main ( )
- •Void main ( )
- •Void main ( )
- •2.3 Використання покажчиків
- •Наиведемо програму з використанням покажчиків:
- •Int main ( )
- •Void main ( void )
- •2.4 Використання масивів і покажчиків
- •Приклад 2.4 Обчислити середнє значення додатних елементів одновимірного масиву.
- •Int *pmas;
- •2.5 Масиви покажчиків
- •Void main( )
- •2.6 Контрольні питання
- •2.7. Варіанти індивідуальних завдань
- •3 Вирішування задач з використанням даних символьного типу
- •3.1 Ціль роботи Вивчення засобів опису символьних типів даних і використання структур для обробки даних.
- •3.2 Методичні рекомендації з організації самостійної
- •Роботи студентів
- •3.2.1 Організація символьного введення - виведення
- •Device . Get (char_var);
- •3.2.2 Рядки як символьні масиви
- •3.2.3 Введення-виведення символьних масивів
- •Void main (void)
- •3.2.4 Основні функції обробки символьних типів
- •Void main (void)
- •Void del (char *st, int k, int n);
- •Void del(char *st, int, int);
- •Void main()
- •Void del(char *st,int k,int n)
- •[ Проміжки ] [знак числа] [ цифри].
- •Void main( )
- •Void main()
- •Void main()
- •Void main(void)
- •3.2 Контрольні питання і завдання
- •3.4 Варіанти індивідуальних завдань
- •4 Вирішувння задач з використанням даних типу структура
- •4.1 Ціль роботи Освоєння заходів розробки і налагодження програм з використанням
- •4.2 Методичні рекомендації з організації самостійної
- •Void main(void)
- •Void qsort (void *base , n , width,
- •Int (*fcmp) ( const void *elem1, const void *elem2) .
- •4.3 Контрольні питання
- •4.4. Індивідуальні завдання
- •5 Використання функцій при розробці програм
- •5.1 Ціль роботи
- •5.2 Методичні вказівки з організації самостійної роботи студентів
- •Void fun ( int p)
- •Void main ( )
- •Int main ( )
- •5.2.1 Використання покажчиків на функцію
- •Void main ( )
- •5.2.2 Використання масивів - параметрів функцій
- •Vоid sort (int mas [ 30 ]); .
- •Void sort ( int mas [ ], int n ) ; .
- •Void fun1 (char st [15]);
- •Int main ( )
- •Void fun1 ( char st[15] )
- •Void fun2 ( int mat [ ] [10], int rows, int cols );
- •Int main ( )
- •5.2.4 Звертання до функції і передача результату
- •Int main ( )
- •5.2.5 Перевантаження функцій
- •Int main ( )
- •5.3 Контрольні питання
- •5.4 Варіанти індивідуальних завдань
- •6 Робота з файлами
- •6.1 Ціль роботи
- •6.2 Методичні вказівки по організації самостійної роботи
- •Int main ( )
- •Int main ( )
- •Void main ( )
- •Ifstream in ( ”file1") ;
- •In.Close();
- •Перелік посілань
- •Навчальне видання
- •61726 Харків, просп. Леніна, 14.
4 Вирішувння задач з використанням даних типу структура
4.1 Ціль роботи Освоєння заходів розробки і налагодження програм з використанням
даних типу структура
4.2 Методичні рекомендації з організації самостійної
роботи студентів
При підготовці до даної лабораторної роботи рекомендується повторити дані типу структура і застосування структурних типів для вирішування практичних задач.
Структура — це сукупність різнотипних елементів, яким привласнюється одне ім'я ( воно може бути відсутнім), що займає одну область пам'яті. Елементи структури називаються полями.
Як і будь-яка змінна, структурна змінна повинна бути описана. Цей опис складається з двох кроків: опис шаблона (тобто складу ) або типу структури й опису змінних структурного типу.
Синтаксис опису структури має вигляд:
struct < ім'я структури >
{ <тип 1 > ім'я поля 1;
< тип 2 > ім'я поля 2. . . . . . . .;
} [ р1, р2. . . .];
де struct — службове слово;
< ім'я структури > — ім'я типу структури ;
<тип 1>, <тип 2> — імена стандартних або визначених типів;
ім'я поля 1, ім'я поля 2, … — імена полів структури;
р1, р2. . . .; — імена перемінних типу структура.
Приклад 4.1. Обробити дані про здачу студентами сесії по предметах: математиці, фізиці і програмуванні, підрахувати середній бал, отриманий студентами по цим курсам.
Визначимо структуру:
struct stud
{
char fam [25]; // прізвище і ініціали
int mat, fiz, prg; // предмети
float sb; // середній бал
} st1,st2;
Змінні st1 і st2 можна оголосити окремим оператором, наприклад:
stud st1 st2;
Ініціалізація полів структури може проводитися або при її описі, або в тілі програми. При описі структури ініціалізація полів може виглядати так:
struct stud
{ char fam [25];
int mat,fiz, prg;
float sb;
}
st1 = { " Кравченко И.С.", 4, 5, 5},
st2 = { "Тесленко А.М.", 3, 4, 5};
Якщо ініціалізація полів буде проведена в тілі програми, то для звертання до імен полів треба спочатку записати ім'я структурної змінної, а потім ім'я поля, що відокремлюється крапкою ( складені поля). Отже, у випадку , коли змінна st1 з'являється в програмі, для її ініціалізації можна записати
stud st1 = {"Кравченко И.С.",4 ,5 ,5); або ініціалізація здійснюється за допомогою складених полів, як представлено в наступній програмі:
// Р 4_1. СPP — визначення середнього бала
// використання складених полів
#include < string.h >
#include < stdio.h >
#include < iostream>
using namespace std;
struct stud
{ char fam [20];
int mat, fiz, prg;
float sb;
} st1, st2;
main ( )
{
strcpy (st1. fam, "Кравченко И.С.");
st1 . mat = 4;
st1. fiz = 5;
st1. prg = 5;
st1. sb = (st1. fiz + st1. mat + st1. prg) / 3;
st2 = st1;
puts (st2. fam); // Виведення прізвища st2;
cout << st2. mat << st2. fiz << st2. prg << st2. sb << endl;
return 0;
}
У цій програмі всім полям структури st1 привласнені відповідні значення. Треба звернути увагу, що поле st1.fam одержує значення шляхом використання функції strcpy (st1.fam, "Кравченко И.С.");. Структурна змінна st2 має ту ж структуру, що і st1, тому справедлива операція st2 = st1; . Якщо в одній функції використовується тільки один структурний тип, то цей тип можна повідомляти без імені. Наприклад, раніше розглянуту структуру можна оголосити в такий засіб:
struct
{ char fam [25];
int mat, fiz, prg;
float sb;
} st1, st2;
Якщо при описі структур у деякій функції або в межах "видимості" змінних у різних функціях мається багато (але не усі) однакових полів, то ці однакові поля можна об'єднати в окрему структуру і використовувати її при описі інших структур, тобто поля структури можуть самі мати тип "структура". Це називається вкладеністю структур. Наприклад, якщо треба обробляти списки студентів і викладачів університету, причому в студентських списках містяться дані: прізвище і иниціали, дата ( день, місяць, рік) народження, група і середній бал успішності, а в списках викладачів обробляються такі дані: прізвище і ініціали, дата народження, кафедра, посада.
Для обробки списку студентів і викладачів можна оголосити наступні структури:
struct stud
{ char fio [25];
int den,god;
char mes [10];
char grup;
float sb;
}
і
struct prep
{ char fio [25];
int den, god;
char mes [10];
char kaf, dolg;
}
В оголошених типах однакові поля має сенс включити в окрему структуру і використовувати її при описі інших типів. Поетапно це виглядає так:
— загальна структура:
struct spd
{ char fio [25];
int den,god;
char mes[10];
};
— структура для опису інформації про студентів:
struct stud
{ spd dr;
char grup;
float sb
} st1,st2;
— структура для опису інформації про викладачів:
struct prep
{ spd dr;
char kaf [10] ;
char dolg [15];
} pr1,pr2;
У структурах stud і prep для оголошення поля, що містить дані про прізвище і дату народження використовується раніше описаний тип spd. Тепер до поля fio, den, god, mes можна звернутися, використовуючи запис наступного вигляду:
st1 . dr . fio
Наприклад, при записі функції введення — gets (st1 . dr . fio); або pr1 . dr . fio .
Після оголошення структурного типу перемінних, для роботи з їх полями можна використовувати і покажчики, тоді опис структури буде мати вигляд:
struct stud
{ char fam [25];
int mat, fiz, prg;
float sb;
} st1, *pst;
Тепер доступ до полів може здійснюватися двома способами :
— використовуючи оператор (*) , наприклад,
gets ((*pst) . fam); (*pst) . fiz = 5;
використовуючи спеціальний покажчик на структуру "->", наприклад,
gets ( pst -> fam); pst -> fiz = 5; і т.д.
Крім того до змінної st1 можна звертатися, указуючи поля через символ крапка, як це робилося раніше.
Дані структурного типу можна об'єднати в масиви, наприклад, використовуючи раніше розглянуту структуру можна записати:
struct stud
{ char fam [25];
int mat, fiz, prg;
float sb;
} spis[15], *sp = &spis[0];
або, якщо масив описується не при описі структури, то його можна оголосити у вигляді:
stud spis [15]; .
Доступ до елементів масиву може виконуватися з використанням індексу або через покажчик — константу, яким є ім'я масиву:
strcpy( spis [1] . fam, " ");
spis [1] . fiz = 5;
або
strcpy ((sp +1) -> fam, " ");
(sp + 1) -> fiz = 5;
Це можна записати також у вигляді:
strcpy ((* (spis +1 )) . fam, " ");
(*(spis+1)) . fiz = 5;
Тут потрібно зовнішня пара дужок, тому що операція (.) — " крапка" має пріоритет вище, ніж операція за адресою (*).
Розглянемо використання даних структурного типу на наступному прикладі.
Приклад 4.2. Ввести в комп'ютер відомість успішності студентів групи з 25 чоловік, які сдають сесію по предметах: фізиці, математиці, і програмуванню і підрахувати:
— середній бал, отриманий кожним студентом;
— середній бал групи за кожним предметом;
— вивести на екран відмінників по програмуванню.
Програма буде мати вигляд:
// P4_2. CPP обробка відомості успішності
// Використання даних типу структура
#include < string.h >
#include < stdio.h >
#include < iomanip >
#include < iostream >
using namespace std;
struct stud
{ char fam[25];
int mat, fiz, prg;
float sb;
};