• Новости
  • Темы
    • Экономика
    • Здоровье
    • Авто
    • Наука и техника
    • Недвижимость
    • Туризм
    • Спорт
    • Кино
    • Музыка
    • Стиль
  • Спецпроекты
  • Телевидение
  • Знания
    • Энциклопедия
    • Библия
    • Коран
    • История
    • Книги
    • Наука
    • Детям
    • КМ школа
    • Школьный клуб
    • Рефераты
    • Праздники
    • Гороскопы
    • Рецепты
  • Сервисы
    • Погода
    • Курсы валют
    • ТВ-программа
    • Перевод единиц
    • Таблица Менделеева
    • Разница во времени
Ограничение по возрасту 12
KM.RU
Рефераты
Главная → Рефераты → Информатика, программирование
  • Новости
  • В России
  • В мире
  • Экономика
  • Наука и техника
  • Недвижимость
  • Авто
  • Туризм
  • Здоровье
  • Спорт
  • Музыка
  • Кино
  • Стиль
  • Телевидение
  • Спецпроекты
  • Книги
  • Telegram-канал

Поиск по рефератам и авторским статьям

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

Отчёт по практике

Выполнили: cт.гр. 97ЭЭ3 Толмач М., Ерегин П., Синева Т.

Пензенский государственный университет, Кафедра "Экономическая кибернетика"

Пенза 1998 г.

Задание

Цель работы: изучить метод Шелла для сортировки строкового массива и применить этот метод на практике.

Заданием на практическую работу является разработка программы на языке программирования Borland С++ v.3.1. для сортировки массива строк по их индексному значению. Значения элементов массива и их индексы задаются пользователем с клавиатуры.

Введение

В настоящее время индустрия производства компьютеров и программного обеспечения для них является одной из наиболее важных сфер экономики развитых стран. Ежегодно в мире продаются десятки миллионов компьютеров. Только в США объем продаж компьютеров составляет десятки миллионов долларов и постоянно продолжает расти.

В чем же причины такого стремительного роста индустрии персональных компьютеров и их сравнительная выгодность для многих деловых применений?

Простота использования, обеспеченная с помощью диалогового способа взаимодействия с компьютером.

Относительно высокие возможности по переработке информации, наличие программного обеспечения, а так же мощных систем для разработки нового программного обеспечения.

Язык С++ - универсальный язык общего назначения, область приложений которого - программирование систем в самом широком смысле. Кроме этого, С++ успешно используется как во многих приложениях, так и в мощных операционных системах.

1 Входные данные

Входными данными в программе является число элементов массива, значение индекса каждого элемента и строковые элементы массива. Все эти данные вводятся пользователем с клавиатуры по запросу программы. Число элементов массива не должно превышать 32767. Индексы элементов массива должны быть целочисленными значениями.

2 Выходные данные

Выходными данными в программе является исходный и отсортированный методом Шелла массив, которые выводятся на экран по запросу пользователя.

3 Архитектура программы

Данная программа разработана на языке программирования С++ и состоит из следующих функциональных модулей:

1) menu - обработчик меню;

2) input - ввод данных;

3) output - вывод данных;

4) sort - сортировка Шелла;

5) Основная программа.

1.Функция menu:

Осуществляет вывод на экран меню , опрос клавиатуры в бесконечном цикле и передвижение цветного курсора по пунктам меню. При нажатии клавиши ‘Esc’ возвращает -1, при нажатии клавиши с номером пункта меню возвращает этот номер, при нажатии клавиши ‘Enter’ возвращает номер текущего пункта меню.

Параметры для вызова функции menu: x,y – координаты меню на экране, *capt – содержимое меню.

2.Функция input:

Осуществляет ввод индексов и элементов массива с клавиатуры, возвращает количество введенных элементов.

Параметры для вызова функции mas[] –указатель на массив, stn – номер первого вводимого элемента.

3.Функция output:

Осуществляет вывод содержимого массива на экран.

Параметры для вызова функции mas[] –указатель на массив, num – число элементов массива.

4.Функция sort:

Осуществляет сортировку массива по индексам элементов методом Шелла.

Сортировка методом Шелла заключается в следующем: сначала отдельно группируются и сортируются элементы, отстоящие друг от друга на расстоянии 9. После первого прохода элементы перегруппировываются и вновь сортируются элементы, отстоящие друг от друга на расстоянии 5, затем сортируются элементы,. отстоящие друг от друга на расстоянии 3, и наконец , на четвертом проходе идет обычная или одинарная сортировка.

