Практические / Отчеты студентов 2011-2012 / ВТ-11 Лр / Тумор / Лабораторная №12
.docxМосковский Государственный Университет Леса
ФЭСТ ВТ-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(); // Собственно сама сортировка