Посмотрел ответ, я его понял. Но я пытался делать через цикл while
и немного не понимаю, почему у меня не получается.
Я смотрю размер массива и передаю его в число, затем этому числу меняю знак и прибавляя 1 дохожу до последнего элемента, попутно добавляя все эти элементы в массив.
Т.е. по сути как и надо, я беру последний элемент и добавляю его в новый массив, затем предпоследний и т.д. Но не понимаю почему все таки у меня не выдает второй массив и получается не работает второй цикл. Хотя это я все расписал слова наверное вы сразу увидите ошибку в коде.
Очень хорошо, что ищите свое решение. В реальной работе часто лучше взять готовое проверенное, но для обучения полезнее научиться сперва делать свое.
Ниже код программы с моими комментариями (#MB:
), изучите их и попробуйте еще раз.
# первая часть как раньше у нас были задачи , я просто создаю массив с неизвестным размером
puts "введи число N"
chislo = gets.to_i
array = []
i = 0
array1 =[]
# этой переменной беру размер массива
y = array.size.to_i
#MB: size уже integer, не нужно to_i делать
#MB: в данный момент array пуст, нет смысла его размер брать
while i< chislo do
array << rand(100)
i += 1
end
# вот в этой части пытаюсь сделать так, чтобы перебором каждый элемент из массива брался, а пото в цикле while же конкретно брался послежний элемент , потом предпоследний и т.д.
# MB: вот этот цикл внешний вообще к чему?
for item in array do
y = array.size # MB: вот тут теперь y имеет смысл, т.к. array теперь заполнен
# MB: это условие всегда false, поэтому цикл ни разу не выполнится
# можно while y >= 0 и в теле цикла идти на уменьшение y, cм. ниже
while y < 0
#MB: y -= 1
#MB: array1 << array[y]
array1 << array[-y]
y += 1
end
end
#вывожу массивы но выводяться опять же только начальный массив и пустой массив. Понимаю почему выдается пустой массив но не понимаю почему второй цикл не работает!
puts "исходный массив: " + array.to_s
puts "новый массив, полученный из исходного: " + array1.to_s
Попробуйте теперь с моими подсказками сами переписать программу и расскажите что вышло.
Спасибо понял. Да про массив
for item in array do
немного затупил, но честно говоря тут уже перебором пробовал может хоть что сработает.
Очень здорово понял про то что размер массива надо брать , когда он уже наполнился!
Только из ваших комментарий одного не понял, почему условие будет всегда ложно?Ведь размер массива изначально положителен и получается что я просто дохожу до того момента когда он становиться 0, отнимаю от него еще раз 1 и он получается отрицательным?Или я не прав?
while y < 0
И сделал программу по вашим комментариям , да все верно и все получилось кроме одного момента
while y >= 0
тут надо брать строго
while y > 0
и тогда будет выдавать все как надо!
Спасибо большое!!!