Форум
» Назад на решение задач по физике и термеху
Регистрация | Профиль | Войти | Забытый пароль | Присутствующие | Справка | Поиск

» Добро пожаловать, Гость: Войти | Регистрация
    Форум
    Информационные технологии
        разжуйте плиз
Отметить все сообщения как прочитанные   [ Помощь ]
» Добро пожаловать на форум "Информационные технологии" «

Переход к теме
<< Назад Вперед >>
Одна страница
Модераторы: paradise, KMA
  

Mara



Новичок

дали задачку - дописать код. раз 5 прочло но что-то не доходит в чем суть-то и что нужно, как подступиться. стыдно. наверно совсем тупое
вот оно:
class Program
   {
       static void Main(string[] args)
       {
           // Для всех операций создаём
           // генератор случайных чисел
           Random RG = new Random();

           // Определяем нижний и верхний предел для
           // генерации случайных числе методом
           // Random.Next (int Low, int High),
           // причём нижний предел включается,
           // верхний - не включается в диапазон
           const int LowInclusiveLimit = 1;
           const int HighExclusiveLimit = 10;

           do
           {
               const int ArrLen = 4; // Длина массива

               // Создаём неинициализированный массив
               // (встроенный класс коллекции Array)
               int[] A = new int[ArrLen];

               // Заполняем массив случайными значениями
               for (int i = 0; i < A.Length; i++)
                   A = RG.Next(LowInclusiveLimit,
                                   HighExclusiveLimit);

               // Сортировка по возрастанию с помощью встроенного
               // статического метода класса Array
               Array.Sort(A);

               // Выводим отсортированный массив на консоль
               foreach (int x in A)
                   Console.Write(x + "  ");

               Console.WriteLine();

               ArraySubSets ASS = new ArraySubSets(A);

               do
               {
                   int[] SubSet = ASS.GetNextSubSet();
                   if (SubSet == null) break;

                   foreach (int x in SubSet)
                       Console.Write(x + "  ");

                   Console.WriteLine();
               }
               while (true);

               // Ожидаем нажатия ENTER на клавиатуре
               Console.ReadLine();

               // Чистим консоль
               Console.Clear();
           }
           while (true);
       }
   }

   //-------------------------------------------------------
   class ArraySubSets
   // Класс для нахождения всех подмножесств элементов
   // массива целых чисел. Для массива длиной N число его
   // подмножеств 2 в степени N минус 1 (пустое множество
   // не включается).    
   //-------------------------------------------------------
   {
       // Ссылка на массив, подмножества
       // элементов которого будем исследовать
       protected int[] SrcArrRef;

       // Массив флагов присутствия элемента в
       // подмножестве. Всего комбинаций возможно
       // 2 в степени SrcArrRef.Length
       // (начальная комбинация - все флаги нулевые)
       protected bool[] PresenceFlag;

       public ArraySubSets(int[] SrcArr)
       {
           InitForArray(SrcArr);
       }

       public void InitForArray(int[] SrcArr)
       // Метод инициализации объекта для
       // заданного подмножества
       {
           // Сохраняем ссылку на массив
           SrcArrRef = SrcArr;
           // При созлании массив флагов присутствия\
           // инициализируется значенияии false
           PresenceFlag = new bool[SrcArr.Length];
       }

       public int[] GetNextSubSet()
       // Возврашает массив, являющийся следующим
       // подмножеством элементов исходного массива
       {
           InitPresenceFlagForNextSubSet();

           int i, j, SubSetLength;

           // Реализовать определение количества элементов
           // в новом подмножестве SubSetLength

           // ...
           SubSetLength = 0; // данная строка
           // исключительно чтобы компилировалось

           // Если все флаги присутствия нулевые,
           // то возвращаем пустую ссылку (null)
           if (SubSetLength == 0) return null;

           // Создаём новое подмножество
           int[] NewSubSet = new int[SubSetLength];

           // Заполнение подмножества
           // ...

           // Возвращаем подмножество
           return NewSubSet;
       }

       protected void InitPresenceFlagForNextSubSet()
       {
           int i;

           // При получении следующей комбинации
           // флагов присутствия можно пользоваться
           // аналогией прибавления единицы к двоичному
           // числу, нужно организовать "перелив" единицы
           // при переполнеии. Примеры
           // 1 +     0 =     1
           // 1 +     1 =    10
           // 1 +    10 =    11
           // 1 +    11 =   100
           // 1 +  1001 =  1010
           // 1 +  1111 = 10000
           // 1 + 10110 = 10111
           // 1 + 10111 = 11000
           for (i = 0; i < PresenceFlag.Length; i++)
           {
               //...
           }
       }

   }

Всего сообщений: 1 | Присоединился: март 2009 | Отправлено: 14 марта 2009 23:20 | IP

Отправка ответа:
Имя пользователя   Вы зарегистрировались?
Пароль   Забыли пароль?
Сообщение

Использование HTML запрещено

Использование IkonCode разрешено

Смайлики разрешены

Опции отправки

Добавить подпись?
Получать ответы по e-mail?
Разрешить смайлики в этом сообщении?
Просмотреть сообщение перед отправкой? Да   Нет
 

Переход к теме
<< Назад Вперед >>
Одна страница

Форум работает на скрипте © Ikonboard.com