Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Програмирование.docx
Скачиваний:
2
Добавлен:
17.09.2019
Размер:
116.82 Кб
Скачать

Програмування: масиви та рядки

1. Одновимірні масиви

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

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

Масив – це змінна, утворена послідовністю змінних, причому:

усі вони (компоненти, або елементи масиву) мають той самий тип;

кожний компонент має свій номер у послідовності (індекс) і відрізняється ним від інших елементів(ідентифікується);

множина індексів (індексова множина) скінченна й зафіксована в означенні масиву та в процесі виконання програми не змінюється;

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

Кількість елементів індексової множини називається довжиною масиву.

Подивимося на масив із точки зору математики. Нехай компоненти масиву мають тип T, а індекси – тип I.Значенням змінної-масиву є послідовність значень типу T, занумерованих значеннями типу I. Множина всіх таких функцій утворює носій для типу, який у мові Паскаль означається виразом вигляду

array [I ] of T.

Наприклад, масив, у якому треба зберігати коефіцієнти полінома, міг би мати тип array[0 101]of real. У такому масиві 102 компоненти дійсного типу із номерами від 0 до 101. Або масив, у якому треба зберігати кількості символів, прочитаних десь, міг би мати тип array [ char ] of integer. У ньому 256 цілих змінних, а їх номерами є символи.

Типом компонентів може бути довільний тип, окрім файлів. Типом індексів I – будь-який

перелічуваний тип. Щоправда, система Бор ланд-Паскаль не дозволяє вказувати типи integer та word, а тим паче тип longint, як типи індексів. Там занадто багато елементів. Але це не страшно, оскільки система дозволяє створювати масиви навіть із ще більшою кількістю елементів.

Якщо тип індексів означається виразом у дужках [ ] як діапазон, то, зрозуміло, там пишуться дві сталі, і ніяких змінних там не може бути.

В означенні масивів як змінних немає ніяких особливостей. Наприклад, ми можемо написати як

type ART=array[0 101]of real; var A : ART;

так і

var A : array[0 101]of real;

В обох випадках змінна A складається зі 102 дійсних змінних. Вони ідентифікуються виразами A[0], A[1], … ,A[101]. Або виразами вигляду A[індексовий-вираз], де індексовий-вираз має значення від 0 до 101.

. Нехай ім'я означено як масив типу array[I] of T, E – вираз типу I. Тоді вираз ім'я[E] задає елемент цього масиву, тобто змінну типу T, номер якої в масиві є значенням виразу E.

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

A[1] :=1; A[2] := A[1]+2;

for k := 3 to 101 do readln(A[k]);

writeln(A[1]+A[2]+A[3]+A[4]).

Індексування – це єдина операція над масивами як цілісними об'єктами. Тому обробка масивів описується через обробку їх компонентів. Щоправда, в мові Бор ланд-Паскаль можна присвоювати однотипні масиви. Наприклад, за дії означень

var a, b : array[char] of integer; ch : char;

можна замість циклу

for ch:= chr(0) to chr(255) do b[ch]:=a[ch];

написати лаконічно

b := a;

Задачі

1)На вхід програми подається N цілих чисел X1, . , XN із діапазону 0 100; N>0. Написати програму обчислення:

- їх середнього арифметичного значення M та дисперсії D, тобто середнього арифметичного квадратів різниць між числами та M:

D = ( ( X1 - M )2 + … + ( XN - M )2 ) / N;

- кількостей повторень K1, K2, … , K100 кожного з чисел 1, 2, … , 100.

Числа надходять у програму

а) від стандартного пристрою введення, тобто клавіатури;

б) від генератора випадкових чисел.

2). Черга – це така послідовність, що елементи додаються в її кінець, а вилучаються з її початку. Написати програму роботи з чергою цілих, поданою в масиві.Потрібно забезпечити:

- скидання черги (вилучення всіх її елементів);

- обчислення кількості елементів у черзі;

