Студопедия
Новини освіти і науки:
МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах


РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання


ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ"


ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ


Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків


Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні


Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах


Гендерна антидискримінаційна експертиза може зробити нас моральними рабами


ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ


ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів



Лекція №8

Закріплення вивченного матеріалу.

Багатовимірні масиви.

Двовимірний масив.

Двовимірний масив - це одновимірний масив з одновимірних масивів. Для прикладу визначимо двовимірний масив m розміром 3 x 4 .

int m [ 3 ] [ 4 ] ;

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

Почнемо з того , що спочатку оголосимо проміжний тип M - одновимірний масив з 4 -х цілих чисел

typedef int M [ 4 ] ;

Тепер визначення M x ; означає теж саме, що

int x [ 4 ] ; , яким би не був вираз x.

Визначимо одновимірний масив з елементів типу M, тобто масив символів.

M m [ 3 ];

У ролі x тут виступає вираз m [ 3 ]. Підставами його в int x [ 4 ] ; і отримаємо оголошення двовимірного масиву без проміжного типу M, як це зазвичай і робиться.

int m [ 3 ] [ 4 ] ;

Виходячи із загального принципу розміщення елементів масиву в пам'яті ( щільно і в порядку зростання номерів), можна стверджувати , що елементи двовимірного масиву m [ 3 ] [ 4 ] займуть місця в пам'яті в наступному порядку:

m [ 0 ] [ 0 ] , m [ 0 ] [ 0 ] , m [ 0 ] [ 1 ] , m [ 0 ] [ 2 ] , m [ 0 ] [ 3 ] , m [ 1 ] [ 0 ] , m [ 1 ] [ 1 ] , m [ 1 ] [ 2 ] , m [ 1 ] [ 3 ] , m [ 2 ] [ 0 ] , m [ 2 ] [ 1 ] , m [ 2 ] 2 ] , m [ 2 ] [ 3 ]

 

Приклад. Ввести матрицю M розміру 3 x 3 . Поміняти місцями початкову та останню рядки і вивести результат на екран.

M [ 3 ] [ 3 ] = { { 11,12,13 } , { 21,22,23 } , { 31,32,33 }} ;

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

{

int R = M [ 0 ] [ j ] ;

M [ 0 ] [ j ] = M [ 1 ] [ j ] ;

M [ 1 ] [ j ] = R;

}

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

{

for ( j = 0 ; j < 3 ; j + +)

{

cout << M [ i ] [ j ] << " " ;

}

cout << endl ;

}

 

 

Багатовимірні масиви задаються зазначенням кожного вимірювання в квадратних дужках , наприклад:

 

int matr [ 6 ] [ 8 ] ;

 

задає опис двовимірного масиву з 6 рядків і 8 стовпців. Масив складається з 48 елементів. У пам'яті такий масив розташовується в послідовних комірках построчно .

Тривимірний масив буде описаний як :

 

double mass [ 4 ] [ 3 ] [ 2 ] ;

 

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

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

 

matr [ 2 ] [ 3 ] = 4 ;

 

елементу матриці matr2 , 3 присвоєно значення 4 ;

 

x = matr [ 2 ] [ 3 ] ;

 

змінної x присвоєно значення елемента матриці matr2 , 3 .

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

 

int mass2 [] [ 2 ] = { { 1 , 1 } , { 0 , 2 } , { 1 , 0 }} ;

 

У цьому прикладі инициализирован масив матриці:

Можна задати загальний список елементів у тому порядку , в якому елементи розташовуються в пам'яті ( тоді все розмірності вказуються) :

 

int mass2 [ 3 ] [ 2 ] = { 1 , 1 , 0 , 2 , 1 , 0 } ;

 

Обнулити весь масив можна так:

int mass2 [ 3 ] [ 2 ] = { 0 } ;

(скорпировать задания по много мернім мссивам)


 

Тема : Поняття функції. Структура. Виклик, передача параметрів.

 

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

Питання:

1. Поняття функції.

2. Синтаксис оголошення функції.

3. Передача параметрів по значенню.

4. Передача параметра по посиланню або з використанням параметра-покажчика.

5. Вказівники на функцію.

 

Функція - це логічно завершена сукупність описів і операторів, призначених для виконання певного завдання.

У мові С++ немає розподілу на основну програму й підпрограми, на процедури й функції. Однак серед функцій повинна бути одна з ім'ям main, що може перебувати в будь-якім місці програми. Ця функція виконується завжди першої й закінчується останньої.

Будь-яка функція має однакову структуру, що має вигляд :

[тип результату, що повертає функція] ім'я функції ([список формальних аргументів])

{

опису даних ;

оператори ;

[return] [вираз];

}

тут квадратні дужки ( [ ] ) , як звичайно вказують, що укладена в них конструкція може бути відсутня ;

