/*
* File: main.c
* Author: Micren
*
* Created on 18 Ноябрь 2010 г., 21:21
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#include <conio.h>
#include <locale.h>
// Размерность массива
#define DIM 10
// Диапазон элементов для генерации массива
#define MIN -10
#define MAX 10
// Диапазон [A..B] для упаковки массива согласно условия
#define A 0
#define B 5
// Выводит массив на stdout
void printArray(const char* const msg, const double* array, size_t size)
{
if (msg)
{
printf("%s\n", msg);
}
while (size--)
{
printf("%f ", *array++);
}
printf("\n");
}
// Заполняет массив случайными значениями из диапазона MIN..MAX
void genArray(double* array, size_t size)
{
srand(time(0));
while (size--)
{
*array++ = ((double) rand()) / RAND_MAX * (MAX - MIN) + MIN;
}
}
// Ищет минимальный по модулю элемент
size_t findAbsMin(const double* const array, size_t size)
{
size_t res = 0, i;
for (i = 1; i < size; ++i)
{
if (fabs(array[i]) < fabs(array[res]))
{
res = i;
}
}
return res;
}
// Вычисляет сумму элементов после 1го отрицательного
double calcSum(const double* array, size_t size)
{
double res = 0.0;
const double* const end = array + size;
// Пропускаем до 1го отрицательного
while (array != end && *array++ >= 0);
// Суммируем оставшиеся
while (array != end)
{
res += fabs(*array++);
}
return res;
}
// Упаковка массива, согласно условия, удалением элементов из диапазона [A..B]
void packArray(double* array, size_t* size)
{
double *from = array, *to = array;
const double* const end = array + *size;
while (from != end)
{
if (*from < A || *from > B)
{
*to++ = *from;
}
++from;
}
// Новая длина массива
*size = to - array;
// Остаток заполним нулями
while (to != end)
{
*to++ = 0.0;
}
}
/*
*
*/
int main(int argc, char** argv)
{
// Массив
double array[DIM];
// Размер массива
size_t size = DIM;
setlocale(LC_ALL,"russian");
// Заполним его случайными числами
genArray(array, size);
printArray("Исходный массив:", array, size);
printf("Минимальный по модулю элемент имеет индекс: %u\n", findAbsMin(array, size));
printf("Сумма элементов по модулю после 1го отрицательного: %f\n", calcSum(array, size));
packArray(array, &size);
printArray("Сжатый массив:", array, size);
getch();
return EXIT_SUCCESS;
}
Исходный массив:
-5.019155 9.512544 8.988736 4.083037 -1.332236 -8.373878 9.150914 -4.652075 -6.816634 -4.926991
Минимальный по модулю элемент имеет индекс: 4
Сумма элементов по модулю после 1го отрицательного: 57.837045
Сжатый массив:
-5.019155 9.512544 8.988736 -1.332236 -8.373878 9.150914 -4.652075 -6.816634 -4.926991
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.