- •Методичні вказівки до виконання лабораторних та контрольних робіт із дисципліни "Програмування"
- •Порядок виконання лабораторних та контрольних робіт
- •Зміст контрольної роботи:
- •Загальні відомості
- •Int n; puts("Введіть розмір масиву");
- •Int n,m; puts("Введіть розмір масиву");
- •Int n; puts("Введіть розмір масиву структур");
- •Лабораторні роботи Лабораторна робота № 1 Робота з масивами
- •Лабораторна робота № 2 Структури та об'єднання.
- •Лабораторна робота № 3 Елементарне введення у функції
- •Лабораторна робота № 4 Прийоми використання функцій
- •Лабораторна робота № 5 Робота з файлами
- •Контрольні роботи
- •Завдання 1
- •Масиви та покажчики, масиви динамічної пам’яті
- •Варіанти завдань до програми 1.1
- •Варіанти завдань до програми 1.2
- •Завдання 2 Структури, об'єднання Варіанти завдань до програми 2.1
- •Варіанти завдань до програми 2.2
- •Завдання 3 Елементарне введення у функції Варіанти завдань до програми 3.1
- •Варіанти завдань до програми 3.2
- •Завдання 4 Прийоми використання функцій Варіанти завдань до програми 4.1
- •Варіанти завдань до програми 4.2
- •Завдання 5 Робота з файлами Варіанти завдань до програми 5.1
- •Варіанти завдань до програми 5.2
- •Контрольні питання
- •Література
Міністерство освіти І НАУКИ, МОЛОДІ та спорту України
Запорізький національний технічний університет
Методичні вказівки до виконання лабораторних та контрольних робіт із дисципліни "Програмування"
для студентів напряму 6.050102 "Комп’ютерна інженерія"
заочної форми навчання
2013р.
Методичні вказівки до виконання лабораторних та контрольних робіт із дисципліни "Програмування" для студентів напряму 6.050102 "Комп’ютерна інженерія" заочної форми навчання Укл.: Н.В. Луценко, Польська О.В. – Запоріжжя: ЗНТУ, 2013.– 47 с.
Укладачі: Н.В. Луценко, ст.викладач
О.В. Польська, асистент
Рецензент: Р.К. Кудерметов, к.т.н., доцент
Відповідальний
за випуск О.В. Польська, асистент
Затверджено:
на засіданні кафедри
"Комп’ютерні системи та мережі"
Протокол № __ від "_"_____ 2013 р.
Зміст
Порядок виконання лабораторних та контрольних робіт 4
Загальні відомості 5
Лабораторні роботи 20
Лабораторна робота № 1 20
Лабораторна робота № 2 24
Лабораторна робота № 3 27
Лабораторна робота № 4 29
Лабораторна робота № 5 31
Контрольні роботи 34
Завдання 1 34
Завдання 2 36
Завдання 3 40
Завдання 4 41
Завдання 5 43
Контрольні питання 45
Література 47
Порядок виконання лабораторних та контрольних робіт
Лабораторні роботи складаються з декількох програм, завдань до них. Студент повинен розробити, налагодити та зберегти у робочому каталозі програми в точній відповідності з приведеними в лабораторних роботах текстами програм (вихідні програми), опрацювати і проаналізувати результати їхньої роботи. Розробити для кожної вихідної програми самостійне завдання. Продемонструвати викладачу роботу програм.
Контрольна робота складається з декількох завдань з варіантами. Студент повинен розробити, налагодити і зберегти програми згідно заданого варіанту, опрацювати і проаналізувати результати їхньої роботи та дати відповіді на контрольні питання.
Зміст контрольної роботи:
Титульний лист з номером варіанту.
Тексти завдань згідно варіанту.
Тексти програм.
Відповіді на контрольні питання.
Електронний носій з розробленими програмами.
Загальні відомості
Одновимірні масиви. Масив – це сукупність змінних одного типу, об‘єднаних під одним ім'ям. При визначенні масиву задають його розмір, значення розміру повинно бути константним цілочисловим виразом. Наприклад:
int a[6]; const N=10; float b[N];
Масиви бувають різного класу пам'яті. Масиви, визначені поза функціями, у тому числі поза функцією main(), є глобальними (зовнішніми). Масиви, які визначені усередині функції, можуть бути статичними (зі словом static) або автоматичними. Наприклад:
int a1[5]; // масив зовнішній, глобальний
void main()
{float b1[4]; // масив автоматичний
static long c1[3]; // масив статичний
… }
Покажчики. Це цілі беззнакові змінні, що містять адреси пам'яті якого-небудь об'єкту програми. Покажчик може містити адресу змінної, масиву, структури, іншого покажчика і т.п. Розмір покажчика 4 байти: 2 байта – сегмент і 2 байта – зсув в сегменті. Тип покажчика – це тип змінної, адреса якої може знаходитися в покажчику. Покажчик можна ініціалізувати та йому можна привласнювати адресу визначеної змінної, значення раніш визначеного іншого покажчика або явно задану адресу пам’яті (з перетворенням типу). Наприклад:
int a=1; int *ptra; ptra=&a; // адреса змінної а
int *ptrb; ptrb=ptra; // покажчик ptra
int *ptrс=(int*)0xB8000000; // явна адреса пам’яті
Ім'я масиву– це покажчик-константа, значення якого є адреса нульового елемента масиву. Це значення не можна змінити. Наприклад, якщо визначитиint arr[8], то при цьому виділиться пам'ять для8елементів масиву, а ім'яarrстане покажчиком-константою на цей масив. При визначенні розміру покажчика arrвизначається розмір усього масиву (16 байт). Ім'я масиву можна привласнювати іншим покажчикам. З елементами масивів, зв'язаними з покажчиками, можна працювати за допомогою індексів і операції розіменування.
Наприклад, доступ до елементів масиву можна виконати таким чином:
int arr[8]; int *ptr=arr;
arr[0]=2; *(arr+1)=4; *(2+arr)=6; 3[arr]=8;
ptr[4]=1; *(ptr+5)=3; *(6+ptr)=5; 7[ptr]=7;
Рядок. Це послідовність елементів типу char, останнім елементом якої є '\0'. Ініціалізується рядок послідовністю символів у парних подвійних лапках. Адреса першого символу може використовуватися для ініціалізації масиву типу char, у цьому випадку ім'я масиву й адреса першого символу стають синонімами. Наприклад:
char str1[5]="name"; char str2[]="name";
Адреса першого елемента рядка може використовуватися для ініціалізації покажчика типу char, наприклад:
char *strptr="name" ;
У цьому випадку покажчик-змінна strptr (але не покажчик-константа) одержує значення адреси символу 'n', а сам рядок розташовується в сегменті даних завантажувального модуля програми.
Масиви покажчиків. Це масиви, елементами якого є покажчики. Приклад визначення масиву з трьох покажчиків на об'єкти типу int:
int a=9,b=8,c=7; // визначення і ініціалізація змінних а, b, c
int*mas[3]={&a,&b,&c};//визначення і ініціалізація масиву покажчиків
Масив mas містить три покажчика типу int*. Вираз (mas+1) відповідає зсуву у пам'яті на sizeof(int*) байтів від початку масиву.
Масиви покажчиків на рядки частіше використовуються для раціонального розміщення в пам'яті. Наприклад:
char *name[3]={"Іванов","Петро","Єгорович"};
При такому визначенні в пам'яті виділяється 3*sizeof(char*)= 3*4=12 байт для покажчиків name[0], name[1], name[2], 7 байт – для рядка "Іванов", 6 – для "Петро" і 9 – для "Єгорович".
Багатовимірний масив. Це масив масивів, тобто такий масив, елементами якого є масиви. Ім'я багатовимірного масиву є покажчик-константа на масив покажчиків-констант, елементами якого є покажчики-константи з адресами початку кожного з рядків масиву елементів. Елементи багатовимірного масиву розташовуються в пам'яті за рядками, тобто в порядку зростання найправішого індексу. Доступ до елементів багатовимірного масиву може здійснюватися за індексами або за допомогою операції розіменування.
Нижче приведені приклади доступу до елементів 2-го рядка двовимірного масиву a та 3-го рядка трьохвимірного масиву b:
int a[2][4]; int b[3][2][3];
a[1][0]=7; *(a[1]+1)=8; (*(a+1))[2]=9; *(*(a+1)+3)=10;
b[2][0][0]=1; *(b[2][0]+1)=2; *(*(b[2]+0)+2)=3;
*(*(*(b+2)+1)+0)=4; (*(b[2]+1))[1]=5; (*(*(b+2)+1))[2]=6;
Ініціалізація масивів. Це привласнення початкових значень елементам масивів при їх визначенні. Ініціалізація масивів може здійснюватися за умовчанням або явно.
За умовчанням глобальні і статичні масиви ініціалізуються нулями, автоматичні – довільними даними. Явна ініціалізація буває повна (з явним завданням кількості елементів і початкових значень усіх елементів масиву) та неповна (з явним завданням кількості елементів, але початкові значення задаються не для всіх елементів масиву):
int a[5]={2,5,7,9,1}; // явна повна ініціалізація
int b[7]={5,7,9}; // явна неповна ініціалізація
У останньому рядку інші чотири елементи масиву bбудуть мати або нульові значення (для зовнішнього і статичного масивів), або їхні значення будуть невизначені (для автоматичного масиву).
При повній явній ініціалізації одновимірного масиву можливо не вказувати розмір масиву. Компілятор визначає кількість елементів масиву за списком ініціалізації:
int c[]={5,7,9,8}; // Масив із чотирьох елементів
Нижче наведені приклади ініціалізації двовимірних масивів.
int d[2][3]={2,4,6,8,1,3}; // явна повна ініціалізація
int f[3][2]={{7,8},{9,0},{2,4}}; // явна повна ініціалізація
int m[4][2]={{10},{3,5},{4,6}}; // явна неповна ініціалізація
int n[3][4]={{1,9,8},{3,5},{11}}; // явна неповна ініціалізація
Багатовимірні масиви можна ініціалізувати без вказівки найлівішої (першої) розмірності. Компілятор визначає кількість елементів за списком ініціалізації, при цьому ініціалізація може бути неповною :
int p[][3]={{3,2,1},{3,8,9},{2,7,4}};
float f[][2]={{1.2},{2.2,3.4},{2.5,6.4},{2.0}};
В цих прикладах визначені масиви int p[3][3] і float f[4][2].
Масиви динамічної пам'яті. Пам'ять для збереження даних може виділятися динамічно в так званій "купі", розмір і положення якої залежать від моделі пам'яті. Це зручно у випадку, коли невідомо, скільки об'єктів буде створено при роботі програми. При цьому розмір масиву можна визначити як цілу змінну.
В мові Сі використовується функція malloc() для запиту і виділення пам'яті, кількість якої задається в байтах, і функція free() для її звільнення. Прототипи цих функцій описані в заголовних файлах <alloc.h> та <stdlib.h>. У мові С++ для цієї мети також існують операції new і delete. Операція new автоматично визначає необхідний обсяг пам'яті в байтах.
Приклад визначення одновимірного динамічного масиву: