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


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

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



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

Структура класу має такий вигляд:

class CSlov{

FILE *f; // Вказівник на файл

int k;

char c,c1;

public:

CSlov(); // Конструктор

~CSlov(); // Деструктор

void Procesing();

};

Лістинг програми:

#include <stdio.h>

#include<stdlib.h>

#include <conio.h>

#define F "C:/TC/lab/lab4_1.txt"

class CSlov{

FILE *f;

int k;

char c,c1;

public:

CSlov();

~CSlov();

void Procesing(); };

CSlov::CSlov()

{

clrscr();

f=fopen(F, "r");

if(f == NULL)

{

printf("Can't open file %s for read.", F);

getch();

exit(0);} }

CSlov::~CSlov()

{

fclose(f);

}

void CSlov::Procesing()

{

k=0;c1='z';

while(!feof(f))

{

c=fgetc(f);

if(c==' ')

{

if(c==c1)

{

printf("%c",c);

continue;

}

c1=c;

k++;

}

c1=c;

printf("%c",c);

}

printf("\n\nkolichestvo slov=%d",k+1);

getch();

}

void main()

{

CSlov obj;

obj.Procesing();

}

Тестування:

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

Ckotland Goverla gora Nevada reka voda trava figura helo klaviatura

Наочно видно, що в цьому файлі знаходиться 10 слів.

Перевіримо, який результат видасть програма:

Ckotland Goverla gora Nevada reka voda trava figura helo klaviatura

kolichestvo slov=10

Приклад виконання завдання 2

Варіант 2. Розробити метод (функцію) для дозапису даних у середину існуючого двійкового файлу з заданої позиції.

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

Структура класу має такий вигляд:

class CVstavka{

FILE *f; // Вказівник на файл

char s[100],s1[100],s2[200];

int l,l1,l2,k;

public:

CVstavka(); // Конструктор

~CVstavka(); // Деструктор

void Procesing();};}

Лістинг програми:

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

#include <string.h>

#define F "C:/TC/lab/lab4_2.dat"

class CVstavka{

FILE *f;

char s[100],s1[100],s2[200];

int l,l1,l2,k;

public:

CVstavka();

~CVstavka();

void Procesing();

};

CVstavka::CVstavka()

{ clrscr();

f=fopen(F, "r+b");

if(f == NULL)

{

printf("Can't open file %s for read.", F);

getch();

exit(0);

} }

CVstavka::~CVstavka()

{

fclose(f);

}

void CVstavka::Procesing()

{

fseek(f,0,0);

fread(s1,sizeof(char),50,f);

puts(s1);

printf("\n\nvvedite frazy dla sohronenia v file\n");

gets(s);

l=strlen(s);

printf("vvedite pozitsiu sohranenia stroki\n");

scanf("%d",&k);

strncpy(s2,s1,k);

l2=strlen(s2);

fseek(f,k,0);

fread(s1,sizeof(char),50-k,f);

l1=strlen(s1);

fseek(f,0,0);

fwrite(s2,sizeof(char),l2,f);

fwrite(s,sizeof(char),l,f);

fwrite(s1,sizeof(char),l1-k,f);

fseek(f,0,0);

fread(s1,sizeof(char),50+l,f);

printf("\n\n");

puts(s1);

getch();

}

void main()

{

CVstavka obj;

obj.Procesing();

}

Тестування:

Для тестування програми спочатку створимо бінарний файл за допомогою програми. Нехай цей файл буде такого виду:

Norvegia doroga solntse robot poroh fontan

Тепер в даний файл вставимо слово, наприклад robota, на позицію починаючи з 13 байта. Шляхом ручної вставки отримаємо такий перетворений файл:

Norvegia dororobotaga solntse robot poroh fontan

Введемо ці ж дані у програму і перевіримо результат.

Виконання програми:

Norvegia doroga solntse robot poroh fontan

Vvedite frazy dla sohronenia v file

Robota

Vvedite pozitsiu sohranenia stroki

Norvegia dororobotaga solntse robot poroh fontan

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

1. Специфікатори доступу.

2. Як описуються функції-члени класу?

3. Що таке екземпляр класу?

4. Що відносять до даних-членів класу?

5. Як здійснюється ініціалізація даних-членів класу?

6. Що таке конструктор? Наведіть приклад.

7. Що таке деструктор? Наведіть приклад.

8. Правила роботи з конструктором. Наведіть приклади.

9. Правила роботи з деструктором. Наведіть приклади.

10. Правила програмної організації конструктора в С++.

11. Правила програмної організації деструктора в С++.

12. Призначення конструктора.

13. Призначення деструктора.

14. Структура конструктора.

15. Структура деструктора.

16. Вимоги до вхідних даних конструктора та деструктора.

17. Вимоги до вихідних даних конструктора та деструктора.

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

Лабораторна робота №5

Тема: Розробка програм з використанням принципів простого спадкування.

Мета: Набуття навичок в проектуванні найпростіших ієрархій класів, розробка найпростіших програм з використанням ієрархії класів.

Порядок виконання роботи

1. Ознайомитися з теоретичними основами розробки ієрархії класів та правилами їх використання.

2. Розробити ієрархію з мінімум 2 класами для роботи з текстовими даними (масивом рядків) яка складається з:

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

б) похідного класу, що містить функцію з завдання 1.

3. Розробити тести для перевірки вірності даної програми.

4. Оформити звіт до лабораторної роботи.

Завдання 1

Варіант 1. Розробити метод-член похідного класу копіювання заданої кількості символів з заданої позиції в заданий рядок.

Варіант 2. Розробити метод-член похідного класу визначення частоти повторення символів.

Варіант 3. Розробити метод-член похідного класу видалення заданої кількості символів з заданої позиції.

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

Варіант 5. Розробити метод-член похідного класу визначення кількості слів, які повторюються.

Варіант 6. Розробити метод-член похідного класу визначення кількості повторювань заданого набору символів.

Варіант 7. Розробити метод-член похідного класу визначення кількості слів в заданому тексті.

Варіант 8. Розробити метод-член похідного класу вставки заданого рядка в початок тексту.

Варіант 9. Розробити метод-член похідного класу вставки заданого рядка в кінець тексту.

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

Завдання 2

Номери варіантів наведені в таблиці 5.1.

2.1. Розробити базовий клас «Елемент».

Поля:

· ім'я елемента (покажчик на рядок символів);

· кількість входів елемента;

· кількість виходів елемента.

Методи:

· конструктор класу;

· деструктор класу;

· метод, що задає ім'я елемента.

2.2. На основі класу «Елемент» описати похідний клас «Комбінаційний», що представляє собою комбінаційний елемент (двійковий вентиль), що може мати кілька входів і один вихід.

Поля:

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

Методи:

· конструктор;

· конструктор копіювання;

· деструктор;

· метод, що задає значення на входах екземпляра класу;

· метод, що дозволяє опитувати стан окремого входу екземпляра класу;

· метод, що обчислює значення виходу (по варіанту завдання);

2.3. На основі класу «Елемент» описати похідний клас «Пам'ять», що представляють собою тригер. Тригер має входи, що відповідають типу тригера (див. нижче варіант завдання), і входи установки і скидання. Усі тригери вважаються синхронними, сам синхровхід до складу тригера не включається.

Поля:

- масив значень входів об'єкта класу (задається статично), у масиві враховуються усі входи (керуючі й інформаційні);

· стан на прямому виході тригера;

· стан на інверсному виході тригера.

Методи:

· конструктор (за замовчуванням скидає екземпляр класу);

· конструктор копіювання;

· деструктор;

· метод, що задає значення на входах екземпляра класу;

· методи, що дозволяють опитувати стан окремого входу екземпляра класу;

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

· метод, що перевизначає операцію == для екземплярів класу.

2.4. Створити клас «Регістр», використовуючи клас «Пам'ять» як «вмикаючий» клас.

Поля:

· стан входу «Скидання» — один для екземпляра класу;

· стан входу «Установка» — один для екземпляра класу;

· статичний масив типу «Пам'ять» заданої у варіанті розмірності;

· статичний(і) масив(и), що містить значення на відповідних входах елементів масиву типу «Пам'ять».

Методи:

· метод, що задає значення на входах екземпляра класу (бажано як параметри передавати методу покажчики на масиви значень);

· метод, що дозволяє опитувати стан окремого виходу екземпляра класу;

· метод, що обчислює значення нового стану екземпляра класу;

Усі поля класів «Елемент», «Комбінаційний» і «Пам'ять» повинні бути описані з ключовим словом privatе.

У завданні перераховані тільки обов'язкові члени і методи класу. Можна задавати додаткові члени і методи, якщо вони не заперечують обов'язковим і забезпечують додаткові зручності при роботі з даними класами, наприклад, описати функції обчислення виходу/стану як віртуальні.

2.5. Для перевірки функціонування створених класів написати програму, що використовує ці класи. У програмі повинні бути продемонстровані усі властивості створених класів.

Конкретний тип комбінаційного елемента, тип тригера і розрядність регістра вибираються відповідно до варіанта завдання.

Таблиця 5.1 – Варіанти завдання 2

Варіант Комбінаційний елемент Число входів Тригер Розрядність регістра
  НІ   RS  
  АБО   RST  
  МОД2-НІ   D  
  І   T  
  НІ   V  
  І   RS  
  НІ   JK  
  МОД2   D  
  І   T  
  АБО   JK  
  НІ   RS  
  НІ   RST  
  МОД2   D  
  МОД2-НІ   T  
  НІ   V  
  І   JK  
  НІ   RS  
  АБО   T  
  МОД2   JK  
  МОД2-НІ   V  

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

Принципи спадкування в ООП

Просте спадкування

Просте спадкування описує споріднення між двома класами, один у якого успадковує другий.

Клас, що знаходиться на вершині ієрархії, називається базовим класом

Інші класи називаються похідними класами.

Рисунок 4 -

Правила спадкування

1. З одного базового класу можуть створюватися багато класів, залишаючись різновидом простого спадкування

Рисунок 5 -

2. Похідний клас і сам може бути базовим, котрий успадковує інші класи.

Рисунок 6 -

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

4. Похідний клас успадковує з базового дані-члени і функції-члени, але не конструктори і деструктори.

Наприклад, на малюнку 3 похідний клас А успадковує властивості базового класу; похідний клас В успадковує крім цих і нові властивості класу А; похідний клас С успадковує властивості верхнього базового класу і похідних класів А і В.

То похідний клас починає своє існування з копіювання членів базового класу, включаючи всі члени, успадковані з більш далеких.

Оголошення похідних класів

Розглянемо базовий клас CBase:

Class CBase

{

Private:

int count;//Закриті дані класу

Public:

CBase ();{count=0;}

void Set Count(int n){count=n;}// Конструктор

int Get Count (void) {return count;}

};

Член count відноситься до закритих даних класу. Тільки функції-члени CBase можуть безпосередньо посилатися на count. Конструктор CBase() ініціалізує count нульовим значенням; функція-член Set Count() привласнить count нове значення. Функція-член Get Count() повертає поточне значення count. Для спрощення коду конструктор CBase і обидві функції виконані як вбудовані.

Створимо новий клас похідний CDerіved, що має усі властивості CBase, але крім того, здатний збільшувати і зменшувати значення об'єкта на задану величину.

Формат заголовку похідного класу:

Class ім’я похідного класу: специфікатор доступуім’я базового класу

{

тіло класу

};

Наприклад для похідного класу CDerived заголовок буде мати вигляд:



Поделиться:


Последнее изменение этой страницы: 2016-04-18; просмотров: 684; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.232.62.134 (0.067 с.)