Форум программистов
 
Расширенный поиск
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

Восстановить пароль
Повторная активизация e-mail



Ответ
 
Опции темы
Старый 15.10.2017, 22:29   #1
fenek644
 
Регистрация: 15.10.2017
Адрес: Санкт-Петербург, Россия
Сообщений: 9
Репутация: 10
По умолчанию массив 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 в 22:36.
fenek644 вне форума   Ответить с цитированием
Старый 16.10.2017, 02:16   #2
fenek644
 
Регистрация: 15.10.2017
Адрес: Санкт-Петербург, Россия
Сообщений: 9
Репутация: 10
По умолчанию

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



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дан массив A размером 3*3. Составить программу, записывающие положительные элементы этого массива A в одномерный массив B, а отрицательные - в одномерный массив C SkaNi Паскаль 1 02.06.2017 09: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




02:31.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru