#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();
}