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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.01.2013, 17:02   #1
Biohazard251
 
Регистрация: 18.12.2012
Сообщений: 4
Восклицание Массив

Дан массив из n элементов напечатать все его подмножества.

То ессть если будет дан масив рааный 3 и он будет состоять из чисел 1,2,3. то нужно что бы на экран вывело вот эти цыфры.
[123, 132, 213, 231, 312, 321]

помогите а то уже голова ломится! немогу даже эту задачу сделать, а ей нужно сдать как можно скорее а то хана мне!
Biohazard251 вне форума Ответить с цитированием
Старый 09.01.2013, 17:05   #2
Biohazard251
 
Регистрация: 18.12.2012
Сообщений: 4
По умолчанию

я тут подумал как насчет сартировки с типа пузырька.само собой в цикле! и сразу после замены в близь стоящих элементов выводить масив!
Biohazard251 вне форума Ответить с цитированием
Старый 09.01.2013, 20:30   #3
Vacsus
 
Регистрация: 07.01.2013
Сообщений: 5
По умолчанию

Сортировка пузырьком тут никак не прокатит. Нужна рекурсивная функция. В функцию передается массив и текущее количество перебираемых элементов (n). Рекурсивный вызов идет в цикле по массиву от начала до n. Условие выхода - когда n будет равно 2. В этом случае выводишь на экран весь массив, меняешь 2 первых элемента местами, и снова выводишь.
Но таким образом будет меняться только 2 первых элемента. Чтобы менялось больше 2х, нужно создать в функции резервную копию массива и в цикле (от начала до n, том же самом), конечному элементы индекса n присваивать i-тую ячейку массива-копии.

Написано сложно, самому пришлось подумать, знаю. Но задача интересная, благодарю

Мой код на С++: (паскаль очень плохо знаю, так что придется искать того кто сможет перевести на него)

Код:
#include <iostream>
#include <conio.h>

using namespace std;

void f(int* arr, int n);
void output_arr(int* arr, int n);

int main()
{
	cout << "Enter n\n";
	int n;
	cin >> n;
	int* arr = new int[n];
	cout << "Enter n elements\n";
	for (int i = 0; i < n; i++)
		cin >> arr[i];
	f(arr, n);
	_getch();
	delete [] arr;
	return 0;
}
void output_arr(int* arr, int n)
{
	for (int i = 0; i < n; i++)
		cout << arr[i] << " ";
	cout << '\n';
}
void f(int* arr, int n)
{
	static int n_start = n;
	int* arr_copy = new int[n];
	for (int i = 0; i < n; i++)
		arr_copy[i] = arr[i];
	if (n == 2)
	{
		output_arr(arr, n_start);
		swap(arr[0],arr[1]);
		output_arr(arr, n_start);
	}
	else
	{
		for (int i = 0; i < n; i++)
		{			
			f(arr, n-1);
			arr[n-1] = arr_copy[i];
		}
	}
	delete [] arr_copy;
	
}
Vacsus вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дан одномерный массив, сформировать новый массив по заданному правилу {Delphi} Nickolai47 Помощь студентам 5 16.12.2012 14:51
С# задан массив 5х5. сформировать массивы А и В. в массив А поместить элементы с четными индексами, в массив В с нечетны Koksa Помощь студентам 0 10.10.2011 11:26
Запись координат в массив в реал тайм, Как записать координаты в массив Dark19 Visual C++ 2 21.06.2011 18:45
Из массив А получить массив В, удвоив все нечётные элементы удвоены ( на Pascal) KARTER Помощь студентам 1 18.06.2011 19:58
Массив - Нужно написать массив и распечатать на экран с конца в начало(язык С++) econ Помощь студентам 1 29.05.2011 22:02