Типи та функції. Основні принципи програмування: функціональне програмування Змінні та функції мови програмування

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

Позитивні моменти:

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

Функції позбавляють програміста від рутинного клонування маси операторів, що повторюються;

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

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

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

Функції у мові Сі можна умовно поділити на три види: системні, внутрішні та зовнішні.

Системні функції додаються до будь-якого компілятора. У WinAVR їх можна знайти в бібліотечному довіднику, що знаходиться за адресою C: WinAVR-2010010 doc avr-libc avr-libc-user-manual.pdf (далі - «Бібліотечне керівництво»).

Кожна системна функція суворо входить у свою бібліотеку. Назви бібліотек та функцій у різних компіляторах відрізняються. Оголошення використовуваних бібліотек проводиться у «шапці» програми директивою препроцесора «#inC1ude<имя заголовочного файла-хеддера>».

Символ «#» пишеться разом зі словом «inC1ude» і обов'язково починається в першому стовпці лістингу. Хеддер - це файл з розширенням .h, в якому описуються параметри функцій. До системних також належить головна функція «main», без якої не обходиться жодна програма у мові Сі.

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

Компілятор AVR-GCC, який використовується у пакеті WinAVR, займає в порівнянні з іншими компіляторами золоту середину. У його складі є приблизно однаково функції загальноприйнятих стандартів ANSI, C99, а також власні мікроконтролерні бібліотеки.

Досконало вивчивши системні функції одного компілятора, програміст певною мірою «прив'язується» до них і не хоче переучуватися на нові. Ось де потрібний воістину шаховий розрахунок, щоб з першого разу вибрати для вивчення солідний, потужний і постійно оновлюваний (отже, «живий»!) компілятор. До речі, AVR-GCC поки виправдовує всі очікування користувачів.

У стандартні бібліотеки компіляторів, поряд з функціями, входять також системні макровизначення, наприклад, специфічні для WinAVR «_BV», «bit_is_set», «bit_is_C1ear». Подробиці їх застосування висвітлюються у «Бібліотечному керівництві».

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

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

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

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

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

3. Якщо зробити зовнішні функції максимально автономними у роботі, їх у майбутньому можна використовувати разом із іншими програмами. Далекоглядні програмісти намагаються створювати свої «рідні» бібліотеки, що складаються із спеціалізованих функцій. Наприклад, хороший набір готових зовнішніх функцій для AVR-контролерів міститься у безкоштовній бібліотеці Паскаля Стенга.

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

За ім'ям функції обов'язково слідують круглі дужки, в яких при необхідності вказують параметри, що передаються/приймаються. У Табл. 6.9 перераховані всі допустимі формати оголошення та виклику функцій AVR-GCC.

Таблиця 6.9. Формати оголошення та виклику функцій в AVR-GCC

Формат оголошення функції __ «example()»

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

Почнемо з оператора циклу з передумовою. Цей оператор має вигляд:

While<условие>do<оператор>.

За виконання цього оператора спочатку обчислюється значення логічного висловлювання. Якщо це значення є істинним, виконується оператор. Потім значення виразу перевіряється знову, і все повторюється доти, доки вираз не набуде значення «брехня». Кожне виконання циклу іноді називають ітерацією циклу. Якщо вираз набуває значення "брехня" при першій же перевірці, то оператор не виконується взагалі.

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

Цикл із постумовоюмає вигляд:

Repeat…<выражние_1>until…<выражение_2>

Тут спочатку виконується оператор statement (затвердження), і лише потім обчислюється значення логічного висловлювання. Саме тому такий цикл називають циклом із постумовою. Процес повторюється, поки вираз має значення «брехня». Як тільки його значення стає дійсним, виконання циклу припиняється. Оператор може бути будь-яким, у тому числі складовим оператором:

Оператор_1;

Оператор_2;

…………….

Оператор N;

Until<условие>

У циклі repeat ... until перевірка виконується в останню чергу, і тіло циклу в будь-якому випадку виконується хоча б один раз.

Оператори циклу з лічильником: for ... to ... do і for ... downto ... do.

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

Для параметра циклу:= початкове значення to кінцеве значення do<оператор>;

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

Після виконання циклу для значення керуючої змінної стає невизначеним.

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

for j:-<выражение_1>downto<выражение_2>do<оператор>.

Підсумовуючи, для застосування циклів можна сформулювати такі рекомендації:

