Ограничить значения всех элементов, абсолютные значения которых превышают среднее - 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, чтобы программа завершилась корректно
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д