Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Lab_APR_4

.doc
Скачиваний:
14
Добавлен:
16.03.2016
Размер:
68.1 Кб
Скачать
  1. ВИВЧЕННЯ МОЖЛИВОСТЕЙ МОВИ С++ ПРИ РОБОТІ ІЗ ТЕКСТОВИМИ ФАЙЛАМИ

    1. Мета роботи

Вивчення можливостей мови С++ при роботі із текстовими файлами. Отримання практичних навичок використання текстових файлів при вирішенні практичних задач.

    1. Організація самостійної роботи студентів

Під час підготовки до виконання лабораторної роботи необхідно вивчити індивідуальне завдання (п. 4.3), виконати розробку алгоритму вирішення задачі та підготовити текст програми щодо реалізації розробленого алгоритму, підготовити відповідні розділи звіту та вивчити відповідний теоретичний матеріал, який викладено у лекціях: „Типи даних мови С++”, „Символьні та логічні змінні і вирази. Масиви та текстові строки”, та у наступних підручниках і навчальних посібниках [1, 4, 5, 7, 8].

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

  1. Функції, що визначають тип символу, – чи є він буквою, цифрою, пробілом, розділовим знаком та інше. Це функції описані в стандартному заголовному файлі "ctype.h". Функції, що стосуються букв, працюють тільки для латинського алфавіту;

  2. Функції для роботи з текстовими рядками. Рядком у Сі вважається послідовність байтів, обмежена наприкінці нульовим байтом. Функції роботи з рядками описані в стандартному заголовному файлі "string.h".

Бібліотека Сі надає наступні функції для визначення типу символів, описаних в стандартному заголовному файлі "ctype.h":

int isdigit(int c);

символ c – цифра;

int isalpha(int c);

c – латинська буква;

int isspace(int c);

c – пробіл, переклад рядка й т.п.;

int ispunkt(int c);

c – розділовий знак;

int isupper(int c);

c – прописна латинська буква;

int islower(int c);

c – рядкова латинська буква;

int toupper(int c);

якщо c – латинська буква, то перетворити c у прописну букву;

int tolower(int c);

якщо c – латинська буква, то перетворити c у малу літеру.

Функції, що починаються із префікса is, повертають ненульове значення (тобто істину), якщо символ з кодом c належить зазначеному класу, і нульове значення у протилежному випадку. Функції toupper та tolower перетворюють латинські букви до верхнього або нижнього регістра, на інших символах вони діють тотожно.

Прототипи найбільше часто використовуваних функцій для роботи з текстовими рядками наведені нижче:

  • визначення довжини рядка:

size_t strlen(const char *s); довжина рядка.

  • копіювання рядків:

char *strcpy(char *dst, const char *src); копіювати рядок src у рядок dst;

char *strncpy(char *dst, const char *src, size_t maxlen); копіювати рядок src в dst, не більше maxlen символів;

char *strcat(char *dst, const char *src); копіювати рядок src у кінець dst (конкатенація рядків);

- робота з довільними масивами байтів:

void *memmove(void *dst, const void *src, size_t len); копіювати область пам'яті з адресою src розміром len байтів в область пам'яті з адресою dst;

void *memset(void *dst, int value, size_t len); записати значення value у кожний з len байтів, починаючи з адреси dst;

- порівняння рядків:

int strcmp(const char *s1, const char *s2);

лексикографічне порівняння рядків s1 та s2. Результат нульовий, якщо рядки рівні, негативний, якщо перший рядок менше ніж другий, і позитивний, якщо перший рядок більше другого;

int strncmp(const char *s1, const char *s2, size_t maxlen);

порівняння рядків s1 та s2. Порівнюються не більше maxlen символів;

int memcmp(const void *m1, const void *m2, size_t len);

порівняння областей пам'яті з адресами m1 та m2 розміром len кожна.

  • пошук:

char *strchr(const char *s, int c);

знайти перше входження символу c у рядок s. Функція повертає покажчик на знайдений символ або нуль у випадку невдачі;

