Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lexzii_08 / lexs_5_param.DOC
Скачиваний:
12
Добавлен:
17.05.2015
Размер:
92.67 Кб
Скачать

Робота з параметрами – рядками має деякі особливості.

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

Програма використовує функцію getwrd для введення символів і формування з них слів; вона повертає результат типу int:

  • 0 – якщо знайдено кінець файлу ;

  • 1 – якщо виділено чергове слово;

Вбудовані функції:

  • isalpha – для аналізу введеного символу; якщо введена буква , функція повертає літеру, якщо “не літера ”повертає – 0;

  • tolower –для перетворення рядкових (маленьких) літер у великі.

Формальним параметром функції getwrd є wrd – покажчик на рядок, фактичним - word – ім’я масиву символьних даних.

Програма демонструє результати для такого рядка із трьох слів, введених з клавіатури АBс dE F123N ^Z

Лістинг – Програма введення тексту з клавіатури, формування слів і виведення їх на екран

# include <stdiо.h>

# include <ctype.h> // для isalpha

# include <conio.h>

FILE *f;

void main ()

{ char word [80]; // масив символів

int getwrd (char * wrd);

f=fopen (“con”, “w”); clrscr ( )

fprintf (f, “\n введіть літерний текст! Для завершення натисніть ^z\n & word = %u\n”, &word);

while ( getwrd (word) ) // виклик функції getwrd

fprintf (f, “word = %s\n”, word);

fclose ( );

getch ( );

} //кінець функції main

//--- функція введення символів і формування з них слів:----

int getwrd (char *wrd) //параметр wrd - покажчик на рядок

{int ch;

// пошук першого літерного символа:

while (! isalapha (ch = getchar ()) && ch! = EOF);

if (ch = = EOF) // аналіз кінця файлу

return (0);

*wrd ++ = tolower (ch); //формування 1-го символу слова

while ( isalpha (ch=getchar( )))

*wrd++=tolower(ch); //формування символу слова

*wrd = “\0” // формування кінця рядка

return (1);

}

Результати виконання програми

Введіть текст! &word = 65418

word = abc

word = de

word = f

word = n

Програма виконується таким чином. Спочатку видає запит на введення тексту і виводить адресу масиву word. Для введення тексту набирають ряд слів і натискають Сtrl/z. Введений текст записується в буфер. А потім за допомогою функції getwrd текст вводиться посимвольно, з нього виділяються слова і виводяться великими буквами. Якщо в кінці немає Сtrl/z, то програма знову чекає введення.

Виклик функції getwrd проводиться із умови оператора while, або іншими словами умовного оператора while є значення результата, який повертає функція getwrd:

Робота алгоритму функції відбувається так:

1) якщо функція getwrd оператором return повертає значення 1, тобто слово знайдено, виводиться сформоване слово за допомогою оператора

fprintf (f, “word = %s\n”, word);

2) якщо повертає 0, тобто слово не виділено, тому що кінець файла, то воно не виводиться і виконання програми завершується.

Спочатку проводиться пошук першого літерного символа.Для цього вводиться ch – черговий символ тексту. Потім проводиться його аналіз:

  1. якщо вираз ch! = літера і ch! = EOF – істинна, тобто значення введеного символа не буква і не кінець файла ,то відбувається введення наступного символа;

  2. якщо вираз ch! =літера і ch! = EOF – хибний, тобто кінець файла або введена буква, то аналізується введений символ;

а) якщо ch = = EOF,тобто введено символ ознаки “кінця файлу”,то виконання функції getwrd завершується і в якості результату повертається 0.

б) якщо ch != EOF, тобто введена літера, то з неї формується нульовий символ слова wrd за допомогою функції tolower:

*wrd ++ = tolower (ch);

Потім вводиться ch – черговий символ і знову аналізується:

1) якщо isalpha (ch)! = 0, тобто ch = = літера, з неї формується чеговий символ результату за допомогою функції tolower:

*wrd ++ = tolower (ch);

2) якщо isalpha (ch) = 0, тобто ch – не буква, тобто формування літери завершено і формується символ кінця рядка : *wrd = \0; виконання функції getwrd завершується і повертається 1.

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

1.Яка функція є в будь-якій програмі на СІ?

2.З яких частин складається функція?

3.Що таке аргумент?А параметр?

4.Що таке бібліотечні функції? Що потрібно зробити, щоб ваша програма отримала доступ до бібліотечних функцій?

5.Приведіть порівняння зовнішньої і локальної змінної. Коли оголошується кожна з них?

6.Чи має сенс використовувати статичні змінні в функції main? Коли?

7.Що таке автоматична змінна?Статична змінна?

8.Назвіть причину для використання статичних змінних.

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

10.Як передати функції масив? Можливий такий ж спосіб передачі для рядків?

11.Як забезпечити повернення із функції декількох величин?

12.Назвіть чотири основних елемента необхідних при роботі зі змінним списком параметрів(Всі починаються з va__ .).

13.Дайте визначення рекурсії. Які ресурси витрачаються при використанні рекурсії?

Соседние файлы в папке lexzii_08