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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.01.2013, 21:52   #1
novichek01
 
Регистрация: 17.01.2013
Сообщений: 6
Сообщение Описать функцию! (C++)

Помогите описать функциюю f(a, n, p), определяющую, упорядочены ли строго по возрастанию элементы в целочисленном массиве a из n элементов, и вычисляющую целочисленное значение p. Если элементы упорядочены, то p - это произведение разностей рядом стоящих элементов, иначе p - это количество нарушений порядка в массиве a. С помощью этой функции провести анализ целочисленного массива a[10]. Заранее благодарю!
novichek01 вне форума Ответить с цитированием
Старый 17.01.2013, 22:29   #2
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

novichek01

Помогите описать функциюю f(a, n, p), определяющую, упорядочены ли строго по возрастанию элементы в целочисленном массиве a из n элементов, и вычисляющую целочисленное значение p. Если элементы упорядочены, то p - это произведение разностей рядом стоящих элементов, иначе p - это количество нарушений порядка в массиве a. С помощью этой функции провести анализ целочисленного массива a[10].

Код:
#include <iostream>

namespace {

	template <typename Iterator> inline
	Iterator IsSorted(Iterator begin, Iterator end)
	{
		if (begin != end)
		{
			for (Iterator next = begin; ++next != end; ++begin)
				if (*next < *begin)
					return next;
		}
		return (end);
	}

	void IsSorted(const int* a, size_t N, int* p)
	{
		if (IsSorted(a, a+N) == a+N)
		{
			int mul = 1;
			for (size_t i=0; i<N/2; i++)
				mul *= (a[i] - a[i+1]);

			std::cout << "Елемены упорядосены, насяльника! Происведение: " << mul << std::endl;
			* p = mul;
		}
		else
		{
			std::cerr << "У вас закончились бесплатные баллы помощи. Пополните ваш счёт новыми баллами." << std::endl;
		}
	}
}

int main()
{
	int a[10] = {1,2,3,4,5,6,7,8,9,10};
	int p;
	IsSorted(a, 10, &p);
}
Rififi вне форума Ответить с цитированием
Старый 19.01.2013, 22:41   #3
novichek01
 
Регистрация: 17.01.2013
Сообщений: 6
По умолчанию

Rififi Спасибо.
novichek01 вне форума Ответить с цитированием
Старый 21.01.2013, 10:33   #4
novichek01
 
Регистрация: 17.01.2013
Сообщений: 6
По умолчанию

А другим способом можно? А то этот не подходит.
novichek01 вне форума Ответить с цитированием
Старый 21.01.2013, 11:31   #5
Blind Guard
Форумчанин
 
Регистрация: 14.03.2012
Сообщений: 139
По умолчанию

Код:
#include <iostream>

int func(int *a, int n, int p)
{
   p=1;
   int ind=0;
   for(int i=0;i<n;i++)
   {
     if(a[i]>a[i+1])
      ind++;
   }
   if(ind==0 && n%2==0)
   {
     cout << "Массив упорядочен по возрастанию"; 
     for(i=0; i<n; i++)
      p*=a[i+1]-a[i];
   }
else p=ind;
return p;
}

int main()
{
	int *a,n,p;
           cin >> n;
           for(int i=0;i<n;i++)
           cin >> a[i];
           cout << func(a,n,p);
}

// Мб, что-то не работает, не проверял
Blind Guard вне форума Ответить с цитированием
Старый 22.01.2013, 20:08   #6
novichek01
 
Регистрация: 17.01.2013
Сообщений: 6
Восклицание

Спасибо.

Цитата:
Сообщение от Blind Guard Посмотреть сообщение
Код:
#include <iostream>

int func(int *a, int n, int p)
{
   p=1;
   int ind=0;
   for(int i=0;i<n;i++)
   {
     if(a[i]>a[i+1])
      ind++;
   }
   if(ind==0 && n%2==0)
   {
     cout << "Массив упорядочен по возрастанию"; 
     for(i=0; i<n; i++)
      p*=a[i+1]-a[i];
   }
else p=ind;
return p;
}

int main()
{
	int *a,n,p;
           cin >> n;
           for(int i=0;i<n;i++)
           cin >> a[i];
           cout << func(a,n,p);
}

// Мб, что-то не работает, не проверял
p*=a[i+1]-a[i];
Только вот это не подходит.
novichek01 вне форума Ответить с цитированием
Старый 22.01.2013, 21:25   #7
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
Сообщение от novichek01 Посмотреть сообщение
А другим способом можно? А то этот не подходит.
Цитата:
p*=a[i+1]-a[i];
Только вот это не подходит.
как так не подходит-то?
довайте уже формализуйте свои требования к коду, а-то вон форумчане из кожи лезут ваши задачи решают )

Код:
#include <iostream>
template<typename T>
T f(const T *a, const int n) {
  T p1 = 1, p2 = 0;
  
  for (int i = 1; i < n; ++i) {
    p1 *= (a[i] - a[i - 1]);
    if (a[i] < a[i - 1])
      ++p2;
  }
  
  return p2 ? p2 : p1;
}

int main() {
  const int n = 10;
  int a[n] = {1,2,3,4,5,6,7,8,9,0};
  std::cout << f(a, n);
  return 0;
}
rrrFer вне форума Ответить с цитированием
Старый 22.01.2013, 21:47   #8
novichek01
 
Регистрация: 17.01.2013
Сообщений: 6
По умолчанию

rrrFer Спасибо.
novichek01 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
описать функцию megawar Паскаль, Turbo Pascal, PascalABC.NET 2 22.11.2012 19:20
Описать функцию (C++) Etete Помощь студентам 0 27.12.2011 18:51
Описать функцию нахождения расстояния между 2-мя точками на плоскости, заданными своими координатами, и функцию .... zzz6 Помощь студентам 2 06.07.2011 08:24
описать функцию на Си Skrappy Помощь студентам 2 25.06.2011 08:02
Описать функцию Alex_193 Помощь студентам 1 15.03.2010 20:42