Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.
Внимание! Некоторое время письма не доходят до аккаунтов MAIL RU GROUP, не доходят на все почтовые ящики mail.ru, inbox.ru, bk.ru. Пишите им жалобы, чтобы быстрее восстановили получение писем, регистрируйтесь через яндекс почту и gmail, туда письма с активизацией доходят.

Вернуться   Форум программистов > Скриптовые языки программирования > 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


20:29.


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

RusProfile.ru


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