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