Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Листинг 5.5






#include " stdafx.h"

#include < iostream>

#include " conio.h"

#include " math.h"

#include " windows.h"

 

using namespace std;

 

int _tmain(int argc, _TCHAR* argv[])

{

setlocale(LC_ALL, " Russian");

const int N = 1000;

int n, i, j, left, right, sp = 0, m = 1;

float *C = new float[N], middle, temp;

int *stackl = new int[N], *stackr = new int[N];

 

cout< < " \n\nЗадание: \n";

cout< < " \nСоставить программу с использованием динамических массивов\n";

cout< < " \nдля решения задачи на переупорядочивание элементов массива.\n";

cout< < " \nВ качестве алгоритма сортировки использовать метод быстрой сортировки массива.\n";

cout< < " \n\nЗадача: составить программу нахождения тех элементов массива С, \n";

cout< < " \nиндексы которых являются степенями двойки (1, 2, 4,...).\n";

cout< < " \n\nРабота программы: \n"

 

A:

cout< < " \nВведите количество элементов: ";

cin > > n;

if(n < = 0 || n > N)

{

cout< < " Неверный размер массива" < < " \n";

goto A;

}

 

cout< < " \nВведите элементы массива: \n\n";

for(i = 0; i < n; i++) cin > > C[i];

 

sp = 1;

stackl[1] = 0;

stackr[1] = n - 1;

 

while(sp > 0)

{

left = stackl[sp];

right = stackr[sp];

sp--;

while(left < right)

{

i = left;

j = right;

middle = C[(left + right)/2];

while(i < j)

{

while(C[i] < middle) i++;

while(middle < C[j]) j--;

if(i < = j)

{

temp = C[i];

C[i] = C[j];

C[j] = temp;

i++;

j--;

}

}

if(i < right)

{

sp++;

stackl[sp] = i;

stackr[sp] = right;

}

right = j;

}

}

cout< < " \nМассив после сортировки: \n\n";

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

{

cout < < C[i] < < " \n";

}

 

cout< < " \nМассив из элементов, индексы которых являются степенями двойки: \n\n" < < " \n";

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

{

while (m < n)

{

cout < < C[m] < < " \n";

m = m * 2;

}

}

 

delete[] C;

delete[] stackl;

delete[] stackr;

getch();

return 0;

}

 

Пример 5.4. В массиве {aj}, j = 1, 2, …10 есть положительные и отрицательные элементы. Вычислить произведение отрицательных элементов. UML-диаграмма этого алгоритма приведена на рисунке 5.2.

Рисунок 5.2 - UML-диаграмма деятельности для примера 5.4






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.