Алгоритм решения задачи
Алгоритм функции для ввода массива 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;
}
//---------------------------------------------------------------------------