На головну

Приклад виконання лабораторного завдання № 6

  1. B. Приклад аналізу.
  2. I частина завдання
  3. I. Завдання для самостійної роботи
  4. I. Методичні вказівки для виконання контрольних робіт
  5. I. Цілі і завдання виконання контрольної роботи
  6. II частина завдання
  7. II. ПОРЯДОК ВИКОНАННЯ ДИПЛОМНОГО ПРОЕКТУ

Індивідуальне завдання: Слова вихідного пропозиції розташувати в зворотному порядку. Розташування знаків пунктуації не змінювати.

Рішення передбачає виконання кількох дій:

1. Виведення інформації про призначення програми (заголовок програми).

2. Введення вихідного пропозиції.

3. Виділення з пропозиції слів.

4. Виділення з пропозиції розділових знаків.

5. Збірка нового пропозиції з слів і знаків по черзі.

6. Роздруківка результату.

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

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

Функція Title () - без параметрів, так як тільки лише виводить на екран набір рядків.

Функція введення пропозиції InpPredl (char predl []) має один параметр - пропозиція, яке треба заповнити. У записі цього параметра є відразу два моменти, на які треба звернути увагу: по-перше, як параметр передається одновимірний масив символів, тобто покажчик (параметр змінна), по-друге, в запису масиву не вказана розмірність масиву, а тільки відкривають і закривають квадратні дужки, так як досить передати лише адреса початку рядка.

Виділення з пропозиції слів і розділових знаків реалізується одним алгоритмом, тому можуть виконуватися однією і тією ж функцією виділення Select (const char * predl, char m [] [N], char * sel, int * n). Функція має чотири параметри:

1) predl - пропозиція, з якого йде виділення,

2) m - масив слів результату (під кожне слово передбачений розмір в N символів),

3) sel - адреса символів, що розташовуються між які виділяються елементами,

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

Функція складання нового пропозиції Constructor (char slova [] [N], char razd [] [N], int sl, int rz) - це дійсно функція, так як повертає покажчик на перший символ отриманої пропозиції. Призначення параметрів зрозуміло за назвами: масив слів, масив роздільників, кількість слів, кількість роздільників.

Висновок пропозиції функцією OutPredl (char * s1, char * s2) використовує два параметри: вихідне пропозицію і результат.

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

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

Тепер можете проаналізувати весь текст програми:

#include

#include

#include

#include

#define N 20

// ПОПЕРЕДНЄ ОГОЛОШЕННЯ ФУНКЦІЙ

// Тема програми

void Title ();

// Введення пропозиції

void InpPredl (char predl []);

// Виділення з пропозиції

void Select (const char * predl, char m [] [N], char * sel, int * n);

// Збірка пропозиції

char * Constructor (char slova [] [N], char razd [] [N], int sl, int rz);

// Висновок результату

void OutPredl (char * s1, char * s2);

inline void rus () // Русифікація виведення в консольне вікно

{

setlocale (LC_CTYPE, ".1251");

setlocale (LC_MONETARY, ".1251");

}

// ОСНОВНА ФУНКЦІЯ

int main ()

{

// ОГОЛОШЕННЯ ЗМІННИХ

char predl [80]; // Введене пропозицію

char * res; // Результуюче пропозицію

char slova [N] [N]; // Масив слів у реченні

char razd [N] [N]; // Масив роздільників в реченні

int sl = -1, rz = -1; // Лічильники слів і роздільників

char buk [80]; // Всі букви алфавіту

char * bs = "йцукенгшщзх'фивапролджеячсмітьбю"; // Букви рядкові

char * bz = "ЙЦУКЕНГШЩЗХ'ФИВАПРОЛДЖЕЯЧСМІТЬБЮ"; / * заголовні * /

char * r = " '!;:,.? - _"; // Розділові знаки

// ВИКЛИК ФУНКЦІЙ НА ВИКОНАННЯ

rus ();

// Тема програми

Title ();

// Введення пропозиції

InpPredl (predl);

// Виділення з пропозиції слів

Select (predl, slova, r, & sl);

// Виділення з пропозиції роздільників

strcpy (buk, "");

strcat (buk, bs);

strcat (buk, bz);

Select (predl, razd, buk, & rz);

// Збірка пропозиції

res = Constructor (slova, razd, sl, rz);

// Висновок результату

OutPredl (predl, res);

free (res);

return 0;

}

// ОПИС ВИКОРИСТОВУЮТЬСЯ ФУНКЦІЙ

// Тема програми

void Title ()

{

puts ( "Лабораторне завдання по темі № 6 \ n");

puts ( "Під введеному реченні розташуйте слова");

puts ( "в зворотній послідовності.");

puts ( "Порядок проходження знаків пунктуації не змінювати.");

puts ( "В пропозиції використовуються російські букви і знаки. \ n");

}

// Введення пропозиції

void InpPredl (char * s)

{

puts ( "Введіть пропозицію \ n");

strcpy (s, "Чи вірите ви, що завдання виконане?");

// Gets (s);

}

// Висновок результату

void OutPredl (char * s1, char * s2)

{

puts ( "Початкове пропозиція");

puts (s1);

puts ( "Результат");

puts (s2);

}

// Виділення з пропозиції

void Select (const char * predl, char m [] [N], char * sel, int * n)

{

char * p, * s;

s = strdup (predl); // Зробити копію вихідного пропозиції

// Так як передається константа, strtok вимагає

// Внесення змін при своїй роботі

p = strtok (s, sel);

while (p)

{

(* N) ++;

strcpy (m [* n], p);

p = strtok (NULL, sel);

}

free (s);

}

// Збірка пропозиції

char * Constructor (char slova [] [N], char razd [] [N], int sl, int rz)

{

int i, j;

char res [80];

char * s;

 * Res = 0; // Початкове значення результату

i = sl;

j = -1;

while ((i> = 0) || (j <= rz))

{

if ((i> = 0)) strcat (res, slova [i]); // Додавання слова

i--;

j ++;

if ((j <= rz)) strcat (res, razd [j]); // Додавання знаків

}

s = strdup (res);

return s;

}

варіанти завдань

1. У двох реченнях знайти і роздрукувати збігаються слова.

2. У реченні знайти слово, яке складається з найбільшої кількості голосних букв.

3. Роздрукувати слова, з яких складається пропозиція, в порядку зростання довжини слова.

4. У реченні знайти всі однокореневі слова. Корінь слова також заданий з клавіатури.

5. Видалити в реченні всі повторні входження слів і роздрукувати вийшло пропозицію.

6. Знайти в реченні слово, що складається з найбільшої кількості різних букв.

7. Виділити з пропозиції слова, що містять дві або більше однакові літери.

8. Надрукувати слова, що входять до пропозицію, в алфавітному порядку.

9. Видалити з пропозиції все приводи. Список прийменників заданий у другому реченні.

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

11. У всіх словах пропозиції видалити голосні букви і роздрукувати вийшло пропозицію.

12. Доповнити кожне слово пропозиції пробілами так, щоб його довжина дорівнювала довжині найдовшого слова. Роздрукувати вийшло пропозицію.

13. Початкове пропозицію, що складається з чотирьох слів, кожне з яких складається з чотирьох букв, наприклад, "Був ранок, рано співати." роздрукувати у вигляді: Бурп итае, лрнт оооь. Перше слово складається з перших букв слів, друге - з других, і так далі.

14. З клавіатури ввести два рядки. Один рядок - пропозиція російською мовою, а друга (під нею) складається з прогалин і знаків "мінус" або "дорівнює" (будемо вважати це підкресленням). Виділити і роздрукувати підкреслені слова. Наприклад, треба виділити слова «місць» і «доданків» в реченні:

Від зміни місць доданків сума не змінюється.

----- ========

15. Перевірте на збіг дві пропозиції. Кількістю пробілів між словами нехтувати. Розділові знаки - враховувати.

16. Видалити в реченні всі слова, що мають символи цифр і роздрукувати вийшло пропозицію.

17. Пропозиція складається з запису символів цифр, наприклад:

123434 53423 2344 6564.

Роздрукувати слова в порядку зростання.

Контрольні питання до теми № 6

1. Подання рядків в мові Сі.

2. Приклади ініціалізації рядків в тілі програми.

3. Бібліотечні функції мови Сі для обробки рядків.

4. Бібліотечні функції введення-виведення рядків.




Коротка теоретична довідка та рекомендації щодо виконання | Коротка теоретична довідка

Міністерство освіти і науки Російської федерації | Коротка теоретична довідка та рекомендації щодо виконання | Приклад виконання завдання по темі № 1 | Формули для вирішення завдань | Приклад виконання лабораторного завдання № 2 | Блок-схема вибору функції | Приклади виконання завдання по темі №3. | Приклад рішення задачі по темі №3 з використанням функцій. | Коротка теоретична довідка та рекомендації щодо виконання | Приклади функцій для роботи з одновимірними масивами |

© um.co.ua - учбові матеріали та реферати