Всё сдал! - помощь студентам онлайн Всё сдал! - помощь студентам онлайн

Реальная база готовых
студенческих работ

pencil
Узнай стоимость на индивидуальную работу!
icon Цены в 2-3 раза ниже
icon Мы работаем
7 дней в неделю
icon Только проверенные эксперты

Сортировка массивов методом вставок

Тип Реферат
Предмет Информатика и программирование
Просмотров
510
Скачиваний
836
Размер файла
251 б
Поделиться

Сортировка массивов методом вставок

Министерство Образования и Науки Украины

Национальный Аэрокосмический Университет

им. Н. Е. Жуковского “ХАИ”

Кафедра 302

Домашнее задание по курсу

„Программирование и алгоритмические языки”

по теме:

„СОРТИРОВКА МАССИВОВ МЕТОДОМ ВСТАВОК”

Выполнил:

студент 326 группы

Чаплыгин В. И.

Проверил:

Момот М. А.

Харьков

2003

Содержание

1. Постановка задачи ……………………………………………………………… 3

2. Теоретическое обоснование и алгоритм решения задачи …………………… 3

3. Пример работы программы ……………………………………………………. 4

4. Исходный код программы с комментариями …………...……………………. 9

5. Список литературы …………………………………………………………… 13

6. Приложение 1: блок-схема программы ……………………………………... 14

7. Приложение 2: блок-схема функции сортировки (SortByIncrease()) ……… 15

Постановка задачи

Задание:

Упорядочить массив x по убыванию или возрастанию (т.е. переставить его элементы так чтобы для всех k выполнялось xk<=xk-1 или xk>=xk-1 соответственно), используя следующий алгоритм сортировки (упорядочивания):

сортировка вставками: пусть первые k элементов массива уже упорядочены по не убыванию; берется (k+1)-й элемент и размещается среди первых k элементов так, чтобы упорядоченными оказались уже k+1 первых элементов; этот метод применяется при k от 1 до n-1.

Основные требования к программе:

· В программе должны использоваться функции, для которых следует явно сопоставить прототипы (объявления, описания), определения и вызовы.

· Как минимум в одной функции должны быть параметры по умолчанию и соответственно в программе должны быть вызовы такой функции в разной форме.

· Использовать все циклы С++.

· Доступ к элементам массива по [] и *.

· Заполнение массива случайным образом.

· Программа должна создаваться из проекта, содержащего несколько файлов исходного кода (*.h, *.срр).

· Должны использоваться уловная компиляция (стражи включения).

· Программа должна иметь дружественный интерфейс - основные операции должны вызываться через соответствующие элементы текстового меню.

· Итерации в текстовый файл отчета.

· Передача имени файла отчета в командной строке.

· Считывание исходных данных из файла.

· Использование параметров командной cтроки.

Теоретическое обоснование метода

«Сортировка при помощи прямого включения»

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

Метод основывается на следующем: считается, что перед рассмотрением записи R[j] предыдущие записи R[1],R[2],...,R[j-1] уже упорядочены, и R[j] вставляется в соответствующее место. Сортировка таблицы начинается со второй записи. Ее ключ сравнивается с ключом первой записи, и, если упорядоченность нарушена, то записи R[1] и R[2] переставляются. Затем ключ записи R[3] сравнивается с ключами записей R[2] и R[1]. Как только программа обнаруживает, что (j+1)-й элемент массива меньше (при сортировке по возрастанию) j-го элемента, она копирует значение этого элемента в буферную переменную и с начала массива до j анализирует, пока значение буферной переменной не будет меньше какого-либо элемента х. Затем кусок массива, начиная с х и до j, перемещается на одну ячейку в сторону возрастания, и на образовавшееся место х записывается значение перемещаемого элемента. Дальше продолжается перемещение по основному массиву до элемента n-1 (т.к. мы сравниваем j-й и (j+1)-й элементы):

41 54 10 66 27 42 80 61 43 37

^ <~~

10 41 54 66 27 42 80 61 43 37

^ <~~

10 27 41 54 66 42 80 61 43 37