char *strstr(const char *s1, const char *s2);

знайти перше входження рядка s2 у рядок s1. Функція повертає покажчик на знайдену підстроку в s1, яка дорівнює рядку s2, або нуль у випадку невдачі.

4.3 Варіанти індивідуальних завдань

1 Кожний елемент вхідного файлу має таку структуру:

<прізвище>, <номер групи>, <оцінка 1>, <оцінка 2>, <оцінка 3>.

При цьому прізвище має не більше 12 символів, номер групи – ціле від 101 до 116, кожна оцінка – це 2,3,4 або 5. Перша оцінка – за екзамен по матаналізу, друга – по фізиці, а третя – по програмуванню. Дані по студентах відокремлюються знаком «;». Необхідно написати програму, яка виводить наступну інформацію:

    1. Прізвища студентів, які мають хоча б одну заборгованість з предметів;

    2. Прізвища студентів, які мають заборгованість по усім предметам;

    3. Прізвища студентів, які мають заборгованість за двома предметами

    4. «Якість» навчання, тобто процент студентів, які здали всі екзамени на 5 та 4;

    5. Прізвища студентів, які мають середній бал 4 та вище;

    6. Назву дисципліни, успішність за якою найкраща;

    7. Назву дисципліни, успішність за якою найгірша;

    8. Вивести прізвище студента (студентів), якій має найкращі оцінки;

    9. Прізвища студентів, які мають середній менше 4;

    10. Номера груп за порядком зменшення середньої успішності студентів.

2 Вхідний файл зберігає наступну інформацію по студентах:

<прізвище>, <ім’я>, <по-батькові>, <рік народження>, <курс>, <стать>,

причому прізвище, ім’я та по-батькові мають не більше 12 символів, стать – вказується символами Ч та Ж, рік народження – ціле з 4 цифр, курс – ціле від 1 до 5. Дані по студентах відокремлюються знаком «;».Необхідно написати програму, яка виводить наступну інформацію:

    1. Вивести фамілію студентів, дата народження яких зустрічається найрідше;

    2. Номер курсу, на якому найбільша кількість чоловіків;

    3. Найбільш розповсюджене чоловіче ім’я;

    4. Найбільш розповсюджене жіноче ім’я;

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

    6. Номер курсу, на якому найбільша кількість жінок;

    7. Вивести кількість чоловіків та жінок по даті народження;

    8. Вивести кількість студентів по курсу;

    9. Вивести загальну кількість чоловіків та жінок;

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

3 Вхідний файл включає текст із цифр та строкових латинських букв, за якими стоїть символ «.».

    1. Необхідно визначити, яких голосних (а, е, і, o, и) або неголосних – більше у цьому тексті.

    2. Який символ зустрічається найчастіше;

    3. Яка найбільша кількість неголосних, які стоять поруч;

    4. Яка кількість цифр та кількість букв зустрічається у рядку

4 Вхідний файл включає текст, за яким стоїть знак «.».

    1. Необхідно у алфавітному порядку надрукувати усі голосні та окремо неголосні букви, які входять до цього тексту.

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

4.4 Контрольні питання та завдання

  1. Яким чином представляються символьні змінні?

  2. Що таке текстові строки? Як вони описуються?

  3. Назвіть та приведіть прототипи операцій відкриття та закриття файлу.

  4. Як виконується діагностування помилок при відкритті та закритті файлу: функція ferror?

  5. Надайте приклади використання функцій бінарного читання та запису fread, fwrite?

  6. Які дії виконує функція fclose?

  7. Які дії виконують функції форматного введення-виведення fscanf, fprintf?

  8. Які правила використання функцій текстового перетворення sscan, sprint?

  9. Яким чином виконується посимвольне введення-виведення даних? Наведіть приклади.

  10. Яким чином виконується построкове введення-виведення даних? Наведіть приклади.

  11. Які функції можна застосовувати для роботи з текстами?

  12. Які функції можна застосовувати для роботи з текстовими строками?

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]