Використовуйте цикл for у тому випадку, коли точно знаєте, скільки разів має бути виконане тіло циклу. В іншому випадку зверніться до циклів repeat або while.

· Використовуйте while, якщо хочете, щоб перевірка була проведена перш ніж виконуватиметься тіло циклу.

· Іноді буває зручно проводити перевірку на можливий вихід із циклу десь у його середині, а не на початку чи наприкінці.

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

While true do begin

<Выражение_1>

If<оператор>then Break

<Выражение_2>; end

Слід також згадати процедуру Continue, яка перериває виконання тіла самого внутрішнього циклу for, while або repeat і передає управління на його заголовок, тому починається виконання чергової ітерації циклу.

Крок циклу for завжди постійний і дорівнює інтервалу між двома найближчими значеннями типу параметра циклу.

Var (опис параметрів циклу)

i: integer(цілочисленний тип);

c: char(символьний тип);

1. Begin (виведення на друк цілих чисел від 1 до 10)

For i:=1 to 10 do writeln (i);(крок циклу дорівнює 1)

2. (висновок на друк чисел від 10 до -10)

For 10 down to -10 (крок циклу дорівнює -1)

3. (виведення на друк латинських символів від A до R)

(параметр циклу змінюється від A до R в алфавітному порядку)

For c:='A' to 'R' do writeln (c);

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

Приклад: Обчислення суми від 1 до n.

var s,n,i: integer;

writeln ('Введіть n');

для i:=1 до n до s:=s+i;

Так що ж таке "програмна функція" ?

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

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

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

Програмна функція – це:

- "функція усвідомлених переваг",

- "функція вродженого професіоналізму",

- "функція основних цінностей, основних завдань та цілей".

І саме тому людині вкрай важко відступати від своєї "програми", не кажучи вже про те, щоб чинити їй всупереч (чого від нас нерідко вимагають умови психологічної несумісності).

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

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

-Ну добре, -вставляє Читач, - але якщо є у нашій психіці "функція цілей та завдань", то має бути і якась функція їх досягнень?

Така функція дійсно є, і з "програмною" вона тісно співпрацює, а тому в "Моделі "А" знаходиться праворуч від неї, на 2-й позиції рівня ЕГО (Тобто займає другий кабінет верхнього поверху). Ця функція називається "творчої" , або "творчою функцією" .

Творча функція та творчий аспект.

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

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

А тепер згадаємо нашу першу класифікацію – " сенсорик -етичний","інтуїт -логічний"і т.д. Що ми бачимо?

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

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

- А чи можна це показати на якомусь прикладі? -цікавиться Читач.

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

- Ну і де ж тут різниця в етичній програмі, на яку начебто впливають методи її реалізації? Чому етик сенсорний неспроможна використовувати самі методи, як і етик інтуїтивний, і навпаки?

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

-Але чому так відбувається?

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

"Елементарна модель" типу ІМ.

Аспекти, винесені на рівень ЕГО висловлюють основні цінності типу Саме тому вони винесені в його назву.

Наприклад, назва типу "етико-сенсорний екстраверт" означає, що його "програмна" цінність - екстравертна етика ("етика емоцій"), а "творча" цінність - інтровертна сенсорика ("сенсорика відчуттів") .

На рівні ЕГО це виглядає так:

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

У інтроверта,відповідно, навпаки: програмна функція буде інтровертною (білий символ), а реалізаційна – екстравертною (чорний).

І ще слід зазначити: якщо програмний аспект – раціональний (етика чи логіка), то він реалізується ірраціональним аспектом .

-Чому?

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

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

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

Таким чином, вже за назвою "типу ІМ" можна визначити структурне співвідношення рівня ЕГО та створити елементарну, двопозиційну модель, що відображатиме основні характеристики даної психічної структури.

Не дарма цю статтю, я назвав «Функції як невід'ємна частина програмування», адже без них, на мою думку, жодна мова не має права на існування. Що це таке? Функція – це головна складова добре написаної програми. Вона полегшує не лише читання коду, а й докорінно змінює уявлення про структурне програмування. За допомогою функцій Ви можете багаторазово використовувати окремі частини програми, передаючи їм будь-які параметри. Жодну серйозну програму неможливо уявити без цього дива елемента програмування.

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

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

Як викликати функцію?

Щоб викликати функцію, необхідно її створити. Хоча існують так само вбудовані функції. Наприклад, це: cos, sin, md5, count, absі так далі. Для їхнього виклику необхідно лише привласнити змінної шукане значення.

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