^ <~~

10 27 41 42 54 66 80 61 43 37

^ <~~

10 27 41 42 54 61 66 80 43 37

^ <~~

10 27 41 42 43 54 61 66 80 37

^ <~~

10 27 37 41 42 43 54 61 66 80

см. приложение 2.

Пример работы программы

Запускаем программу InsetSort:

Программа прелагает нам выбрать один из пунктов меню для выполнения соответствующей операции. Итак, выбираем 1:

Введем желаемое количество элементов массива.

Массив создан. Теперь можно вывести массив на экран, добавить некоторое количество элементов, найти какой-либо элемент по значению и т.д. Выведем массив на экран.

Также эта программа предоставляет возможность удалить какой-либо элемент, введя его порядковый номер. Допустим, мы хотим удалить элемент под номером 7 со значением 89, затем выведем снова массив на экран:

Теперь добавим 6 элементов к существующему массиву:

В программе реализована функция чтения из файла. Если задано три параметра запуска программы, то она принимает argv[2], как название файла, из которого будет происходить считывание информации. Если же задано меньшее количество параметров, то InsetSort предложит ввести названии файла в течении выполнения программы.

Перед выбором пункта 7 (Open File) необходимо очистить массив (пункт 6), иначе программа сигнализирует об ошибке. А после выбора элемента меню 7 введем название считываемого файла данных, если это необходимо.

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

При выборе пункта 9 у нас будет возможность отсортировать массив элементов, как по возрастанию, так и по убыванию. Например, отсортируем существующий массив по возрастанию и выведем результат на экран:

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

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

Исходный код программы с комментариями

----------------------------------------------------------------- MAIN.CPP

#include "func.h"

int menu();

ofstream f;

char fname[20],foname[20];

int *MasP[100]={0},n=0,argcGlobal;

////////////////////MAIN/////////////////////

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

// int M[10];

int bool=0;//Ïåðåìåííàÿ, ïðèíèìàþùàÿ äâà çíà÷åíèÿ.(Äëÿ âûõîäà)

argcGlobal=argc;

if (argc>1)//Åñëè çàäàí ïàðàìåòð, òî ïðèíÿòü åãî

strcpy(fname,argv[1]);//êàê íàçâàíèå äëÿ ôàéëà îò÷åòà.

else

strcpy(fname,"Log.txt");

if (argc>2)

strcpy(foname,argv[2]);//Âòîðîé àðãóìåíò - äëÿ ÷òåíèÿ.

f.open(fname);//Ñîçäàíèå è ïîäãîòîâêà ôàéëà ê çàïèñè.

do{//Âûïîëíÿòü ïîêà bool=0.

bool=menu();//Áàçîâàÿ ôóíêöèÿ ïðîãðàììû.

}while (bool==0);

f.close();//Çàêðûòèå ôàéëà è çàïèñü íà ÆÄ.

cout<<"nnnnnnnnnn";

cout<<"InsetSort. v 0.3 (C) 2003-2004 Created by Chaplygin Vasilij.";

cin.get();

cin.get();

return 0;

}

////////////////////MENU////////////////////

int menu(){

cout<<endl<<" Main Menu:"<<endl;

cout<<" 1. Make New List." <<endl;

cout<<" 2. Add Element." <<endl;

cout<<" 3. Print List." <<endl;

cout<<" 4. Delete Element."<<endl;

cout<<" 5. Save List." <<endl;

cout<<" 6. Erase List." <<endl;

cout<<" 7. Open File." <<endl;

cout<<" 8. Find Element." <<endl;

cout<<" 9. Sort List." <<endl;

cout<<" 0. Exit." <<endl;

cout<<endl<<"Your choice : ";

int i;

do

{cin>>i;

if (i<0 || i>9) cout<<endl<<"Error! Try again : ";

}

while (i<0 || i>9);

switch (i)

{case 1 : MakeNewList(); break; //Make New List

case 2 : AddElements(); break; //Add Element

case 3 : PrintList(); break; //Print List

case 4 : DeleteElement(); break; //Delete Element

case 5 : SaveList(); break; //Save List

case 6 : n=0; break; //Erase List

case 7 : OpenList(); break; //Open File

case 8 : FindElement(); break; //Find Element

case 9 : SubMenu(); break; //Sort List

case 0 : return -1; //Exit

}

return 0;

}//menu

