Добавил:
надеюсь это добро кому-то поможет Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2 сем лаба 1 Обращение к полям структуры. Массивы структур. Понятие класса и его реализация в языке С++..docx
Скачиваний:
0
Добавлен:
09.07.2025
Размер:
457.17 Кб
Скачать

Программа Версия 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);}