- перевірки, чи порожня черга;

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

- додавання елемента в кінець черги;

- добування та вилучення елемента з її початку.

3).Стек, або магазин – це така послідовність, що елементи додаються й вилучаються з її початку. Написати програму роботи зі стеком цілих, поданим у масиві. Потрібно забезпечити:

- скидання стека (вилучення всіх його елементів);

- обчислення кількості елементів стека;

- перевірки, чи порожній стек;

- обчислення обсягу вільного місця в стеку (кількість елементів, які можна додати до його заповнення);

- додавання елемента до початку стека;

- добування й вилучення елемента з початку стека.

2. Рядки

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

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

Змінна-рядок є масивом символів разом із додатковим компонентом. В означенні типу задається довжина n послідовності символьних компонентів, індексованих цілими 1,…,n. Додатковий компонент указує довжину послідовності символів, поданої в масиві. Ця довжина значення-рядка може змінюватися в процесі виконання програми від 0 до довжини масиву n.

У мові Бор ланд-Паскаль тип рядків задається виразом вигляду

string[n],

де n – ціла стала з діапазону 1 255 (можливо, іменована). Наприклад, string[80]. Змінна такого типу є масивом символів із індексами від 0 до n. Значення-рядок подається змінними з індексами від 1 до n, змінна з індексом 0подає довжину рядка. Точніше, якщо її значення c, то m=ord(c) розглядається як довжина значення-рядка. У процесі виконання програми вона може мінятися від 0 до n.

Елементи масиву з індексами від m+1 до n недоступні; їх значення можна розглядати як "сміття". Спроба присвоїти щось цим елементам або взяти їх значення призведе до аварійного завершення програми.

Оскільки невід'ємна довжина значення-рядка подається в одному байті, вона не може перевищувати 255. Звідси "маємо, те що маємо", тобто обмеження 255 на довжини рядків. Ім'я типу string еквівалентне виразові string[255].

Найпростішими виразами типу рядок є ім'я змінної-рядка, рядкова стала (літерал), або вираз типу char. Над рядками означена бінарна операція катенації (або дописування); її знаком є '+'. Результат одержується дописуванням правого операнда до лівого: значенням виразу '123'+'45' є '12345'. Ціла довжина рядка повертається з виклику функції length із аргументом-рядком: length('123') = 3.

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

Вираз типу "рядок" можна присвоїти змінній-рядку. Його символи присвоюються елементам змінної, починаючи з першого. Якщо довжина значення більша максимально можливої довжини n змінної, то присвоюються лише n перших символів. При цьому довжина значення (або n) неявно присвоюється додатковому компоненту змінної-рядка (як символ нульовому елементу масиву). Наприклад, нехай змінна s означена як string[3]. Після присвоювання

s:='12345'

чотири її компоненти з індексами 0, 1, 2, 3 матимуть значення chr(3), '1', '2', '3', а після

s:='12'

– chr(2), '1', '2', а останній компонент буде недоступним, і його значення буде "сміттям". За останнього значення змінної s виконання оператора

s:=s+'9'

надасть їй значення '129', а оператора

s:='9'+s

– значення '912'. В обох випадках s[0]=chr(3). Після присвоювання s:='' змінна s подає порожній рядок:

s[0]=chr(0), а решта елементів недоступні.

Змінити довжину значення можна явно, змінивши нульовий символ. Якщо після s:='' виконати s[0]:=2, то значення компонентів із індексами 1 і 2 зі "сміття" перетворяться на значення-рядок. Присвоювання іншим елементам рядка не змінює довжини його значення.

У типах рядків означено операції порівняння =, <>, <, … . За означенням, рядки рівні, якщо мають ту саму довжину, і в її межах відповідні символи однакові. У противному разі вони не рівні. Упорядкування рядків залежить від системи програмування.

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

Розглянемо лише чотири з них.

Функція з заголовком

function copy ( s : string; ind, cnt : byte ) : string

задає повернення підрядка рядка s, що починається з s[ind] і має довжину cnt. Наприклад, copy('abcd', 2, 2)='bc'.

Функція з заголовком

function pos ( subs, s : string ) : byte

задає повернення номера того елемента в рядку s, починаючи з якого subs входить у s як підрядок (якщо не входить, то повертається 0). Наприклад, pos('bc', 'abcd')=2, pos('aa', 'abcd')=0.

Процедура з заголовком

procedure val(s : string, var v; var ErrCode : integer)

задає перетворення зображення числа в рядку s у числовий тип і присвоювання його змінній v. Якщо перетворення дійсно можливе, то значенням ErrCode буде 0. У противному разі її значенням буде позиція з символом у рядку, починаючи з якого перетворення неможливе. Тип аргументу, відповідного параметрові v,повинен мати тип, відповідний змісту рядка s. Так само зміст рядка повинен задавати число, представне в типі цього аргументу. Наприклад, за s='1.3' або s='1E2' другий аргумент повинен бути дійсного типу, а не цілого.

Аналогічно за його типу integer у рядка не повинно бути значень, що подають числа, більші 32767 або менші -32768.

Процедура з заголовком

procedure delete(var s : string; start, len : integer)

задає знищення len символів, починаючи з позиції start у рядку s. Наприклад, за s='abcdef' після виклику delete(s,3, 3) рядок s матиме значення 'abf'. За start=0 або len=0 або start>length(s) рядок не змінюється. За start+len>length(s) з s вилучається підрядок до кінця рядка.

Задачі

1).Що друкується в результаті виконання програми:

а) program strconc ( input, output );

var a: integer; c: char; s: string;

begin

s :='';

for a := 0 to 2 do

begin

c := chr ( ord ( '0' ) + a ); s := c + s + c; writeln ( s )

end

end.

б) program concstr ( input, output );

var a: integer; c: char; s: string;

begin

s :=''; c:= chr ( 47 );

while length ( s ) < 7 do

begin

c := succ ( c ); s := s + c + s; writeln ( s )

end

end.

3. Матриці та багатовимірні масиви

Розглянемо прямокутну таблицю з m* n однотипиних елементів як послідовність із m рядків, у кожному з яких n елементів. Послідовності певної довжини подаються в мовах програмування масивами. Отже, виникає поняття "масив, елементами якого є масиви", або двовимірний масив. Якщо елементи прямокутної таблиці самі є послідовностями або таблиці утворюють послідовність певної довжини, то виникає поняття тривимірного

масиву тощо.

Означення багатовимірних масивів та зображення їх елементів у мові Паскаль опишемо за допомогою простого прикладу. Позиція в грі "хрестики-нулики на полі 3* 3" подається квадратною таблицею з символів 'x', '0' або ' '(пропуск). Пронумеруємо клітинки поля, як у шахах – літерами 'a', 'b', 'c' по горизонталі та числами 1, 2, 3 по вертикалі. Тоді рядки таблиці можна подати масивами типу

type Row = array [ 'a' 'c' ] of char;

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

type Table = array [ 1 3 ] of Row;

Партія, тобто послідовність позицій, має довжину не більше 9, і може подаватися масивом таблиць:

type Game = array [ 1 9 ] of Table;

Масиви типу Table мають два виміри: номер рядка та номер символу в ньому; масиви типу Game – три: номери таблиці, рядка та символу. Вимір 1 9 у типі Game називається зовнішнім, вимір 'a' 'c', що нумерує символи в рядках, – внутрішнім.

Тип Game можна задати еквівалентним виразом, не означаючи імен типів Row і Table, а саме:

type Game = array [ 1 9 ] of

array [ 1 3 ] of

array [ 'a' 'c' ] of char;

Нехай A – змінна типу Game. Вираз вигляду A[ i ], де 1? i ? 9, задає змінну типу Table, або типу

array [ 1 3 ] of array [ 'a' 'c' ] of char;

вираз вигляду A[i][j], де 1? j? 3, – змінну типу Row, або типу

array[ 'a' 'c' ] of char;

вираз вигляду A[i][j][k], де 'a' ? k ? 'c', – змінну типу char.

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

type Game1 = array [ 1 9, 1 3, 'a' 'c' ] of char

еквівалентне означенню типу Game, а вираз A[i, j, k] – виразові A[i][j][k].

Елементи багатовимірних масивів розташовуються в пам'яті послідовно, найшвидше в них змінюється внутрішній індекс, найповільніше – зовнішній. Зокрема, двовимірні масиви (матриці) розташовуються за рядками. Так, послідовні числа масиву типу

array [ 1 2, 'a' 'b' ] of real

мають набори індексів [1, 'a'], [1, 'b'], [2, 'a'], [2, 'b'], а послідовні символи в масиві типу Game – [1, 1, 'a'], [1, 1, 'b'], [1, 1, 'c'], [1, 2, 'a'], … , [1, 3, 'c'], [2, 1, 'a'], … , [9, 3, 'c'].

 Масив - це набір об'єктів однакового типу, розташованих один за одним у пам'яті комп'ютера. Масив можна описати наступним чином:     тип_даних ім'я масиву [розмір_масиву]   Кожний масив має им'я. Значення індексу повинні знаходитись у диапазоні від нуля до величини, що на одиницю менше розміру масиву, вказаного під час його опису. Тип_даних задає тип елементів масиву. Розмір_масиву - константа чи константний вираз, що задає кількість елементів масиву. Ім'я масиву є вказівником-константою, що дорівнює адресі початку масива (першого байта першого елемента масива).   Доступ до окремих елементів масива може здійснюватись або за допомогою імені масива та індексу (порядковому номеру) або за вказівником (операція *). Іншими словами, наступні посилання будуть повністю еквівалентними:     array[i]     *(array+i)   Кожний раз, коли при виконанні програми у виразі зв'являється ідентифікатор типу масиву, він перетворюється у вказівник на перший елемент масиву.

Одновимірний масив (чи просто масив) — це такий засіб мови програмування (на зразок змінної) (Іноді масивом називають саму впорядковану множину значень. А кожне таке значення називають елементом масиву. Таке змішування понять не повинно Вас бентежити — програмісти не математики і не схильні до ювелірної точності визначень), що дозволяє посилатися на будь-який елемент пронумерованої множини значень. При цьому всі значення (елементи множини) повинні бути одного типу. А їхня кількість не повинна перевершувати заздалегідь заданого числа.

Пронумеровану множину часто називають послідовністю. Цей термін використовуватимемо і ми . Послідовність іноді називають списком. Ми теж іноді будемо вживати цей термін, хоча його зміст більш широкий — елементами списку можуть бути значення різного типу, у тому числі й інші списки. Крім того, довжина списку заздалегідь не фіксується. У мові Visual Basic є особливий об'єкт управління, що називається Вікном списку (List Box). У це вікно поміщаються дані, що утворюють список у більш широкому змісті, ніж той, котрий використовується у визначенні одномірного масиву.

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

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

Наведемо приклади оголошень багатовимірних масивів. Нагадаємо, що обсяг сегмента пам'яті, де будуть зберігатися дані Pascal-програми, становить 64 Кбайт, і тому під час визначення розміру масиву необхідно враховувати можливість переповнення пам'яті.

const k=10; m=20; n=5; type TMatrix=array[1..k,1..m] of integer; var a:TMatrix;   b:array[1..n,1..n] of real;   c:array[1..4,1..3] of char;   d:array[byte,1..2] of integer;   mat:array[1..3,5..10,2..4] of integer;

Доступ до елементів матриці здійснюється операцією індексування [ ] за двома індексами, які визначають номер рядка та номер стовпця елемента. Синтаксис операції індексування є таким:

<ім'я масиву>[<номер рядка>,<номер стовпця>]

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

с[4,3]:='С'; mat[2,6,3]:=a[k,m]+d[0,2];

Упорядкування – це розташуваннѐ елементів маси-ву в заданому порѐдку (по зростання, спадання, останній цифрі, …).

23.

Покажчик - це змінна, яка містить адресу змінної. Так як покажчик - це адреса деякого об'єкта, то через нього можна звертатися до даного об'єкта.

В СІ існує тісний зв'язок між покажчиками й масивами. Будь-який доступ до елемента масиву, здійснюваний 0%9E%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D1%96%D1%8F"операцією 0%86%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D1%83%D0%B2%D0%B0%D0%BD%D0%BD%D1%8F"індексування, може бути виконаний за допомогою покажчика.

Декларація

int a [10];

визначає масив а розміру 10, тобто блок з десяти послідовних об'єктів, представлених на малюнку, з іменами a [0], a [1], ..., a [9].

Запис a [i] відсилає нас до i-му елементу масиву. Якщо ра є вказівник, тобто визначений як int * pa;, то в результаті присвоювання

pa = & a [0];

pa буде вказувати на нульовий елемент масиву а; інакше кажучи, ра буде містити адресу елемента a [0] (див. рис.). Тепер присвоювання

x =* pa;

буде копіювати вміст а [0] в х.

Якщо ра вказує на деякий елемент масиву, то ра +1 за визначенням вказує на наступний елемент (див. рис.). Таким чином, якщо ра вказує на a [0], то * (ра +1) є вміст a [1] , ра +1 - адреса a [1], * (ра + i) - вміст a [i].

Оскільки ім'я масиву є не що інше як адресу його початкового елемента, присвоювання

pa = & a [0];

можна також записати в наступному вигляді:

pa = a;

Так як ра - покажчик, то у виразах його можна використовувати з 0%86%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D0%B8"індексом, тобто запис pa [i] еквівалентна запису * (pa + i). Елемент масиву однаково дозволяється зображати і у вигляді покажчика зі зміщенням, і у вигляді імені масиву з індексом.

Між ім'ям масиву і покажчиком, виступаючим в ролі імені масиву, існує одна відмінність. Покажчик - це змінна, тому можна написати pa = a або pa + +. Але ім'я масиву не є змінною, і запис типу a = pa не допускається. Слід також розрізняти вираження * (a +2) і * a +2: * (а +2) - значення третього елемента масиву а; * а +2 - додавання числа 2 до значення першого елемента масиву.

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

# Include <stdio.h>

int a [6] = {10,20,30,40,50,60};

/ * Оголошення і ініціалізація масиву * /

main ()

{Int i, * p;

for (i = 0; i <6; i + +)

printf ("% d", a [i]); / * висновок масиву звичайним способом * /

for (p = & a [0]; p <= & a [5]; p + +)

printf ("% d", * p) / * висновок масиву з використанням покажчика * /

for (p = & a [0], i = 0; i <6; i + +)

printf ("% d", p [i]); / * ще один варіант з використанням покажчика * /

}

Дамо ще деякі пояснення. Операція р + + збільшує значення покажчика на одиницю. Якщо p = & a [i], то після операції р + + в р міститься адресу елемента a [i +1].

24.

Фу́нкция — в 0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5"программировании — это поименованная часть 0%9A%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D0%B0%D1%8F_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0"программы, которая может вызываться из других частей программы столько раз, сколько необходимо. Функция, в отличие от 0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F_%28%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%29"процедуры, обязательно возвращает значение.

