Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Ruby: Общие вопросы > задачи из викибука |
Автор: aer0sm1th 7.1.2007, 04:44 |
Вот такие задачки по одномерным массивам: 1. Вывести индексы массива в том порядке, в котором соотвествующие им элементы образуют возрастающую последовательность. 2. В численном массиве найти сумму отрицательных элементов. 3. Найти все индексы, по которым располагается максимальный элемент. 4. В массиве переставить в начало элементы, стоящие на четной позиции, а в конец -- стоящие на нечётной. Задачу 2 я решил, а проблемы возникли с задачами в которых что-либо зависит от индекса. Эти задачи в учебнике находятся до асоциативных масивов и конструкций if. Я полагаю автора имели ввиду решение типа massiv.xxx{}.yyy{}...... |
Автор: SoWa 7.1.2007, 05:45 | ||
А нельзя ли создать тип данных вида
Извини, что на Дельфи. Думаю, у вас такое тоже есть. Так вот создаешь массив из таких элементиков, в поля каждого кладешь соответствующие значения и индексы. Упорядочиваешь массив по значениям. Выводишь индексы. Это первая задача. Остальные- тоже через тип данных решить легко. |
Автор: aer0sm1th 7.1.2007, 15:58 |
Нет. Масив обычный(из чисел). Я конечно могу его в асоциативный переклепать и т.д. , но я думаю должно быть другое решение. ![]() PS: дочитате первый пост до конца. |
Автор: Void 8.1.2007, 02:00 | ||
Пришло в голову такое, может быть не самое краткое и красивое, но решение:
|
Автор: SoWa 8.1.2007, 06:22 |
Вести учет перестановок. Стек заюзать, еще чего нибудь. Решаемо. |
Автор: Pete 8.1.2007, 16:32 | ||||||
1.
2.
Добавлено @ 16:46 Void, про zip не знал, спасибо! 1.
|
Автор: Pete 8.1.2007, 16:49 | ||
3.
Добавлено @ 16:55 4-е аналогично первому. |
Автор: aer0sm1th 8.1.2007, 17:06 |
Спасибо огромное, ситуация проясняется ![]() Но остались некоторые вопросы: что такое zip, b << i ? |
Автор: Pete 8.1.2007, 17:38 |
http://www.ruby-doc.org/core/classes/Array.html#M002250 b << i --- значит, добавить объект (в данном случае --- число) i к массиву b (в конец). |
Автор: Rubynovich 8.1.2007, 22:38 | ||||||||
1.
2. лучшего решения предложить не могу 3.
4.
Добавлено @ 22:50 4. как более короткий вариант
|
Автор: aer0sm1th 10.1.2007, 02:43 |
Все. Теперь все. Всем спасибо. ![]() |
Автор: pR13S7 10.1.2008, 16:05 | ||||||
2.
3.
4.
Решить 1 и в одну-две срочки не cмог. Всё упирается в то, что методы index и find_index возвращяют ПЕРВОЕ вхождение элемента. Решение задачи #3, предложеное Rubynovich, выходит за рамки того, что было изложено в викибуке перед тем как предложены вышеуказаные упражнения (хотя там и про index даже ниего не говорилось) |
Автор: pR13S7 11.1.2008, 15:03 | ||
Решил все задачи по одномерным массивам, выложу тут, авось кому-то пригодиться (сам проверял работает всё коректно)
|
Автор: pR13S7 22.1.2008, 10:15 | ||
Решение задач по двумерным массивам:
|
Автор: 130 24.1.2008, 00:23 | ||
Альтернативные решения задач из первого поста (по возможности, с использованием перечислителя).
|
Автор: pR13S7 24.1.2008, 08:12 |
130, уважаемый, какие перечисления, автор топа же сказал, что задачи были выложены в разделе, где не то что перечисления, даже операторы условного перехода не были рассказаны ;-) |
Автор: 130 24.1.2008, 23:58 |
pR13S7, действительно, я погорячился. Не удосужился прочитать оригинал (викибук). Но с другой стороны, в первом посте всё же не указано, какими конкретно методами следует решать задачи, а ассоциативные массивы и условные операторы в n1...n4 и не использовались. ![]() |
Автор: 130 25.1.2008, 00:08 |
дубликат |
Автор: YankovskyAndrey 23.10.2008, 15:39 |
##Задачи про массивы ##Одномерные array=[1,-2,-6,4,2,8,-6,8,2,-1] 1. Вывести индексы массива в том порядке, в котором соответствующие им элементы образуют возрастающую последовательность. p (0..array.size-1).sort_by{|v| array[v]} 2. В численном массиве найти сумму отрицательных элементов. p array.find_all{|v| v<0}.inject(0){|v,result| result+v} 3. Найти все индексы, по которым располагается максимальный элемент. max=array.max array.each_index{|x| if array[x]=max then puts "#{x}" end} 4. В массиве переставить в начало элементы, стоящие на чётной позиции, а в конец — стоящие на нечётной. even,odd=Array.new,Array.new array.each_with_index do |element, index| ar = index % 2 == 0 ? even : odd ar << element end p odd+even |