Информатика. 10 класс (Повышенный уровень)
Среди задач преобразования элементов массива можно выделить задачи следующих типов:
1. Изменение элементов массива в зависимости от условий.
2. Обмен местами элементов в массиве.
3. Удаление элемента из массива.
4. Вставка элемента в массив.
Некоторые из задач преобразования массивов встречаются очень часто. Поэтому в класс vector были добавлены функции, позволяющие преобразовывать массивы.
Многие из функций для преобразования векторов аналогичны функциям преобразования строк как по синтаксису, так и выполняемому действию. Список функций можно посмотреть в Приложении к главе 1.
Как поменять местами элементы массива в c
как поменять элементы массива местами (Си)
самый простой способ для понимания это представить себе переменную в виде стакана с водой
итого мы имеем 2 стака с жидкостями которые нужно поменять местами (содержимое стакана)
как бы вы сделали это в реальной жизни? так же и в программе! — посредством третьего стакана!
int a = 10;
int b = 20;
int temp; //наш третий стакан — посредник
temp = a; //перелили в третий стакан содержимое первого
a = b; //первый у нас освободился? заполняем его содержимым второго
b = temp; //второй освободился? заполняем его содержимым третьего (а там что?)
Developing.ru
Есть задача:Найти макс. элемент одномерного массива, минимальный и поменять местами максимальный и минимальный элемент одномерного массива.
Так, вот. Как поменять их местами? Поможет кто-нибудь реализовать это?
Собственно сам код:
З.Ы. —
//--------------------------------------------------------------------------- #include #include #pragma hdrstop #include using namespace std; //--------------------------------------------------------------------------- #pragma argsused int main(int argc, char* argv[]) < int num=0; int max=0; int min=0; int i=0; int t=0; int chislo=0; int a1, b1; srand( time( 0 ) ); cout>num; cout>a1; cout>b1; int *a = new int[num]; cout max = a[0]; min = a[0]; for (int i; imax) max=a[i]; if (a[i] cout>t; if (t==1) < coutif (t==2) < coutif (t==3) < //(Тут действие) >cout //---------------------------------------------------------------------------
Romeo Сообщения: 3091 Зарегистрирован: 02 мар 2004, 17:25 Откуда: Крым, Севастополь Контактная информация:
1. Вопрос на засыпку — сколько целых чисел в диапазоне от A до B (границы включены). Немного подумав, можно выдать ответ. Это (B — A + 1). Правильность формулы несложно проверить на конкретных данных. Теперь дальше. Функция rand() возвращает случайное больше число. Чтобы получить число от нуля до N-1 нужно взять остаток от деления rand() на N. Отсюда следует, что случайное число от A до B можно получить по формуле (A + rand() % (B — A + 1)). У тебя же формула не такая.
2. Вот этот цикл будет работать непредсказуемо:
for (int i; i
Почему? Потому, что переменная i не инициализирована, а коль так (по причине того, что она создана на стеке), в ней будет некий мусор, который вряд ли будет равен нулю. Правильным будет инициализировать i нулём.
3. Та часть задания, которая не доделана. Чтобы поменять местами элементы массива нужно запомнить не их значения, как у тебя сейчас сделано, а их индексы. Индекс - это куда более информативное значение. Зная его, можно легко осуществить обмен, плюс значения самого элемента массива тоже никто не мешает получить, вызвав оператор []. Предположим, мы нашли индекс максимального элемента max_index и индекс минимального элемента min_index. Тогда обмен будет делаться очень просто:
int temp = a[max_index]; a[max_index] = a[min_index]; a[min_index] = temp;
Теперь осталось только подправить цикл выше, чтобы он искал не значения, а индексы. А также подправить вывод максимального и минимального значения элемента. Это оставляю на самостоятельную работу.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Самый простой способ поменять местами строковые элементы массива?
Может быть в Js есть более элегантный способ? (ну как функция .SORT для сортировки) Или это единственный способ?
Отслеживать
123k 24 24 золотых знака 126 126 серебряных знаков 303 303 бронзовых знака
задан 15 янв 2017 в 23:45
Менеджер Типографии Менеджер Типографии
587 2 2 золотых знака 5 5 серебряных знаков 18 18 бронзовых знаков
5 ответов 5
Сортировка: Сброс на вариант по умолчанию
В современном js такой способ есть, называется деструктуризирующее присваивание (destructuring assignment):
[mass[1], mass[3]] = [mass[3], mass[1]];
[a, b] = [b, a];
Вот только IE11 и Андроиды так не умеют из коробки, если хочется писать так чтобы работало везде - придется транспилировать.
Еще есть везде-рабочий "ниндзя" способ, за который в приличном обществе бьют ногами за нечитаемость:
mass[1] = [mass[3], mass[3] = mass[1]][0];
a = [b, b = a][0];
Отслеживать
ответ дан 15 янв 2017 в 23:57
Утка Учится Укрываться Утка Учится Укрываться
7,147 3 3 золотых знака 29 29 серебряных знаков 56 56 бронзовых знаков
Отлично объяснили. Спасибо.
16 янв 2017 в 1:03
вот ещё одна старая рабочая "нидзя" для коррекции массива
var arr = [2,1,3,5,4,0] arr[1] = arr.splice(0,1, arr[1])[0] //console.log(arr)
массивы можно корректировать через метод, для понимания снабдив код комментариями.
function correctArr(_arr, _param) < /* коррекция элементов массива по паре индекса * _arr -- массив требующий коррекции * _param -- пара [n1,n2] -- индексы массива для взаимной перестановки */ _arr[_param[1]] = _arr.splice(_param[0],1, _arr[_param[1]])[0] >//correctArr(arr, [1,0]) //console.log(arr.toString())
можно написать метод c циклом с обращением к функции, и возвращением нового массива
function corrects_Arr() < var _param, _arr = arguments[0].slice(), _arguments = Array.prototype.slice.call(arguments, 1) for(var i = 0; i < _arguments.length; i++)< correctArr(_arr, _arguments[i]) >return _arr > /* console.log( arr.toString() +" "+ "инспектируемый массив остался прежним" +"\n"+ corrects_Arr(arr, [0,1], [4,3]).toString() +" "+ "вернули скорректированный массив" ) */
для простоты будущего обращения с массивами, можно утяжелить решение задачи, по пути присвоения прототипу конструктора Array своего метода, который можно будит вызывать на всех массивах.
Array.prototype["myCorrects"] = function(_param) < if(_param)< this[_param[1]] = this.splice(_param[0],1, this[_param[1]])[0] this.constructor.prototype.myCorrects.apply(this, Array.prototype.slice.call(arguments, 1)) >return this > arr = arr.myCorrects([0,1], [3,4]).splice(-1,1).concat(arr) console.log(arr.toString())