- •Міністерство транспорту та зв'язку україни
- •Мета виконання лабораторно-практичних робіт
- •Порядок виконання лабораторно-практичних робіт
- •Оформлення звітів про виконання лабораторно-практичних робіт
- •Лабораторна робота № 1-2
- •1 Короткі теоретичні відомості
- •2 Постановка завдання
- •3 Варіанти індивідуальних завдань
- •4 Методичні вказівки
- •5 Приклад виконання лабораторної роботи
- •6 Порядок виконання лабораторної роботи
- •7 Контрольні запитання
- •Лабораторна робота № 3 Тема: "Програмування розгалужених обчислювальних процесів з використанням умовних операторів"
- •1 Короткі теоретичні відомості Умовний оператор if. Уморвний оператор – це оператор, який виконується в залежності від виконання деякої умови.
- •Синтаксис оператора
- •2 Постановка завдання
- •3 Варіанти індивідуальних завдань
- •4 Методичні вказівки
- •5 Контрольні запитання
- •Лабораторна робота № 4
- •2 Варіанти індивідуальних завдань
- •3 Методичні вказівки
- •Оператор циклу while. Цикл while – це ітераційний цикл із передумовою. Це оператор циклу, який працює до тих пір, поки деяка умова буде істинною.
- •2 Постановка завдання
- •3 Варіанти індивідуальних завдань
- •4 Методичні вказівки
- •5 Приклад виконання лабораторної роботи
- •6 Контрольні запитання
- •Лабораторна робота № 6-7
- •1 Короткі теоретичні відомості
- •Int array[a];
- •Int array[12];
- •Int array[a];
- •2 Варіанти індивідуальних завдань
- •3 Методичні вказівки
- •4 Приклад виконання лабораторної роботи
- •5 Контрольні запитання
- •Лабораторна робота № 8
- •2 Постановка завдання
- •3 Приклад виконання лабораторної роботиІндивідуальне завдання
- •4 Контрольні запитання
- •Лабораторна робота № 9
- •1 Короткі теоретичні відомості
- •2 Індивідуальні завдання
- •3 Методичні вказівки
- •4 Контрольні запитання
- •Лабораторна робота № 10
- •1 Короткі теоретичні відомості
- •2 Індивідуальні завдання
- •3 Методичні вказівки
- •4 Приклад виконання лабораторної роботи
- •5 Контрольні запитання
- •Лабораторна робота № 11-12
- •1 Короткі теоретичні відомості
- •2 Варіанти індивідуальних завдань:
- •3 Методичні вказівки
- •4 Приклад виконання лабораторної роботи
- •5 Контрольні запитання
- •Лабораторна робота № 13-14
- •1 Короткі теоретичні відомості
- •2 Постановка завдання.
- •3 Варіанти індивідуальних завдань
- •4 Методичні вказівки
- •5 Приклад виконання лабораторної роботи
- •6 Контрольні запитання
- •Лабораторна робота № 15
- •1 Короткі теоретичні відомості
- •Int putchar(int c);
- •2 Варіанти індивідуальних завдань
- •3 Методичні вказівки
- •4 Контрольні запитання
- •Лабораторна робота № 16
- •1 Короткі теоретичні відомості
- •Int strcmp(const chart *str1, const chart *str2);
- •2. Варіанти індивідуальних завдань
- •3 Методичні вказівки
- •4 Приклад виконання лабораторної роботи
- •5 Контрольні запитання
- •Лабораторна робота № 17-18
- •1 Короткі теоретичні відомості
- •2 Постановка задачі
- •3 Варіанти індивідуальних завдань
- •4 Приклад виконання лабораторної роботи
- •5 Контрольні запитання
- •Лабораторна робота № 19
- •1 Короткі теоретичні відомості
- •2 Завдання практичної роботи
- •3 Варіанти індивідуальних завдань
- •4 Методичні вказівки
- •5 Приклад виконання лабораторної роботи
- •6 Контрольні запитання
- •Лабораторна робота № 20
- •1 Короткі теоретичні відомості
- •2. Варіанти індивідуальних завдань
- •3 Методичні вказівки
- •4 Контрольні запитання
- •Лабораторна робота № 21
- •1 Короткі теоретичні відомості
- •2 Варіанти індивідуальних завдань
- •3 Методичні вказівки
- •4 Приклад виконання лабораторної роботи
- •2 Варіанти індивідуальних завдань
- •3 Методичні вказівки
- •4 Приклад виконання лабораторної роботи
- •5 Контрольні запитання
- •Лабораторна робота № 24
- •1 Короткі теоретичні відомості
- •2 Варіанти індивідуальних завдань
- •3 Методичні вказівки
- •4 Приклад виконання лабораторної роботи
- •5 Контрольні запитання
- •Лабораторна робота № 24
- •1. Короткі теоретичні відомості
- •2 Варіанти індивідуальних завдань
- •3 Методичні вказівки
- •4 Контрольні запитання
- •Практична робота № 1-2
- •1 Короткі теоретичні відомості
- •Оператор виконує наступні дії:
- •3 Методичні вказівки
- •4 Контрольні запитання
- •Практична робота № 3
- •1 Короткі теоретичні відомості
- •Int array[a];
- •Int array[12];
- •Int array[a];
- •2 Постановка завдання
- •3 Методичні вказівки
- •4 Приклад виконання практичної роботи Завдання
- •Програма розв'язку
- •5 Контрольні запитання
- •Практична робота № 4
- •1 Короткі теоретичні відомості
- •2 Постановка завдання
- •3 Варіанти індивідуальни х завдань
- •4 Методичні вказівки
- •5 Приклад виконання практичної роботи
- •6 Контрольні запитання
- •Практична робота № 5
- •1 Короткі теоретичні відомості
- •Void func( ) /*нічого не повертає*/
- •2 Варіанти індивідуальних завдань
- •3 Методичні вказівки
- •4 Приклад виконання лабораторної роботи
- •5 Контрольні запитання
- •Практична робота № 6
- •1 Короткі теоретичні відомості
- •2 Постановка завдання
- •3 Варіанти індивідуальних завдань
- •4 Методичні вказівки
- •2 Завдання практичної роботи:
- •3 Варіанти індивідуальних завдань
- •4 Методичні вказівки
- •5 Приклад виконання лабораторної роботи
- •Програма розв'язку
- •4 Контрольні запитання
- •Список рекомендованої літератури
4 Приклад виконання лабораторної роботи
Постановка задачі. Написати програму, яка вводить масив записів про країни Європи (назва, столиця, кількість населення, площа, кількість міст).
Програма повинна знайти і вивести на екран дані про країни у порядку зростання кількості населення.
Текст програми мовою С
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
int main()
{int i, j;
struct dani
{char nazva[20];
char stol[20];
int nasel;
int plos;
int mist; } infor[3], a;
for(i=0;i<3;i++)
{puts("Vvedit nazvy krajinu");
scanf("%s",infor[i].nazva);
puts("Vvedit nazvy stoluci");
scanf("%s",infor[i].stol);
puts("Vvedit kilkist naselennya");
scanf("%d",&infor[i].nasel);
puts("Vvedit ploschy");
scanf("%d",&infor[i].plos);
puts("Vvedit kilkist mist");
scanf("%s",&infor[i].mist);}
for(j=0;j<3;j++)
for(i=j;i<3;i++)
{
if(infor[i].nasel>infor[i+1].nasel)
{a=infor[i];
infor[i]=infor[i+1];
infor[i+1]=a;}
}
puts("Vuvid sortonanogo spusky");
for(i=0;i<3;i++)
printf("%s\n %s\n %d\n %d\n %d\n ", infor[i].nazva, infor[i].stol, infor[i].nasel,
infor[i].plos, infor[i].mist);}
Тестовий приклад
Якщо ми введемо:
Poland Warchava 34 789 5600
France Paris 87 565 8400
Ukraine Kiyv 52 988 24000
То на екрані ми маємо отримати відсортований масив:
Poland Warchava 34 789 5600
Ukraine Kiyv 52 988 2400
France Paris 87 565 84000
5 Контрольні запитання
1. Які способи ініціалізації структур даних Ви знаєте?
2. Яка різниця між структурою та об’єднанням?
3. Як описати масив структур?
4. Як можна отримати доступ до поля елемента структури?
5. Який тип структури називається бітовим полем?
6. Чому в бітових полях не можна використовувати елементи типу float чи double?
8. Чому структури називають типом даних користувача?
Лабораторна робота № 19
Тема: Складання програм з використанням бібліотечних функцій для роботи з динамічною пам’яттю
Мета: Навчитись описувати та організовувати динамічні масиви, виділяти і звільняти динамічну пам’ять, заносити дані в динамічні масиви
1 Короткі теоретичні відомості
1. Функція для динамічного виділення пам’яті malloc(). Прототип функції malloc():
void *malloc(unsigned s) — повертає вказівник на початок області динамічної пам’яті довжиною s байт. Якщо потрібний об’єм пам’яті функція не може виділити, то вона повертає NULL, або аргумент її =0, тобто s=0.
Приклад:
int *u;
u=(int*)malloc(sizeof(int)); // у функцію передається кількість необхідної пам'яті в байтах. Оскільки функція повертає значення типу void*, то його необхідно перетворити до типу вказівника (int*).
Приклад виділення пам’яті функцією malloc().
#include <stdio.h>
#include <stdlib.h>
int k, m, int *ptr1;
void main() { /*Виділяється 4*k байт памяті, одержуємо адресу виділеного блоку */
for (k=1; k<=6; k=k+1) {ptr1= malloc(4*k);
m=(ptr1+k-1); Додається розмір, кратний байтам
printf("k=%d %d %d\n", k, ptr1, m+3); }
2. Функція динамічного виділення пам’яті calloc(). Прототип функції:
Void *calloc(unsigned n, unsigned m) - повертає вказівник на початок області динамічної пам’яті для розміщення n елементів довжиною m байт кожний. Якщо потрібний об’єм пам’яті функція не може виділити, то вона повертає NULL, або аргументи її =0, тобто n =0 або m=0.
Приклад програми використання функції calloc():
#include <stdio.h>
#include <stdlib.h>
int k, m, int *ptr1;
void main() / Виділяється 4*16 байт памяті, одержуємо адресу виділеного блоку */
ptr1= calloc(4,16);
printf("%d %d \n", current, current+1 );} Початок кінець
Результат 40240672 40240676
3. Розширення динамічної пам’яті за допомогою функції realloc(). Прототип функції:
void *realloc (void *p, unsigned s)
Функція змінює розмір блоку раніше виділеної динамічної пам’яті до розміру s байт, р - адреса початку змінюваного блоку, при невдалому завершенні повертає NULL;
Аргумент ptr вказує на ново виділений блок пам’яті. Новий розмір в байтах вказується параметром s. При виклику realloc() можливі такі випадки.
Якщо для розширення блоку, який знаходиться за адресою ptr є достатня кількість пам’яті, то вона виконується і функція повертає ptr.
Якщо пам’яті не досить, щоб розширити існуючий блок по його текучій адресі, то створюється новий блок потрібного розміру s і дані копіюються з старого блоку в початок нового. Старий блок звільняється і функція повертає вказівник на новий блок пам’яті.
Якщо аргумент = NULL, то функція діє так як і malloc(), виділяючи блок пам’яті розміром s байт і повертаючи вказівник на нього.
Якщо аргумент size=0, блок пам’яті по адресі ptr звільняється і функція повертає NULL.
Якщо для перерозподілу недосить пам’яті (тобто не можна ні розширити старий блок, ні розмістити новий), функція повертає NULL, а початковий блок стає незмінним.
Приклад використання функції для перерозподілу пам’яті:
4. Звільнення пам’яті з допомогою функції free(). Пам’ять розподіляється з динамічної області. При розподілу памяті за допомогою функцій malloc() і calloc() ця память береться з динамічної області, яка доступна програмі. Але вона має межі. Коли програма закінчила роботу з блоком динамічно виділеної пам’яті, її треба звільнити. Звільнену пам’ять можна далі динамічно розподіляти. Для звільнення динамічно розподіленої пам’яті використовується функція free().
Прототип функції:
void free(void *ptr);
Функція звільняє раніше виділену ділянку динамічної пам'яті, на яку вказує адреса р. Цей блок повинен бути раніше виділений однією з функцій malloc(), realloc() і calloc(). Якщо вказівник рівний NULL функція нічого не дає. Приклад звільнення динамічного розподілу пам’яті.
#include <stdio.h>
#include <stdlib.h>
int int *ptr1;
void main() { /*Виділяється 4*k байт памяті, одержуємо адресу
ptr1= malloc(100);
free(ptr1); /* Звільнення блоку памяті по адресу ptr1*/ }