Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral

Новосибирский государственный технический университет

Кафедра вычислительной техники


Расчётно-графическая работа 2002

Вариант №13

Вариант: 13

Группа: АМ-215

Бригада: 5

Студенты:

Новосибирск 2002


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

13.“Быстрая” сортировка разделением с подсветкой разделяемой части и элемента-медианы.

2.  Неформальное описание основных идей алгоритма.

РГР выполнен как программа в Борланд СИ. Заданный массив сортруется разделением. Считается среднее арифметическое элементов массива в заданных границах, это и будет медиана. После этого вызывается функция сортировки, элементы большие медианы переписываются в первый вспомогательный массив, а элементы меньшие медианы во второй вспомогательный массив. Затем элементы из первого и второго вспомогательных массивов переписываются обратно в сортируемый массив. После этого опять вызывается функция сортировки для кождойгрупы чисел, которые разбивались. Разделения происходят пока массив не отсортируется.

На экране это выглядит так: появляется сортируемый массив, подсвечиваются элементы большие медианы синим цветом, а элементы меньшие медианы зеленым цветом. После этого элементы большие медианы перебигают в 1 вспомогательный массив, а элементы меньшие медианы во 2 вспомогательный массив. Затем элементы из обоих вспомогательных массивов перебигают обратно в сортируемый массив.

3.  Описание структур данных используемых в программе.

4.  Описание основных идей алгоритма с использованием управляющих конструкций языка СИ и текстовых формулировок результата выполнения.

НЕ нашли? Не то? Что вы ищете?

Функции:

Sort ( ) – функция сортировки массива, сортировка происходит методом разбиения массива.

Stroka ( ) – функция которая делает заставку. Заставка представляет собой выпадение символов заданного текста сверху экрана до заданных координат (координаты задаются).

Move ( ) – функция которая перемещает число из заданных координат в другие заданные координаты.

Esc ( ) – функция выхода из программы. После того как был нажат Esc она запрашивает подтверждения.

5.  Текст программы с комментариями на все структуры данных, заголовки функций и принципиальные фрагменты алгоритмов.

#include<conio. h>

#include<string. h>

#include<stdlib. h>

#include<dos. h>

#include<stdio. h>

#include<alloc. h>

extern int d=0;

void Stroka(char str[]) //функция заставки

{

char stroka[]="lalala", *ck;

int y, sx=17,sy=10,cs, sout=0;

clrscr ();randomize ();

ck=new char [strlen(str)];

for (y=0; y<strlen(str); y++) //заполнение массива "-" - ами

*(ck+y)='-';

while (sout<strlen (str))

{cs=random (strlen(str)); //определение еще не выведенной буквы

while (*(ck+cs)!='-')

cs=random (strlen(str));

*(ck+cs)='v'; // Чтобы элементы не повторялись

sout++; // вместо использованных элементов ставим "птички"

for (y=1; y<sy; y++)

{textcolor (9); // задаем цвит

gotoxy (sx+cs, y); //написание текста ниже

cprintf ("%c", str[cs]);

gotoxy (sx+cs, y-1); //затирание стaрого текста

printf (" ");

delay (10); // здесь ставим скорость падения букв

}}}

void step(int v, int &x, int &y, int r)

{

gotoxy(x, y);

cprintf(" ");

if (abs(r)>1) y+=r/2;

else x+=r;

gotoxy(x, y);

cprintf("%2d",v);

delay(10);

}

void move(int x0,int y0,int x1,int y1,int v) //функция перемещения символов

{

int dx=x1>x0 ? 1 :-1;

int dy=y1>y0 ? 1 :-1;

int y2=(y0+y1)/2;

while (y0!=y2) step(v, x0,y0,dy*2);

while (x0!=x1) step(v, x0,y0,dx);

while(y0!=y1) step(v, x0,y0,dy*2);

}

void sort (int in [],int a, int b) //функция сортировки заданного массива

{

int v1[20]; //первый вспомогательный массив

int v2[20]; //второй вспомогательный массив

if (a>=b) return;//проверка на правильность границ

int h, f,k, l,i, j;int w=0;int z=0;

double t=0; //инициалтзируем медиану

for (h=a, b;h<=b;h++)

t+=in[h];//считаем медиану

t=t/(b-a+1);

int c=0;

gotoxy(25,13);//перемещаем курсор в заданную позицию

if (a>0)

for(;c<a;c++){textcolor(7); cprintf("%d ",in[c]);}//выводит неиспользуемые элементы

for (int s=a;s<=b;s++)//цикл подсвечивает элементы

if (in[s]>=t)

{textcolor(9);cprintf("%d ",in[s]);}//большие медианы синим цветом

else {textcolor(2);cprintf("%d ",in[s]);}//меньшие медианы зеленым цветом

if(b<10)

for(int q=b+1;q<10;q++)

{textcolor(7);cprintf ("%d ",in[q]);} //выводит оставшиеся элементы

d++;

gotoxy(25,18);textcolor(4);

cprintf("Медиана равна:");//печатает текст в заданной позиции, заданным цветом

cprintf(" %f",t);

gotoxy(25,20);textcolor(3);cprintf("Количество разделений:");cprintf(" %d",d);

for(int h1=a;h1<=b;h1++)

if(in[h1]>=t)//переносит элементы большие медианы в вспомогательный массив

{textcolor(9);move(25+2*h1,13,24+2*w,16,in[h1]);w++;};

for(h1=a;h1<=b;h1++)

if(in[h1]<t) //переносит элементы меньшие медианы в вспомогательный массив

{textcolor(2);move(25+2*h1,13,24+2*z,15,in[h1]);z++;};

delay(50);

for (h=a, k=0,l=0;h<=b;h++)//записывает элементы меньшие медианы в

if (in[h]>=t) //вспомогательный массив v1, а элементы большие

v2[l++]=in[h]; //медианы в массив v2

else

v1[k++]=in[h];

if (k==0) return;

for(w=0,h1=a;w<k;w++,h1++)//переносит элементы меньшие медианы из вспомогательного

{textcolor(2); move(24+2*w,15,24+2*h1,13,v1[w]);}//массива в исходный

for(z=0;z<l;z++,h1++)//переносит элементы меньшие медианы из вспомогательного

{textcolor(9); move(24+2*z,16,24+2*h1,13,v2[z]);}//массива в исходный

for (h=a, j=0;j<k;h++,j++)//записывает элементы обратно в сортируемый массив

in[h]=v1[j];

i=h;

for (j=0;j<l;h++,j++)//записывает элементы обратно в сортируемый массив

in[h]=v2[j];

sort(in, a,i-1);//вызывается функция сортировки для границ от первой границы до медианы

sort(in, i,b);//вызывается функция сортировки для границ от медианы до второй границы

}

int Esc()//функция выхода из программы

{

char value;

cprintf("Вы увеpенны?");//запрашивает подтверждение

value=getch();

if(value=='Y'||value=='y')return 1;

return NULL;

}

void main()//функция main

{ while(1)

{

clrscr();

_setcursortype(0);//выполняет затирание курсора

char text1[]="AM-215 PROGRAMMING TECNOLOGIES PRESENTS...";//задается строка которая используется, как заставка

Stroka(text1);//вызов функции заставки

gotoxy(20,10);textcolor(5);

cprintf("\n1 - Начать сортировку");

gotoxy(20,12);textcolor(2);cprintf("\n2 - О программе");

gotoxy(20,14);textcolor(RED);cprintf("\nESC - Выход");

switch(getch())

{

case '1':

{ d=0;//обнуляется количество перестановок

clrscr();int B[10]={9,1,8,2,7,3,6,4,5,0};int a; int b;//задается сортируемый массив

gotoxy(37,2);textcolor(3);cprintf("Введите гранцы сортировки :");

gotoxy(37,3);textcolor(3);cprintf("Первая граница: ");cscanf("%d",&a);//запрашиваются границы

gotoxy(37,4);textcolor(3);cprintf("Вторая граница: ");cscanf("%d",&b);//запрашиваются границы

gotoxy(10,8);textcolor(6);

if(a>=10)break;if(a>=10)break;//проверяются границы на размерность заданного массива

cprintf ("Исходный массив: ");

for (int r=0;r<10;r++) cprintf(" %d",B[r]);

gotoxy(3,2);textcolor(7);cprintf("* - не используемые элементы");

gotoxy(3,3);textcolor(9);cprintf("* - элементы большие медианы");

gotoxy(3,4);textcolor(2);cprintf("* - элементы меньшие медианы");

gotoxy(1,14);textcolor(2);cprintf("\nВспомогательный массив: "); // 24

gotoxy(1,15);textcolor(9);cprintf("\nВспомогательный массив: ");

sort(B, a,b);//вызывается функция сортировки

gotoxy(20,22);textcolor(6);cprintf("Отсортированный массив:");

for(int y=0;y<10;y++)cprintf(" %d",B[y]);

getch();getch();

break;

}

case '2'://если нажать'2'появляются сведения о программе

{

clrscr();gotoxy(1,10);textcolor(2);//задается положение и цвет текста

cprintf("Программа разработана Ракальевым Василием, для того ");

cprintf("чтобы наглядно показать выполнение комьютером сортировки ");

cprintf("методом разделения. Несанкционированное распространение ");

cprintf("запрещено и преследуется по закону! Все права принадлежат");

cprintf(" Ракальеву Василию Александровичу.");getch();break;

}

case 27 ://если нажать Esc вызывается функция выхода из программы

{ textcolor(RED);gotoxy(20,23);if(Esc())return;break;}

}

}

}