Особливості мови програмування С

ВСТУП



1. ТЕХНІЧНЕ ЗАВДАННЯ

1.1 Вступ

1.2 Підстави для розробки

1.3 Призначення розробки

1.4 Вимоги до прикладної системи

1.4.1 Вимоги до функціональних характеристик

1.4.2 Умови експлуатації

1.4.3 Вимоги до складу й параметрів технічних засобів

1.4.4 Вимоги до маркування й упакування

1.4.5 Вимоги до транспортування й зберігання

1.5 Вимоги до допоміжної документації

1.6 Вимоги до функціональної частини прикладної системи

1.7 Порядок контролю й приймання

2 МУЛЬТИМЕДІЙНИЙ ПОСІБНИК З ДИСЦИПЛИНИ «ІНФОРМАТИКА ТА ОБЧИСЛЮВАЛЬНА ТЕХНІКА» НА ТЕМУ «ОСОБЛИВОСТІ МОВИ ПРОГРАМУВАННЯ С++. ВКАЗІВНИКИ»

2.1 Інформаційне забезпечення курсу

2.1.1 Теорія	

2.1.2 Приклади

2.1.3 Практикум

2.1.4 Глосарій

2.1.5 Тестування

3. ІНТЕРФЕЙС ПОСІБНИКА

3.1 Запуск

3.2 Схема курсу

3.3 Організація основного меню

3.4. Реалізація режиму навігації

3.5 Реалізація теоретичної частини мультимедійного посібника

3.6 Реалізація практичної частини мультимедійного посібника

3.7 Інструкція з експлуатації

ВИСНОВКИ

СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ


ВСТУП



Народження комп'ютерних навчальних систем пов'язане з поширенням персональних комп'ютерів, забезпечених призначеним для користувача графічним інтерфейсом і здатних сприймати і відтворювати мультимедійні дані в різних форматах.

Ширші можливості по використанню комп'ютерних навчальних систем відкрилися завдяки Інтернету. Саме завдяки «виходу» навчальних програм в Інтернет з'явився термін eLearning -«електроне навчання»[1].

Основним завданням підсумкової курсової роботи є розробка навчальної системи мультимедійного посібника з дисципліни «Інформатика і ОТ» на тему «Особливості мови програмування С++. Вказівники». Вимоги до розробки навчальній програми, полягали в наступному - навчальну програму слід було проектувати і розробляти як систему, що складається з двох основних підсистем:

- підсистема навчання, призначеною для видачі учбового матеріалу;

- підсистему діагностики, що забезпечує збір і обробку даних про роботу користувача.

При розробці учбового курсу основну увагу слід приділити проектуванню структури учбового матеріалу, і лише потім перейти до підбору адекватних засобів його передачі.

Наступна найважливіша умова при створенні ефективної навчальної програми - забезпечення необхідного рівня зворотнього зв'язку з користувачем. Засоби інтерактивності дозволяють вирішити завдання, обов'язкові для будь-якої системи навчання:

- отримати інформацію про вихідний рівень підготовки користувача;

- забезпечити можливість вибору користувачем індивідуального маршруту проходження учбового курсу;

- надати користувачеві можливість повторного виконання дій;

- оцінити досягнутий рівень підготовки.

Спеціалізовані інструменти для створення учбових курсів, подібні Authorware, істотно знижують необхідні витрати часу і сил на розробку. Оскільки Authorware орієнтований в першу чергу на створення електронних навчальних систем, то його можливості істотно ширші, ніж можливості пакетів для підготовки презентацій. Засоби, що входять до складу Authorware дозволяють практично в повному об'ємі реалізувати сучасні вимоги до побудови і організації систем дистанційного навчання. 

При створенні посібника були використані такі програмні продукти як: 

Borland C++;

Macromedia Authorware 7;

MS Word;

MS Paint

Crystal Button.


1. ТЕХНІЧНЕ ЗАВДАННЯ



1.1 Вступ



Предметом розробки є навчальна система – мультимедійний посібник з дисципліни «Інформатика та обчислювальна техніка» на тему «Особливості мови програмування С++. Вказівники». Область застосування – навчальний процес у навчальних закладах І – ІV рівнів акредитації.

Початок роботи: I квартал 2009 року.

Кінець роботи: II квартал 2009 року.

Виконав: студент групи ДГ-К5-1 Олешкевич Сергій Вікторович



1.2 Підстави для розробки



Підставою для розробки є завдання, видане кафедрою ІТ 2.03.2007 року.



1.3 Призначення розробки



Навчальна система - мультимедійний посібник з дисципліни «Інформатика та обчислювальна техніка» на тему «Інформатика та обчислювальна техніка» призначена для вивчення мови С++ (зокрема вказівників).



1.4 Вимоги до прикладної системи



1.4.1 Вимоги до функціональних характеристик

Навчальна система - мультимедійний посібник з дисципліни «Інформатика та обчислювальна техніка» на тему «Особливості мови програмування С++. Вказівники» повинна виконувати наступні функції:

Практичний та сучасний Windows-інтерфейс створений з використанням Меню чи інших засобів вибору інформації (наприклад, гіперпосилань);

Розділ Меню «Допомога» має інформацію про роботу із програмою, про розділи посібника;

Розділ «Про автора» містить графічну інформацію про розробника;

Кожне вікно повинно містити графічний елемент, що захищає авторські права;

Інформація представлена в структурованому виді; 

Асоціативний інтерфейс;

Система "Пошук" двох видів: контекстний пошук, тематичний пошук;

наявність контролюючих блоків.

	

		Умови експлуатації

Умови експлуатації навчальної системи - мультимедійний посібник з дисципліни «Інформатика та обчислювальна техніка» на тему «Особливості мови програмування С++. Вказівники» збігаються з умовами стабільної експлуатації сучасних персональних комп'ютерів.



		Вимоги до складу й параметрів технічних засобів

Для стабільної роботи мультимедійного посібника необхідно: IBM PC: MS Windows 98 і вище, процесор Pentium, 128 Мбайт ОЗУ, SVGA - відеокарта (1024*768, High Color 16 біт), MS Windows сумісна миша, CD-ROM.



		Вимоги до маркування й упакування

Для переносу навчальної системи - мультимедійний посібник з дисципліни «Інформатика та обчислювальна техніка» на тему «Особливості мови програмування С++. Вказівники» з метою його установки на ПК, необхідно один CD-R диск (700 Мб).



		Вимоги до транспортування й зберігання

Транспортування навчальної системи - мультимедійний посібник з дисципліни «Інформатика та обчислювальна техніка» на тему «Особливості мови програмування С++. Вказівники» необхідно робити на CD-R, зазначених у попередньому пункті. Зберігання варто здійснювати на CD-R.



		Вимоги до допоміжної документації

Навчальна система - мультимедійний посібник з дисципліни «Інформатика та обчислювальна техніка» на тему «Особливості мови програмування С++. Вказівники» повинна супроводжатися такими документами:

 «Технічне значення»;

 «Інструкція з експлуатації»;

Зазначені вище документи повинні забезпечувати експлуатацію системи та відповідати діючим стандартам.



		Вимоги до функціональної частини прикладної системи 



Вимоги до інтерфейсу користувача: сучасний стандартизований, інтуїтивно-зрозумілий інтерфейс прийнятний для навчальних систем.



		Порядок контролю й приймання



Результати роботи розглядаються та затверджуються на засідання кафедри ІТ й на засіданнях гірничого факультету. 

По закінченню робіт повинні бути представлені наступні документи:

 навчальна система - мультимедійний посібник з дисципліни «Інформатика та обчислювальна техніка» на тему «Особливості мови програмування С++. Вказівники»;

 документ: «Інструкція з експлуатації»;

 Розділ пояснювальної записки підсумкового курсового проекту дисципліни «Інформатика та обчислювальна техніка».


2 МУЛЬТИМЕДІЙНИЙ ПОСІБНИК З ДИСЦИПЛИНИ «ІНФОРМАТИКА ТА ОБЧИСЛЮВАЛЬНА ТЕХНІКА» НА ТЕМУ «ОСОБЛИВОСТІ МОВИ ПРОГРАМУВАННЯ С++. ВКАЗІВНИКИ»



2.1 Інформаційне забезпечення курсу



2.1.1 Теорія

Даний розділ містить текстову інформацію по предмету «Інформатика та обчислювальна техніка» на тему «Особливості мови програмування С++. Вказівники». А саме: вступ, вказівники в С++, оператор розийменування, вказівники і перетворення типів, вказівники і передача параметрів в функції, арифметичні дії з вказівниками, вказівники і масиви, масиви вказівників на масиви, двовимірні масиви як параметри функції.

C++— універсальна мова програмування високого рівня з підтримкою декількох парадигм програмування: об'єктно-орієнтованої, узагальненої та процедурної. Розроблена Б'ярном Страуструпом в AT&T Bell Laboratories у 1979 році. Базується на мові С. У 1990-х роках С++ стала однією з найуживаніших мов програмування загального призначення.

Переваги мови C++: 

Продуктивність. Швидкість роботи програм на С++ практично не поступається програмам на С, хоча програмісти отримали в свої руки нові можливості і нові засоби.

Масштабованість. На мові C++ розробляють програми для самих різних платформ і систем.

Можливість роботи на низькому рівні з пам'яттю, адресами, портами. 

Можливість створення узагальнених алгоритмів для різних типів даних, їх спеціалізація, і обчислення на етапі компіляції, з використанням шаблонів.

Реалізації С++ тепер є на всіх машинах, починаючи з найскромніших мікроком’ютерів – до найбільших супер-ЕОМ, і практично для всіх операційних систем.

Існують три причини, без яких неможливо написати гарну програму мовою С++ без використання показників.

По-перше, показники дозволяють функціям змінювати свої аргументи.

По-друге, за допомогою показників здійснюється динамічний розподіл пам'яті.

По-третє, показники підвищують ефективність багатьох процедур [2].

Показники - одне із самих потужних й, у той же час, самих небезпечних засобів мови С++. Наприклад, показники, що містять невірні адреси можуть знищити операційну систему комп'ютера. І, що ще гірше, неправильне використання показників породжує помилки, які вкрай важко виявити.

Показник (poіnter) - це змінна, у якій зберігається адреса іншого объета (як правило, іншої змінної).

Наприклад, якщо один змінна містить адреса інший змінної, говорять, що перша змінна посилається на другу

Показник ідентифікує змінну, говорячи не про її ім'я, а про те, де вона перебуває в пам'яті. 

Оголошення показника складається з імені базового типу, символу * й імені змінної [3].



2.1.1.2 Вказівники в С++

Програми на C++ зберігають змінні в пам'яті. Вказівником є адреса пам'яті, яка вказує (або посилається) на певну ділянку. Для зміни параметра усередині функції програма повинна передати адресу параметра (вказівник) у функцію. Далі функція у свою чергу використовує змінну-вказівник для звернення до ділянки пам'яті. Деякі програми використовують вказівники на параметри. Аналогічно цьому, коли програми працюють з символьними рядками і масивами, вони зазвичай використовують вказівники, щоб оперувати елементами масиву. Для простоти (для зменшення коду) багато програм трактують символьний рядок як вказівник і маніпулюють вмістом рядка, використовуючи операції з вказівниками. 

Коли збільшують змінну-вказівник (змінну, яка зберігає адресу), C++ автоматично збільшує адресу на необхідну величину (на 1 байт для char, на 2 байти для int, на 4 байти для float і так далі). 

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



2.1.1.3 Оператор розіменування

Для доступу до об'єкту через вказівник використовується оператор розіменування *, що здійснює так звану непряму адресацію: *p означає «об'єкт, на який вказує p». По суті *p є ссилкою на об'єкт. 

Спроба розіменування нульового вказівника приводить до помилки при виконанні програми, спроба ж розіменування вказівника void*(див. розділ 2.4) викличе помилку на етапі компіляції. 

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

char* s;

*s=’a’; // помилка!

cin>>s; // помилка!

Відзначимо, що в останньому випадку, де виводиться рядок, на який вказує s, розіменування присутнє неявно і відбувається усередині оператора введення з потоку [3].



2.1.1.4 Перетворення типів

Показник одного типу не можна привласнити показнику іншого типу без явного перетворення типів. Виняток становить показник void*(див. розділ 2.4), який трактується як показник на деяку ділянку пам'яті. Він називається родовим показником і може отримувати як значення показник на будь-якого іншого типа без явного перетворення. 



int i;

void* pi=&i;



Явні перетворення типів в більшості випадків є потенційно небезпечними і повинні застосовуватися з крайньою обережністю. Так, в наступному прикладі



double d=*static_cast<double*>pi;



вміст змінної d непередбачувано.

Властивість показників void*(див. розділ 2.4) зберігати дані різнорідних типів використовується при створенні так званих родових (generic) масивів, тобто масивів, що зберігають різнотипні об'єкти. Наприклад:



int i=5;

char c='u';

double d[2]={3,6};

void* generic[]={&i,&c,&d};

cout<<*static_cast<int*>generic[0]<<’ ’

<<*static_cast<char*>generic[1]<<’ ’

<<(static_cast<double*>generic[2])[1];[4].


2.1.1.5 Вказівники і передача параметрів у функції

