С Новым годом! Форум программистов, компьютерный форум, киберфорум
Ruby
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/26: Рейтинг темы: голосов - 26, средняя оценка - 4.62
1 / 1 / 0
Регистрация: 24.01.2013
Сообщений: 47

Вывод содержимого массива в алфавитном прорядке

27.01.2013, 14:26. Показов 5388. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго дня!

Условия задачи.
Давайте напишем программу, которая просит нас ввести сколько угодно слов (по одному слову в строке до тех пор, пока мы не нажмём Enter на пустой строке) и которая затем повторяет нам эти слова в алфавитном порядке.

Получается следующий код
Ruby
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# encoding: utf-8
 
#Сортировка списка слов по алфавиту
 
words = []
    
    puts 'введите слово'
    while true
    i = gets.chomp
    words.push i
    if i.length == 0
        puts words.sort 
    end
    end
ПС. Хоть в соседнем топике мне советовали не пользоваться циклом while, другого способа в данном случае я не нашел.

Вторым условие задачи было - Попробуйте написать указанную программу без использования метода sort.

Вот тут у меня возникли проблемы, каким еще методом можно перебирать данные массива? Как я понимаю each просто последовательно перебирает данные массива.
1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.01.2013, 14:26
Ответы с готовыми решениями:

Вывод заголовков полей массива / Вывод содержимого массива на веб-страницу не через print_r
Есть некий массив массивов, который передаётся в какой-то документ и там переприсваивается через foreach($<имя_массива>...

Вывод содержимого массива
Как вывести всё содержимое string массива в MessageBox? У меня при каждом запуске программы количество элементов меняется, поэтому я...

Вывод содержимого массива
Дана задача: переместить в другую область памяти элементы с непарными номерами. Элементы массива - однобайтные. Писал на TASM: ...

5
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
31.01.2013, 15:27
Ruby
1
2
3
4
5
6
7
8
#!/usr/bin/env ruby
# -*- coding: utf-8 -*-
 
puts *([].tap do |words|
  while gets
    words << $_
  end
end.sort)
Пример (для конца ввода нужно отправить терминалу символ EOT: Ctrl+Z на Windows, Ctrl+D на UNIX-like):
Code
1
2
3
4
5
6
7
8
9
10
11
12
$./sample.rb                           
foo              
bar
quuz
bar
foo
quuz
$ echo -ne "foo\nbar\nquuz" > input.txt 
$ ./sample.rb input.txt                
bar
foo
quuz
То же самое, но в виде однострочника:
Code
1
2
3
4
$ ruby -ne 'BEGIN{$words = []}; $words << $_; END{puts *$words.sort}' input.txt
bar
foo
quuz
Цитата Сообщение от vaverka Посмотреть сообщение
ПС. Хоть в соседнем топике мне советовали не пользоваться циклом while, другого способа в данном случае я не нашел.
Тебе это посоветовали потому, что для решения именно той конкретной задачи существовало более удобное средство языка (надо отметить, что таких случаев — абсолютное большинство). Однако в данном случае использование while вполне оправдано.

Цитата Сообщение от vaverka Посмотреть сообщение
Попробуйте написать указанную программу без использования метода sort.
Тут тоже все просто — надо вставлять элементы в массив с сохранением порядка. А если заранее известно, что строки не будут повторяться, то можно использовать SortedSet:

Ruby
1
2
3
4
5
6
7
8
9
10
#!/usr/bin/env ruby
# -*- coding: utf-8 -*-
 
require 'set'
 
puts *(SortedSet.new.tap do |words_set|
    while gets
      words_set << $_
    end
  end)
1
1 / 1 / 0
Регистрация: 24.01.2013
Сообщений: 47
01.02.2013, 11:17  [ТС]
Цитата Сообщение от Nameless One Посмотреть сообщение
Ruby
1
2
3
4
5
6
7
8
#!/usr/bin/env ruby
# -*- coding: utf-8 -*-
 
puts *([].tap do |words|
  while gets
    words << $_
  end
end.sort)
Пример (для конца ввода нужно отправить терминалу символ EOT: Ctrl+Z на Windows, Ctrl+D на UNIX-like):
Code
1
2
3
4
5
6
7
8
9
10
11
12
$./sample.rb                           
foo              
bar
quuz
bar
foo
quuz
$ echo -ne "foo\nbar\nquuz" > input.txt 
$ ./sample.rb input.txt                
bar
foo
quuz
То же самое, но в виде однострочника:
Code
1
2
3
4
$ ruby -ne 'BEGIN{$words = []}; $words << $_; END{puts *$words.sort}' input.txt
bar
foo
quuz

Тебе это посоветовали потому, что для решения именно той конкретной задачи существовало более удобное средство языка (надо отметить, что таких случаев — абсолютное большинство). Однако в данном случае использование while вполне оправдано.


Тут тоже все просто — надо вставлять элементы в массив с сохранением порядка. А если заранее известно, что строки не будут повторяться, то можно использовать SortedSet:

Ruby
1
2
3
4
5
6
7
8
9
10
#!/usr/bin/env ruby
# -*- coding: utf-8 -*-
 
require 'set'
 
puts *(SortedSet.new.tap do |words_set|
    while gets
      words_set << $_
    end
  end)
Спасибо, но думаю еще есть способы, т.к по урокам я по идее еще не должен был знать метод SortedSet.

Нашел на просторах необъятного сортировку "пузырьком"

Ruby
1
2
3
4
5
6
7
8
9
10
11
12
13
14
arr = ['cat', 'hat', 'dog', 'frog', 'metel', 'apple']
swap = true
size = arr.length - 1
 
 
while swap
  swap = false
  for i in 0...size
    swap |= arr[i] > arr[i + 1]
    arr[i], arr[i+1] = arr[i + 1], arr[i] if arr[i] > arr[i + 1]
  end
  size -= 1
end
puts arr.join(' ')
Думаю еще есть методы решения для решения поставленной задачи.
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
01.02.2013, 12:35
Цитата Сообщение от vaverka Посмотреть сообщение
т.к по урокам я по идее еще не должен был знать метод SortedSet
это не метод, а класс наподобие set, только в нем элементы хранятся в упорядоченном состоянии.

Цитата Сообщение от vaverka Посмотреть сообщение
Думаю еще есть методы решения для решения поставленной задачи.
Ну, различных алгоритмов сортировки существует много (мой любимый — bogosort), если ты об этом. Но я говорил немного о другом.

Определим для Array метод, который будет вставлять в массив новый элемент так, чтобы массив оставался отсортированным:
Ruby
1
2
3
4
5
6
7
8
9
10
11
12
class Array
  def insert_preserving_order(value)
    succ_idx = -1
    each_with_index do |val, idx|
      if value <= val
        succ_idx = idx
        break
      end
    end
    insert succ_idx, value
  end
end
И будем использовать этот метод для добавления элементов в массив:
Ruby
1
2
3
words = %w(cat hat dog frog apple)
sorted_strings = words.each_with_object([]) { |w, a| a.insert_preserving_order w }
puts *sorted_strings
Таким образом, нам становится не нужна сама функция сортировки. Вывод программы:

Bash
1
2
3
4
5
6
$ ./sample.rb 
apple
cat
dog
frog
hat
1
Stero
24.05.2013, 17:57
Задачу по первому условию я решил несколько иначе:

Ruby
1
2
3
4
5
6
7
array = []
x = gets.chomp
while x != ''
array.push x
x = gets.chomp
end
puts array.sort
Надо сказать, что я совершенно начинающий, поэтому решил теми способами, которые были изучены до этой главы.

Как решить второе условие тоже не понял и полез искать.
Спасибо за подсказку )

