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

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

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.07.2019, 16:25   #1
vasypu
Пользователь
 
Регистрация: 21.08.2018
Сообщений: 24
По умолчанию перебирать из массива baza, все элементы и составлять все возможные комбинации и записывать их в массив pass (не могу понять в чем ошибка)

Код:
int[] baza = new[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 8 };
            int [] pass = new int[8];           

            foreach (var item in pass)
            {
                pass[item] = baza[0];
            }

            void Schet(int passznzch)
            {
                for (int i = 0; i < baza.Length - 1; i++)
                {
                    pass[passznzch] = baza[i];

                    for (int a = 0; a < pass.Length; a++)
                    {
                        Console.Write(pass[a]);
                        if (a == 7)
                        {
                            Console.WriteLine();
                        }
                    }
                }
            }

            void Sdvig(int index)
            {
                pass[index] = baza[0];
                pass[index - 1]++;
            }

            for (int f = 0; f < 16777216; f++)
            {
                for (int i = 7; i >= 0; i--)
                {
                    Schet(7);                   
                    if (i <= 6)
                    {
                        for (int p = i; p <= 7; p++)
                        {
                            if (pass[p] == baza[baza.Length - 1])
                            {
                                Sdvig(p);
                            }
                        }
                    }
                }
            }
            Console.ReadLine();
код должен перебирать из массива baza, все элементы и составлять все возможные комбинации и записывать их в массив pass
не пойму что не так, при переборе значение 6 индекса не достигает 8 (7)
после чего переключается на следующий индекс, и так далее
начиная с 6 индекса значения не достигают 8
укажите где ошибка и как ее исправить, если не сложно)
vasypu вне форума Ответить с цитированием
Старый 26.07.2019, 16:43   #2
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 729
По умолчанию

Цитата:
Сообщение от vasypu Посмотреть сообщение
Код:
foreach(var item in pass)
{
    pass[item] = baza[0];
}
По-моему, здесь вот так:
Код:
foreach(var item in pass)
    item = 0;
Cuprum5 на форуме Ответить с цитированием
Старый 26.07.2019, 16:48   #3
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 729
По умолчанию

Массива pass не маловато ли будет, чтобы хранить все комбинации из массива baza? И сколько символов в 1-ой комбинации? Да и двумерный массив чисел вообще нужен, или массив строк. По-моему, тут вообще надо всю программу переделывать.
Cuprum5 на форуме Ответить с цитированием
Старый 26.07.2019, 17:25   #4
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 729
По умолчанию

Цитата:
Сообщение от vasypu Посмотреть сообщение
Код:
int[] baza = new[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 8};
- А последнее число не 9 случайно в массиве baza?
Какие числа в итоге должны получиться? Напишите пример, чтобы мы поняли?

Последний раз редактировалось Cuprum5; 26.07.2019 в 17:27. Причина: Добавил фразу.
Cuprum5 на форуме Ответить с цитированием
Старый 26.07.2019, 18:37   #5
vasypu
Пользователь
 
Регистрация: 21.08.2018
Сообщений: 24
По умолчанию

0000001
0000002
0000003
0000004
0000005
0000006
0000007
0000008
0000010
0000011
0000012
............
8888888
вот в таком порядке они должны перебраться
vasypu вне форума Ответить с цитированием
Старый 26.07.2019, 18:38   #6
vasypu
Пользователь
 
Регистрация: 21.08.2018
Сообщений: 24
По умолчанию

длинна массива pass правильная
а последняя 8 стоит, потому что выход искал из положения)
vasypu вне форума Ответить с цитированием
Старый 27.07.2019, 09:47   #7
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 729
По умолчанию

Нужно завести результирующий массив 7 цифр. У Вас он называется pass - я бы назвал его Resultat или как-то так. Начальное состояние нули. Главный цикл: Прибавлять +1 к крайнем справа разряду и смотреть за переполнениями в разрядах. Это все нужно будет сделать кодом. Т.е. если число крайнее справа == N, то реализовываем переполнение и перенос, точно также как в десятичной системе - переполнение и перенос при сложении.
А, еще забыл сказать, что первым делом нужно завести переменную N = 8 - константа или #define.
Также в функции нужно реализовать проверку на Стоп - ну здесь легко, если все элементы массива pass будут равны N, то Enabled = false.
Т.о. в массиве pass будут номера элементов массива baza - при выводе или в другой массив эти элементы будут раскрываться или подставляться.
Функции не нужны.
Главный цикл можно реализовать так:
Код:
bool Enabled = true, Disabled;
int k;