тип результату ¾ будь-який базовий або раніше описаний тип значення повертає функцією (необов'язковий параметр), якщо він відсутній, то тип результату буде цілий (int); цей параметр може бути описаний ключовим словом (void), у цьому випадку функція не повертає ніякого значення (результату). Якщо параметр заданий із зірочкою (*) ¾ функція повертає покажчик на об'єкт, або на одержання адреси об'єкта (& ) (в операторі return);

ім'я функції ¾ будь-яке ім'я, що складається з букв, цифр і знака "_" (підкреслення), що починається буквою або знаком "_", або ім'я main за ім'ям функції завжди повинна стояти пари круглих дужок ( ), у яких записуються формальні параметри, а якщо їх ні, те ¾ порожні дужки. Cледует мати через, що фактично ім'я функції ( це особливий вид покажчика на функцію, його значенням є адреса крапки входу у функцію;

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

 

Список формальних аргументів повинен мати такий вигляд:

 

( [const] тип 1 [параметр 1] , [const] тип 2 [параметр 2],. . . )

 

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

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

void fun ( int p)

{

++ p;

cout << " p=" << p << endl;

}

void main ( )

{

int x = 10;

fun (x); // виклик функції

cout << "x=" << x << endl;

}

 

У результаті роботи цього фрагмента програми буде виведено: р=11, х = 10, оскільки для виклику функції fun(x) у неї передається копія значення рівного 10, при виконанні цієї функції усередині її значення збільшується на 1, тобто (++р) і, тому виводиться р = 11, але за межами функції зазначене значення не змінюється.

Якщо треба змінити змінну оригінал, тобто передати зміна параметра за межами тіла функції, то можна передати значення параметра по посиланню або використати параметр-покажчик. Тоді, використовуючи параметр- посилання, одержимо :

// Використання параметра - посилання

void fun (int &р)

{ ++p;

cout << "p = " << р << endl;

}

void main ( )

{

int x = 10;

fun( x );

cout << "x=" << x << endl;

}

 

У результаті буде виведена інформація: р=11 і х=11.

 

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

 

// Використання параметра - покажчика

void fun2 (int *p)

{

++*р;

cout << "*p = " << *p << endl;

}

void main ( )

{

int x = 10;

fun2 ( &x );

cout << "x = " << x << endl;

}

 

У цьому випадку одержуємо той же результат, тобто р = 11 і х = 11.

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

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

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

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

 

static int x, y; або static float p = 3.25;

 

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

Таким чином, можна зробити висновку:

¾ параметри функції передаються в неї за значенням, тому за межами функції вони не змінюються, тобто їх не можна використати для передачі результату роботи функції;

¾ при передачі результату функції за її межі використаються: або передача параметрів по посиланню (&р); або передача по покажчику (*р), у цьому випадку під час звертання до функції застосовується символ адреси & , тобто (&р); або як параметр функції варто використати глобальні змінні;

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

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

 

static char st[ ] = "Тесленко А. М. ";

 

¾ у якості вхідних (і вихідних) формальних аргументів функцій можуть використатися масиви як фіксованої довжини, так і змінної; якщо використається в якості формальний масив змінної довжини, те обов'язково серед аргументів функції повинна бути змінна, що вказує довжину масиву, наприклад:

 

int minmas (int mas [ 50]); // Масив фіксованої довжини

int minmas (int mas [ ], int n); //Масив змінної довжини

¾ всі масиви ¾ формальні аргументи передаються за адресою, тобто як покажчики;

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

double sgr (double); // Прототип функції sqr

. . . . . . . . .

int main ( )

{

cout << "5**2 = " << sgr (5) << endl; // Виклик функції

}

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

¾ в останніх версіях мови С++ з'явилася можливість передавати дані за замовчуванням. У цьому випадку, при написанні функції аргументам привласнюються початкові значення, які можуть мати всі аргументи або частина з них. У результаті, задовольняються наступні вимоги: якщо якому-небудь аргументу привласнене значення за замовчуванням, то всі аргументи, що випливають за цим параметром, повинні мати значення за замовчуванням. Таким чином, список параметрів ділиться на дві частини: параметри , що не мають значення за замовчуванням , і параметри, які мають такі значення.

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

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

 

void funct1 ( float x, int y, int z =80 )

{

cout << "x = " << x << " y= " << y << "z=" << z << endl;

}

void funct2 ( float x, int y = 25 , int z = 100 )

{

cout << "x=" << x << "y=" << y << "z=" << z << endl;

}

void funct3 ( float x=3.5 , int y= 40, int z =200 )

{

cout << "x = " << x << "y = " << y << "z = " << z << endl;

}

main ( )

{

funct1 ( 5.1 , 10 ); // за замовчуванням один аргумент ¾ z

funct2 ( 10.2 ); // за замовчуванням два аргументи ¾ y ,z

funct3 ( ); // за замовчуванням всі аргументи

}

 

На екрані буде виведено: x =5.1 y = 10 z = 80

x =10.2 y = 25 z = 100

x =3.5 y = 40 z = 200

 

Із цих програм видно, що аргумент за замовчуванням (це той, значення якого задане при описі заголовка функції, а при її виклику цей аргумент можна не вказувати.

Якщо замість параметра, заданого за замовчуванням при звертанні до функції, записується інше значення фактичного параметра, то значення за замовчуванням придушується заданим фактичним значенням. Так, наприклад, в останньому програмному фрагменті при виклику функції funct (13.5, 75); на екрані буде виведено :

 

x = 13.5 y =75 z = 80 , тобто z - прийнято за замовчуванням.

 


Читайте також:

  1. Вид заняття: лекція
  2. Вид заняття: лекція
  3. Вид заняття: лекція
  4. Вид заняття: лекція
  5. Вид заняття: лекція
  6. Вступна лекція
  7. Вступна лекція 1. Методологічні аспекти технічного регулювання у
  8. Клітинна селекція рослин.
  9. Колекція фонограм з голосами осіб, які анонімно повідомляли про загрозу вибуху
  10. ЛЕКЦІЯ (4): Мануфактурний період світової економіки
  11. Лекція - Геополітика держави на міжнародній арені
  12. Лекція 02.04.2013




Переглядів: 838

<== попередня сторінка | наступна сторінка ==>
ПрикладОбчислити середнє значення позитивних елементів одномірного масиву. | Лекція № 9

Не знайшли потрібну інформацію? Скористайтесь пошуком google:

  

© studopedia.com.ua При використанні або копіюванні матеріалів пряме посилання на сайт обов'язкове.


Генерація сторінки за: 0.06 сек.