Параметры для вызова функции mas[] –указатель на массив, num – число элементов массива.

5. Основная программа:

Осуществляет установку цветов, очистку экрана, вызов, функции обработки меню и в зависимости от возвращенного значения вызов одной из следующих функций: input, output, sort.

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

1. Вирт Н. Алгоритмы и структуры данных: Пер с англ. -М.: Мир,1989. - 360 с., ил.

2.Бьярн Страуструп. Язык программирования С++. в двух частях. Пер. с англ. Киев:"ДиаСофт",1993.-296 с. ил.

ПРИЛОЖЕНИЕ 1

Распечатка программы

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

#include <string.h>

// Данные одного элемента массива

struct one_elem {

int n;        // Индекс

char st[100];     // Данные

};

// Обработка меню

int menu(int x,int y,char * capt);

// Ввод данных

int input(one_elem mas[],int stn);

// Вывод данных

void output(one_elem mas[],int num);

// Сортировка Шелла

void sort(one_elem mas[],int num);

// Обработка меню

int menu(int x,int y,char * capt) {

int n,m; // Счетчики

int num; // Количество пунктов

int k; // Выбранный пункт

char * pt; // Временный указатель на символ

char c; // Считанный с клавиатуры символ

// Вычисляем количество пунктов

num=strlen(capt)/20;

// Курсор на нулевой элемент

k=0;

// Бесконечный цикл обработки

for (;;) {

// Вывод меню

 pt=capt;

 for (n=0;n<num;n++) {

  gotoxy(x,y+n);

// Закраска пункта, на который указывает курсор

  if (n==k) {

  // Закраска

textbackground(12);

textcolor(14);

  } else {

  // Нормальный

textbackground(3);

textcolor(1);

  }

  cprintf("%d) ",n+1);

  for (m=0;m<20;m++) cprintf("%c",*(pt++));

 }

 textbackground(3);

 textcolor(1);

// Опрос клавиатуры

 c=getch();

 if (!c) c=getch();

// Проверка, не нажата ли клавиша с цифрой

 if (((c-'1')>=0)&&((c-'1')<num)) {

// Установка указателя в зависимости от нажатой цифры

  k=c-'1';

// Запись в буфер клавиатуры символа ENTER

  ungetch(13);

 } else {

 // Анализ

  switch(c) {

   // Вверх

   case (72):

 if (k>0) k--; else k=num-1;

 break;

   // Вниз

   case (80):

 if (k<(num-1)) k++; else k=0;

 break;

   // Выход по ESC - возвращается -1

   case (27):

 return -1;

   // Выход по ENTER - возвращается номер пункта

   case (13): return k;

  }

 }

}

}

// Ввод данных

// Возвращаемое значение - количество введенных элементов

// Входные параметры - указатель на массив и номер первого вводимого элемента

int input(one_elem mas[],int stn) {

clrscr();         // Очистка массива

int x;           // Индекс

int num;          // Количество введенных элементов

int n;           // Счетчик

char a[100];        // Данные

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

printf(" Число вводимых элементов: ");

scanf("%d",&num);

printf(" Вводите строчки формата X: Слово \n");

// Ввод элементов

for (n=0;n<num;n++) {

 scanf("%d:%s",&x,a);

 mas[n+stn].n=x;

 strcpy(mas[n+stn].st,a);

};

return num;

}

// Вывод массива

// Входные параметры - указатель на массив и количество элементов

void output(one_elem mas[],int num) {

clrscr();

int n;    // Счетчик

printf(" Содержимое массива: \n");

printf(" Индекс Содержимое \n");

// Вывод элементов

for (n=0;n<num;n++)

 printf("%5d  %s\n",mas[n].n,mas[n].st);

// Ожидание ESC

gotoxy(1,24);

printf(" Нажмите ESC для продолжения ... ");

while (getch()!=27);

}

// Сортировка Шелла

