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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.11.2014, 11:21   #1
raviti21
Новичок
Джуниор
 
Регистрация: 23.11.2014
Сообщений: 1
По умолчанию Описать процедуру sort(x), упорядочивающую по неубыванию числа массива x

Вот само задание: Описать процедуру sort(x), упорядочивающую по возр числа массива x следующим методом: все числа из x упорядочить по последней цифре и перенести во вспомогательный массив y; затем числа из y упорядочить по предпоследней цифре (при равенстве этих цифр сохранять упорядоченность по последней цифре) и записать их снова в массив x; далее числа из x упорядочить по третьей от конца цифре и перенести в массив y и т.д. (Учесть, что в конце концов числа должны оказаться в x).
Вот код:
Код:
static int[] mas = { 132, 321, 123, 213,231 , 312 };
        static int[] x = new int[mas.Length];
        static int[] y = new int[mas.Length];
        static int maxцифрвчисле = new int();
        #region Вывод
        static void V(int[,] cop)
        {
            for (int i = 0; i < mas.Length; i++)
            {
                Console.Write(cop[0, i] + "\t");
            }
            Console.WriteLine();
            for (int i = 0; i < mas.Length; i++)
            {
                Console.Write(cop[1, i] + "\t");
            }
            Console.WriteLine();
            for (int i = 0; i < mas.Length; i++)
            {
                Console.Write(cop[2, i] + "\t");
            }
            Console.WriteLine();
        }
        #endregion
        static void Main(string[] args)
        {
            Console.WriteLine(123 / 10%10);
            int[,] cop = new int[3, mas.Length];
            for(int i=0; i<mas.Length; i++)
            {
                    cop[0,i]=mas[i];
                    cop[1, i] = mas[i] / 10;
                    cop[2, i] = mas[i]%10;
                    if (mas[i].ToString().Length > maxцифрвчисле)
                        maxцифрвчисле = mas[i].ToString().Length;
            }
            #region Сортировка по последней цифре
            int temp;
            for (int z = 0; z < maxцифрвчисле; z++)
            {
                for (int j = 0; j < mas.Length; j++)
                {
                    for (int i = 0; i < mas.Length; i++)
                    {
                        if (i == j)
                            break;
                        if (cop[2, i] < cop[2, j])
                        {
                            temp = cop[2, i];
                            cop[2, i] = cop[2, j];
                            cop[2, j] = temp;
                            temp = cop[0, i];
                            cop[0, i] = cop[0, j];
                            cop[0, j] = temp;
                            temp = cop[1, i];
                            cop[1, i] = cop[1, j];
                            cop[1, j] = temp;
                            V(cop);
                        }
                        int io = 1;
                        if (cop[2, i] == cop[2, j])
                        {
#region Совпадение 
                            for (int p = z; p >= 0; p--)
                                io *= 10;
                            if (cop[0, j] / io % io < cop[0, i] / io % io && cop[1, i].ToString().Length!=2)
                            {
                                temp = cop[2, i];
                                cop[2, i] = cop[2, j];
                                cop[2, j] = temp;
                                temp = cop[0, i];
                                cop[0, i] = cop[0, j];
                                cop[0, j] = temp;
                                temp = cop[1, i];
                                cop[1, i] = cop[1, j];
                                cop[1, j] = temp;
                            }
                        }
#endregion
                    }
                }
                Console.WriteLine();
                for (int i = 0; i < mas.Length;i++ )
                {
                    cop[1, i] /= 10;
                    cop[2, i] = cop[1, i] % 10;
                }
                V(cop);
            }
            #endregion
            //Запись в y
            for (int i = 0; i < mas.Length; i++)
                y[i] = cop[0, i];
            }
Проблема возникла, когда цифры совпадают и он не сортирует по предыдущей цифре, хотел проблему решить в регионе #region Совпадение, Но не получилось, помогите пожалуйста с этим. О массива cop, в 0 строку записываются числа, в строку 1 записывается целое число от деления на 10, в строку 2 записывается остаток от деления на 0. Заранее спасибо.[/HTML]

Последний раз редактировалось Stilet; 23.11.2014 в 11:29.
raviti21 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создать программу,имеющая процедуру,кторая в производном текстовом файле,которая имеет слова и числа,изменяющая все числа числа,ме Fingergod Паскаль, Turbo Pascal, PascalABC.NET 0 13.12.2012 20:08
Описать процедуру Lifehouse Общие вопросы C/C++ 3 05.06.2012 20:13
Описать процедуру в С++ Devil21RUS Помощь студентам 1 17.10.2011 11:54
Описать процедуру sear Паскаль, Turbo Pascal, PascalABC.NET 1 11.05.2011 13:20
Описать процедуру,осуществляющую циклический сдвиг элементов массива на k позиций Bloodpoisoning Общие вопросы C/C++ 0 29.11.2010 15:50