Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 1
Регистрация: 16.11.2016
Сообщений: 135

Ввести одномерный массив A, вывести его. Произвести циклический сдвиг элементов расположенных вне границ

07.12.2016, 17:11. Показов 814. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста с задачей:

Ввести одномерный массив A, вывести его. Произвести циклический сдвиг элементов расположенных вне границ между максимумом и минимумом вправо (элементы между максимумом и минимумом остаются на своих местах).
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.12.2016, 17:11
Ответы с готовыми решениями:

С клавиатуры ввести одномерный массив, вывести его на экран и просуммировать элементы
Только начал изучать C#, задали в колледже такое задание: "С клавиатуры ввести одномерный массив, вывести его на экран и просуммировать...

Ввести с клавиатуры одномерный массив, вывести его на экран и перемножить элементы
ввести с клавиатуры одномерный массив,вывести его на экран и перемножить элементы. Пожалуйста можно код до этой программы, а то завтра...

Ввести с клавиатуры одномерный массив, вывести его на экран и найти минимальный элемент
ввести с клавиатуры одномерный массив,вывести его на экран и найти минимальный элемент. Пожалуйста напишите код до программы, а то на...

6
0 / 0 / 1
Регистрация: 16.11.2016
Сообщений: 135
09.12.2016, 19:14  [ТС]
Не понимаю что вообще означает циклический сдвиг и как его производить
0
132 / 82 / 29
Регистрация: 01.10.2014
Сообщений: 263
09.12.2016, 20:14
clon7771,
Допустим имеется массив {2,3,1,4,5,10,6,7,8}
Синим отмечен минимальный элемент, красным - максимальный, зелёным элементы между минимальным и максимальным(их никуда сдвигать не надо, и я так понимаю сами минимальный и максимальный элементы тоже остаются на своих местах).
Остальные элементы должны сдвинуться по кругу, т.к. никаких дополнительных условий нет, то допустим их надо сдвинуть на 1 элемент вправо, тогда результирующий массив будет выглядеть так:
{8,2,1,4,5,10,3,6,7}
0
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
10.12.2016, 10:02
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
//Rextester.Program.Main is the entry point for your code. Don't change it.
//Compiler version 4.0.30319.17929 for Microsoft (R) .NET Framework 4.5
 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
 
namespace Rextester
{
    public class Program
    {
        private static int GetMinIndex(int[] array)
        {
            int minIndex = 0;
            for (int i = 1; i < array.Length; i++)
                if (array[i] < array[minIndex])
                    minIndex = i;
            return minIndex;
        }
        
        private static int GetMaxIndex(int[] array)
        {
            int maxIndex = 0;
            for (int i = 1; i < array.Length; i++)
                if (array[i] > array[maxIndex])
                    maxIndex = i;
            return maxIndex;
        }
        
        private static void Swap(ref int x, ref int y)
        {
            var temp = x;
            x = y;
            y = temp;
        }
        
        private static int GetPreviousIndex(int index, int length, int minIndex, int maxIndex)
        {
            index = (index == (maxIndex + 1) % length) ? minIndex - 1 : index - 1;
            index = (index + length) % length;
            return index;
        }
        
        private static void ShiftRight(int[] array)
        {
            int minIndex = GetMinIndex(array);
            int maxIndex = GetMaxIndex(array);
            if (maxIndex - minIndex + 1 >= array.Length - 1)
                return;
            if (minIndex > maxIndex)
                Swap(ref minIndex, ref maxIndex);
            int startIndex = GetPreviousIndex(minIndex, array.Length, minIndex, maxIndex);
            int startElement = array[startIndex];
            int index = startIndex;
            for (int k = 0; k < array.Length - (maxIndex - minIndex + 1) - 1; k++)
            {
                int previousIndex = GetPreviousIndex(index, array.Length, minIndex, maxIndex);
                array[index] = array[previousIndex];
                index = previousIndex;
            }
            array[index] = startElement;
        }
        
        public static void Main(string[] args)
        {
            int[] array = { 2, 3, 1, 4, 5, 10, 6, 7, 8 };
            Console.WriteLine(string.Join(", ", array));
            ShiftRight(array);
            Console.WriteLine(string.Join(", ", array));
        }
    }
}