----------------------------------------------------------------- func.cpp

#include "func.h"

extern int *MasP[100],n,argcGlobal;

extern ofstream f;

const int N=100;

//////////////////MakeNewList//////////////////

void MakeNewList(){

if (n!=0) {cout<<endl<<"Error! You have existing list.";

cout<<endl<<"Erase your prvious list ang try again."<<endl;}

else {cout<<endl<<"Input quantity of elements: ";

do{

cin>>n;

if ((n<1)||n>N){

cout<<endl<<"The quantity is incorrect!"<<endl;

cout<<"Max quantity of elemets: "<<N<<endl;

cout<<"Try again: ";}

}while ((n<1)||(n>N));

srand(time(NULL));

for (int i=0; i<n; i++){

MasP[i]=new int;

*MasP[i]=rand()%100;}

}

}

//////////////////AddElements///////////////////

void AddElements(){

cout<<endl<<"Input quantity of elements: ";

int p;

do{

cin>>p;

if ((p<1)||((n+p)>N)){

cout<<endl<<"The quantity is incorrect!"<<endl;

cout<<"You have "<<N-n<<" free cells."<<endl;

cout<<"Try again: ";}

}while ((p<1)||((n+p)>N));

srand(time(NULL));

for (int i=n; i<(n+p); i++){

MasP[i]=new int;

*MasP[i]=rand()%100;}

n=n+p;

}

////////////////////PrintList///////////////////

void PrintList(){

if (n==0) cout<<endl<<"List is empty."<<endl;

else{

cout<<endl;

for(int i=0; i<n; i++){

if (i%10==0) cout<<endl;

cout<<setw(3)<<*MasP[i];}

cout<<endl;

}

}

////////////////DeleteElement///////////////////

void DeleteElement(){

if (n==0) cout<<endl<<"List is empty."<<endl;

else{

cout<<endl<<"Input number of element: ";

int p;

do{

cin>>p;

if ((p<0)||(p>n)) cout<<endl<<"Error! Try again: ";}

while ((p<0)||(p>n));

cout<<endl;

for (int j=(p-1); j<n; j++)

MasP[j]=MasP[j+1];

MasP[n]=0;

n--;

}

}

////////////////////Save List/////////////////////

void SaveList(){

if (n==0) cout<<endl<<"List is empty."<<endl;

else{

for (int i=0; i<n; i++){

if (i%10==0) f<<endl;

f<<setw(3)<<*MasP[i];}

f<<endl;

}

}

///////////////////FindElement////////////////////

void FindElement(){

if (n==0) cout<<endl<<"List is empty."<<endl;

else{

cout<<endl<<"Input the value, which must be finded: ";

int a,s=0; cin>>a;

for (int i=0; i<n; i++){

if (*MasP[i]==a) {

cout<<endl<<(i+1)<<"-th element"<<" - "<<*MasP[i];

s=i;}}

if (s==0) cout<<endl<<"The existing list hasn't element with this value";

cout<<endl;

}

}

//////////////////SubWork(Sort)///////////////////

void SubMenu(){

if (n==0) cout<<endl<<"List is empty."<<endl;

else{

cout<<endl<<" Sub Menu:"<<endl;

cout<<" 1. Sort list by increase."<<endl;

cout<<" 2. Sort list by decrease."<<endl<<endl;

int i;

cout<<"Your choice: ";

do {

cin>>i;

if (i<1 || i>2) cout<<endl<<"Error! Try again : "<<endl;

}while (i<1 || i>2);

switch (i)

{case 1 : SortByIncrease(); break; //Increase

case 2 : SortByDecrease(); break; //Decrease

}

}

}

/////////////////SortByIncrease//////////////////