void sort(one_elem mas[],int num) {

int stp[4]={9,5,3,1};      // Шаги сортировки

int fs,mn,p;          // Первый, минимальный и текущий элементы

int n;             // Счетчик

one_elem prm;          // Временная переменная

// Цикл сортировки

for (n=0;n<4;n++) {

 fs=0;             // Начинать сортировать с начала

// Перебор всего массива

 while (fs<num) {

// Поиск минимального элемента

  p=fs;

  mn=fs;

  while (p<num) {

   if (mas[p].n<mas[mn].n) mn=p;

   p+=stp[n];

  }

// Если минимальный элемент отличается от начального, поменять их местами

  if (mn>fs) {

   prm.n=mas[mn].n;

   strcpy(prm.st,mas[mn].st);

   mas[mn].n=mas[fs].n;

   strcpy(mas[mn].st,mas[fs].st);

   mas[fs].n=prm.n;

   strcpy(mas[fs].st,prm.st);

  }

  fs+=stp[n];         // Переход к следующему элементу

 }

}

}

// Основная программа

void main() {

one_elem mas[100];  // Массив

int num;       // Количество элементов

int st;        // Выбранный пункт меню

textbackground(0);

textcolor(15);

clrscr();

do {

// Вывод меню

 st=menu(30,5," Ввод данных    "

        " Добавление данных "

        " Вывод данных    "

        " Сортировка Шелла  "

        " Выход из программы "

        "\x0");

 textbackground(0);

 textcolor(15);

// Выполнение действий в зависимости от выбранного пункта

 switch(st) {

// Ввод данных

  case (0):

   num=input(mas,0);

   break;

// Добавление данных

  case (1):

   num+=input(mas,num);

   break;

// Вывод массива

  case (2):

   output(mas,num);

   break;

// Сортировка

  case (3):

   sort(mas,num);

   break;

 }

// Выход по ESC или последнему пункту

} while ((st<4)&&(st!=-1));

clrscr();

}

ПРИЛОЖЕНИЕ 2

Результаты работы программы

Меню:

     1) Ввод данных

     2) Добавление данных

     3) Вывод данных

     4) Сортировка Шелла

     5) Выход из программы

1) Ввод данных:

Число вводимых элементов: 8

Вводите строчки формата X: Слово

0:sign

1001:else

3000:yes

1535:but

1:past

412:cell

99:alert

2888:object

3) Вывод данных:

Содержимое массива:

Индекс Содержимое

 0  sign

1001  else

3000  yes

1535  but

 1  past

412  cell

 99  alert

2888  object

Нажмите ESC для продолжения ...

2) Добавление данных:

Число вводимых элементов: 1

Вводите строчки формата X: Слово

10000:hello

4) Сортировка Шелла

3) Вывод данных:

Содержимое массива:

Индекс Содержимое

 0  sign

 1  past

 99  alert

412  cell

1001  else

1535  but

2888  object

3000  yes

10000  hello

Нажмите ESC для продолжения ...

5) Выход из программы

ПРИЛОЖЕНИЕ 3

Блок–схема алгоритма программы

Для подготовки данной работы были использованы материалы с сайта http://kurslab.chat.ru/

Дата добавления: 30.07.2006

База рефератов на портале KM.RU существует с 1999 года. Она пополнялась не только готовыми рефератами, докладами, курсовыми, но и авторскими публикациями, чтобы учащиеся могли использовать их и цитировать при самостоятельном написании работ.


Это популяризирует авторские исследования и научные изыскания, что и является целью работы истинного ученого или публициста. Таким образом, наша база - электронная библиотека, созданная в помощь студентам и школьникам.


Уважаемые авторы! Если Вы все же возражаете против размещения Вашей публикации или хотите внести коррективы, напишите нам на почту info@corp.km.ru, мы незамедлительно выполним Вашу просьбу или требование.


официальный сайт © ООО «КМ онлайн», 1999-2025 О проекте ·Все проекты ·Выходные данные ·Контакты ·Реклама
]]>
]]>
Сетевое издание KM.RU. Свидетельство о регистрации Эл № ФС 77 – 41842.
Мнения авторов опубликованных материалов могут не совпадать с позицией редакции.

Мультипортал KM.RU: актуальные новости, авторские материалы, блоги и комментарии, фото- и видеорепортажи, почта, энциклопедии, погода, доллар, евро, рефераты, телепрограмма, развлечения.

Карта сайта


Подписывайтесь на наш Telegram-канал и будьте в курсе последних событий.


Организации, запрещенные на территории Российской Федерации
Telegram Logo

Используя наш cайт, Вы даете согласие на обработку файлов cookie. Если Вы не хотите, чтобы Ваши данные обрабатывались, необходимо установить специальные настройки в браузере или покинуть сайт.