Добавлено через 41 минуту
Строки 49-50 можно удалить
0
0 / 0 / 1
Регистрация: 16.11.2016
Сообщений: 135
11.12.2016, 17:29  [ТС]
Спасибо конечно, но честно говоря я не понимаю полностью, что происходит в коде. Нельзя подобное сделать используя простые команды и вообще как-нибудь попроще?Я просто начинающий. Если я не смогу это понять и объяснить, то в выполнении задачи не будет смысла.
0
132 / 82 / 29
Регистрация: 01.10.2014
Сообщений: 263
11.12.2016, 17:42
clon7771, там и так просто всё сделано, хотя можно было и комментарии в твоём случае написать, обратись к автору, может поможет.
0
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
12.12.2016, 05:27
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
public class Program
{
    // Поиск индекса минимального элемента
    private static int GetMinIndex(int[] array)
    {
        int minIndex = 0;
        for (int i = 1; i < array.Length; i++)
            if (array[i] < array[minIndex])
                minIndex = i;
        return minIndex;
    }
    
    // Поиск индекса максимального элемента
    private static int GetMaxIndex(int[] array)
    {
        int maxIndex = 0;
        for (int i = 1; i < array.Length; i++)
            if (array[i] > array[maxIndex])
                maxIndex = i;
        return maxIndex;
    }
    
    // Обмен значений элементов
    private static void Swap(ref int x, ref int y)
    {
        var temp = x;
        x = y;
        y = temp;
    }
    
    // Зная текущий индекс (index), длину массива (length), и диапазон
    // игнорируемых элементов [minIndex; maxIndex], опредеяем индекс предыдущего элемента.
    private static int GetPreviousIndex(int index, int length, int minIndex, int maxIndex)
    {
        if (index == (maxIndex + 1) % length) // если предыдущий элемент имеет индекс maxIndex
            index = minIndex - 1;
        else
            index = index - 1;
            
        if (index == -1) // это например на случай если изначальный index (или minIndex) был равен нулю.
            index = length - 1;
            
        return index;
    }
 
    private static void ShiftRight(int[] array)
    {
        int minIndex = GetMinIndex(array);
        int maxIndex = GetMaxIndex(array);
        if (maxIndex - minIndex + 1 >= array.Length - 1)
            return;
        if (minIndex > maxIndex)
            Swap(ref minIndex, ref maxIndex); // хотим, чтобы minIndex <= maxIndex
            
        // находим любой индекс, не входящий в диапазон [minIndex, maxIndex]
        // в данном случае определяем его как предыдущи элемент от элемента minIndex
        int startIndex = GetPreviousIndex(minIndex, array.Length, minIndex, maxIndex);
        
        // запоминаем его, потому что он будет перезаписан на первой итерации цикла
        int startElement = array[startIndex]; 
        
        // текущий индекс
        int index = startIndex;
        
        // (maxIndex - minIndex + 1) - размер отрезка [minIndex; maxIndex]
        // array.Length - (maxIndex - minIndex + 1) - количество сдвигов которые необходимо совершить
        // вычитаем единицу, така как последний двиг особенный
        for (int k = 0; k < array.Length - (maxIndex - minIndex + 1) - 1; k++)
        {
            // определяем индекс предыдущего элемента
            int previousIndex = GetPreviousIndex(index, array.Length, minIndex, maxIndex);
            
            // совершаем сдвиг, перезаписывая текущий элемент предыдущим
            array[index] = array[previousIndex];
            
            // следующий индекс, значение по которому надо перезаписать.
            index = previousIndex;
        }
        
        // совершаем заключающий сдвиг. Нельзя использовать GetPreviousIndex(index, ....), така как тот элемент
        // был перезаписан, а нам нужно его оригинальное значение. Это значение startElement.
        array[index] = startElement;
    }
 
    public static void Main(string[] args)
    {
        int[] array = { 1, 3, 1, 4, 5, 10, 6, 7, 8 };
        Console.WriteLine(string.Join(", ", array));
        ShiftRight(array);
        Console.WriteLine(string.Join(", ", array));
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.12.2016, 05:27
Помогаю со студенческими работами здесь

Ввести с клавиатуры одномерный массив, вывести его на экран и найти минимальный элемент
помогите пожалуйста

Произвести циклический сдвиг элементов массива, расположенных вне границ между максимумом и минимумом, вправо
Помогите плиз)) :wall: Ввести одномерный массив A, вывести его. Произвести циклический сдвиг элементов расположенных вне границ между...

Дано одномерный массив Х, размером 15 элементов. Провести циклический сдвиг элементов в массиве вправо на 2 позиции
Дано одномерный массив Х, размером 15 элементов. Провести циклический сдвиг элементов в массиве вправо на 2 позиции.

Ввести одномерный массив А, вывести его. Вычислить среднее геометрическое положительных элементов массива
Ввести одномерный массив A , вывести его. Вычислить SRG-среднее геометрическое положительных элементов массива. Преобразовать элементы...

Ввести двумерный массив A(N×N) , вывести его. Найти сумму положительных элементов расположенных в части массива одновременно
Ввести двумерный массив A(N×N) , вывести его. Найти сумму положительных элементов расположенных в части массива одновременно как над...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru