Страницы

Поиск по вопросам

суббота, 7 марта 2020 г.

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

#cpp #функции


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

#include "stdafx.h"  
#include   
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 <


Ответы

Ответ 1



Ты уже большую часть ответа написал в вопросе. Нужно выделить такие функции и соответствующим образом их вызвать: Ввести динамический массив Упорядочивает элементы массива по возрастанию. Находит сумму отрицательных элементов массива. Находит позицию минимального элемента Находит положение максимального элемента Находит произведение элементов массива между заданными позициями Выводит массив

Ответ 2



Ну, я бы делал примерно так, с обязательным уничтожением глобальных переменных как класса: #include 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; }

Комментариев нет:

Отправить комментарий