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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.06.2013, 18:51   #1
Hrustik
 
Регистрация: 31.05.2013
Сообщений: 6
По умолчанию Выполнить перестановку в массиве так, чтобы сначала были записаны подряд пять первых положительных элементов массива

Выполнить перестановку в данном массиве T(22) таким образом, чтобы сначала были записаны подряд пять первых положительных элементов массива.Данный и преобразованый массивы вывести на экран.
Hrustik вне форума Ответить с цитированием
Старый 17.06.2013, 20:14   #2
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

http://programmersforum.ru/showthread.php?t=34061
_Bers вне форума Ответить с цитированием
Старый 17.06.2013, 21:26   #3
Hrustik
 
Регистрация: 31.05.2013
Сообщений: 6
По умолчанию

вот что я сделал:
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
const int n = 22;
int arr[n] = {-10,15,-3,-4,2,-6,7,8,9,5,-16,21,900,25,-34,22,3,5,75,24,12,44};
for(int i=0; i<n; i++)
cout << arr[i] << " ";
cout<<"\n\n";
getch ();
return 0;
}
осталось только сделать так чтобы первыми были 5 положительных елементов, переставить местами первых 5 отрицательных с ближними положительными но я не знаю как мош кто че подскажет?

Последний раз редактировалось Hrustik; 17.06.2013 в 21:28. Причина: опечатка
Hrustik вне форума Ответить с цитированием
Старый 17.06.2013, 21:43   #4
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

можно сделать что-то типа вот так вот:
http://codepad.org/WH82O74q
_Bers вне форума Ответить с цитированием
Старый 17.06.2013, 21:47   #5
sVasilich
Форумчанин
 
Аватар для sVasilich
 
Регистрация: 16.12.2009
Сообщений: 224
По умолчанию

да легко:

Берём целочисленную переменную, обзываем счётчиком и присваиваем ей ноль. И ещё одну такого же типа, как и элементы массива, обзываем буфером. Дальше в цикле перебираем все элементы и проверяем их на положительность. Если элемент положительный, записываем элемент массива с индексом "счётчик" в буфер, затем в элемент массива с индексом "счётчик" значение текущего элемента, а на место текущего элемента массива - то, что в буфере. После этого увеличиваем счётчик на единицу. Когда счётчик станет равным 5 - прервать цикл.
Люди бывают 10 типов: те, кто понимают двоичную систему счисления, и те, кто не понимают...
sVasilich вне форума Ответить с цитированием
Старый 18.06.2013, 11:10   #6
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,680
По умолчанию

_Bers неплоход код.....
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 18.06.2013, 20:52   #7
Nuklon
Форумчанин
 
Аватар для Nuklon
 
Регистрация: 05.04.2012
Сообщений: 134
По умолчанию

Код:
#include <stdio.h>
bool p_func(const int n) {  return (n >= 0); }



/* перестановка указанных n-ых элементов в начало массива
   без потери следования элементов*/
template<typename T>
void part_n(T* fe, T* le, bool (*pred)(const T), int n) {
	T  t, *f = fe;
	for(; fe != le; ++fe) {
		if((*pred)(*fe)) {
			for(T* p = fe; p > f; --p) {
				t        = *p;
				*p       = *(p - 1);
				*(p - 1) = t;
			}
			if(--n <= 0)
				break;
			++f;
		}
	}
}



int  main(void) {
	const int n = 22;
	int arr[n]  = {
		-10, 15,-3,-4,2,-6,7,8,9,5,-16,21,900,25,-34,22,3,5,75,24,12,44
	};

	// исходный массив
	for(int i = 0; i < n; i++)
		printf("%d, ", arr[i]);
	putchar('\n');

	part_n(arr, arr + n, p_func, 5);

	// массив после перестановки
	for(int j = 0; j < n; j++)
		printf("%d, ", arr[j]);
	putchar('\n');
	return 0;
}
Пример исполнения: http://codepad.org/xNX1Al9x
Nuklon вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Записать положительные элементы массива X подряд в массив Y. Определить k – количество положительных элементов. Вычислит сумму programmerr Общие вопросы C/C++ 7 16.02.2013 16:40
сумма первых двух положительных элементов массива Valechka Общие вопросы C/C++ 1 09.06.2012 00:45
сумма первых двух положительных элементов массива Valechka Помощь студентам 0 08.06.2012 21:22
переписать строку s так, чтобы символы в ней были записаны в обратном порядке edikesh Помощь студентам 7 05.12.2011 23:16
Массивы на pascal (преобразовать массив так, чтобы сначала были единицы, а потом - все остальные) Mercial Помощь студентам 6 18.02.2011 22:07