Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лаба5.docx
Скачиваний:
8
Добавлен:
09.02.2015
Размер:
553.57 Кб
Скачать

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 – Количество символов в массиве символов.

Функция «set_size()»

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;

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]