Ограничить значения всех элементов, абсолютные значения которых превышают среднее - 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;
}

Объяснение кода листинга программы

  1. Включаем необходимые заголовочные файлы: , , ,
  2. Объявляем переменные:
    • 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; - счётчики и усреднители для положительных и отрицательных чисел
  3. Инициализируем генератор случайных чисел текущим временем
  4. Генерируем случайное число для размера массива от 50 до 150 и присваиваем его переменной size
  5. Выделяем память под массив с помощью malloc
  6. Заполняем массив случайными числами от -100 до 200
  7. Считаем среднее значение для положительных и отрицательных чисел, используя счётчики countPositiv и countNegativ
  8. Если количество положительных чисел равно нулю, то считаем meanPositiv равным 0
  9. Если количество отрицательных чисел равно нулю, то считаем meanNegativ равным 0
  10. Если meanPositiv меньше, чем (-meanNegativ), то делаем meanPositiv равным (-meanNegativ)
  11. Ограничиваем значения элементов массива согласно условию:
    • если значение элемента больше meanPositiv, то делаем его равным meanPositiv
    • если значение элемента меньше (-meanPositiv), то делаем его равным (-meanPositiv)
  12. Выводим массив на экран
  13. Ждём нажатия клавиши для выхода из программы
  14. Возвращаем 0, чтобы программа завершилась корректно

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.867 из 5
Похожие ответы