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

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

ФЭСТ ВТ-11

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

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

Тема: “ Директивы предпроцессора”

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

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

Москва 2012.

#include <time.h>

#include <stdlib.h>

#include <stdio.h>

#include "preproc_f.h"

#define N 20

extern float array[N];

extern float bound_up,bound_down;

void generate_elements()

{

time_t t;

int n;

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 n = 0;

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

if (array[i] < C)

n++;

return n;

}

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 n = 0;

float x;

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

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

{

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

{

x = array[n];

array[n] = array[i];

array[i] = x;

n++;

}

}

}

preproc_f.h

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(); // Собственно сама сортировка

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