Студопедия — За замовчуванням усі файли відкриваються в текстовому режимі
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

За замовчуванням усі файли відкриваються в текстовому режимі






Щоб закрити файл, використовується функція-член close ().

11.4. Зразок виконання роботи

Завдання. Потрібно розробити програму, яка визначає, скільки разів трапилося задане слово в текстовому файлі. Текст не містить перенесень слів. Максимальна довжина рядка у файлі невідома.

Визначимо слово в тексті як послідовність алфавітно-цифрових символів, після яких слідує або знак пунктуації, або роздільник. Як роздільники можуть виступати один або декілька пропусків, один або декілька символів табуляції '\t' і символ кінця рядка '\n'.

Для зберігання заданого слова (воно вводиться з клавіатури) визначимо змінну word типу string. Оскільки максимальна довжина рядка у файлі невідома, читатимемо файл послівно, розміщуючи чергове прочитане слово в змінній curword типу string. Таке читання можна реалізувати за допомогою операції > >, яка у разі операнда типу string ігнорує всі роздільники, що передують поточному слову, і прочитує символи поточного слова в змінну curword, доки не трапиться черговий роздільник.

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

bool equal(const string & cw, const string & w);

яка повертає значення true, якщо поточне слово cw співпадає із заданим словом w з точністю до знаку пунктуації, або false – інакше.

Маючи таку функцію, дуже просто скласти алгоритм основного циклу:

● прочитати чергове слово;

● якщо воно співпадає із заданим словом w (з точністю до знаку пунктуації), то збільшити на одиницю значення лічильника count.

Зверніть увагу на реалізацію функції equal() і, зокрема, на використання операції складання для додавання в кінець рядка w одного із знаків пунктуації.

#include " stdafx.h"

#include < fstream>

#include < string>

#include < iostream>

#include < conio.h>

#include < stdlib.h>

 

using namespace std;

 

bool equal(const string& cw, const string& w) {

char punct[] ={'.', ', ', '? ', '! '};

 

if(cw == w) return true;

for(int i = 0; i< sizeof(punct); ++i)

if(cw ==w+punct[i]) return true;

return false;

}

 

int main() {

string word, curword;

setlocale(LC_ALL, " Ukrainian");

cout < < " Введiть слово для пошуку: ";

cin > > word;

ifstream fin(" infile.txt", ios:: in);

if(! fin) { cout < < " Помилка вiдкриття файлу." < < endl;

return 1; }

 

int count = 0;

while(! fin.eof()) {

fin > > curword;

if(equal(curword, word)) count++;

}

cout < < " Кiлькiсть входжень слова: " < < count < < endl;

cout< < " Натиснiть будь-яку клавiшу! ";

while(! kbhit());

 

}

Рис. 1. Реалізація програми і вміст текстового файлу, з якого зчитувалась інформація

11.5. Індивідуальні завдання

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

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

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

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

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

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

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

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

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

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

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

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

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

Варіант 14. Потрібно розробити програму, яка зчитує текст з файлу, що знаходиться на диску у певному каталозі, і виводить його на екран, замінивши цифри від 0 до 9 на слова " нуль", " один"... " дев'ять", починаючи кожне речення з нового рядка.

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

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

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

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

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

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

11.6. Контрольні запитання

1. Як відбувається зв’язування і відокремлення потоку з файлом?

2. Який потік необхідно відкрити для роботи з файловими операціями?

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

4. В якому режимі відкриваються файли за замовчуванням?

5. Як перевірити чи відкритий потік і файл?

6. Яка функція використовується для отримання кількості зчитаних символів за останню операцію?

7. Як працює оператор > > при зчитуванні рядків?

8. Яка різниця між функцією get() i getline()?

9. Яка функція використовується для запису вмісту файлових буферів на диск і як вона працює?

10. Як можна перевірити статус введення-виведення?

11. Які функції використовуються для отримання доступу до вмісту файлу в довільному порядку (не послідовно байт за байтом)?


Лабораторна робота №12. Стандартна бібліотека шаблонів STL, контейнери та ітератори

МЕТА РОБОТИ: засвоїти технологію узагальненого об’єктного програмування з використанням бібліотеки стандартних шаблонів (STL) мови C++ для роботи з вбудованими і користувацькими типами даних.

12.1. Програма роботи

12.1.1. Отримати завдання.

12.1.2. Написати програми відповідних класів, основну та відповідні допоміжні функції, згідно з вказівками до виконання роботи.

12.1.3. Підготувати власні коректні вхідні дані (вказати їх формат і значення) і проаналізувати їх.

12.1.4. Оформити електронний звіт про роботу та захистити її.

12.2. Вказівки до виконання роботи

12.2.1. Студент, згідно з індивідуальним номером, вибирає своє завдання з розд. 12.5 і записує його до звіту.

12.2.2. Оголошення класу (структури), основну та відповідні допоміжні функції необхідно запрограмувати так, як це показано у розд. 12.4.

12.2.3. Власних вхідних даних необхідно підготувати не менше двох комплектів. Їхні значення мають бути коректними, знаходитися в розумних межах і відповідати тим умовам, які стосуються індивідуального завдання.

12.2.4. Звіт має містити такі розділи:

● мету роботи та завдання з записаною умовою задачі;

● коди всіх використовуваних.h і.ccp файлів, а також пояснення до них;

● результати реалізації програми;

● діаграма класів і варіантів використання;

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

12.3. Теоретичні відомості

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

Склад STL. Ядро бібліотеки утворять три елементи: контейнери, алгоритми й і тератори.

Контейнери (containers) – це об'єкти, призначені для зберігання інших елементів. Наприклад, вектор, лінійний список, множина.