За допомогою вказівників можна організувати передачу параметрів у функції за допомогою посилання. Наприклад, наступна функція міняє місцями значення, що адресуються вказівниками:



void swap(int* pa, int* pb)

{ int t=*pa; *pa=*pb; *pb=t;}



У функціях стандартної бібліотеки можна зустріти безліч прикладів передачі параметрів з використанням вказівників. Така, наприклад, функція memcpy, призначена для копіювання даних з однієї області пам'яті в іншу. Вона має наступний прототип, оголошений в заголовному файлі <string.h> (або за стандартом 1998 р. в <cstring>):



void *memcpy(void *dest, const void *src, size_t n);



і забезпечує копіювання n байтів даних з src в dest. Параметр src 

оголошений Вказівником на константу, що свідчить про те, що дані, на які він вказує, не можуть бути змінені функцією memcpy. Оскільки як тип фігурує void*, то замість src і dest при виклику функції memcpy можна підставляти вказівник на будь-якого типа. Нарешті, стандартний тип size_t використовується для вказівки того, що дана змінна зберігає розмір і є беззнакове ціле (зазвичай unsigned int або unsigned long).

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



int* f()

{

 int i=5;

 return &i;

}змінна i руйнується після виходу з функції, тому результат роботи програми непередбачуваний.



2.1.1.6 Арифметичні дії над вказівниками

Над вказівниками можна здійснювати ряд арифметичних дій. При цьому передбачається, що якщо вказівник p відноситься до типа T*, то p вказує на елемент деякого масиву типа T. Тоді р+1 є Вказівником на наступний елемент цього масиву, а р-1 - Вказівником на попередній елемент. Аналогічно визначаються вирази р+n, n+p і р-n, а також дії p++, p--, ++p, --p, p+=n, p-=n, де n - ціле число. Поважно відзначити, що арифметичні дії з вказівниками виконуються в одиницях того типа, до якого відноситься вказівник. Тобто р+n, перетворене до цілого типа, містить на sizeof(T)*n більше значення, чим р. 

З рівності p+n==p1 виходить, що p1-p==n. Саме так вводиться оператор різниці двох вказівників: його значенням є ціле, рівне кількості елементів масиву від p до p1. Відзначимо, що це - єдиний випадок в мові, коли результат бінарного оператора з операндами одного типа належить до принципово іншого типу. 

Сума двох вказівників не має сенсу і тому не визначена. Не визначені також арифметичні дії над вказівниками void*, що не типізуються.

Нарешті, всі вказівники, у тому числі і що не типізуються, можна порівнювати, використовуючи операторів відношення >, <, >=, <= ==, != [4].



2.1.1.7 Вказівники і масиви

Вказівники і масиви тісно взаємозв'язані. Ім'я масиву може бути неявно перетворене до константного вказівника на перший елемент цього масиву. Так &a[0] рівноцінно а. Взагалі, вірна формула



&а[n]== a+n

тобто адреса n-того елементу масиву є збільшений на n елементів вказівник на початок масиву. Розийменовуя ліву і праву частини, отримуємо основну формулу, що зв'язує масиви і вказівники:



а[n]== *(a+n)	



Дана формула, не дивлячись на простоту, вимагає декількох пояснень. По-перше, компілятор будь-який запис вигляду а[n] інтерпретує як *(a+n). По-друге, формула (*) пояснює, чому в C++ масиви індексуються з нуля і чому немає контролю виходу за кордони діапазону. Нарешті, використовуючи (*), ми можемо записати наступний ланцюжок рівності:



а[n]== *(a+n) == *(n+a) == n[a]



Таким чином, елемент масиву а з індексом 2 можна позначити не лише як а, але і як 2[a] 

Із зв'язку масивів і вказівників витікає спосіб передачі масивів у функції - за допомогою вказівника на перший елемент[5].



2.1.1.8 Масиви вказівників на масиви

Двовимірні масиви можна створювати також за допомогою масивів вказівників, ініціалізувавши їх елементи адресами одновимірних масивів. Наприклад:



int b0[4]={1,2,3,4}, 

b1[4]={5,6,7,8}, 

b2[4]={9,0,1,2};

int* а[3]={b0,b1,b2};

В цьому випадку вираження а[1][2] розшифровується як *(а[1]+2), що у свою чергу є *(b1+2), або b1[2]. Аналогічного ефекту можна добитися, ініціалізувавши масив а динамічними одновимірними масивами:

int* а[3];

for (int i=0; i<3; i++)

 а[i]=new int[4];

Сам масив вказівників також можна створити в динамічній пам'яті. Він контролюватиметься покажчиком на типа int*, тобто змінній типа int**. В результаті ми отримаємо двовимірний динамічний масив, розмірності якого можна задавати при виділенні пам'яті в процесі роботи програми:

int **a,n,m;

n=3; m=4;

a=new int*[n];

for (int i=0; i<n; i++)

 а[i]=new int[m];

При звільненні пам'яті, займаної таким масивом, треба діяти в зворотному порядку, спочатку визволяючи рядки, а потім - сам одновимірний масив вказівників.

for (int i=0; i<n; i++)

 delete[] а[i];

delete[] а;

До елементів нашого двовимірного динамічного масиву можна звертатися звичайним способом: а[1][2]. 

Масив вказівників на масиви. Розподіл пам'яті.

По формулі (*) а[1][2]==*(*(a+1)+2). Але, на відміну від звичайного двовимірного масиву, а є покажчиком не на int[4], а на int*. Тому a+1 вказує на наступний елемент типа int* в одновимірному масиві а, тобто на а[1]. Нарешті, оскільки а[1] має типа int*, то а[1]+2 вказує на елемент а[1][2].

Відзначимо, що, на відміну від звичайного двовимірного масиву, рядки нашого динамічного масиву не обов'язково розташовуються в пам'яті послідовно. Саме завдяки цьому структура двовимірного динамічного масиву є надзвичайно гнучкою. Зокрема, для перестановки його рядків досить поміняти місцями покажчики в одновимірному масиві:

int* v=a[1]; а[1]=a[2]; а[2]=v;

Двовимірний динамічний масив дозволяє також зберігати рядки різної довжини. Наприклад, для створення нижнетреугольной матриці можна використовувати наступний фрагмент:

a=new int*[n];

for (int i=0; i<n; i++)

 а[i]=new int[i+1];

Одновимірний масив вказівників може також зберігати C-строки, відводячи під них стільки місця, скільки вони займають. Ініціалізація такого масиву при введенні рядків із стандартного потоку cin приводиться нижче:

char* s[10];

char buf[80];

for (int i=0; i<10; i++)

{

 cin.getline(buf,80);

 s[i]=new char(strlen(buf)+1);

 strcpy(s[i],buf);

}

Відзначимо, що масив C-строк також відноситься до двовимірних динамічних масивів з рядками змінної довжини. Зокрема, в алгоритмі сортування при перестановці рядків потрібно міняти місцями лише вказівники [6].



2.1.1.9 Двовимірні масиви як параметри функції

	Розглянемо простий випадок:

	void print(int а[3][4]) 

	{

	for (int i=0; i<3; i++) 

	{

	for (int j=0; j<4; j++)

	cout<<a[i][j];

	cout<<endl;

	 }

	}

	int b[3][4];

	...

	print(b);

Подібна функція працює лише для масивів 3 4. Згадуючи, що при передачі у функцію інформація про розмір одновимірного масиву втрачається, ми можемо модифікувати попередній приклад для передачі масивів, що мають змінний перший розмір:

void print(int a[][4], int n) 

{

 for (int i=0; i<n; i++) 

...

}

int b[7][4];

...

print(b);

Відзначимо, що інформація про другий розмір двовимірного масиву не втрачається і, більш того, істотно необхідна для інтерпретації усередині функції запису а[i]: для обчислення значення вираження a+i до вмісту вічка а у внутрішній виставі додається величина i*sizeof(int[4]). Саме з цієї причини жодного способу передавати у функції звичайні масиви із змінною другою розмірністю не існує.

При передачі у функцію динамічного двовимірного масиву подібних проблем не виникає:

void print_dyn(int** а, int n, int m) 

{

 for (int i=0; i<n; i++) 

 {

for (int j=0; j<m; j++)

 cout<<a[i][j];

cout<<endl;

 }

}

int** b=new int*[5];

for (int i=0; i<5; i++)

 b[i]=new int[6];

print_dyn(b,5,6);



Тут при трактуванні запису а[i][j] усередині функції інформація про другий розмір масиву не використовується, що дозволяє передавати у функцію print_dyn динамічні масиви довільних розмірів. Відзначимо, що передавати звичайні двовимірні масиви у функцію print_dyn не можна [7].



2.1.2 Приклади



2.1.2.1 Приклад 1

Програма використовує вказівник на символьний рядок усередині функції show_string для виведення змісту рядка по одному символу за один раз: 

#include <iostream.h> 

void show_string(char *string) 

{ 

while (*string != '\0') 

{ 

 cout << *string; 

 string++; 

} 

} 

void main(void) 

{ 

show_string( "Учимся программировать на языке C++!"); 

} 

Реакція ЕОМ:

Учимся программировать на языке C++!

Умова while (*string != '\0') перевіряє, чи немає поточний символ, що вказується за допомогою вказівника string, символом NULL, який визначає останній символ рядка. 

Якщо символ не NULL, цикл виводить поточний символ за допомогою cout. Потім оператор string++; збільшує вказівник siring таким чином, що він вказує на наступний символ рядка. 

Коли вказівник string вказує на символ NULL, функція вже вивела рядок і цикл завершується.

Наприклад, рядок, переданий у функцію, знаходиться в пам'яті комп'ютера за адресою 1000. Кожного разу, коли функція збільшує вказівник string, він вказує на наступний символ (адреса 1001,1002, 1003 і т. д.)



2.1.2.2 Приклад 2

Программа PTR_LEN.CPP використовує вказівник на строку у функції string_length для визначення кількості символів в рядку: 

#include <iostream.h> 

int string_length(char *string) 

{ 

int length = 0; 

while (*string != '\0') 

{ 

 length++; 

 string++; 

} 

return(length); 

} 

void main(void) 

{ 

char title[] = "Учимся программировать на языке C++"; 

cout << title << " содержит " << string_length(title) << " символов"; 

} 

Реакція ЕОМ:

Учимся программировать на языке C++ содержит 35 символов

Функція string_length сканує символи рядка до тих пір, поки не зустріне символ NULL. 

Збільшення вказівника на символьний рядок 

Коли програма передає масив у функцію, C++ передає адресу пам'яті першого елементу цього масиву. Використовуючи змінну-вказівник, функція може переміщатися по вмісту масиву, просто збільшуючи значення вказівника. 

Наприклад, передбачимо, що програма передає у функцію символьний рядок "Привіт". Усередині функції змінна-вказівник спочатку вказує на ділянку пам'яті, яка містить букву 'П'. 

Коли функція збільшує вказівник, то він далі вказує на ділянку пам'яті, яка містить букву 'р'. У міру збільшення функцією значення вказівника, він по черзі вказує на кожну букву в рядку і нарешті вказує на символ NULL.

2.1.2.3 Приклад 3

Наступна функція string_uppercase використовує вказівники для перетворення символів рядка в символи верхнього регистру: 

char *string_uppercase(char* string) 

{ 

char *starting_address = string; // адрес string[0]; 

while (*string) 

{ 

 if ((*string >= 'а') && (*string <= 'я')) *string = *string - 'a' + 'A'; 

 string++; 

} 

return(starting_address); 

} 

Ця функція зберігає і повертає початкову адресу рядка, це дозволяє програмам використовувати функцію таким чином: 

cout << Btring_uppercase("Привет, мир!") << endl; 

Реакція ЕОМ:

ПРИВЕТ, МИР!



2.1.2.4 Приклад 4

Не дивлячись на те що вказівники широко використовуються з символьними рядками, ви можете використовувати вказівники з масивами інших типів. Наприклад, наступна програма PTRFLOAT.CPP використовує вказівник на масив типа float для виведення значень з плаваючою крапкою: 

#include <iostream.h> 

void show_float(float *array, int number_of_elements) 

{ 

int i; 

for (i = 0; i < number_of_elements; i++) cout << *array++ << endl; 

} 

void main(void) 

{ 

float values[5] = {1.1, 2.2, 3.3, 4.4, 5.5); 

show_float(values, 5); 

} 

Реакція ЕОМ:

1.1, 2.2, 3.3, 4.4, 5.5

усередині функції show_float цикл for використовує значення, що вказується за допомогою вказівника array, а потім збільшує цей вказівник до наступного значення. В даному випадку програма повинна передати параметр, який задає кількість елементів масиву, оскільки на відміну від символьних рядків масиви типа float (або int, long і т. д.) не використовують символ NULL для визначення останнього елементу.



2.1.2.5 Приклад 5

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

В данном примере реализована функция ssort, сортирующая методом пузырька массив данных произвольного типа. Количество элементов задается параметром n, размер каждого элемента – параметром sz, функция сравнения – параметром cmp. Поскольку типы элементов заранее неизвестны, указатель на первый элемент передается как void*. Внутри функции ssort он преобразуется к типу char* для возможности работы с адресной арифметикой. Функция memswap меняет местами две области памяти размера sz. В функцию сравнения передаются два указателя void* на сравниваемые элементы массива. Каждая конкретная функция сравнения вначале преобразует эти указатели к нужному типу и затем осуществляет собственно сравнение элементов. В программе, демонстрирующей варианты применения функция ssort, реализована сортировка целых чисел (по возрастанию и убыванию), текстовых строк, а также структур (по нескольким полям).