Добавлено через 16 минут
Я, как и топикстартер, учим Ruby по книге Криса Пайна "Learn to Program".
Вот здесь он в электронном виде, там всего 11 глав по несколько страниц: http://www.shokhirev.com/mikhail/ruby/ltp/

И по задумке автора мы еще не можем знать таких сложных решений, которые вы здесь предлагаете
0 / 0 / 0
Регистрация: 24.10.2015
Сообщений: 1
24.10.2015, 16:03
Наверняка уже не актуально. Тоже по этой книге учу. Действительно, с использованием метода пузырька - пока инет копать не начал, может и не допёр бы. Мой листинг(с учётом текущего прогресса по книге, согласно задумке автора):

Ruby
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
l = []
a = ' '
while a != ''
    puts 'Enter a string or just press <enter> to display sorted list:'
    a = gets.chomp
    if a.length > 0
        l.push a.to_s
    end
end
puts 'The length of list is: ' + l.length.to_s
i = 0
j = i + 1
while i < (l.length - 1)
    while j < l.length
        if l[i] > l[j]
        l[i] , l[j] = l[j] , l[i]
        else 
            i = i + 1
            j = i + 1
        end
    end
end
puts 'Now the sorted list will be displayed: '
puts l
puts 'End of story!'
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.10.2015, 16:03
Помогаю со студенческими работами здесь

Вывод содержимого массива на экран
Есть незаконченный код одной задачи: var a, b, i, n, c: integer; mas: array of integer; begin writeln('введите n'); ...

Вывод содержимого ассоциативного массива
Всем привет, как вывести содержимое ассоциативного массива такой конструкции map &lt;string, vector&lt;string&gt;&gt; mp; ?

вывод содержимого символьного массива
Пользуюсь Dev-C++5.4.2 Написал простой код char str; str='q'; cout&lt;&lt;str; получил вывод (скрин). Вопрос, это я не так что-то...

Вывод содержимого массива структур на экран
Сваял структуру: #include &lt;stdio.h&gt; #include &lt;string.h&gt; #define SIZE 25 struct date_by_date { char girlfriend ; char meeting...

Вывод содержимого массива через запятую
Подскажите, пожалуйста, почему не работает? Необходимо вывести содержание папки через запятую. Код &lt;?php $featured1_dir =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru