Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.02.2012, 23:41   #1
GUWK_Lammer
 
Аватар для GUWK_Lammer
 
Регистрация: 09.02.2012
Сообщений: 7
Сообщение Слишком много лишнего флуда в проге)

Это будет странно, но помогите упростить прогу пожалуйста, только главное чтоб она была написана с помощью стандартных библиотек С++(<iostream>;<cmatch> и т.д.), а не через С(<stdio>) Заранее спасибо кто сможет помочь)

Код:
#include <iostream>

using namespace std;

double sumArray(double a[], int size)
{
        double total = 0;
        for (int i = 0; i < size; i++)
        {
                if (a[i] < 0)
                {
                        total += a[i];
                }
        }
        cout << "The sum of negative elements in the array: " << total << endl;
        return total;
}

double findMin(double b[], int size)
{
        double min = b[0];
        for (int j = 0; j < size; j++)
        {
                if (min > b[j])
                {
                        min = b[j];
                }
        }
        return min;
}

double findMax(double c[], int size)
{
        double max = c[0];
        for (int z = 0; z < size; z++)
        {
                if (max < c[z])
                {
                        max = c[z];
                }
        }
        return max;
}

double productArr(double d[], int size)
{
        double product = 1;
        for (int k = 0; k < size; k++)
        {
                if(d[k] >= findMin(d, size) &&  d[k] <= findMax(d, size))
                {
                        product *= d[k]; 
                }
        }
        cout << "Product of the array elements are located between the maximum and minimum elements: " << product << endl;
        return product;
}

void bubbleSort(double e[], int size)
{
        int j;
        for (int i = 0; i < size; i++)
        {
                for (j = 0; j < size - 1; j++)
                {
                        if (e[j] > e[j + 1])
                        {
                                int temp = e[j + 1];
                                e[j + 1] = e[j];
                                e[j] = temp;
                        }
                        
                }
        }
        for (int h = 0; h < size; h++)
        cout << "Sort :" << e[h] << endl;
}

int main()
{
        const int N = 10;
        double arr[N],i;

        for (int i = 0; i < N; i++)
        {
        cout<<"Enter array ["<<i<<"]"<<endl;
		cin>>arr[i];
		
        }
        
        cout << "\n";
        sumArray(arr, N);
        productArr(arr, N);
        bubbleSort(arr, N);
        cin.ignore().get();
        system("pause");
        return 0;
}
Изображения
Тип файла: jpg Безымянный.jpg (15.7 Кб, 141 просмотров)

Последний раз редактировалось GUWK_Lammer; 09.02.2012 в 23:58. Причина: Совсем забыл о задании так проще будет
GUWK_Lammer вне форума Ответить с цитированием
Старый 10.02.2012, 01:02   #2
Сыроежка
Форумчанин
 
Регистрация: 01.07.2011
Сообщений: 423
Радость

Цитата:
Сообщение от GUWK_Lammer Посмотреть сообщение
Это будет странно, но помогите упростить прогу пожалуйста, только главное чтоб она была написана с помощью стандартных библиотек С++(<iostream>;<cmatch> и т.д.), а не через С(<stdio>) Заранее спасибо кто сможет помочь)

Код:
#include <iostream>

using namespace std;

double sumArray(double a[], int size)
{
        double total = 0;
        for (int i = 0; i < size; i++)
        {
                if (a[i] < 0)
                {
                        total += a[i];
                }
        }
        cout << "The sum of negative elements in the array: " << total << endl;
        return total;
}

double findMin(double b[], int size)
{
        double min = b[0];
        for (int j = 0; j < size; j++)
        {
                if (min > b[j])
                {
                        min = b[j];
                }
        }
        return min;
}

double findMax(double c[], int size)
{
        double max = c[0];
        for (int z = 0; z < size; z++)
        {
                if (max < c[z])
                {
                        max = c[z];
                }
        }
        return max;
}

double productArr(double d[], int size)
{
        double product = 1;
        for (int k = 0; k < size; k++)
        {
                if(d[k] >= findMin(d, size) &&  d[k] <= findMax(d, size))
                {
                        product *= d[k]; 
                }
        }
        cout << "Product of the array elements are located between the maximum and minimum elements: " << product << endl;
        return product;
}

void bubbleSort(double e[], int size)
{
        int j;
        for (int i = 0; i < size; i++)
        {
                for (j = 0; j < size - 1; j++)
                {
                        if (e[j] > e[j + 1])
                        {
                                int temp = e[j + 1];
                                e[j + 1] = e[j];
                                e[j] = temp;
                        }
                        
                }
        }
        for (int h = 0; h < size; h++)
        cout << "Sort :" << e[h] << endl;
}

int main()
{
        const int N = 10;
        double arr[N],i;

        for (int i = 0; i < N; i++)
        {
        cout<<"Enter array ["<<i<<"]"<<endl;
		cin>>arr[i];
		
        }
        
        cout << "\n";
        sumArray(arr, N);
        productArr(arr, N);
        bubbleSort(arr, N);
        cin.ignore().get();
        system("pause");
        return 0;
}
Переписать прогу с использованием стандартных библиотек не сложно. Только вам от этого какая будет польза, если вы не поймете код?!

Например, вашу функцию подсчета суммы отрицательных элементов можно было вообще не писать, а заменить в функции main вызовом стандартного алгоритма.

Код:
...
...
int main()
{
        const int N = 10;
        double arr[N],i;

        for (int i = 0; i < N; i++)
        {
        cout<<"Enter array ["<<i<<"]"<<endl;
		cin>>arr[i];
		
        }
        
        cout << "\n";

        cout << "The sum of negative elements in the array: "
               << accumulate( std::begin( arr ), std::end( arr ), 0,
                                       []( int sum, int x )
                                       {
                                           return ( ( x < 0 ) ? sum + x : sum );
                                        } );
...
...
Так же не понятно, зачем вы при вычислении произведения элементов, проверяете, находятся ли они в интервале между минимальным и максимальным элементом массива, так как очевидно любой элемент массива расположен в интервале между минимальным и максимальным.

Максимальный и минимальный элементы в массива можно найти вызовом одного стандартного алгоритма

auto p = std::minmax_element( d, d + size );

Этот аллгоритм сразу находит минимум и максимум одновременно за один проход массива.

Естественно для работы с этими алгоритмами надо включить в программу соответствующие заголовочные файлы.

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

Код:
double productArr( const double d[], int size )
{
   double product = 1;
   
   auto p = minmax_element( d, d + size );

   for ( int k = 0; k < size; k++ )
   {
      if( d[k] >= p.first &&  d[k] <= p.second )
      {
         product *= d[k]; 
      }
  }

   cout << "Product of the array elements are located between the maximum   and minimum elements: " << product << endl;
   
   return product;
}
То есть вам бы не пришлось самому писать функции findMin и findMax, так как уже все написано до вас!
Со мной можно встретиться на www.clipper.borda.ru
Сыроежка вне форума Ответить с цитированием
Старый 10.02.2012, 01:15   #3
Сыроежка
Форумчанин
 
Регистрация: 01.07.2011
Сообщений: 423
По умолчанию

Так как нет никакого смысла при произведении элементов массива смотреть, находится ли очередной элемент в отрезке между минимальным и максимальным элементом этого массива, то произведение можно было вычислить следующим образом:

Код:
int product = accumulate( arr, arr + N, 1,
                          []( int sum, int x ) { return (sum * x ); } );
Со мной можно встретиться на www.clipper.borda.ru
Сыроежка вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Правильно ли сделал? cargo29 PHP 6 06.10.2011 17:09
правильно ли я сделал алгоритм vitik Паскаль, Turbo Pascal, PascalABC.NET 3 11.01.2011 21:32
правильно ли я сделал pinch000 Общие вопросы C/C++ 0 29.10.2009 00:54