typedef int (*CMP)(const void*,const void*);

inline void swap(char& a, char& b) 

{

 char temp=a;

 a=b;

 b=temp;

}

void memswap(char* a, char* b, size_t sz) {

 for (int k=0; k<sz; k++)

swap(*a++,*b++);

}

void ssort(void* base, size_t n, size_t sz, CMP cmp)

{

 for (int i=1; i<n; i++)

for (int j=n-1; j>=i; j--)

{

 char* bj=(char*)base + j*sz;

 if (cmp(bj,bj-sz))

memswap(bj,bj-sz,sz);}}



struct database 

{

 char* name;

 int age;

};

int less_int(const void* p,const void* q)

{ return *(int*)p<*(int*)q; }

int greater_int(const void* p,const void* q)

{ return *(int*)p>*(int*)q; }

int less_str(const void* p,const void* q)

{ return strcmp(*(char**)p,*(char**)q)<0; }

int less_age(const void* p,const void* q)

{ return ((database*)p)->age<((database*)q)->age; }

int less_name(const void* p,const void* q)

{ return strcmp(((database*)p)->name,

((database*)q)->name)<0; }

void print (int* mas, int n) 

{

 for (int i=0; i<n; i++)

cout<<mas[i]<<" ";



 cout<<endl;

}

void print (char** mas, int n) 

{

 for (int i=0; i<n; i++)

cout<<mas[i]<<" ";

 cout<<endl;}

void print (database* mas, int n) 

{

 for (int i=0; i<n; i++)

cout<<mas[i].name<<" "<<mas[i].age<<endl;

}

const n=10, m=5;

int mas[n]={1,5,2,6,3,7,12,-1,6,-3};

char* strmas[n]={"adg","dfgj","jk","asg","gjh",

 "sdh","hj","sd","kfj","sdadgh"};

database d[m] ={{"Petrov",32},{"Ivanov",24},

{"Kozlov",21},{"Oslov",20},

{"Popov",18}};



void main()

{

 ssort(mas,n,sizeof(int),less_int);

 print(mas,n);

 ssort(mas,n,sizeof(int),greater_int);

 print(mas,n);

 ssort(strmas,n,sizeof(char*),less_str);

 print(strmas,n);

 cout<<endl;

 ssort(d,m,sizeof(database),less_age);

 print(d,m);

 cout<<endl;

 ssort(d,m,sizeof(database),less_name);

 print(d,m);

}

Реакція ЕОМ:

-3 -1 1 2 3 5 6 6 7 12

12 7 6 6 5 3 2 1 -1 -3

adg asg dfgj gjh hj jk kfj sd sdadgh sdh

Popov 18

Oslov 20

Kozlov 21

Ivanov 24

Petrov 32

Ivanov 24

Kozlov 21

Oslov 20

Petrov 32

Popov 18 [7].



2.1.3 Практикум



2.1.3.1 Лабораторна робота

Мета роботи: зрозуміти концепцію вказівників

вивчити застосування вказівників для передачі аргументів у виклику функції по посиланню

зрозуміти зв'язок між вказівниками, масивами та рядками

навчитися використати та обновляти масиви рядків

	Завдання до лабораторної роботи

	1. Ознайомитися з теоретичним матеріалом роботи.

	2. Перевірити свою теоретичну підготовку за контрольними питаннями.

	3. Скласти програму мовою С++ розв’язання завдання з використанням вказівників. До звіту включити текст програми, блок-схему алгоритму, реакцію ЕОМ.

	4. Зробити висновки.

 Варіанти завдань

1. Розробити програму перемножування двох матриць  та  розмірності . Обидві матриці розміщаються в оперативній пам'яті динамічно, а значення  вводиться по запиті із клавіатури. 

2. Розробити програму сортування (упорядочивания) матриці розмірності  так, щоб елементи в кожному рядку відсортованої матриці розташовувалися по зростанню та жоден елемент в -му рядку не був більше будь-якого елемента в -му рядку. Сортування виконувати над одномірним масивом з  елементів, що "накладається" на вихідну матрицю.

3. Розробити програму, що у матриці розмірності  міняє місцями рядок, що містить елемент із найбільшим значенням, зі стовпцем, що містить елемент із найменшим значенням. Матриця повинна розмішатися в оперативній пам'яті динамічно, а значення  вводитися по запиті із клавіатури.

4.Розробити програму обчислення значення багаточлена  у цілочисленній крапці . При цьому значення коефіцієнтів  уводяться із клавіатури та динамічно розміщаються в пам'яті або у формі масиву, або у формі стека.

5. Розробити програму формування стека, що містить цілі числа, і упорядочивания по зростанню елементів у цьому стеці. У процесі упорядочивания елементи стека переміщатися не повинні.

6. Розробити програму формування стека, куди міститься послідовність символів у вигляді окремих слів, що вводять із клавіатури. Кожне слово, поміщене в стек, варто вивести на екран термінала; при цьому порядок висновку символів у кожнім слові повинен бути зворотним у порівнянні з послідовністю їхнього уведення.

7. Розробити програму формування й виводу на печатку двунаправленного списку. Двунаправленный список є динамічною структурою даних і відрізняється від односпрямованого списку тим, що каждый його елемент зберігає не одне посилання (покажчик на наступний елемент), а два. З них один вказує на попередній елемент, а інший - на наступний елемент списку.

8. Розробити програму формування стека, що містить цілі позитивні числа, і його перетворення шляхом видалення з нього всіх парних чисел (у процесі перетворення стека його елементи в оперативній пам'яті переміщатися не повинні).

9. Розробити програму, що формує динамічну структуру даних для зберігання генеалогічного дерева. Кожна вершина дерева повинна містити наступну інформацію: ім'я та рік народження.

10. Розробити програму обчислення суми елементів масиву, що складає зцілих чисел. Масив повинен бути розміщений у пам'яті динамічно, а значеннявводитися із клавіатури.

Контрольні питання

Дайте визначення вказівника?

Перелічите причини без яких неможливо написати гарну програму на С++ без вказівників?

Приведіть загальну форму оголошення вказівника?

Перелічите оператори для роботи з вказівниками?

Що таке адресна арифметика?

Приведіть приклад операції порівняння вказівників?

Які засоби в С++ існують для звертання до елементів масиву?

Що таке масиви вказівників. Приведіть приклад.

Що таке непряма адресація?

Які проблеми виникають при роботі з вказівниками?



2.1.3.2 Завдання для самостійної роботи 

Масиви

	Даний масив цілих. Оформити функцію count_if, що обчислює кількість елементів в масиві, що задовольняють даній умові, передаваній як параметр (умова має бути функцією, що приймає параметр типа int і що повертає значення логічного типа).

	 Даний масив цілих. Заповнити його, передаючи як параметр функцію, задаючу алгоритм генерації наступного значення, вигляду int f(). Для генерації дана функція може запам'ятовувати значення, що згенерували на попередньому кроці, або в глобальних змінних, або в статичних локальних змінних.

	 Даний масив цілих, відсортований за збільшенням. Видалити з нього дублікати.

	 Даний масив цілих. Скласти функцію remove_if, що видаляє з нього всі елементи, що задовольняють умові, передаваній як параметр.

	 Даний масив чисел і число а. Переставити елементи, менші а, в початок, міняючи їх місцями з попередніми. Порядок елементів, менших а, а також порядок елементів, великих а, не міняти.

	 Даний масив цілих. Знайти в нім пару чисел а і b з мінімальним значенням f(а,b), де f передається як параметр.

	 Даний масив цілих. Скласти функцію accumulate, що застосовує функцію f(s,a), передавану як параметр, до кожного елементу а масиву і що записує результат в змінну s. З її допомогою знайти мінімальний елемент в масиві, суму і твір елементів масиву.

	 Даний масив цілих. Сформувати по ньому масив, що містить довжини всіх серій (підряд однакових елементів, що йдуть). Одиночні елементи вважати серіями довжини 1.

	 Даний масив цілих. З кожної серії видалити один елемент.

	 Даний масив цілих. Видалити всі серії, довжина яких менше до.

	 Злити n масивів цілих, впорядкованих за збільшенням, в один, впорядкований за збільшенням. 

	Вказівка 1. Для спрощення алгоритму слід записати в кінець кожного масиву бар'єр - найбільше число відповідного типа. Бар'єр, зокрема, визначатиме, де закінчуються дані в масиві.

	Вказівка 2. Скласти функцію, в яку передати динамічний двовимірний масив (масив одновимірних масивів чисел) і число n одновимірних масивів. Рекомендується в зовнішньому циклі завести лічильник одновимірних масивів, в яких досягнутий бар'єр. В той момент, коли він стає рівним n, злиття закінчене. Інший варіант: при записі в результуючий масив перевіряти значення елементу; якщо воно дорівнює значенню бар'єру, то злиття закінчене.

	Даний масив чисел. Оформити функцію partition, що перетягує його елементи, що задовольняють даній умові, в початок, міняючи їх місцями з попередніми. Порядок елементів, що задовольняють умові, не міняти. Умову передавати як параметр-функцію. Наприклад, числовий масив 
6 2 9 4 7 3 1 8 5 після застосування до нього функції partition з умовою «елемент > 5» виглядатиме так: 6 9 7 8 2 4 3 1 5.

	 Даний масив чисел. По ньому сконструювати масив сум сусідніх елементів, по ньому - ще один масив сум і так далі - до масиву з одного елементу. Результат повинен зберігатися в масиві вказівників на одновимірні масиви.

Рядки

	Вводиться рядок слів, розділених пропусками (можливі зайві пропуски на початку і в кінці рядка і між словами). Циклічно зрушити всі слова вліво на до слів, видаливши при цьому зайві пропуски (до свідомо менше кількості слів).

	 Вводиться рядок слів, розділених пропусками (можливі зайві пропуски на початку і в кінці рядка і між словами). Циклічно зрушити всі слова управо на до слів, видаливши при цьому зайві пропуски (до свідомо менше кількості слів). 

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

	 Вводиться рядок слів, розділених пропусками (можливі зайві пропуски на початку, в кінці рядка і між словами). Сформувати новий рядок, в якому містяться всі слова-перевертыши (палиндромы) вихідного рядка. Алгоритм перегляду вихідного рядка має бути півторапрохідним (півпроходу на перевірку того, чи є слово перевертышем).

	 Вводиться рядок слів, розділених пропусками (можливі зайві пропуски на початку і в кінці рядка і між словами), а також цілочисельний масив перестановок слів. По даному рядку і масиву перестановок сформувати новий рядок, видаливши при цьому зайві пропуски. Наприклад, якщо заданий рядок ” aabbb з dd eeee” і масивом перестановок 5 2 4 3 1, то підсумковий рядок повинен мати вигляд: ”eeee bbb dd з aa”.

	Вказівка: спочатку сформувати масив вказівників на початки слів.

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

	Вказівка: для порівняння рядків можна скористатися бібліотечною функцією strcmp(s,s1).

	Вводиться рядок слів, розділених пропусками (можливі зайві пропуски на початку, в кінці рядка і між словами). Сформувати рядок, в якому слова з вихідного рядка впорядковані по довжині (а при рівній довжині порядок їх дотримання залишається таким же, як і у вихідному рядку), видаливши при цьому зайві пропуски.

	 Вводиться рядок слів, розділених пропусками (можливі зайві пропуски на початку, в кінці рядка і між словами). Сформувати рядок, в якому слова з вихідного рядка впорядковані по кількості голосних (а при рівній кількості голосних порядок їх дотримання залишається таким же, як і у вихідному рядку), видаливши при цьому зайві пропуски.

	 Вводиться рядок слів, розділених пропусками (можливі зайві пропуски на початку і в кінці рядка і між словами). Сформувати рядок, в якому видалені зайві пропуски і слова, що повторювалися раніше. Порядок слів не міняти.

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

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

	 Вводиться рядок. Замінити в ній всі цифри їх словесними позначеннями: ”0” на ”zero”, ”1” на ”one”, ”2” на ”two” і так далі

	 Видалити з рядка s кожне входження підрядка s1.

	 Замінити в рядку s кожне входження підрядка s1 на підрядок s2.

	 Дано два рядки. Знайти індекси (їх може бути декілька) і довжину щонайдовшої однакової ділянки в обох масивах. Наприклад, в рядках “abracadabra” і “sobrat” щонайдовшою однаковою ділянкою буде “bra”.

	 Даний масив рядків. Сформувати по ньому масив підрядків, що задовольняють умові, передаваній як параметр (умова має бути функцією, що приймає параметр char* і що повертає значення логічного типа).

	 Реалізувати функцію

	char *mystrstr(const char *p, const char *q); 

	що повертає перше входження підрядка q в рядок p (або 0, якщо підрядок не знайдений).

	Реалізувати функцію

	char *mystrpbrk(const char *p, const char *q); 

	що повертає вказівник на перше входження в рядок p якого-небудь символу з рядка q (або 0, якщо збігів не виявлено).

	Реалізувати функцію

	size_t mystrspn(const char *p, const char *q); 

	що повертає число початкових символів в рядку p, які не збігаються ні з одним з символів з рядка q.

	Реалізувати функцію

	size_t mystrcspn(const char *p, const char *q); 

	що повертає число початкових символів в рядку p, які збігаються з одним з символів з рядка q.

	Реалізувати функцію

	char* mystrtok(const char *p, const char *q, char* t);

	проникну символи роздільників, що зберігаються в рядку q, що прочитує першу лексему в рядку p в рядок t (до наступного символу роздільника або до кінця рядка) і що повертає вказівник на перший непроглянутий символ. 



2.1.4 Глосарій

Додаток.



2.1.5 Тестування

Даний розділ містить 15 тестів різного типу.

1. Мова С++ підтримує вказівники?

А) так

В) ні

(вірна відовідь а)

2. Як називається змінна, що зберігає адресу деякого об’єкту?

А) Лічильник

В) аргумент

С) вказівник

(вірна відповідь С)

3. Вказівники, що ініціалізовані значенням 0, називаються

(вірна відповідь нульовими)

5. Вказівники можно порівнювати, використовуючи оператори

А) >

B) <

C) ==

D) */

Вірна відповідь А,В, С

6. Розташуйте кола на программному коді у слідуючому порядку: 1- пошук елементу у діапазоні, 2 – копіювання масивів, 3 – складання двох векторів.

Пример 1. 

int a[10],b[10],c[10];

for (int *p=a,*q=b,*r=c; p<a+10; )

 *r++=*p+++*q++;

Пример 2. 

void copy(const int* first, const int* last, int* out)

{

 while (first!=last)

*out++=*first++;

}

Пример 3. 

bool find(const int* first, const int* last, int v)

{

 while (first!=last)

if (*first++==v) return true;

 return false;

}

Вірна відповідь: 1- пример1, 2-пример 2, 3 – пример 3

7. Виберіть картинку, яка відображає яким чином описується вказівник на об’єкт, якщо той має тип Т.

Перший малюнок: T $ p;

Другий малюнок:T**p;

Третій малюнок:T*p;

Вірна відповідь треті малюнок

8. Виберіть рядок програмного коду, який задає масив вказівників

Перший рядок – int * b[10]

Другий рядок – int (*paa) [10]=$a;

Вірна відповідь – перший рядок.

9. Виберіть функції, що дозволяють скопіювати один масив в інший

А) Mark

B) copy

C) memcpy

D) insert

Вірна відповідь B,C

10. С++ мова низького рівня.

Так

Ні

Вірна відповідь «ні»

11. Безліч елементів між двома покажчиками first і last на елементи деякого масиву називають

Правильна відповідь – діапазон

12. double *p1,p2,*p3; Яка з цих змінних не є вказівником?

А) Усі змінні є вказівниками

В) р1

С) р2

Вірна відповідь С

12. Виберіть «батька» мови С++

Вірна відповідь – картинка праворуч (Б’ярн Страуструп)

13. Виберіть програмний код, який містить помилки

Перший малюнок: 

int b0[4]={1,2,3,4}, 

b1[4]={5,6,7,8}, 

b2[4]={9,0,1,2};

int* a[3]={b0,b1,b2};



Другий малюнок:

int **a,n,m;

n=3; m=4;

a=new int*[n];

for (int i=0; i<n; i++)

 a[i]=new int[m];



Третій малюнок: 

a=new int*

for (int i=0; i<n; i++)

 a[i]=new int[i+1];



Вірна відповідь третій малюнок.

14. Масив, розмір якого можно задавати під час виконування програми називається

Відповідь: динамічний

15. У якому році з’явилась мова С++?

А)1980

В)1990

С) 1985


3. ІНТЕРФЕЙС ПОСІБНИКА

	

	3.1 Запуск

Після запуску мультимедійного посібника відкривається титульний кадр на котрому зазначена дисципліна та тема курсового проекту. За одну секунду ми потрапляємо на кадр головного меню.

	

	3.2 Схема курсу

	

	Схема мультимедійного посібника (рис. 3.2.1) складається з таких основних частин: «Начало» (рис. 3.2.2), «Главное меню» (рис. 3.2.3), «Пункты главного меню» (рис. 3.2.4), які в свою чергу містять підпункти.

	

	

	Рисунок 3.2.1 – Схема курсу

	

	

	Рисунок 3.2.2 – «Начало»

	

	

	Рисунок 3.2.3 – «Главное меню»

	

	Рисунок 3.2.4 – «Пункты главного меню»

	

	Розділ мультимедійного посібника «Пункты главного меню» містить у собі такі підрозділи: «Меню обучение»(рис. 3.2.5), «Тестирование» (рис.3.2.6), «Помощ» (3.2.7), «Об авторе» (рис. 3.2.8), «Глосарий» 

	

	

	Рисунок 3.2.5 – «Меню обучение»

	

	

	Рисунок 3.2.6 – «Тестирование»

	

	

	Рисунок 3.2.7 – «Помощ»

	

	

	Рисунок 3.2.8 – «Об авторе»

	Розділ «Меню обучения» містить у собі підрозділи: «Пункты меню обучения» (рис. 3.2.9), «Обучение»(рис.3.2.10).

	

	

	Рисунок 3.2.9 – «Пункты меню обучения»

	

	

	Рисунок 3.2.10 – «Обучение»

	

Початок



Стартова сторінка

Гл. Меню



Тестування



Пошук



Допомога

Навчання



Теорія



Приклади



Практикум



Вихід



Глосарій 

	Рисунок 3.2.11 – Блок-схема курсу

	
3.3 Організація основного меню



Головне меню програми складається з 7-ми кнопок: «Навчання», «Тестування», «Пошук», «Допомога», «О авторові», «Глосарій», «Вихід», по яких і проводиться навігація (Рисунок 3.3.1).





Рисунок 3.3.1 – Головне меню



3.4. Реалізація режиму навігації



При натисканні по кнопці “Навчання” здійснюється перехід на однойменний розділ. Цей розділ містить в собі підрозділи: «Теорія», «Приклади», «Практикум» (рис. 3.4.1).





Рисунок 3.4.1 – Роздів «Навчання»



Розділ «Пошук» призначений для пошуку слова або фрази внавчальній системі. Для того, щоб знайти необхідне слово або фразу, потрібно, натискувати на кнопку «Пошук», а потім в полі «Слово\ Фраза» ввести ключове слово і натискувати на кнопку «Пошук». Після того, як пошукова система проведе пошук, необхідно в полі «Сторінка» виділити один із знайдених розділів і натискувати на кнопку «Перейти» для переходу в розділ із знайденим ключовим словом (Рисунок 3.4.2).





Рисунок 3.4.2 – Розділ « Пошук» 



