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

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

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.06.2011, 19:01   #1
Lyonya-myshin
Новичок
Джуниор
 
Регистрация: 13.06.2011
Сообщений: 3
По умолчанию в одномерном массиве состоящем из п вещественных элементов вычислить:

в одномерном массиве состоящем из п вещественных элементов вычислить:
а) номер максимального по модулю элемента массива;
б) сумму элементов массива, расположенных после первого положительного элемента;
с) преобразовать массив таким образом, чтобы в сначала располагались все элементы, целая часть которых лежит в интервале [a,b], а потом все остальные.


Заранее спасибо)
Lyonya-myshin вне форума Ответить с цитированием
Старый 13.06.2011, 19:47   #2
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Lyonya-myshin

в одномерном массиве состоящем из п вещественных элементов вычислить:
а) номер максимального по модулю элемента массива;
б) сумму элементов массива, расположенных после первого положительного элемента;
с) преобразовать массив таким образом, чтобы в сначала располагались все элементы, целая часть которых лежит в интервале [a,b], а потом все остальные.


Код:
#include <locale>
#include <iostream>
#include <iterator>
#include <algorithm>
#include <functional>
#include <numeric>

#include <time.h>
#include <stdlib.h>

struct R : public std::unary_function<void, float>
{
	float operator()() const
	{
		return ((float) rand() / RAND_MAX - 0.5f) * 6.0f;
	}
};

void generate(float* arr, size_t N)
{
	std::generate_n(arr, N, R());
}

bool lt(float a, float b)
{
	return fabs(a) < fabs(b);
}

size_t max_abs(const float* arr, size_t N)
{
	return std::max_element(arr, arr + N, &lt) - arr;
}

float sum(const float* arr, size_t N)
{
	const float* pos = std::find_if(arr, arr + N, std::bind2nd(std::greater<float>(), 0.f));
	if (pos == arr + N)
		return 0.f;

	return std::accumulate(++pos, arr + N, 0.f);
}

struct Z : public std::unary_function<float, bool>
{
	Z(int a, int b) : a_(a), b_(b) {}
	
	bool operator()(float f) const
	{
		const int i = (int) f;
		return i >= a_ && i <= b_;
	}

	int a_, b_;
};

void reorder(float* arr, size_t N, int a, int b)
{
	std::partition(arr, arr + N, Z(a, b));
}

template <size_t N>
std::ostream& operator<<(std::ostream& os, const float (&arr)[N])
{
	typedef std::ostream_iterator<float> O;
	std::copy(arr, arr + N, O(os, " "));
	return os;
}

int main()
{
	setlocale(LC_ALL, "");
	
	srand((unsigned) time(NULL));

	const size_t N = 10;
	float arr[N] = {0};

	generate(arr, 10);
	std::cout << "Исходный массив:" << std::endl;
	std::cout << arr << std::endl << std::endl;

	std::cout << "Номер максимального по модулю элемента: " << max_abs(arr, N) << std::endl << std::endl;

	reorder(arr, N, 0, 1);
	std::cout << "После преобразования с интервалом [0, 1]:" << std::endl;
	std::cout << arr << std::endl;

	return 0;
}
Пример работы программы: http://codepad.org/boK0HYrF
Rififi вне форума Ответить с цитированием
Старый 13.06.2011, 19:49   #3
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

В программе есть возможность выполнить пункт б) но его я включать не стал. Это будет типа на самостоятельное упражнение :D
Rififi вне форума Ответить с цитированием
Старый 13.06.2011, 20:40   #4
Lyonya-myshin
Новичок
Джуниор
 
Регистрация: 13.06.2011
Сообщений: 3
По умолчанию

Большое спасибо Rififi)
с пунктом б) справлюсь)
Lyonya-myshin вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
одномерном массиве, состоящем из n вещественных элементов (найти количество, сумму и отсортировать) arshavin Паскаль, Turbo Pascal, PascalABC.NET 8 23.10.2018 22:32
в одномерном массиве, состоящем из n вещественных элементов milashka_92@e1.ru Общие вопросы C/C++ 8 09.06.2010 12:31
С++ В одномерном массиве, состоящем из n-вещественных элементов. вычислить: uropb992 Помощь студентам 1 24.05.2010 20:02
В одномерном массиве, состоящем из n элементов вычислить Rusat Помощь студентам 2 09.03.2010 17:04
В одномерном массиве, состоящем из n вещественных элементов, вычислить сумму элементов массива HazelHen Общие вопросы C/C++ 2 29.03.2009 15:16