Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
инф_техн_метод_указания_КР_211000(З).DOC
Скачиваний:
4
Добавлен:
16.11.2019
Размер:
2.03 Mб
Скачать

Описание переменных

Идентификатор переменной

Тип данных

Функция, выполняемая в программе

определение

ключевое слово

N

целый

int

Задает размер массива А, формальный параметр функций ( задает размер массива )

M

целый

int

Задает размер массива В

A

вещественный

float

Указатель на вводимый массива А

B

вещественный

float

Указатель на вводимый массива В

Acop

вещественный

float

Указатель на копию массива А

Bcop

вещественный

float

Указатель на копию массива В

i, j

целый

int

Индексы текущего элемента массива

mA

целый

int

Количество перестановок при сортировке массива А

mB

целый

int

Количество перестановок при сортировке массива В

A[i], B[i], Acop[i], Bcop[i]

вещественный

float

Элементы массивов с индексом i

vvod( float *a, int N)

отсутствие значения

void

Функция ввода массива

vivod(float *a, int N)

отсутствие значения

void

Функция вывода массива

KOL(float *a, int N)

целый

int

Функция вычисления количества перестановок при сортировке по возрастанию пузырьковым методом

a

вещественный

float

Формальный параметр функций (указатель на массив )

t

вещественный

float

Локальная переменная функции KOL(float *a, int N), используется для временного хранения значения элемента массива при сортировке.

k

целый

int

Локальная переменная функции KOL(float *a, int N), используется для подсчета количества перестановок при сортировке.

W

-

-

Метка

Алгоритм решения задачи

Алгоритм функции для ввода массива void vvod( float *a, int N)

Алгоритм функции для вывода массива void vivod( float *a, int N)

Алгоритм функции для сортировки массива и вычисления количества перестановок при сортировке int KOL(float *a, int N)

Листинг программы

//---------------------------------------------------------------------------

#pragma hdrstop

//---------------------------------------------------------------------------

#include <conio.h> //библиотека подключения функции getch()

#include <iostream.h> //библиотека для cin и cout

#include <malloc.h> //библиотека для динамического выделения памяти

#include <fstream.h> //библиотека для ввода/вывода в файл

#include <windows.h> //библиотека используется в функции RUS

#include <math.h> //библиотека математических функций

#include <ctype.h> // библиотека проверки принадлежности символов

#include <stdlib.h> // библиотека некоторых стандартных функций

#include <string.h> // библиотека функций работы со строками

//

char bufRus[256];

//---------------------------------------------------------------------------

char* RUS(const char*text) //функция поддержки русского языка

{

CharToOem(text,bufRus);

return bufRus;

}

//---------------------------------------------------------------------------

//****************************************************

void vvod( float *a, int N); // объявление функции для ввода массива

void vivod( float *a, int N); // объявление функции для вывода массива

int KOL(float *a, int N); // объявление функции для сортировки массива и вычисления

//количества перестановок при сортировке

//****************************************************

#pragma argsused

int main(int argc, char* argv[])