С точки зрения 0%A2%D0%B5%D0%BE%D1%80%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC"теории систем, функция в 0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5"программировании — отдельная 0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0"система (0%9F%D0%BE%D0%B4%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0"подсистема, 0%9F%D0%BE%D0%B4%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0"подпрограмма), на вход которой поступают управляющие воздействия в виде значений 0%90%D1%80%D0%B3%D1%83%D0%BC%D0%B5%D0%BD%D1%82_%28%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%29"аргументов. На выходе функция возвращает результат, который может быть как 0%A1%D0%BA%D0%B0%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D0%B5_%D0%B2%D0%B5%D0%BB%D0%B8%D1%87%D0%B8%D0%BD%D1%8B"скалярной величиной, так и векторным значением (0%A1%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D0%B0_%28%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%29"структура, 0%98%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2"индексный массив и т.п.). По ходу выполнения функции могут выполняться, также, некоторые 0%9F%D0%BE%D0%B1%D0%BE%D1%87%D0%BD%D1%8B%D0%B9_%D1%8D%D1%84%D1%84%D0%B5%D0%BA%D1%82_%28%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%29"изменения в управляемой системе, причём как обратимые, так и необратимые.

В практике программирования часто встречается ситуация, когда одну и ту же группу операторов, реализующих определённую цель, требуется повторить без изменений в нескольких других листах программы. Чтобы избавить программиста от столь иррационального занятия, была предложена концепция подпрограммы. Подпрограммой называется именованная логически законченная группа операторов языка, которую можно вызвать для выполнения по имени любое ко-личество раз из различных мест программы. В языке СИ++ все подпрограммы являются функциями. Объявления и определения функций. < возвращаемый тип > < имя функции > (<список типизированных параметров>) {            < тело функции > }                               Примеры: double sqr (double y)          { return 0 y*y } char prevChar (char c)          { return c-1;          } Правила объявления и определения функций в СИ++. 1) При объявлении функции перед её именем всегда указывается тип возвращае-мого ею значения. 2) Если  список  параметров  пуст, круглые  скобки  после  имени функции долж-ны быть указаны. СИ++ позволяет вам использовать ключевое слово void для яв-ного указания того, что список параметров пуст, хотя это будет возвратом к стан-дартному языку СИ. 3) Список параметров с указанием типов должен иметь следующий вид:  [const ] < тип1><параметр1>, [const ] тип2 параметр2,... Параметры задаются подобно тому, как определяются переменные: сначала задается тип параметра, а потом идентификатор параметра. В  С++ параметры в списке разделяются запятыми. Для каждого параметра необходимо указать его тип. Ключевое слово const объявляет компилятору, что значение параметра не должно изменяться функцией. 4) Тело функции C++ заключается в фигурные скобки. За закрывающейся скобкой не должно быть точки с запятой. 5) C++ поддерживает передачу параметров, как по ссылке, так и по значению. По умолчанию параметры передаются по значению. В этом случае функция работает с копией передаваемых данных, оставляя оригинал данных неизменным. Для оп-ределения параметра передающегося по ссылке, необходимо после указания типа ввести символ &. Имя ссылочного параметра является псевдонимом фактического параметра. Любое изменение ссылочного параметра влечет за собой изменение переменной переданной в качестве фактического параметра. Общая форма задания ссылочных параметров: [const] <тип 1&><параметр 1>, [const]<тип 2&>параметр 2>... Ключевое слово const объявляет компилятору, что значение параметра не должно быть изменено функцией. 6) C++ поддерживает локальные константы и локальные данные различных типов. Все эти элементы могут быть объявлены во вложенных блоках операторов, однако C++ не поддерживает вложенных функций. 7) Ключевое слово return передает в вызывающую функцию возвращаемое значе-ние, если оно существует. 8) Если тип возвращаемого функцией значения - void, вы не обязаны использовать оператор return, кроме того случая, когда нужно произвести выход из функции прежде, чем она выполнится целиком. В этом случае оператор return не имеет па-раметра, - ничего возвращать не нужно. С++ требует, чтобы либо объявление, либо определение функции предше-ствовали её вызову. Объявление функции называется прототипом, содержит имя функции, тип возвращаемого функцией значения и количество, и тип её парамет-ров. Указание имён параметров не является обязательным. За списком парамет-ров, после закрывающейся скобки, должна следовать ;, а не операторный блок. С++ требует, чтобы функция была объявлена, до того как она будет полностью определена, если вызов её предшествует её определению. Пример объявления прототипа:   //Объявление прототипа функции Sqr     double Sqr (double);     int main ( )     {       cout << " 5 в квадрате = " <      return 0;      }      double sqr (double z)      { return z*z;} Обычно объявленная функция является глобальной, т.е. она доступна всем другим функциям. Если объявить прототип функции в той, из которой она вызы-вается, то прототип будет скрыт от других функций. При вызове функции необходимо поставить в соответствие параметрам пе-редаваемые аргументы. Соответствие аргументов параметрам устанавливается в том порядке, в котором были объявлены. Тип аргументов должен совпадать или быть совместимым с типом параметров. Пример:     double volume(double length, double width, double height)     {      return length*width*height;      }      double len=34, wiadth=55, let=100;      int i=3;      long j=44;      unsigneg k=33; cout << volume (len, width, ht) << endl; cout << volume (1, 2, 3) << endl; cout << volume (i, j, k) << endl cout << volume (len, j, 22.3) << endl;

