- •Методические указания к выполнению контрольной работы
- •Задания контрольной работы
- •Пример оформления контрольной работы
- •Содержание
- •А лгоритм решения задачи Листинг программы
- •Алгоритм решения задачи
- •Листинг программы
- •Результаты тестирования программы
- •Список использованных источников
- •Методические указания к выполнению курсовой работы
- •Пример оформления курсовой работы
- •Содержание
- •Задание 1 Условие задачи
- •Метод решения задачи
- •Описание переменных
- •Алгоритм решения задачи
- •Листинг программы
- •Описание переменных
- •Алгоритм решения задачи
- •Листинг программы
- •Описание переменных
- •Алгоритм решения задачи
- •Листинг программы
- •Описание переменных
- •Алгоритм решения задачи
- •Алгоритм решения задачи
- •Листинг программы
- •Результаты тестирования программы
- •Список использованных источников
Описание переменных
Идентификатор переменной |
Тип данных |
Функция, выполняемая в программе |
|
определение |
ключевое слово |
||
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 |
Функция определения длины строки (библиотечная) |