Удалить из массива те элементы, которые меньше (min+max) /2 - C (СИ)
Формулировка задачи:
Помогите с задачей. С массивами проблемы постоянные...
Дан массив a1,...,a20. Удалить из него те элементы, которые меньше (min+max)/2.
Решение задачи: «Удалить из массива те элементы, которые меньше (min+max) /2»
textual
Листинг программы
#include <stdio.h>
#include <conio.h>
#include <locale.h>
#include <math.h>
#include <malloc.h>
#include <process.h>
void main()
{
setlocale(LC_CTYPE, "Russian");
int *mas,*b;
int i, n, min, max,k=0;
printf("введите n:");
scanf("%d",&n);
if (n==NULL)
{
puts("предел размерности");
exit(0);
}
else
{
mas=new int [n];
b=new int [n];
for (i=0;i<n;i++)
{
printf("\n mas[%d]=",i);
scanf("%d",mas+i);
}
}
min=*(mas+0);
max=*(mas+0);
//находим минимум
for (i=0;i<n;i++)
if(*(mas+i)<min)
min=*(mas+i);
//находим максимум
for (i=0;i<n;i++)
if(*(mas+i)>max)
max=*(mas+i);
//создаем массив из элементов, которые попадают под условие min+max/2
for (i=0;i<n;i++)
if(*(mas+i)>((min+max)/2))
{
*(b+k)=*(mas+i);
k++;
}
//вывод нового массива
printf("\n Новый массив:\n");
for (i=0; i<k; i++)
{
printf("%d\n", *(b+i));
}
delete []mas;
delete []b;
}
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы
- Устанавливается русскоязычная локаль
- Объявляются переменные: массив
masиbдля хранения исходных и отфильтрованных данных соответственно, а также переменныеi,n,min,maxиkдля контроля цикла - Пользователю предлагается ввести размерность массива
n - Если размерность массива некорректна, программа выводит сообщение об ошибке и завершается
- Иначе, выделяется память под массив
masиb - Пользователю предлагается ввести значения элементов массива
mas - Находится минимальное и максимальное значение в массиве
mas - Создается новый массив
bиз элементов, которые больше (min+max)/2 - Выводится новый массив
b - Освобождается память, выделенная под массивы
masиb