!25! Структури та операції з ними в мові С++

структу́ри да́них — це способи організації даних в комп'ютерах

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

!26! Об’єднання в мові С++

Объединение (англ. union) в программировании — структура данных, члены которой расположены по одному и тому же адресу. Поэтому размер объединения равен размеру его наибольшего члена. В любой момент времени объединение хранит значение только одного из членов.

Пример

union Some {

int i;

double a;

};

!27! Об’єктно-орієнтоване програмування. Клас. Метод. Інкапсуляція. Успадкування. Поліморфізм

Об'є́ктно-орієнто́ване програмува́ння (ООП) — одна з парадигм програмування, яка розглядає програму як множину «об'єктів», що взаємодіють між собою. В ній використано декілька технологій від попередніх парадигм, зокрема успадкування, модульність, поліморфізм та інкапсуляцію

Клас 

Клас визначає абстрактні характеристики деякої сутності, включаючи характеристики самої сутності (її атрибути або властивості) та дії, які вона здатна виконувати (її поведінки, методи або можливості)

Об'єкт 

Окремий екземпляр класу

Поліморфізм 

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

Метод 

Можливості об'єкта.В межах програми, використання методу має впливати лише на один об'єкт

Приховування інформації (інкапсуляція) 

Приховування деталей про роботу класів від об'єктів, що їх використовують або надсилають їм повідомлення

бувають публічні (англ. public), захищені (англ. protected) та приватні (англ. private)

Успадкування 

Клас може мати «підкласи», спеціалізовані, розширені версії надкласу. Можуть навіть утворюватись цілі дерева успадкування.

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

Поліморфізм 

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

!28!. Візуальне програмування в мові С++. Проект. Форма. Компонент. Інспектор об’єктів. Редактор коду.

Візуа́льне програмува́ння — спосіб створення програм шляхом маніпулювання графічними об'єктами замість написання програмного коду в текстовому вигляді.

Формою називають компонент, який володіє властивостями вікна Windowsі призначений для розташування інших компонентів

Проектом називають сукупність файлів, з яких Delphi створює готову для виконання програму

За допомогою інспектора об’єктів можна задавати початкові значення властивостей об’єкта та їхню реакцію на стандартні події. Вікно інспектора об’єктів містить список компонентів поточної форми, а також дві закладки: властивостей (Properties)та подій (Events)

Компонент – візуальний об’єкт.

Редактор кода – это программа, разработанная специально для написания кода, в каком либо языке программирования

!29! Об'єкт Form та його власти­вості і події

Форма– це вікно Windows, яке утворюється в одному з можливих для вікон стилів. Увесь внутрішній простір є робочою областю, яка має сітку вирівнювання для зручного розташування компонентів на формі. 

 

