Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Надо представить в виде функции , помогите плиз(

81K
13 мая 2012 года
Марина 2108
2 / / 13.05.2012
В одномерном массиве, состоящем из n вещественных элементов, вычислить:

1) количество отрицательных элементов массива;

2) сумму модулей элементов массива, расположенных после минимального по модулю элемента.

Заменить все отрицательные элементы массива их квадратами и упорядочить элементы массива по возрастанию.



это правильно?




Код:
#include <iostream>
#include <cmath>
#include <stdlib.h>

using namespace std;

int otr(double *m,int ke){
    // Подсчет количества отрицательных элементов
    int koe=0;
    for (int i=0; i<ke; i++)
        if (m[i]<0)
            koe++;
    return koe ;
}

double ss(double *m,int ke){


    // Подсчет суммы элементов после минимального по модулю
    int n_min=0; double summa=0;
    for (int i=1; i<ke; i++)
        if (fabs(m[i])<fabs(m[0]))
        n_min=i;
    if (n_min==ke-1)
        cout<<"Минимальный по модулю элемент последний.\n";
    else
        {
            for (int i=(n_min+1); i<ke; i++)
        summa+=fabs(m[i]);
    }
    return summa;
}

void zz(double *m,int ke){
    // Замена отрицательных элементов их квадратами
    for (int i=0; i<ke; i++)
        if (m[i]<0)
            m[i]=m[i]*m[i];

}

void sor(double *m,int ke){
    // Упорядочивание массива по возрастанию
    double k;
    for (int i=0; i<(ke-1); i++)
    {
        for (int j=i+1; j<ke; j++)
        { if (m[i] > m[j])
            {
                k=m[i];
                m[i]=m[j];
                m[j]=k;
            }
        }
    }
}

int main()
{
   
    setlocale (LC_ALL, "Russian");
    double m [100];
    int ke, koe = 0, n_min=0, min, summa=0,i;
    cout <<"Введите размер массива: ";
    cin >> ke;
    cout<<endl;

    for (int i = 0; i < ke; i++)
    {
        cout << " m [" << i << "] = ";
        cin >> m [i];
       
        cout<<endl;
    }

    cout<<"Количество отрицательных элементов массива = "<<otr(m,ke)<<".\n";
    cout<<"Сумма модулей элементов после минимального по модулю = "<<ss(m,ke)<<".\n";
   
    zz(m,ke);
    sor(m,ke);


    cout<<"Отсортированный массив:\n";
    for (int i=0; i<ke; i++)
        cout << m[i] << ' ';
    cout<<endl;
    system ("pause");
    return 0;
}
2.1K
14 мая 2012 года
disputant
95 / / 28.05.2007
Я бы для ускорения работы сделал три в одном - все, что можно, делал бы за одно сканирование массива:

Код:
void handle(double * a, int n, int& negCount, double& minSum)
{
    double minabs = fabs(a[0])+1; // Принимаем первый элемент минимальным по модулю
    for(int i = 0; i < n; ++i)
    {
        double aabs = a[i];
        if (aabs < 0)
        {
            aabs = -aabs;
            ++negCount;
            a[i] = aabs*aabs;
        }
        if (aabs < minabs)
        {
            minabs = aabs;
            minSum = 0.0; // Сброс суммы
        }
        else
        {
            minSum += aabs;
        }
    }
}
После этого остается только отсортировать. Если устраивает O(n^2) и память для еще одного массива - можно в том же проходе и сортировать :) Но все же лучше отдельно за O(n log n)...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог