- •Пользовательские типы
- •Ограничение, условленное исполнением на компьютере
- •Организация интерфейса пользователя
- •Макеты ввода/вывода
- •Средства обеспечения ввода/вывода
- •Параметры функций
- •Блок-схемы. Алгоритм решения.
- •Функции Get, Set
- •Программа Версия 1. Функция ReadMark1
- •Версия 1.2 Полная программа
- •Версия 2.1. Полная программа
- •Версия 2.2. Отличающаяся часть от версии 2.1
Версия 2.1. Полная программа
#include <iostream>
#include <fstream>
using namespace std;
const unsigned N = 100;
class StrM {
char A[N]; char Mark; int kol; char symbol; int L; int count; int t = 0; int flag = 0; int LL;
public:
void SetL(unsigned t) {L = t;}
int GetL() {return L;}
void SetMark(ifstream &f, char &s) {f >> s;Mark = s;}
char GetMark() {return Mark;}
void SetKol(ifstream& f, int s) {f >> s;kol = s;}
int GetKol() {return kol;}
void SetSymb(ifstream& f, char s) {f >> s;symbol = s;}
char GetSymb() {return symbol;}
char GetA(unsigned i) {return A[i];}
int ReadMark1(ifstream& f, ofstream& out)
{
setlocale(LC_ALL, "ru");char s, MM;
SetMark(f, s); MM = GetMark();
if (f.eof()) {cout << "Проблема, файл пуст!";out << "Проблема, файл пуст!";flag = 1;}
else
{SetSymb(f, s);symbol = GetSymb();
cout << "Символ, который ищется в строке: " << symbol << "\n";
out << "Символ, который ищется в строке: " << symbol << "\n";
if (f.eof()) {
cout << "не достаточно данных для выполнения";
out << "не достаточно данных для выполнения";
flag = 1;return 0;
}
SetKol(f, s);kol = GetKol();
if ((GetKol() > 0) && (GetKol() <= N)) {
cout << "Количество таких символов: " << kol << "\n";
out << "Количество таких символов: " << kol << "\n";
if (f.eof()) {
cout << "\nтекст состоит из пустой строки";
out << "\nтекст состоит из пустой строки";
flag = 1;return 0;
}
else {
int i = 0;f.unsetf(ios::skipws);cout << "\nстрока: ";
while (1) {
f >> s; if (s == MM) break; if (f.eof()) break;A[i] = s;cout << GetA(i);
i++;t++;if (i > N) break;
}}}
else {cout << "Символ не является числом, он отрицателен или символов не хватает, программа не выполняется дальше\n";out << "Символ не является числом, он отрицатален или символов не хватает, программа не выполняется дальше\n";
flag = 1; return 0; }}
SetL(t); LL = GetL();}
void outMark(ofstream& out)
{int i = 0; setlocale(LC_ALL, "RUS");out << "\nСчитаная строка:";cout << "\nСчитаная строка:";
for (i = 0; i < LL; i++) {
out << GetA(i); cout << GetA(i); }
out << "\n";}
void ProcessMark(ofstream& out)
{if (flag == 0) {for (int i = 0; i < LL; i++) {
if (GetA(i) == symbol) count++;
if ((count == kol)) break ;
if ((GetA(i) == ' ') || (GetA(i) != symbol)) count = 0; }
if (count == kol) {cout << "\nкомбинация существует";}
else {cout << "\nкомбинации не существует";}}}
void OutMark(ofstream& out)
{if (flag == 0) {if (kol == count) out << "\nДанная комбинация существует";
else out << "\nДанной комбинации не существует";}}};
void main()
{setlocale(LC_ALL, "ru");StrM a1; ifstream f("inM.txt", ios::in);
if (!f.is_open())
{cout << "Ошибка открытия исходного файла" << "\n";}
ofstream out("out.txt", ios::out);
if (!out.is_open())
{cout << "Ошибка открытия файла записи" << "\n";}
a1.ReadMark1(f, out); a1.outMark(out); a1.ProcessMark(out); a1.OutMark(out);f.close();out.close();}
