Разбиение кода на функции. С++

258
19 апреля 2017, 13:41

Есть код программы, которая позволяет ввести динамический массив, а затем
1. Упорядочивает элементы массива по возрастанию.
2. Находит сумму отрицательных элементов массива.
3. Находит произведение элементов массива, расположенных между максимальным и минимальным элементами.
Не получается грамотно разбить код на многофайловый проект.

#include "stdafx.h"  
#include <iostream>  
using namespace std;    
double *p, n;
double pr = 1;
int sum, min = 1000000, max = -1000000, i_, j_;
int main()
{
    setlocale(LC_ALL, "Russian");
    cout << "Введите количество элементов: ";
    cin >> n;
    p = new double[n];
    cout << "Введите элементы массива: ";
    for (int i = 0; i < n; i++)
        cin >> p[i];
    for (int i = 0; i < n; i++) {
        if (p[i] < 0) sum += p[i];
        if (max < p[i]) { max = p[i]; i_ = i; }
        if (min > p[i]) { min = p[i]; j_ = i; }
    }
    if (i_ > j_) swap(i_, j_);
    for (int i = (i_ + 1); i < j_; i++)
        pr *= p[i];
    for (int i = 0; i < n; i++)
        for (int j = i; j > 0 && p[j - 1] > p[j]; j--)
            swap(p[j], p[j - 1]);
    cout << "Отсртированный массив: ";
    for (int i = 0; i < n; i++)
        cout << p[i] << " ";
    cout << endl;
    cout << "Сумма отрицатльных элементов: " << sum <<endl;
    if (pr != 1)
    {
        cout << "Произведение между максимальным  минимальным элементами: "     << pr << endl;
    }
    else
            cout << "Между максимальным и минимальным значениями нет чисел" << endl;
    system("pause");
    return 0;
}
Answer 1

Ты уже большую часть ответа написал в вопросе.

Нужно выделить такие функции и соответствующим образом их вызвать:

  • Ввести динамический массив
  • Упорядочивает элементы массива по возрастанию.
  • Находит сумму отрицательных элементов массива.
  • Находит позицию минимального элемента
  • Находит положение максимального элемента
  • Находит произведение элементов массива между заданными позициями
  • Выводит массив
Answer 2

Ну, я бы делал примерно так, с обязательным уничтожением глобальных переменных как класса:

#include <iostream>  
using namespace std;
void inputArray(double*&p, int&size)
{
    cout << "Введите количество элементов: ";
    cin >> size;
    p = new double[size];
    cout << "Введите элементы массива:\n";
    for (int i = 0; i < size; i++)
    {
        cout << "p[" << i << "] = ";
        cin >> p[i];
    }
}
void outArray(double*p, int size, const char * msg)
{
    cout << msg << "\n";
    for(int i = 0; i < size; ++i) cout << p[i] << "  ";
    cout << "\n";
}
inline void swap(int& a, int& b)
{
    int tmp = a; a = b; b = tmp;
}
void sortArray(double*p, int size)
{
    for (int i = 0; i < size; i++)
        for (int j = i; j > 0 && p[j - 1] > p[j]; j--)
            swap(p[j], p[j - 1]);
}
double negSum(double*p, int size)
{
    double sum = 0.0;
    for (int i = 0; i < size; i++)
        if (p[i] < 0) sum += p[i];
    return sum;
}
void minmax(double*p, int size, int& min_idx, int& max_idx)
{
    double min = p[min_idx = 0], max = p[max_idx = 0];
    for(int i = 1; i < size; ++i)
    {
        if (p[i] < min)
        {
            min = p[min_idx = i];
        }
        else if (p[i] > max)
        {
            max = p[max_idx = i];
        }
    }
}
double product(double*p, int min_idx, int max_idx)
{
    double prod = 1.0;
    for(int i = min_idx; i <= max_idx; ++i)
        prod *= p[i];
    return prod;
}

int main()
{
    setlocale(LC_ALL, "Russian");
    double * p;
    int size;
    inputArray(p,size);
    outArray(p,size,"Исходный массив");
    cout << "Сумма отрицательных элементов = " << negSum(p,size) << endl;
    int min_idx, max_idx;
    minmax(p,size,min_idx,max_idx);
    if (max_idx == min_idx)
    {
        cout << "Между максимальным и минимальным значениями нет чисел" << endl;
    }
    else
    {
        cout << "Произведение между максимальным и минимальным элементами: "
             << product(p,min_idx,max_idx) << endl;
    }
    sortArray(p,size);
    outArray(p,size,"Отсортированный массив");
    delete[] p;
}
READ ALSO
Возвращение значения

Возвращение значения

Мне нужно, чтобы в случае неверного ввода password запрашивало password до тех пор пока не будет password верен

160
Рекурсивная функция - C++ [требует правки]

Рекурсивная функция - C++ [требует правки]

Нужно написать функцию, которая с помощью рекурсии могла бы найти введенное значение, без рекурсии вроде бы как сделалВот код

243
Создание АТД &ldquo;Стек&rdquo; на основе массива - C++

Создание АТД “Стек” на основе массива - C++

"Реализуйте АТД “стек” на основе массива фиксированного размера для элементов, являющихся односвязными списками целых чисел (те

203
Electron.Запуск ncpa.cpl в ОС Windows

Electron.Запуск ncpa.cpl в ОС Windows

ЗдравствуйтеЕсть ли возможность запустить скрипт ncpa

233