while(Enabled)
{
//Тут код, о котором я писал выше
//+1

//Перенос

//Тут проверка на все N
Disabled = true;
for(k = 0; k < 7; k++)
{
    if(pass[k] != N)
    {
         Disabled = false;
         break;
    }    
}
if(Disabled)
    Enabled = false; 
}
Cuprum5 на форуме Ответить с цитированием
Старый 27.07.2019, 10:02   #8
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 729
По умолчанию

Нужно будет завести указатель на последнее число справа налево, т.е. для числа "0000001" - это будет 6, для числа "0000015" - это будет 5 и т.д.
Допустим, эта переменная будет называться HD - High Digit или старший разряд.
И уберите крайнюю правую 8 в массиве baza - она не нужна.

Последний раз редактировалось Cuprum5; 27.07.2019 в 14:26. Причина: Добавил фразу.
Cuprum5 на форуме Ответить с цитированием
Старый 27.07.2019, 17:31   #9
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 729
По умолчанию

Код:
using System;

public class Program
{	
	
	public static void Main()
	{
		const int N = 8;
		bool Disabled;
		int d, n;
		int[] baza = new[]{0, 1, 2, 3, 4, 5, 6, 7, 8};
                int[] pass = new int[7];           
        
		for(d = 0; d < 7; d++)
			pass[d] = 0;
				
		Console.WriteLine("Hello, World.");
		Console.WriteLine("pass:");
		foreach(var item in pass)            
            Console.Write(item);            		
		Console.WriteLine("");		
							
		while(true)
		{			
			//Тут проверка на все N
			Disabled = true;
			foreach(int k in pass)			
		    	if(k != N)
		    	{
		    	     Disabled = false;
		    	     break;
		    	}    			
			if(Disabled)					    	
				break;						
			
			//+1			
			for(n = 6; n >= 0; n--)
			{				
				if(pass[n] >= N)
				{					
					pass[n] = 0;					
					continue;
				}					
				if(pass[n] < N)
				{										
					pass[n]++;					
					break;
				}
			}
				   
			foreach(var item in pass)            
            Console.Write(item);            		
			Console.WriteLine("");						
		}				
	}//Main
}
Cuprum5 на форуме Ответить с цитированием
Старый 27.07.2019, 18:25   #10
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 729
По умолчанию

С выводом из массива baza:
Код:
using System;

public class Program
{	
	
	public static void Main()
	{
		const int N = 8;
		bool Disabled;
		int d, n;
		int[] baza = new[]{0, 1, 2, 3, 4, 5, 6, 7, 8};
                int[] pass = new int[7];           
        
		for(d = 0; d < 7; d++)
			pass[d] = 0;
				
		Console.WriteLine("Hello, World.");
		Console.WriteLine("pass:");
		foreach(int item in pass)            
                    Console.Write(baza[item]);            		
		Console.WriteLine("");		
		
					
		while(true)
		{			
			//Тут проверка на все N
			Disabled = true;
			foreach(int k in pass)			
		    	if(k != N)
		    	{
		    	     Disabled = false;
		    	     break;
		    	}    			
			if(Disabled)					    	
				break;						
			
			//+1			
			for(n = 6; n >= 0; n--)
			{				
				if(pass[n] >= N)
				{					
					pass[n] = 0;					
					continue;
				}					
				if(pass[n] < N)
				{										
					pass[n]++;					
					break;
				}
			}
				   
			foreach(int item in pass)            
                            Console.Write(baza[item]);            		
			Console.WriteLine("");						
		}				
	}//Main
}
Cuprum5 на форуме Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подскажите как задать условия перенесение элементов массива Х в массив Y функцией. Все сделал только это не могу понять. Kogard Помощь студентам 3 01.03.2019 11:39
Сформировать массив. Ошибка: Invalid floating point operation. Не могу понять в чем дело Sv. Общие вопросы C/C++ 9 15.11.2012 18:26
Все возможные комбинации X@OC Общие вопросы по Java, Java SE, Kotlin 9 04.07.2011 20:34
Все возможные комбинации массива и непонятная процедура. Ksardas13 Общие вопросы Delphi 2 22.05.2011 02:04
Возможные комбинации firephenix Помощь студентам 1 01.04.2011 02:19