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

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

Вернуться   Форум программистов > Скриптовые языки программирования > Ruby
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.10.2017, 21:29   #1
fenek644
 
Регистрация: 15.10.2017
Сообщений: 9
По умолчанию массив a превращается в массив m -

Подскажите в чем ошибка

Код:
def stock_picker(a)
    l = a.length
    jim = (0..l-2).to_a
    m = a
    #Sc = a
    puts "hiii"
    puts a
    (0..l-2).each do |i|
        #jim[i] = i
        #m[i] = a[i]
        puts a[i]
        puts i
        (i+1..l-1).each do |j|
            if a[j] > m[i]
            # do 
                m[i] = a[j]
                jim[i] = j 
            end
            puts j
            puts i
            puts a[i]
        end
 
        puts a[i]
 
        #c[i] = m[i]-a[i]
    end
    #c = m-a
    puts jim
    puts m
    puts a
    f_i = 0
        #(0..l-2).each do |i|
            #f_i = 0
            (0..l-2).each do |j|
                
                if (m[j]-a[j]) > (m[f_i]-a[f_i])
                    f_i = j
                    puts j.to_s
                end
            end
        #end
                result = [f_i, jim[f_i]]
end
 
b = [17,3,6,9,15,8,6,1,10]
 
puts stock_picker(b)
Когда первый раз печатаю a[i], стр 11, - получается заданный a[i], а после цикла по j, стр 21, - он превращается в максимальный элемент массива a с номерами большими i.

______________________
Используйте тег [CODE] (кнопка с решеткой # в форме сообщения) при вставке кода на форум.

Последний раз редактировалось Alex11223; 15.10.2017 в 21:36.
fenek644 вне форума Ответить с цитированием
Старый 16.10.2017, 01:16   #2
fenek644
 
Регистрация: 15.10.2017
Сообщений: 9
По умолчанию

нашли баг в другой ветке - проблема в том, что m = а в Руби - Это не оператор присвоения а оператор отождествления - в данном случае m и а указывают на один и тот же объект и меняя m - мы меняем и а. Это дело обходится следующим образом.
m = a.clone
fenek644 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дан массив A размером 3*3. Составить программу, записывающие положительные элементы этого массива A в одномерный массив B, а отрицательные - в одномерный массив C SkaNi Паскаль, Turbo Pascal, PascalABC.NET 1 02.06.2017 08:07
Программирование в VBA: двумерный массив M на N, нужно создать новый одномерный массив TheAnnihilyator Помощь студентам 1 04.06.2014 09:16
С# задан массив 5х5. сформировать массивы А и В. в массив А поместить элементы с четными индексами, в массив В с нечетны Koksa Помощь студентам 0 10.10.2011 11:26
Массив - Нужно написать массив и распечатать на экран с конца в начало(язык С++) econ Помощь студентам 1 29.05.2011 22:02