Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Prog1_2_zao_2013.doc
Скачиваний:
6
Добавлен:
07.02.2016
Размер:
327.17 Кб
Скачать

47

Міністерство освіти І НАУКИ, МОЛОДІ та спорту України

Запорізький національний технічний університет

Методичні вказівки до виконання лабораторних та контрольних робіт із дисципліни "Програмування"

для студентів напряму 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

Порядок виконання лабораторних та контрольних робіт

Лабораторні роботи складаються з декількох програм, завдань до них. Студент повинен розробити, налагодити та зберегти у робочому каталозі програми в точній відповідності з приведеними в лабораторних роботах текстами програм (вихідні програми), опрацювати і проаналізувати результати їхньої роботи. Розробити для кожної вихідної програми самостійне завдання. Продемонструвати викладачу роботу програм.

Контрольна робота складається з декількох завдань з варіантами. Студент повинен розробити, налагодити і зберегти програми згідно заданого варіанту, опрацювати і проаналізувати результати їхньої роботи та дати відповіді на контрольні питання.

Зміст контрольної роботи:

  1. Титульний лист з номером варіанту.

  2. Тексти завдань згідно варіанту.

  3. Тексти програм.

  4. Відповіді на контрольні питання.

  5. Електронний носій з розробленими програмами.

Загальні відомості

Одновимірні масиви. Масив – це сукупність змінних одного типу, об‘єднаних під одним ім'ям. При визначенні масиву задають його розмір, значення розміру повинно бути константним цілочисловим виразом. Наприклад:

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 автоматично визначає необхідний обсяг пам'яті в байтах.

Приклад визначення одновимірного динамічного масиву:

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]