- •Лабораторная 5 Первичные классы и объекты
- •Классы определяются с помощью нижеследующих полей:
- •Варианты заданий
- •Примеры выполнения
- •Пример 2
- •Программа
- •Результаты работы программы
- •Пример 3
- •Программа
- •Результаты работы программы
- •Лабораторная 6 Шаблоны функций и классов
- •Варианты заданий
- •Примеры выполнения ргз 2
- •Результаты работы программы
- •Пример 2
- •Программа
- •Лабораторная 7 Производные классы
- •Примеры выполнения ргз 3
- •Программа
- •Результаты работы программы
Результаты работы программы
Сортировка методом Шелла
Отсортированный массив целых чисел:
0 1 1 2 3 4 4 5 6 6 7 9 9 10 10 11 11 11 13 15 16 16 16 17 18 19 19 20 20 21 21
22 22 24 24 24 26 26 26 28 28 33 33 35 37 37 38 38 42 45 45 45 46 46 46 48 53 54
55 55 55 56 57 62 62 62 64 64 65 65 69 69 70 71 71 71 71 73 74 75 75 75 77 79 8
0 80 80 80 83 86 88 88 90 92 93 95 96 96 98 99
Отсортированный массив чисел с плавающей точкой:
0 0 0.01 0.02 0.02 0.04 0.07 0.07 0.1 0.11 0.12 0.12 0.13 0.14 0.17 0.17 0.17 0.
19 0.2 0.2 0.2 0.21 0.22 0.22 0.22 0.23 0.23 0.24 0.24 0.27 0.27 0.27 0.28 0.29
0.3 0.31 0.34 0.35 0.35 0.35 0.37 0.37 0.37 0.4 0.43 0.43 0.44 0.44 0.46 0.48 0.
5 0.51 0.52 0.53 0.54 0.55 0.55 0.55 0.56 0.59 0.6 0.61 0.63 0.63 0.67 0.69 0.7
0.71 0.73 0.73 0.74 0.74 0.74 0.76 0.77 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.86 0
.87 0.87 0.88 0.9 0.9 0.9 0.9 0.92 0.93 0.93 0.94 0.94 0.94 0.94 0.97 0.97 0.98
Отсортированный массив битовых строк:
000000000001 0010 0011 0011 0011 0101 0110 0110 1000 1001 1010 1011 1011 1100 11
00 1110 1111 1111 1111 011001
Пример 2
Задание
-
Написать параметризованную подпрограмму сортировки указанным методом. Отладить ее на целых числах и числах с плавающей точкой.
-
Определить класс объектов массива, предназначенного для сортировки. Перегрузить для него операцию присваивания и операции сравнения <, <=, ==, >=, >.
-
Написать программу, сортирующую массив объектов построенного класса с помощью написанной параметризованной подпрограммы.
Метод сортировки - метод вставок, класс – строка символов.
Программа
#include <iostream.h>
#include <string.h>
#include <conio.h>
#include <stdlib.h>
// Класс - строка символов
class SymStr
{
private:
char *s; // Строка
int length; // Длина строки
public:
// Конструкторы
SymStr()
{
s=new char[1];
*s='\0';
length=0;
}
SymStr(char *str)
{
length = strlen(str);
s = new char[length + 1];
strcpy (s, str);
}
SymStr(const SymStr &str)
{
length = str.length;
s = new char[length + 1];
strcpy (s, str.s);
}
// Деструктор
~SymStr() { delete s; }
// Перегрузка оператора >
int operator> (SymStr &);
// Перегрузка оператора >=
int operator>=(SymStr &);
// Перегрузка оператора <
int operator< (SymStr &);
// Перегрузка оператора <=
int operator<=(SymStr &);
// Перегрузка оператора ==
int operator==(SymStr &);
// Перегрузка оператора =
SymStr &operator=(SymStr &Object);
// Перегрузка оператора << для вывода строки
friend ostream &operator<<(ostream &, SymStr &);
};
// Перегрузка оператора >
int SymStr::operator> (SymStr &Object)
{
if(strcmp(s, Object.s) > 0) return 1;
return 0;
}
// Перегрузка оператора >=
int SymStr::operator>=(SymStr &Object)
{
if(strcmp(s, Object.s) >= 0) return 1;
return 0;
}
// Перегрузка оператора <
int SymStr::operator< (SymStr &Object)
{
if(strcmp(s, Object.s) < 0) return 1;
return 0;
}
// Перегрузка оператора <=
int SymStr::operator<=(SymStr &Object)
{
if(strcmp(s, Object.s) <= 0) return 1;
return 0;
}
// Перегрузка оператора ==
int SymStr::operator==(SymStr &Object)
{
if(strcmp(s, Object.s) == 0) return 1;
return 0;
}
// Перегрузка оператора =
SymStr& SymStr::operator=(SymStr &Object)
{
length = strlen(Object.s);
s = new char[length + 1];
strcpy(s, Object.s);
return *this;
}
// Перегрузка оператора << для вывода строки
ostream &operator<<(ostream &fo, SymStr &fp)
{
fo << fp.s;
return fo;
}
// Cортировка вставками
template <class Type>
void insert (Type *x, int n)
{
int i, j;
Type t;
for (i = 1; i < n; i++)
{
t = x[i];
for (j = i - 1; j >= 0 && t < x[j]; j--)
x[j + 1] = x[j]; // Сдвиг на одну позицию
x[j + 1] = t;
}
}
void main()
{
int i;
int mas1[30]; // Определяем целочисленный массив
float mas2[30]; // Определяем массив чисел с плавающей точкой
randomize(); // Инициализация генератора случайных чисел
// Заполняем массивы случайными числами
for (i = 0; i < 30; i++)
{
mas1[i] = random(30);
mas2[i] = random(30) * 0.01;
}
clrscr(); // Очищаем экран
cout << "\t\t\tСортировка методом вставок\n\n";
// Сортировка целых чисел
insert(mas1, 30);
cout << "Результат сортировки целых чисел:\n";
for (i = 0; i < 30; i++)
cout << mas1[i] << " ";
// Cортировка чисел с плавающей точкой
insert(mas2, 30);
cout << "\n\nРезультат сортировки чисел с плавающей точкой:\n";
for (i = 0; i < 30; i++)
cout << mas2[i] << " ";
SymStr mas3[5] = {"diman", "max", "vasyan", "sanya", "leha"};
// Cортировка символьных строк
insert(mas3, 5);
cout << "\n\nРезультат сортировки битовых строк:\n";
for (i = 0; i < 5; i++)
cout << mas3[i] << " ";
getch();
}
Результаты работы программы
Сортировка методом вставок
Результат сортировки целых чисел:
0 0 1 2 3 4 6 7 8 8 8 9 10 11 12 12 13 13 14 15 16 19 20 21 22 26 27 28 28 29
Результат сортировки чисел с плавающей точкой:
0 0.01 0.03 0.03 0.05 0.06 0.06 0.07 0.08 0.09 0.09 0.1 0.12 0.13 0.14 0.14 0.15 0.15 0.16 0.16 0.18 0.19 0.19 0.2 0.2 0.22 0.26 0.27 0.27 0.29
Результат сортировки битовых строк:
diman leha max sanya vasyan