Для виконання групових операцій декілька компонентів можна об’єднувати. Для цього необхідно натиснути на ліву клавішу миші і переміщенням вказівника охопити всі потрібні компоненти. У групу долучаються компоненти, які хоча б частково попадають в охоплену область. Можна також долучити/вилучити окремий елемент. Для цього необхідно натиснути на клавішу Shift та, не відпускаючи її, вибрати мишею потрібний компонент на формі. Вилучення виділених компонентів чи групи виконується клавішею Delete. Переміщення виділеного компонента в межах форми здійснюється мишею. Над компонентами та їхніми групами можна виконувати операції вирізання, копіювання в буфер обміну та вставляння з буфера.

Вирівнюватикомпоненти можна як відносно вікна форми, так і один відносно одного. Для цього використовується команда EditAlign головного меню або палітра вирівнювання (команда ViewAligmentPalette головного меню). Інша можливість – задати властивості Left  та Top компонентів. Компоненти у групі вирівнюються відносно того компонента, який попав у групу першим.

  1. Об'єкт Label та його власти­вості і події.

Об’єкт Label призначений для створення текстових полів (написів, текстів) у вікні програми. Окрім аналогічних до на­ведених у попередній таблиці властивостей Width, Height, Font,BackColor, Name, Caption, Enabled, Left, Top, він володіє ще й такими:

Властивість

Опис властивості

Приклади значень

Alignment

Вирівнювання тексту в межах поля

Center, LeftJustify, RightJustify

AutoSize

Приведення меж поля до границь тексту

True, False

Visible

Видимість об’єкта

True, False

Wordwrap

Перенесення слів тексту у новий рядок

True, False

ForeColor

Колір тексту

&Н0000С0С0&

  1. Об'єкт Image та його власти­вості і події

Об’єкт Image призначений для вставки графічних об’єктів з файлів типу *.bmp, *.emf, *.ico, *.wmf у форму. Окрім відомих Властивостей Width, Height, Name, Enabled, Left, Top, Visible,використовують такі:

Властивість

Опис властивості

Приклади значень

Center

Вирівнювання малюн­ка до центру відносно поля, що його містить

True, False

Picture

Ім’я графічного файлу

Задається у діалоговому вікні

Stretch

Приведення розміру зображення до зада­них розмірів об’єкта

True, False

  1.  Об'єкт Button та його власти­вості і події

Об’єкт Button використовують для створення кно­пок на формі. Кнопки мають такі властивості: Visible, Width, Height, Font, BackColor, Name, Caption, Enabled, Left, Top та інші.Об’єкти типу TextBox використовують для введення рядка символів з клавіатури. Окрім відомих уже власти­востей, поля редагування TextBox володіють такими:

Властивість

Опис властивості

Приклади значень

PasswordChar

Символ для введення пароля

Порожній рядок (пряме відображення тексту), * (текст відображатиме­ться зірочками)

ToolTipText

Текст підказки, яка висвітлюється, якщо навести курсор миші

«Введіть суму» (довіль­ний рядок символів)

Text

Текст у полі редагу­вання

«0,0001» (довільний рядок символів)

33

Edit - Відображення, введення і редагування однорядкових текстів

34

RadioButton - залежний перемикач. Звичайно поєднується як мінімум ще

з одним таким же компонентом у групу. Клацання по перемикачу приводить до

автоматичного звільнення раніше обраного перемикача в тій же групі. 35

Memo - багаторядковий текстовий редактор. Використовується для

введення і/або відображення багаторядкового тексту.

36

Chart - діаграма. Цей компонент полегшує створення спеціальних панелей

для графічного представлення даних.

37

MainMenu - головне меню програми. Компонент здатний створювати й

обслуговувати складні ієрархічні меню.

38

PopupMenu - допоміжне або локальне меню. Звичайно це меню

з'являється в окремому вікні після натискання правої кнопки миші.

39

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

Часу.