{

cout<<RUS("***Курсовая работа, задание 4*** \n");

int N, M, mA, mB;

cout<<RUS("\n Введите количество элементов в массиве А: ");

cin>>N;

cout<<RUS("\n Введите количество элементов в массиве В: ");

cin>>M;

float *A= new float[N]; //Динамическое выделение памяти под массив А

float *B= new float[M]; //Динамическое выделение памяти под массив В

float *Acop= new float[N]; //Динамическое выделение памяти под копию массива А

float *Bcop= new float[M]; //Динамическое выделение памяти под копию массива В

if(!A||!B||!Acop||!Bcop) //Проверка факта выделения памяти

{

cout<<RUS("\nНедостаточно памяти");

goto W;

}

cout<<RUS("\nВедите массив A\n");

vvod( A,N); //ввод массива А

cout<<RUS("\nВедите массив B\n");

vvod( B,M); //ввод массива В

for(int i=0;i<N;i++) //копирование массива А

Acop[i]=A[i];

for(int i=0;i<M;i++) //копирование массива В

Bcop[i]=B[i];

mA=KOL(Acop, N); //вызов функции для вычисления количества перестановок при

//сортировке для массива А

mB=KOL(Bcop, M); //вызов функции для вычисления количества перестановок при

//сортировке для массива В

if(mA==mB)

{

cout<<RUS("\nКоличество перестановок в массиве А равно ");

cout<<RUS("количеству перестановок в массиве В \n");

cout<<RUS("\nИсходный массив А\n");

vivod(A,N);

cout<<RUS("\nМассив А упорядоченный по возрастанию:\n");

vivod(Acop,N);

cout<<RUS("\nКоличество перестановок в массиве А: ")<<mA;

cout<<RUS("\nИсходный массив В\n");

vivod(B,M);

cout<<RUS("\nМассив В упорядоченный по возрастанию:\n");

vivod(Bcop,M);

cout<<RUS("\nКоличество перестановок в массиве В: ")<<mB;

}

else

if(mA>mB)

{

cout<<RUS("\nКоличество перестановок в массиве А больше ");

cout<<RUS("количества перестановок в массиве В \n");

cout<<RUS("\nИсходный массив А\n");

vivod(A,N);

cout<<RUS("\nМассив А упорядоченный по возрастанию:\n");

vivod(Acop,N);

cout<<RUS("\nКоличество перестановок в массиве А: ")<<mA;

cout<<RUS("\nИсходный массив В\n");

vivod(B,M);

cout<<RUS("\nМассив В упорядоченный по возрастанию:\n");

vivod(Bcop,M);

cout<<RUS("\nКоличество перестановок в массиве В: ")<<mB;

}

else

{

cout<<RUS("\nКоличество перестановок в массиве В больше ");

cout<<RUS("количества перестановок в массиве А \n");

cout<<RUS("\nИсходный массив А\n");

vivod(A,N);

cout<<RUS("\nМассив А упорядоченный по возрастанию:\n");

vivod(Acop,N);

cout<<RUS("\nКоличество перестановок в массиве А: ")<<mA;

cout<<RUS("\nИсходный массив В\n");

vivod(B,M);

cout<<RUS("\nМассив В упорядоченный по возрастанию:\n");

vivod(Bcop,M);

cout<<RUS("\nКоличество перестановок в массиве В: ")<<mB;

}

delete [] A; // освобождение памяти от массивов и их копий

delete [] Acop;

delete [] B;

delete [] Bcop;

W:

cout<<RUS("\nНажмите любую клавишу для завершения программы...\n");

getch();

return 0;

}

//---------------------------------------------------------------------------

void vvod( float *a, int N) // определение функции для ввода массива

{

for(int i=0;i<N;i++)

cin>>a[i];

}

void vivod( float *a, int N) // определение функции для вывода массива

{

for(int i=0;i<N;i++)

cout<<' '<<a[i];

}

int KOL(float *a, int N) ); // определение функции для сортировки массива и вычисления

{ //количества перестановок при сортировке

int k=0;

float t;

for(int i=N-1;i>0;i--)

for(int j=0;j<i;j++)

if(a[j]>a[j+1])

{

t=a[j]; //

a[j]=a[j+1]; //

a[j+1]=t;

k++; //

}

return k;

}

//---------------------------------------------------------------------------

Результаты тестирования программы

ЗАДАНИЕ 5

Условие задачи

После ввода произвольного текста на латинице отсортировать слова текста по алфавиту по первой букве с учетом их длин: более длинные слова располагаются в начале списка.

Метод решения задачи

При решении задачи на первом этапе текст разбивается на слова. Затем массив слов сортируется по алфавиту с учетом первой буквы независимо от того строчная она или прописная. После сортировки по алфавиту, выбирается группа слов с одинаковой начальной буквой и проводится сортировка в этой группе по длине слова. Сортировки проводятся на основе пузырькового метода.

Описание переменных

Идентификатор переменной

Тип данных

Функция, выполняемая в программе

определение

ключевое слово

K

константа, целый

const int

Задает количество символов в строке

s[K]

символьный

char

Символьная строка вводимого текста

s1[K]

символьный

char

Символьная строка копии слова

s2[K]

символьный

char

Символьная строка копии слова

Del

символьный

char

Указатель на строку символов-разделителей

ps[K]

символьный

char

Массив указателей на слова

t

символьный

char

Указатель на слово

N

целый

int

Количество слов в введенном тексте

j

целый

int

Индекс текущего элемента массива слов

i

целый

int

Параметр цикла

m

беззнаковый целый

unsigned int

Десятичный код строчной буквы

M

беззнаковый целый

unsigned int

Десятичный код прописной буквы

gets( )

указатель на строку

char*

Функция ввода строки (библиотечная)

strtok( )

указатель на строку

char*

Функция возвращает указатель на лексему, ограниченную заданным разделителем (библиотечная). Используется для выделения слов из текста.

strcpy( )

указатель на строку

char*

Функция копирования строк (библиотечная)

strlwr( )

указатель на строку

char*

Функция приведения букв в строке к строчным буквам (библиотечная)

strlen( )

беззнаковый целый

size_t

Функция определения длины строки (библиотечная)