Пятница, 18.07.2025, 11:55
Приветствую Вас Гость | RSS
Главная | Каталог статей | Регистрация | Вход
.:: Меню ::.
.:: Категории каталога ::.
Разное [5]
Различные темы по программированию
Пакет SWT [4]
Практикуемся в написании оконных приложений на Java
Среды разработки, компиляторы и т.п [3]
Сравнения, описания, плюсы и минусы сред разработки. Сравнение компиляторов.
Java [8]
Объектно-ориентированные соображения.
Си++ [19]
Коротко и ясно
Ассемблер [6]
Машинные коды, побитно :)
Форма входа
.:: Поиск ::.
.:: Дополнительно ::.
    Хостинг от Loqo.ru
             .:: Коментируем ::.
Главная » Статьи » Текстовый материал » Си++

Лабораторная работа 3
Code

#include <iostream>
#include <conio.h>

using namespace std;

void puz_metod(int mas[], int n)
{
  int temp;
  for (int i=0; i<n; i++)
  {
  for (int j=n-1; j>i; j--)
  {
  if (mas[i]>mas[j])
  {
  temp=mas[i];
  mas[i]=mas[j];
  mas[j]=temp;
  }
  }
  }
  wcout << L"Отсортирован методом пузырька: ";
  for (int i=0; i<n; i++)
  cout<<mas[i]<<' ';
  cout<<endl;
}

void sort_stack (int* a, int n)
{
  int i=0, j=n;
  int temp, p;
  p=a[n>>1];
  do
  {
  while (a[i]<p) i++;
  while (a[j]>p) j--;
  if (i<=j)
  {
  temp=a[i];
  a[i]=a[j];
  a[j]=temp;
  i++;
  j--;
  }
  }
  while(i<=j);
  if (j>0) sort_stack(a, j);
  if (n>i) sort_stack(a+i, n-i);
}

void chet_nechet (int mas[], int n)
{
  int temp;
  for (int i=0; i<n; i++)
  {
  for (int j=n-1; j>i; j--)
  {
  if (mas[i]>mas[j])
  {
  temp=mas[i];
  mas[i]=mas[j];
  mas[j]=temp;
  }
  }
  }

  wcout << L"Отсортированы чётные: ";
  for (int i=0; i<n; i++)
  if (mas[i]%2==0){cout<<mas[i]<<' ';}
  cout << endl;
  for (int i=0; i<n; i++)
  {
  for (int j=n-1; j>i; j--)
  {
  if (mas[i]<mas[j])
  {
  temp=mas[i];
  mas[i]=mas[j];
  mas[j]=temp;
  }
  }
  }

  wcout << L"Отсортированы не чётные: ";
  for (int i=0; i<n; i++)
  if (mas[i]%2!=0){cout<<mas[i]<<' ';}
  cout << endl;
}  

void vozrast_inter(int mas[])
{
  int fst, sec, temp;
  wcout << L"Введите индекс начала ";
  cin >> fst;
  fst--;
  wcout << L"Введите индекс конца ";
  cin >> sec;
  sec--;
  for(int i=fst; i<sec; i++)
  {
  for (int j=sec; j>i; j--)
  {
  if (mas[i]>mas[j])
  {
  temp=mas[i];
  mas[i]=mas[j];
  mas[j]=temp;
  }
  }
  }
  wcout<<L"Отсортированный массив с "<<fst+1<<L" до "<<sec+1<<L" индекса: ";
  for (int i=fst; i<=sec; i++)
  cout << mas[i] << ' ';
  cout << endl;
}

void ubiv_inter(int mas[])
{
  int fst, sec, temp;
  wcout << L"Введите индекс начала: ";
  cin>>fst;
  fst--;
  wcout << L"Введите индекс конца: ";
  cin >> sec;
  sec--;
  for(int i=fst; i<sec; i++)
  {
  for (int j=sec; j>i; j--)
  {
  if (mas[i]<mas[j])
  {
  temp=mas[i];
  mas[i]=mas[j];
  mas[j]=temp;
  }
  }
  }
  wcout << L"Отсортированный массив с " << fst+1 << L" до " << sec+1 << L" индекса: ";
  for (int i=fst; i<=sec; i++)
  cout << mas[i] << ' ';
  cout << endl;
}

void main(void)
{
  wcout.imbue (locale (".866"));
  int mas []={2,5,-8,1,-4,6,3,-5,-9,13,0,4,9};
  int imin, imax;
  int n=sizeof(mas)/sizeof(int);
  cout << "n= " << n << endl;
  int i;
  imin=i=0;  
  imax=i=0;
  wcout<< L"Заданный массив: ";
  for(i=0; i<n; i++) cout << mas[i] << ' ';
  cout << endl;
  //Метод мини-макса
  for(i=0; i<n-1; i++)
  {
  imin=i;
  for(int j=i+1; j<n; j++)
  if (mas[j]<mas[imin]) imin=j;
  int t=mas[i];
  mas[i]=mas[imin];
  mas[imin]=t;
  }
  wcout << L"Отсортированный массив: ";
  for (i=0; i<n; i++)
  cout<<mas[i]<<' ';
  cout << endl;

  puz_metod(mas, n);
  sort_stack(mas, n-1);
  chet_nechet(mas, n);
  vozrast_inter(mas);
  ubiv_inter(mas);

  system ("pause");
}

Функция puz_metod - сортировка методом "пузырька" массива целых чисел, размерностью n
Функция chet_nechet - сортировка по чётным и отдельно по нечётным целым.
Функция vozrast_inter - сортировка по возрастанию с указанием начального индекса и конечного.
Функция ubiv_inter - то же, что и предыдущая, только по убыванию. (немного не корректно работает, надо доделать)

Функцию sortstack рассмотрим немного подробней.
Функция рекурсивная.
Во-первых для работы с массивом, мы передаём в функцию указатель на первый элемент массива.
n - количество элементов в массиве.
Переменные i и j инициализируем как 0 и n соответственно, они будут задавать границы массива.
p=a[n>>1];
n>>1 - сдвиг на один бит вправо.
Такой вот способ выбора элемента.
Затем идёт цикл манипуляций с элементами, после него функция вызывает саму себя с определёнными аргументами.

В функции main инициализируется массив и выводится на экран.
Затем сортируется методом "мини-макса" и выводится на экран.
Далее, выполняются функции, работающие с массивом.

В методичке указано, что пример рассматривает реализации различных алгоритмов средствами языка Си++, но это не совсем так.
На Си++ мы только выводим информацию на экран, остальное это Си.
Вот такая смесь.
Чтобы пример был полностью на Си++, надо это задание выполнить с использованием класса и реализовать соответствующие методы.

Ну, в общем, всё.

Категория: Си++ | Добавил: C0demaker (29.08.2009)
Просмотров: 1369 | Рейтинг: 0.0/0
Всего комментариев: 0

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Ant1 © 2025