Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
17
Добавлен:
17.04.2015
Размер:
23.99 Кб
Скачать

Московский Государственный Университет Леса

ФЭСТ ВТ-11

Лабораторная работа №11.

Программирование на языках высокого уровня

Тема: “ Динамическая память”

Выполнил студент Тумор С.В.

Проверил Ларионов Н.В.

Москва 2012.

// filles.cpp : Defines the entry point for the console application.

//

#include <stdio.h>

#include <time.h>

#include <stdlib.h>

#include <conio.h>

const int n = 20; // Именованая константа для размера масива

float* array;

float bound_up,bound_down;

void generate_elements(); // Генерация

void print_elements(); // Вывод

int find_less_c(float C); // Подсчет элементов меньших C

int find_last_neg(); // Получсение индекса последнего отрицательного элемента

float find_summ(); // Нахождение суммы элементов расположенных после последнего

// отрицательно

int find_max(); // Нахождение индекса максимального элемента

void find_bound(); // Нахождение границы +-20%

void sort(); // Собственно сама сортировка

int main()

{

float c,summ;

int less_c;

array = new float[n];

generate_elements(); // Генерация массива чисел

print_elements(); // Вывод массива на экран

printf("Enter C: "); // Ввоод C

scanf("%f",&c);

less_c = find_less_c(c);

printf("Elements less than C: %d\n",less_c);

summ = find_summ();

printf("Summ of elements after last negative element: %f\n",summ);

sort();

printf("===================SORTED===================\n");

print_elements(); // Печатаем отсортированные массив

delete array;

getch(); // Ожидаем нажатия any key :-)

return 0;

}

void generate_elements()

{

time_t t;

srand(time(&t));

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

{

array[i] = rand() % 100;

if ((rand() % 2) == 0) // Добавляем знак, если rand() генерирует четное число

array[i] *= 1; // то плюс

else

array[i] *= -1; // если нечётное то минус

}

}

void print_elements()

{

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

printf("%f\t",array[i]);

}

int find_less_c(float C)

{

int t = 0;

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

if (array[i] < C)

t++;

return t;

}

int find_last_neg()

{

int last_neg_index = 0;

for(int i = n-1;i >= 0;i--)

{

if (array[i] < 0)

{

last_neg_index = i;

return last_neg_index;

}

}

return -1;

}

float find_summ()

{

float summ = 0;

printf("index of last negative element is %d\n",find_last_neg());

for(int i = find_last_neg() + 1;i < n;i++)

summ += array[i];

return summ;

}

int find_max()

{

int imax = 0;

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

if (array[i] > array[imax])

imax = i;

printf("max element is %f\n",array[imax]); // Для отладки

return imax;

}

void find_bound()

{

int imax = find_max();

float x;

x = (array[imax] * 20) / 100;

bound_up = array[imax] + x; // Находим верхнюю границу

bound_down = array[imax] - x; // Находим нижнюю границу

printf("up bound is %f\ndown bound is %f\n",bound_up,bound_down); // Отладочная информация

}

void sort()

{

/* Сначала должны распологаться элементы отличающиеся от максимального не более чем на 20% */

int t = 0;

float x;

find_bound(); // Находим границы

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

{

if (!(array[i] > bound_up) && !(array[i] < bound_down))

{

x = array[t];

array[t] = array[i];

array[i] = x;

t++;

}

}

}

Соседние файлы в папке Тумор