Асоціативні контейнери (associative containers) дозволяють за допомогою ключів отримати швидкий доступ до значень, що зберігаються в них.

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

Ітератори (iterators) – це об'єкти, які стосовно контейнера відіграють роль покажчиків. Вони дозволяють одержати доступ до вмісту контейнера приблизно так само, як покажчики використовуються для доступу до елементів масиву.

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

 

Існує п'ять типів ітераторів:

1. Ітератори введення (input_iterator) підтримують операції рівності, разыменования й инкремента.

==,! =, *i, ++i, i++, *i++

Спеціальним випадком ітератора введення є istream_iterator.

2. Ітератори виведення (output_iterator) підтримують операції разыменования, припустимі тільки з лівої сторони присвоювання, і инкремента.

++i, i++, *i=t, *i++=t

Спеціальним випадком ітератора виводу є ostream_iterator.

3. Односпрямовані Ітератори (forward_iterator) підтримують всі операції ітераторів уведення/виводу й, крім того, дозволяють без обмеження застосовувати присвоювання.

==,! =, =, *i, ++i, i++, *i++

4. Двонаправлені Ітератори (biderectional_iterator) мають всі властивості forward-ітераторів, а також мають додаткову операцію декремента (--i, i--, *i--), що дозволяє їм проходити контейнер в обох напрямках.

5. Ітератори довільного доступу (random_access_iterator) мають всі властивості biderectional-ітераторів, а також підтримують операції порівняння й адресної арифметики, тобто безпосередній доступ по індексі.

i+=n, i+n, i-=n, i-n, i1-i2, i[n], i1< i2, i1< =i2, i1> i2, i1> =i2

В STL також підтримуються зворотні Ітератори (reverse iterators). Зворотними ітераторами можуть бути або двонаправлені Ітератори, або Ітератори довільного доступу, але мають послідовність у зворотному напрямку.

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

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

За замовчуванням розподільником пам'яті є об'єкт класу allocator. Можна визначити власний розподільник.

У деяких алгоритмах і контейнерах використовується функція особливого типу, називана предикатом. Предикат може бути унарним і бінарним. Значення, що повертає: істина або неправда. Точні умови одержання того або іншого значення визначаються програмістом. Тип унарних предикатів UnPred, бінарних – BinPred. Тип аргументів відповідає типу об'єктів, що зберігаються в контейнері.

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

Особливу роль в STL грають об'єкти-функції.

Об'єкти-функції (це екземпляри класу, у якому визначена операція «круглі дужки» (). У ряді випадків зручно замінити функцію на об'єкт-функцію. Коли об'єкт-функція використовується як функція, то для її виклику використовується operator ().

Класи-контейнери. В STL визначені два типи контейнерів: послідовності й асоціативні.

Ключова ідея для стандартних контейнерів укладається в тім, що коли це представляється розумним, вони повинні бути логічно взаємозамінними. Користувач може вибирати між ними, ґрунтуючись на міркуваннях ефективності й потреби в спеціалізованих операціях. Наприклад, якщо часто потрібен пошук по ключу, можна скористатися map (асоціативним масивом). З іншого боку, якщо переважають операції, характерні для списків, можна скористатися контейнером list. Якщо додавання й видалення елементів часто проводиться в кінці контейнера, варто подумати про використання черги queue, черги із двома кінцями deque, стека stack. За замовчуванням користувач повинен використати vector; він реалізований, щоб добре працювати для самого широкого діапазону завдань.

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

В STL визначені наступні класи-контейнери (у кутових дужках зазначені заголовні файли, де визначені ці класи):

bitset множина бітів < bitset.h>
vector динамічний масив < vector.h>
list лінійний список < list.h>
deque двостороння черга < deque.h>
stack стік < stack.h>
queue черга < queue.h>
priority_queue черга із пріоритетом < queue.h>
map асоціативний список для зберігання пар ключ / значення, де з кожним ключем зв'язане одне значення < map.h>
multimap з кожним ключем зв'язано два або більше значення < map.h>
set множина < set.h>
multiset множина, у якому кожний елемент не обов'язково унікальний < set.h>






Дата добавления: 2014-11-10; просмотров: 1809. Нарушение авторских прав; Мы поможем в написании вашей работы!



Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...

Важнейшие способы обработки и анализа рядов динамики Не во всех случаях эмпирические данные рядов динамики позволяют определить тенденцию изменения явления во времени...

ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...

Теория усилителей. Схема Основная масса современных аналоговых и аналого-цифровых электронных устройств выполняется на специализированных микросхемах...

Броматометрия и бромометрия Броматометрический метод основан на окислении вос­становителей броматом калия в кислой среде...

Метод Фольгарда (роданометрия или тиоцианатометрия) Метод Фольгарда основан на применении в качестве осадителя титрованного раствора, содержащего роданид-ионы SCN...

Потенциометрия. Потенциометрическое определение рН растворов Потенциометрия - это электрохимический метод иссле­дования и анализа веществ, основанный на зависимости равновесного электродного потенциала Е от активности (концентрации) определяемого вещества в исследуемом рас­творе...

Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит...

Кран машиниста усл. № 394 – назначение и устройство Кран машиниста условный номер 394 предназначен для управления тормозами поезда...

Приложение Г: Особенности заполнение справки формы ву-45   После выполнения полного опробования тормозов, а так же после сокращенного, если предварительно на станции было произведено полное опробование тормозов состава от стационарной установки с автоматической регистрацией параметров или без...

Studopedia.info - Студопедия - 2014-2024 год . (0.012 сек.) русская версия | украинская версия