void SortByIncrease(){

int buf;

for (int i=0; i<(n-1); i++){

if (*MasP[i]>*MasP[i+1]){

SaveList();

buf=*MasP[i+1];

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

if (buf<*MasP[j]){

for (int q=i+1; q>j; q--)

*MasP[q]=*MasP[q-1];

*MasP[j]=buf;

break;

}//Incert place

}//for Incert place

}//Find unsorted element

}//for Find unsorted element

SaveList();

}

/////////////////SortByDecrease//////////////////

void SortByDecrease(){

int buf;

for (int i=0; i<(n-1); i++){

if (*MasP[i]<*MasP[i+1]){

SaveList();

buf=*MasP[i+1];

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

if (buf>*MasP[j]){

for (int q=i+1; q>j; q--)

*MasP[q]=*MasP[q-1];

*MasP[j]=buf;

break;

}//Incert place

}//for Incert place

}//Find unsorted element

}//for Find unsorted element

SaveList();

}

///////////////////Open File/////////////////////

void OpenList(char s[20]){

if (n!=0) {cout<<endl<<"Error! You have existing list.";

cout<<endl<<"Erase your prvious list ang try again."<<endl;}

else {

if (argcGlobal<3){

cout<<endl<<"Input file name: ";

char *FileName=new char[20];

cin>>FileName;

s=FileName;}

ifstream fo(s,ios::nocreate);

if (! fo) cout<<"File not found."<<endl;

else{

int b;

fo>>b;

for (int i=0; i<b; i++){

if (n==N) break;

MasP[n]= new int;

fo>>*MasP[n];

n++;

}

}//if (! fo)...

}

}

------------------------------------------------------------------- func.h

//Ïîäêëþ÷àåì ñòðàæè âêëþ÷åíèé.

#ifndef __func_h

#define __func_h

#include <iostream.h>

#include <fstream.h>

#include <stdlib.h>

#include <iomanip.h>

#include <string.h>

#include <time.h>

extern char foname[20];

//Ïðîòîòèïû ôóíêöèé.

void MakeNewList();

void AddElements();

void PrintList();

void DeleteElement();

void SaveList();

void EraseList();

void FindElement();

void SubMenu();

void SortByIncrease();

void SortByDecrease();

void OpenList(char s[20]=foname);

#endif

Список литературы

1. Лафоре Р. Объектно-ориентированное программирование в С++, 4-е изд. - СПб.: Питер, 2003. – 928 с.: ил.

2. Дейтел Х.М., Дейтел П.Дж. Как программировать на С++.. – М.: Бином, 1999. - 1024 с.

3. Страуструп Б. Язык программирования С++, 3-е изд. - СПб.; М.: Невский Диалект - Бином, 1999. - 991 с.

4. Керниган Б., Ритчи Д. Язык программирования Си.Пер. с англ., 3-е изд., испр. - СПб.: "Невский Диалект", 2001. - 352 с.: ил.

Примечание 1.

Примечание 2.


Нет нужной работы в каталоге?

Сделайте индивидуальный заказ на нашем сервисе. Там эксперты помогают с учебой без посредников Разместите задание – сайт бесплатно отправит его исполнителя, и они предложат цены.

Цены ниже, чем в агентствах и у конкурентов

Вы работаете с экспертами напрямую. Поэтому стоимость работ приятно вас удивит

Бесплатные доработки и консультации

Исполнитель внесет нужные правки в работу по вашему требованию без доплат. Корректировки в максимально короткие сроки

Гарантируем возврат

Если работа вас не устроит – мы вернем 100% суммы заказа

Техподдержка 7 дней в неделю

Наши менеджеры всегда на связи и оперативно решат любую проблему

Строгий отбор экспертов

К работе допускаются только проверенные специалисты с высшим образованием. Проверяем диплом на оценки «хорошо» и «отлично»

1 000 +
Новых работ ежедневно
computer

Требуются доработки?
Они включены в стоимость работы

Работы выполняют эксперты в своём деле. Они ценят свою репутацию, поэтому результат выполненной работы гарантирован