Function hello() ( echo "Hello, world!"; )

Потім її викликаємо. Причому якщо вона не має параметрів, ми просто ставимо круглі дужки. Щоб викликати цю функцію, скористаємося лише рядком: hello();. Будь-яка функція може також повертати значення за допомогою зарезервованого слова return. Цей оператор припиняє виконання функції і посилає повертається значення в програму, що викликала. function sum($first, $second) ($r=$first + $second; return $r;) echo sum(2,5); результат виконання програми дорівнюватиме 7. Локальні та глобальні змінні

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

$per="Дима"; function primer() // Виконує: висновок локальної змінної ( echo "Мене звуть ".$per; ) echo primer();

У цьому випадку на екрані з'явиться фраза "Мене звуть". Це означає, що всередині функції primer створилася змінна $per і їй, за замовчуванням, було надано нульове значення. Для того, щоб уникнути таких косяків, потрібно скористатися оператором global. Відповідно до цього виправимо вищевикладений код:

$per="Дима"; function primer() // Виконує: висновок глобальної змінної ( global $per; echo "Мене звуть ".$per; ) echo primer();

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

Функції двох і більше аргументів

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

… function font($text, $size=5) // Виконує: виведення розміру шрифту (echo " ".$text.""; ) font("Привіт
",1); font("Привіт
",2); font("Привіт
",3); font("Привіт
",4); font("Привіт
",5); font("Привіт
",6); font("Привіт
");

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

Висновок

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

include_once("function.php");

require_once("function.php");

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

Настав час, щоб дізнатися про функції. Ви вже маєте уявлення про використання функції main — це ще один приклад функції. Загалом функції – це окремі незалежні блоки коду, які виконують ряд зумовлених команд. У мові програмування Сі можна використовувати як вбудовані функції різних бібліотек і функції, які ви створили самі, тобто свої власні функції.

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

#include // Підключення заголовка з функцією rand rand() int randomNumber = rand(); // Стандартна функція генерації випадкових чисел

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

Розглянемо загальний формат для прототипу функцій:

ReturnedDataType functionName (dataType par1, ..., dataType parN);

де, returnedDataType - тип даних, що повертається функцією, значення;
functionName - ім'я функції
dataType — тип даних параметра функції, це той самий тип даних, що і при оголошенні змінної
par1 ... parN – параметри функції.

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

Int mult (int x, int y);

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

Коли програміст фактично визначає функцію, він почне з прототипу, але крапку з комою вже не треба ставити. Відразу після прототипу йде блок із фігурними дужками та з кодом, який функція виконуватиме. Наприклад, як ви зазвичай пишете код всередині функції main . Будь-який з аргументів, переданих функції можна використовувати, якби вони були оголошені як звичайні змінні. І, нарешті, визначення функції закінчується фігурною дужкою, що закривається, без крапок з комою.

Давайте розглянемо приклад оголошення та використання функції у мові програмування Сі:

#include int multiplication(int num1, int num2); //прототип функції int main() ( int num1; int num2; printf("Введіть два числа для множення: "); scanf("%d", &num1); scanf("%d", &num2); printf(" Результат множення %d\n", multiplication(num1, num2)); // виклик функції getchar(); return 0; ) int multiplication(int num1, int num2) // визначення функції ( return num1 * num2; )

Ця програма починається з включення єдиного файлу заголовка, в рядку 1. Наступним рядком є ​​прототип функції множення. Зверніть увагу, що наприкінці оголошення прототипу є крапка з комою! Функція main повертає ціле число, у рядку 16. Щоб відповідати стандарту, функція main завжди повинна повертати деяке значення. У вас не повинно виникнути проблем із розумінням введення та виведення значень у функціях, якщо ви уважно вивчили попередні уроки.

Зверніть увагу на те, як насправді функція multiplication() приймає значення. Що ж відбувається насправді? А насправді це працює так: функція multiplication приймає два цілі значення, множить їх і повертає твір. Результат роботи цієї програми буде таким самим, якби ми зробили так:

Printf("Результат множення %d\n", num1 * num2);

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

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

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

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

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

PS: якщо вам потрібен хороший сервер, то ви можете скористатися орендою серверів у Москві. Також ви можете скористатися іншими послугами, наданими на сайті it-express.ru: розгортання стійких до відмов серверів, системи зберігання даних та ін.