При натисненні на кнопку “ О авторі” здійснюється перехід на однойменний розділ, в якому міститься інформація і фотографії розробника даного програмного продукту (Рисунок 3.4.3).





Рисунок 3.4.3 – Розділ «Об авторі»



При натисненні на кнопку “Глосарій” здійснюється перехід на однойменний розділ, в якому міститься глосарій – основні визначення курсу (Рисунок 3.4.4).




	Рисунок 3.4.4 – Глосарій



При натисненні на кнопку “Тестування” здійснюється перехід на однойменний розділ, який містить 15 тестів по темі «Особливості мови програмування С++. Вказівники» (Рисунок 3.4.5).





Рисунок 3.4.5 – Розділ «Тестування»



3.5 Реалізація теоретичної частини мультимедійного посібника



Підрозділ «Теорія» містить в собі теоретичну інформацію про особливості мови програмування С++, вказівники. Для того, щоб вийти з даного розділу необхідно натискувати на кнопку «Гл. Меню», щоб повернутися в розділ «Навчання» - натискувати кнопку «Назад» (Рисунок 3.5.1).



Рисунок 3.5.1 – Розділ «Теорія»

	

	Розділ 3.5.2 – Розділ «Приклади»



У розділі приклади є можливість вивчити готову програму з використанням вказівників. Приводиться повний текст програми, а также детальний її опис.



3.6 Реалізація практичної частини мультимедійного посібника



	

	Рисунок 3.6.1 – Розділ «Практикум»



У розділі «Практикум» приводяться умови завдання для виконання лабораторної роботи та завдання для самостійної роботи.



	

	Рисунок 3.6.2 – Розділ «Тестування»

	Розділ «Тестування» призначений для виконання контролю, після закінчення якого виводяться результати, відсоток правильних відповідей, а також дата проходження тесту (рис 3.6.3).

	

	

	Рисунок 3.6.3 – Виведення результату тестування

	

	3.7 Інструкція з експлуатації



При натисненні на кнопку “Допомога”, яка знаходиться на головному меню курсу здійснюється перехід на однойменний розділ, в якому міститься допомога при роботі з посібникомм(Рисунок 3.7.1). Допомога посібника містить у собі інструкцію експлуатації даного мультимедійного посібника.





Рисунок 3.7.1 - Допомога

	
ВИСНОВКИ



Результатом даного підсумкового курсового проекту є розробка мультимедійного навчального посібника по дисципліні «Інформатика та обчислювальна техніка» на тему «Особливості мови програмування С++. Вказівники» В процесі розробки програмного продукту виконані вимоги до функціональних характеристик, умови експлуатації і вимоги до операційної і програмної сумісності. 

Мультимедійний посібник може використовуватися для навчання користувачів і надає ряд можливостей: різні форми представлення інформації; підсистема тестування; можливість адаптації курсу до індивідуальних особливостей користувачів; надання користувачам права управляти розміром і черговістю видачі порцій учбового матеріалу; можливість довільного вибору місця і часу для відробітку учбового матеріалу; забезпечення можливості вибору користувачем індивідуального маршруту проходження учбового курсу; підсистема діагностики, що забезпечує збір і обробку даних про роботу користувача.

При розробці даного мультимедійного посібника я зіткнувся з такими труднощами як збір необхідного теоретичного матеріалу і розробкою завдань для самостійної роботи користувача, які повинні систематизувати та закріпити знання отриманих у результаті вивчення теоретичного матеріалу. В ході розробки мультимедійного посібника ці завдання були виконані у повному обсязі, також була розроблена система тестування. Вона дозволяє користувачеві перевірити рівень засвоєння знань.

Приблизний час роботи користувача з мультимедійним посібником від 6 до 10 годин і залежить від рівня його підготовки.

Детальний опис усіх файлів на диску представлений у Таблиці1 «Опис файлів на диску»


Таблиця1 «Опис файлів на диску»

Ім’я файлу

Призначення

Об’єм,кб

Posobie.a7p

Запуская мультимедійний посібник для просмотру, редагування

2271

RTFObj.u32

Містить інформацію rtf об’єктів, які використовуються 

251

start.wav

Звук після запуску мультимедійного посібника

18

click.wav

Звук при натисканні на кнопку

2,15

Вступ.rtf

Містить текстову інформацію теоретичного розділу «вступ»

18

Перетворення типів.rtf

Містить текстову інформацію теоретичного розділу «перетворення типів»

12

Вказівники і передача параметрів у функції.rtf

Містить текстову інформацію теоретичного розділу «Вказівники і передача параметрів у функції»

15

Арифметичні дії з вказівниками.rtf

Містить текстову інформацію теоретичного розділу Арифметичні дії з вказівниками

16

Вказівники і масиви.rtf

Містить текстову інформацію теоретичного розділу «Вказівники і масиви»

9,6

Масиви вказівників на масиви.rtf

Містить текстову інформацію теоретичного розділу «Масиви вказівників на масиви»

94

Приклад1.rtf

Містить текстову інформацію теоретичного розділу «Приклад1»

10

Приклад2.rtf

Містить текстову інформацію теоретичного розділу «Приклад2»

11

Приклад3.rtf

Містить текстову інформацію теоретичного розділу «Приклад3»

8

Приклад4.rtf

Містить текстову інформацію теоретичного розділу «Приклад4»

10

лаб.rtf

Містить текстову інформацію лабораторної роботи

198

1.jpg

Картинка, яка використовується тестовим питанням №5

18

2.jpg

Картинка, яка використовується тестовим питанням №6

4

3.jpg

Картинка, яка використовується тестовим питанням №7

8

4.jpg

Картинка, яка використовується тестовим питанням №8

40



Загальний об’єм файлів на диску 3,016 мб.

			
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ

			

		http://ru.wikipedia.org

		Б. Страуструп. Язык программирования C++. Третье издание. М. Бином. 1999.

		С. Липпман, Ж. Лажойе. Язык программирования C++. Вводный курс. Третье издание. М. ДМК. 2001.

		М.Уэйт, С.Прата, Д.Мартин Язык С++: Пер с англ.-М.: Мир, 1988.-463 с.,ил.

		Уинер Р. Язык Турбо С++: Пер с англ.-М.: Мир, 1991.-384 с.,ил.

		Берри Р., Микинз Б. Язык С++: введение для программистов: Пер. с англ.-М.:Финансы и статистика, 1988.-с.,ил.

		TURBO C++. Borland International. Inc. 1990.

		Гультяев, А. К. Macromedia AUTHORWARE 6.0 Разработка мультимедийных учебных курсов / Гультяев, А. К. – СПб.: Учитель и ученик: КОРОНА принт, 2002. – 400 с. 

		http://www.adobe.com/





1