Ограничить значения всех элементов, абсолютные значения которых превышают среднее - C (СИ)
Формулировка задачи:
Требуется помощь, помогите пожалуйста!)
Задача:перевести код из C++ в С и исправить ошибки, если такие имеются
Код создан по заданию: Ограничить значения всех элементов, абсолютные значения которых превышают среднее для положительных и отрицательных элементов. Размер массива определяется в начале выполнения программы, как случайное сичло в диапазоне 50 - 200. В тексте программы нельзя применять операцию индексации. Диапазон значений -100 - 100. РАЗМЕРНОСТЬ МАССИВА ЗНАЧЕНИЯ НЕ ИМЕЕТ
//#include "stdafx.h"
#include "iostream"
#include "iomanip"
#include "time.h"
using namespace std;
// Ограничить значения всех элементов, абсолютные значения которых превышают среднее для //// положительных и отрицательных элементов
//int _tmain(int argc, _TCHAR* argv[])
int main()
{
int *Ar;
int *Cr;
int v_min = -100, v_max = 200;
int min = v_min;
int size;
int meanPositiv=0, meanNegativ=0, countPositiv=0, countNegativ=0;
srand(unsigned(time(NULL)));
size = rand()%150+50;
size=6;
Ar = new int [size];
for (Cr = Ar; Cr < Ar + size; Cr++){
*Cr = rand()%v_max+v_min;
cout<<setw(3)<<*Cr<<' ';
}
// считаем среднее для положительных и отрицательных
for (Cr = Ar; Cr < Ar + size; Cr++)
{
if(*Cr>=0) {meanPositiv+=*Cr; ++countPositiv; }
else {meanNegativ+=*Cr; ++countNegativ; }
}
if (countPositiv) meanPositiv/=countPositiv;
if (countNegativ) meanNegativ/=countNegativ;
// выбираем максимальное среднее
// но без точности то есть делим без остатка и правильного округления
if(meanPositiv<(-meanNegativ)) meanPositiv=-meanNegativ;
// ограничиваем согласно условию
for (Cr = Ar; Cr < Ar + size; Cr++)
{
// несовсем понятно чем ограничивать
// ограничиваем meanPositiv с учётом знака
if(*Cr>meanPositiv) *Cr=meanPositiv;
if(*Cr<(-meanPositiv)) *Cr=-meanPositiv;
}
cout<<"\nResult (modul limit: "<<meanPositiv<<"): ";
for (Cr = Ar; Cr < Ar + size; Cr++){
cout<<setw(3)<<*Cr<<' ';
}
cout<<endl;
system("PAUSE");
return 0;
}Решение задачи: «Ограничить значения всех элементов, абсолютные значения которых превышают среднее»
textual
Листинг программы
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int *Ar;
int *Cr;
int v_min = -100, v_max = 200;
int size;
int meanPositiv=0, meanNegativ=0, countPositiv=0, countNegativ=0;
srand(time(NULL));
size = rand()%150+50;
size=6;
Ar = (int*) malloc(sizeof(int) * size);
for (Cr = Ar; Cr < Ar + size; Cr++) {
*Cr = rand()%v_max+v_min;
printf("%3d ", *Cr);
}
// считаем среднее для положительных и отрицательных
for (Cr = Ar; Cr < Ar + size; Cr++) {
if(*Cr>=0) {meanPositiv+=*Cr; ++countPositiv; }
else {meanNegativ+=*Cr; ++countNegativ; }
}
if (countPositiv) meanPositiv/=countPositiv;
if (countNegativ) meanNegativ/=countNegativ;
// выбираем максимальное среднее
// но без точности то есть делим без остатка и правильного округления
if(meanPositiv<(-meanNegativ)) meanPositiv=-meanNegativ;
// ограничиваем согласно условию
for (Cr = Ar; Cr < Ar + size; Cr++) {
// несовсем понятно чем ограничивать
// ограничиваем meanPositiv с учётом знака
if(*Cr>meanPositiv) *Cr=meanPositiv;
if(*Cr<(-meanPositiv)) *Cr=-meanPositiv;
}
printf("\nResult (modul limit: %d): ", meanPositiv);
for (Cr = Ar; Cr < Ar + size; Cr++) {
printf("%3d ", *Cr);
}
printf("\n");
system("PAUSE");
return 0;
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы:
, , , - Объявляем переменные:
- int *Ar; - указатель на массив целых чисел, который будет заполняться случайными числами от -100 до 200
- int *Cr; - указатель на текущий элемент массива Ar, который будет использоваться в цикле
- int v_min = -100, v_max = 200; - пределы для генерации случайных чисел
- int size; - размер массива, который будет заполняться
- int meanPositiv=0, meanNegativ=0, countPositiv=0, countNegativ=0; - счётчики и усреднители для положительных и отрицательных чисел
- Инициализируем генератор случайных чисел текущим временем
- Генерируем случайное число для размера массива от 50 до 150 и присваиваем его переменной size
- Выделяем память под массив с помощью malloc
- Заполняем массив случайными числами от -100 до 200
- Считаем среднее значение для положительных и отрицательных чисел, используя счётчики countPositiv и countNegativ
- Если количество положительных чисел равно нулю, то считаем meanPositiv равным 0
- Если количество отрицательных чисел равно нулю, то считаем meanNegativ равным 0
- Если meanPositiv меньше, чем (-meanNegativ), то делаем meanPositiv равным (-meanNegativ)
- Ограничиваем значения элементов массива согласно условию:
- если значение элемента больше meanPositiv, то делаем его равным meanPositiv
- если значение элемента меньше (-meanPositiv), то делаем его равным (-meanPositiv)
- Выводим массив на экран
- Ждём нажатия клавиши для выхода из программы
- Возвращаем 0, чтобы программа завершилась корректно