лекція 07

/ * Тип повертаються даних функції * / / * ім'я функції * / (/ * параметри функції * /);

// palindrom_func.cpp: визначає точку входу для консольного застосування.

usingnamespace std;

bool palindrom5 (int); // прототип функції знаходження паліндрома п'ятизначних чисел

int main (int argc, char * argv [])

cout <<"Enter 5zn-e chislo: "; // введите пятизначное число

int in_number, out_number; // змінні для зберігання введеного п'ятизначного числа

cin >> in_number;

out_number = in_number; // в змінну out_number зберігаємо введене число

if (palindrom5 (in_number)) // якщо функція поверне true, то умова істинно, інакше функція поверне false - хибно

cout <<"Number " <

cout<<"This is not palendrom"<

bool palindrom5 (int number) // функція знаходження паліндрома п'ятизначних чисел

int balance1, balance2, balance4, balance5; // змінні зберігають проміжні результати

balance1 = number% 10; // змінної balance1 присвоїли перший розряд п'ятизначного числа

number = number / 10; // зменшуємо введене число на один розряд

balance2 = number% 10; // змінної balance2 присвоїли другий розряд

number = number / 100; // зменшуємо введене число на два розряду

balance4 = number% 10; // змінної balance4 присвоїли четвертий розряд

number = number / 10; // зменшуємо введене число на один розряд

balance5 = number% 10; // змінної balance5 присвоїли п'ятий розряд

if ((balance1 == balance5) (Balance2 == balance4))

returntrue; // функція повертає істинне значення

returnfalse; // функція повертає помилкове значення

створення файлу типу * .cpp, в якому оголошуються функції;

створення файлів типу * .cpp і * .h.

// код файлу palendrom.h

bool palindrom5 (int); // прототип функції знаходження паліндрома п'ятизначних чисел

// вміст файлу palendrom.cpp

bool palindrom5 (int number) // функція знаходження паліндрома п'ятизначних чисел

int balance1, balance2, balance4, balance5; // змінні зберігають проміжні результати

balance1 = number% 10; // змінної balance1 присвоїли перший залишок

number = number / 10; // зменшуємо введене число на один розряд

balance2 = number% 10; // змінної balance2 присвоїли другий залишок

number = number / 100; // зменшуємо введене число на два розряду

balance4 = number% 10; // змінної balance4 присвоїли четвертий залишок

number = number / 10; // зменшуємо введене число на один розряд

balance5 = number% 10; // змінної balance5 присвоїли п'ятий залишок

if ((balance1 == balance5) (Balance2 == balance4))

returntrue; // функція повертає істинне значення

returnfalse; // функція повертає помилкове значення

// Передача покажчика функції - виправлена ​​версія.

using namespace std;

Виклик функцій з масивами

using namespace std;

void display (int num [10]);

for (i = 0; i<10; ++i) t[i]=i;

display (t); // Передаємо функції масив t

// Функція виводить всі елементи масиву.

void display (int num [10])

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

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

void display (int num [])

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

Тут параметр num оголошується як цілочисельний масив невідомого розміру.

void display (int * num)

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

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

using namespace std;

void display (int num);

for (i = 0; i<10; ++i) t[i]=i;

for (i = 0; i<10; i++) display(t[i]);

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

Довжина рядка ПРИВІТ ВСІМ дорівнює: 11

В якості вправи вам варто було б спробувати самостійно реалізувати інші строкові функції, наприклад strcpy () або strcat (). Цей тест дозволить дізнатися, наскільки добре ви освоїли такі елементи мови C ++, як масиви, рядки і покажчики.

Аргументи функції main (): argc і argv

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

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

Тут елемент prog_name - ім'я програми, яку ми хочемо скомпілювати. Ім'я програми передається С ++ - компілятор як аргумент командного рядка.

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

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

Параметр argc має цілочисельний тип і призначений для зберігання кількості аргументів командного рядка. Його значення завжди не менш одиниці, оскільки ім'я програми також є одним з врахованих аргументів. Параметр argv є покажчик на масив символьних покажчиків. Кожен покажчик в масиві argv посилається на рядок, що містить аргумент командного рядка. Елемент argv [0] вказує на ім'я програми; елемент argv [1] - на перший аргумент, елемент argv [2] - на другий і т.д. Всі аргументи командного рядка передаються програмі як рядки, тому числові аргументи необхідно перетворити в програмі в відповідний внутрішній формат.

Важливо правильно оголосити параметр argv. Зазвичай це робиться так.

Доступ до окремих аргументів командного рядка можна отримати шляхом індексації масиву argv. Як це зробити, показано в наступній програмі. При її виконанні на екран виводиться привітання ( "Привіт"), а за ним - ваше ім'я, яке повинно бути першим аргументом командного рядка.

using namespace std;

int main (int argc, char * argv [])

cout <<"Вы забыли ввести свое имя.\n";

cout <<"Привет, " <

Припустимо, що вас звуть Том і що ви назвали цю програму ім'ям name. Тоді, якщо запустити цю програму, ввівши команду name Том. результат її роботи повинен виглядати так: Привіт, Том. Наприклад, ви працюєте з диском А, і у відповідь на запрошення на введення команди повинні ввести згадану вище команду і отримати наступний результат.

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

/ * Ця програма посимвольний виводить всі аргументи командного рядка, з якими вона була викликана.

using namespace std;

int main (int argc, char * argv [])

for (t = 0; tcout <

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

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

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

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

/ * Ця програма відображає суму двох числових аргументів командного рядка.

using namespace std

int main (int argc, char * argv [])

cout <<"Использование: add число число\n";

Щоб скласти два числа, використовуйте командний рядок такого виду (припускаючи, що ця програма має ім'я add).

C> add 100.2 231

Перетворення числових рядків в числа

Стандартна бібліотека C ++ включає кілька функцій, які дозволяють перетворити строкове представлення числа в його внутрішній формат. Для цього використовуються такі функції, як atoi (). atol () і atof (). Вони перетворять рядок в цілочисельне значення (типу int), довге ціле (типу long) і значення з плаваючою точкою (типу double) відповідно. Використання цих функцій (для їх виклику необхідно включити в програму заголовки ) Демонструється в наступній програмі.

// Демонстрація використання функцій atoi (), atol () і atof ().

using namespace std;

cout <

Результати виконання цієї програми такі.

100 100000 -0.123

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

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

Схожі статті

Copyright © 2024