avatar
Экономика
Маркетинг
Информатика
icon
115259
рейтинг
icon
2801
работ сдано
icon
1262
отзывов
avatar
Математика
Физика
История
icon
112277
рейтинг
icon
5480
работ сдано
icon
2470
отзывов
avatar
Химия
Экономика
Биология
icon
76745
рейтинг
icon
1889
работ сдано
icon
1198
отзывов
avatar
Высшая математика
Информатика
Геодезия
icon
62710
рейтинг
icon
1046
работ сдано
icon
598
отзывов
Отзывы студентов о нашей работе
49 209 оценок star star star star star
среднее 4.9 из 5
СибАДИ
Работа выполнена очень качественно, быстро и в соответствии с метадичкой
star star star star star
СибАДИ
Работа выполнена без замечаний, все качественно и быстро, спасибо. Буду заказывать еще
star star star star star
СибАДИ
Заказ выполнен на отлично, оформление как и просил все на высшем уровне
star star star star star

Последние размещённые задания

Ежедневно эксперты готовы работать над 1000 заданиями. Контролируйте процесс написания работы в режиме онлайн

Композиционные материалы на основе меди.

Реферат, материаловедение

Срок сдачи к 2 апр.

только что

Курсовая работа, 30-35 стр

Курсовая, экономика организации

Срок сдачи к 30 апр.

только что

Помощь с нахождением ошибок

Решение задач, Excel

Срок сдачи к 24 мар.

1 минуту назад

Подготовка к допросу

Презентация, Криминалистика

Срок сдачи к 24 мар.

3 минуты назад

Статика и динамика права

Курсовая, Теория государства и права

Срок сдачи к 31 мар.

3 минуты назад

Необходимо написать курсовую работу на тему «Юридическая антропология»...

Курсовая, Юридическая антропология

Срок сдачи к 10 апр.

4 минуты назад

Тест по химии

Другое, Общая и неорганическая химия

Срок сдачи к 27 мар.

5 минут назад

Требуется запроектировать фундаменты задания

Курсовая, основания и фундаменты

Срок сдачи к 5 апр.

6 минут назад

Составить содержание

Курсовая, ОТХП, машиностроение, химия

Срок сдачи к 24 мар.

6 минут назад

Решить задачу

Решение задач, Теоретическая механика

Срок сдачи к 26 мар.

6 минут назад

решить 1 задачу по теоретической механики

Решение задач, теоретическая механика

Срок сдачи к 26 мар.

6 минут назад

Решение курсовой

Курсовая, Проектирование и моделирование компьютерных сетей, информатика

Срок сдачи к 29 мар.

6 минут назад

Необходимо выполнить расчеты в Excel.

Лабораторная, Моделирование систем

Срок сдачи к 30 мар.

7 минут назад

Отчет по производственной практике

Отчет по практике, Промышленное и гражданское строительство

Срок сдачи к 14 апр.

7 минут назад

Там несколько

Решение задач, Математика

Срок сдачи к 31 мар.

8 минут назад

Сделать 6 презентаций не менее 10 файлов

Презентация, Финансовая система региона

Срок сдачи к 5 апр.

9 минут назад
9 минут назад
planes planes
Закажи индивидуальную работу за 1 минуту!

Размещенные на сайт контрольные, курсовые и иные категории работ (далее — Работы) и их содержимое предназначены исключительно для ознакомления, без целей коммерческого использования. Все права в отношении Работ и их содержимого принадлежат их законным правообладателям. Любое их использование возможно лишь с согласия законных правообладателей. Администрация сайта не несет ответственности за возможный вред и/или убытки, возникшие в связи с использованием Работ и их содержимого.

«Всё сдал!» — безопасный онлайн-сервис с проверенными экспертами

Используя «Свежую базу РГСР», вы принимаете пользовательское соглашение
и политику обработки персональных данных
Сайт работает по московскому времени:

Вход или
регистрация
Регистрация или
Не нашли, что искали?

Заполните форму и узнайте цену на индивидуальную работу!

Файлы (при наличии)

    это быстро и бесплатно