5.Блок-схемы и проверки алгоритмов функций. Функция «create_array(n)»
Исходные
данные: N– количество элементов в массиве
символов (размер массива должен бытьN+1 так как необходимо в
последней ячейке хранить символ ‘\0’).
Рабочие
переменные: I
– индекс текущего элемента массива
символов.
Результат: STR1
– сформированный массив символов.
1
2
3
4
5
6
№ блока |
N |
I |
STR1[I] |
I < N |
Монитор |
1 |
3 |
|
|
|
|
2 |
|
0 |
|
|
|
3 |
|
|
|
Да |
|
4 |
|
|
A |
|
A |
5 |
|
1 |
|
|
|
3 |
|
|
|
Да |
|
4 |
|
|
B |
|
B |
5 |
|
2 |
|
|
|
3 |
|
|
|
Да |
|
4 |
|
|
С |
|
С |
5 |
|
3 |
|
|
|
3 |
|
|
|
Нет |
|
|
Функция «create_d_string()»
Результат: STR
– строка разделителей.
1
Результат: N
– Количество символов в массиве
символов.
1
'\0'
Функция
«Search(STR1,STR2,N)»
Исходные
данные: STR1– указатель на строку разделителей. STR2
– указатель на массив символов N– количество символов в массиве
символов.
Рабочие
переменные: len1– количество символов в строке
разделителей. I
– индекс текущего элемента массива
символов J
– индекс текущего элемента строки
разделителей key– логическая переменная , 1 – длина
последнего слова еще не посчитана, 0 -
длина последнего слова уже посчитана. Iter
– количество слов, в массиве
символов, равных по длине последнему
слову. size
– количество символов в слове. Lsize
– количество символов в последнем
слове.
Результат: Iter
– количество слов, в массиве
символов, равных по длине последнему
слову.
1
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
True
№ блока |
Menu_value |
len1 |
N |
I |
J |
Key |
Size |
iter |
Lsize |
Rezult |
I > -1 |
J == -1 |
Key == false |
J > -1 && STR[I] != STR[j] |
Menu_value != -10 |
STR1 = 0 && STR2 = 0 |
STR1[len1] != 0 |
Lsize == Size |
Монитор |
1 |
N = 5, STR1 = “.,”, STR2 = “a,b,c”. | ||||||||||||||||||
2 |
|
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Да |
|
|
4 |
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Да |
|
|
4 |
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Нет |
|
|
5 |
|
|
|
4 |
true |
0 |
0 |
|
|
|
|
|
|
|
|
|
|
| |
6 |
|
|
|
|
|
|
|
|
|
|
Да |
|
|
|
|
|
|
|
|
7 |
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
|
|
|
|
|
|
|
|
|
|
|
|
|
Да |
|
|
|
|
|
9 |
|
|
|
|
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
|
|
|
|
|
|
|
|
|
|
|
|
|
Да |
|
|
|
|
|
9 |
|
|
|
|
-1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
|
|
|
|
|
|
|
|
|
|
|
|
|
Нет |
|
|
|
|
|
10 |
|
|
|
|
|
|
|
|
|
|
|
Да |
|
|
|
|
|
|
|
11 |
|
|
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
17 |
|
|
|
3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
|
|
|
|
|
|
|
|
|
|
Да |
|
|
|
|
|
|
|
|
7 |
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
|
|
|
|
|
|
|
|
|
|
|
|
|
Да |
|
|
|
|
|
9 |
|
|
|
|
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
|
|
|
|
|
|
|
|
|
|
|
|
|
Нет |
|
|
|
|
|
10 |
|
|
|
|
|
|
|
|
|
|
|
Нет |
|
|
|
|
|
|
|
12 |
|
|
|
|
|
|
|
|
|
|
|
|
Нет |
|
|
|
|
|
|
16 |
|
|
|
|
|
false |
0 |
1 |
1 |
|
|
|
|
|
|
|
|
|
|
17 |
|
|
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
|
|
|
|
|
|
|
|
|
|
Да |
|
|
|
|
|
|
|
|
7 |
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
|
|
|
|
|
|
|
|
|
|
|
|
|
Да |
|
|
|
|
|
9 |
|
|
|
|
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
|
|
|
|
|
|
|
|
|
|
|
|
|
Да |
|
|
|
|
|
9 |
|
|
|
|
-1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
|
|
|
|
|
|
|
|
|
|
|
|
|
Нет |
|
|
|
|
|
10 |
|
|
|
|
|
|
|
|
|
|
|
Да |
|
|
|
|
|
|
|
11 |
|
|
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
17 |
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
|
|
|
|
|
|
|
|
|
|
Да |
|
|
|
|
|
|
|
|
№ блока |
Menu_value |
len1 |
N |
I |
J |
Key |
Size |
iter |
Lsize |
Rezult |
I > -1 |
J == -1 |
Key == false |
J > -1 && STR[I] != STR[j] |
Menu_value != -10 |
STR1 = 0 && STR2 = 0 |
STR1[len1] != 0 |
Lsize == Size |
Монитор |
7 |
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
|
|
|
|
|
|
|
|
|
|
|
|
|
Да |
|
|
|
|
|
9 |
|
|
|
|
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
|
|
|
|
|
|
|
|
|
|
|
|
|
Нет |
|
|
|
|
|
10 |
|
|
|
|
|
|
|
|
|
|
|
Нет |
|
|
|
|
|
|
|
12 |
|
|
|
|
|
|
|
|
|
|
|
|
Да |
|
|
|
|
|
|
13 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Да |
|
14 |
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
|
|
|
|
|
15 |
|
|
|
|
|
|
0 |
|
|
|
|
|
|
|
|
|
|
|
|
17 |
|
|
|
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
|
|
|
|
|
|
|
|
|
|
Да |
|
|
|
|
|
|
|
|
7 |
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
|
|
|
|
|
|
|
|
|
|
|
|
|
Да |
|
|
|
|
|
9 |
|
|
|
|
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
|
|
|
|
|
|
|
|
|
|
|
|
|
Да |
|
|
|
|
|
9 |
|
|
|
|
-1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
|
|
|
|
|
|
|
|
|
|
|
|
|
Нет |
|
|
|
|
|
10 |
|
|
|
|
|
|
|
|
|
|
|
Да |
|
|
|
|
|
|
|
11 |
|
|
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
17 |
|
|
|
-1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
|
|
|
|
|
|
|
|
|
|
Нет |
|
|
|
|
|
|
|
|
18 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Да |
|
19 |
|
|
|
|
|
|
|
3 |
|
|
|
|
|
|
|
|
|
|
|
6.Текст программы на языке c++:
#include <iostream>
#include <string>
using namespace std;
char* create_d_string(); //Функция для создания строки разделителей
char* create_array(const int N); // Функция для создания массива символов
int set_size(); //Функция для ввода размера массива символов
int Search(const char *STR1,const char *STR2, int N); // Функция для поиска слов равных по длине последнему
int main()
{
setlocale(0,"");
char *STR2 = NULL, *STR1 = NULL;
int N, menu_value, rezult;
do
{
cout << "Выберети действие:\n 1: Ввести строку разделитель \n 2:Ввести массив символов \n 3:Выполнить поиск \n 4: Отчистить экран \n 5:Выход \n ";
cin >> menu_value;
switch (menu_value)
{
case 1:
{
STR1 = create_d_string();
break;
}
case 2:
{
N = set_size();
STR2 = create_array(N);
break;
}
case 3:
{
if(STR1 == NULL || STR2 == NULL)
{
cout << "Не введены строка разделителей или массив символов\n" << endl;
}
else
{
rezult = Search(STR1, STR2, N);
cout << "Количество слов равных по длине последнему в массиве символов = " << rezult << endl;
cout << "Желаете вывести исходные данные? \n 1: Да \n 2: Нет";
cin >> menu_value;
if (menu_value == 1)
{
cout << endl << "Строка разделителей :" << STR1 << "\n Размер массива: " << N << "\nМассив символов: " << STR2 << endl;
}
else
menu_value = 0;
}
break;
}
case 4:
{
system("cls"); // Функция отчистки экрана
break;
}
case 5:
{
menu_value = -10;
break;
}
default:
{
cout << "В меню нет раздела " << menu_value << " попробуйте снова" << endl;
}
}
} while (menu_value != -10);
system("pause");
return 0;
}
char* create_d_string()
{
char *STR = (char*)calloc(256,sizeof(char));
cout << "Введите строку разделителей: ";
cin >> STR;
cout << "Строка разделителей: " << STR << endl ;
return STR;
}
char* create_array(const int N)
{
char *STR1;
STR1 = (char*)calloc(N+1,sizeof(char));
if (STR1 == NULL)
{
cout << "Массив не создан возможно задан слишком большой размер"<< endl;
}
else
{
cout << "Введите массив символов:" << endl;
for (int i = 0; i < N ; i++)
{
cin >> STR1[i];
}
STR1[N] = '\0';
cout << endl << "Массив символов: " << STR1 << endl;
string a; \\ На случай если пользователь ввел больше символов
getline(cin,a,'\n'); \\они сохранятся в переменную а
}
return STR1;
}
int set_size()
{
bool key = false;
int N;
cout << endl << "Введите количество символов: ";
do
{
cin >> N;
if(N < 0)
{
cout << "Число " << N << " не может быть использовано попробуйьте снова: ";
continue;
}
cout << "Размер массива :" << N << endl;
key = true;
} while (key == false);
return N;
}
int Search(const char *STR1,const char *STR2, int N)
{
bool key = true;
int j, len1, size = 0, Lsize, iter = 0;
for(len1 = 0; STR1[len1] != '\0';++len1);
for (int i = N-1; i > -1; i--)
{
for (j = len1-1; j > -1 && STR2[i] != STR1[j]; --j);
if (j == -1)
{
size++;
}else
if(key == 0)
{
Lsize == size ? iter++ : Lsize;
size = 0;
}
else
{
iter++;
Lsize = size;
key = false;
size = 0;
}
}
Lsize == size ? iter++ : Lsize;
return iter;
}