Практическая информатика

    

type puts 0xaabb puts


#!/usr/bin/env ruby

puts 5/8 # 0 puts 5.0/8 # 0.625 puts 2**1000 puts ((2*500+1)*(2**500-1))

=begin puts (2**30-1).type a=0b001_001 puts a puts a.type a=12.34 puts a puts a.type a=12.34e2 puts a puts a.type =end

puts 12.34.ceil # 13 puts 12.34.floor # 12 puts -12.ceil # -12 puts -12.floor # -12 puts 12.34.round # 12 puts 12.54.round # 13 puts -34.56.abs # 34.56

puts -12.34.to_i # -12 puts 1234.to_f # 1234.0

=begin puts 123_456_789. type puts 0xaabb puts -0b1010/0b10 puts 2/3.to_f =end
Пример 1.2.
Закрыть окно





#!/usr/bin/env ruby

puts 'hello' # hello puts %q/hello/ # hello puts %q(hello) # hello

puts 'hell\\o' # hell\o puts %q(hell\\o) # hell\o

puts 'hell\'o' # hell'o puts %q(hell\'o) # hell\'o puts 'hel"l"o' # hel"l"o

puts "hello" puts %Q/hello/ puts %Q!hello! puts %Q{hello} puts %Q(hello) puts %Q!hello! puts %<hello> puts %!hello! puts %*hello* puts %+hello+ puts %(hello)



puts "Say \"Hello\"" # Say "Hello" puts "Say 'Hello'" # Say 'Hello'

puts "a \t b" puts 'a \t b' puts "выражение 3*5+8 равно #{3*5+8}" puts 'выражение 3*5+8 равно #{3*5+8}' puts "работа с целыми числами: 5/8 = #{5/8}" puts "перевод в класс Float: 5/8 = #{5/8.to_f}"

puts "-12.34".to_i puts "12.34".to_f puts "+12:34".to_i puts "12qq34".to_f

puts 209.chr

puts "123456789".reverse puts " 123 " puts " 123 ".strip puts "---22--23****".squeeze('*-') puts "---22--23****".squeeze

puts "Дашка любит молоко, а Танька - квас".tr('ДТ','МД') puts "22+33=55".tr('25','47')

puts "abcdef"[0].chr puts "abcdef".chop puts "abcdef".chop.chop puts "abcdef".delete("ea") puts "abcdef".delete('a-c') puts "abcdefabcdef".length puts "12345678".size

puts "ABCDEF".downcase puts "abcdef".index("cd") puts "abcdefabcdef".index("cd",3)

a="12345" puts "12345"[3].chr puts "12345"[0..3] puts "12345"[0,3]

puts "привет".capitalize # Не работает с русскими буквами! puts "abcdabcd".index("cd",3) puts "*"+"123".ljust(9)+*" puts "*"+"123".center(9)+"*" puts "*"+"123".rjust(9)+"*"

puts (eval "2**10") puts (eval ""мол".size * "око".size')

=begin s="2*3+4" puts s puts "#{s}" puts eval(s) puts eval s

puts s.eval # Ошибка! Неправильный вызов метода

print "Введите команды:" eval gets.chop! =end
Пример 1.3.
Закрыть окно





#!/usr/bin/env ruby puts Time.now puts Time.now+60 # добавили 60 секунд к текущему времени puts Time.now-60 # отняли 60 секунд от текущего времени

puts "До Нового года осталось #{365-Time.now.yday} дней" puts Time.now puts "Подождем 10 секунд." sleep(10) puts Time.now
Пример 1.4.
Закрыть окно





#!/usr/bin/env ruby puts "puts всегда завершается переходом к новой строке." print " А оператор print не делает этого по умолчанию, " print "как вы видите в этом примере.\n" print "print может быть вызван сразу ", "с несколькими аргументами.\n"

p Time.now, Time.now+3600

printf "%8s~~%-8s\n", "abcd", "abcd" printf "%8-s::%8s\n", "abcd", "abcd" printf "%06d\n", 2**10; printf "%+6d\n", 2**10 printf "%6d\n", 2**10; printf "%+6d\n", 2.5*1.3 printf "%4.3f\n", 2.5*1.3 printf "-2/7=%+1.6f, -2/6=%2.15f\n", -2/7.to_f, -2/6.to_f

puts "*\t*\t*\t*\t*" puts " 1234567 1234567 1234567 1234567 "
Пример 1.5.
Закрыть окно





#!/usr/bin/env ruby

number = 342 puts " Исходное число равно #{number}" n1 = number/100 # число сотен n2 = (number/10)%10 # число десятков n3 = number%10 # число единиц answer = n1*100 + n3*10 + n2 puts "Результат #{answer}"
Пример 1.6.
Закрыть окно





#!/usr/bin/ env ruby if 23 puts "23 есть ИСТИНА" end

if "qq" puts "И любая строка есть ИСТИНА" end puts

# Определение метода оценки величины выражения def howBigPrint(i) if i < 10 puts "Число #{i} меньше 10" elsif i < 20 puts "Число #{i} между 10 и 20" elsif i < 30 puts "Число #{i} между 20 и 30" else puts "Число #{i} больше или равно 30" end end # Использование метода ... howBigPrint(7); howBigPrint(15) howBigPrint(23); howBigPrint(105) puts

# Метод оценки величины выражения # теперь возвращает строку def howBig(i) if i < 10 then "Аргумент меньше 10" elsif i < 20 then "Аргумент между 10 и 20" elsif i < 30 then "Аргумент между 20 и 30" else "Аргумент больше или равно 30" end end # Использование метода ... puts howBig(7); puts howBig(15) puts howBig(23); puts howBig(105)

puts i = 23 i < 100 ? puts("Мало") : puts("Значительно больше") i = 1234 s = i < 100 ? "Мало" : "Значительно больше" puts s

puts "Перевертыш"

puts "Введите фразу:" a = gets.chop!.delete(' ') # удалили все пробелы a = a.tr('A-Z,А-Я', 'a-z,а-я') # замена букв на прописные str = "палиндром" str = "не " + str if a != a.reverse # проверка puts "Введенная фраза - " + str + "."

print "Введите неотрицательное целое число: " i= gets.to_i s = case i when 0 .. 9 "однозначное" when 10 .. 99 "двузначное" when 100 .. 999 "трехзначное" else "огромное" end puts "Введено #{s} число."
Пример 1.7.
Закрыть окно





#!/usr/bin/env ruby i=1 while i <= 5 puts i; i += 1 end puts

# еще раз i=1 until i > 5 puts i; i += 1 end puts

3.times do print "Ау! " end puts

0.upto(9) do |x| print x, " " end puts

0.step(12, 3) {|x| print x, " " } # 0 3 6 9 12 puts

[1, 1, 2, 3].each {|k| print k, " " } # 1 1 2 3 puts

for i in ["one", "two", "three"] print i, " " end puts

# то же самое ["one", "two", "three"].each{ |i| print i, " "} puts

for i in 1..5 puts i end puts

for i in 1 ... 6 puts i end puts

print "Введите целое положительное число: " str = gets.chop! # ввели строку num = str.to_i # преобразовали в число if num > 0 i = 1 fact = 1 while i <= num fact *= i i += 1 end puts "Факториал числа #{num} равен #{fact}" else puts " Вы ввели неположительное число" end puts

print "Введите целое положительное число: " num = gets.to_i # строку сразу преобразовали в число if num > 0 fact = 1 for i in 1 .. num fact *= i end puts "Факториал числа #{num} равен #{fact}" else puts "Вы ввели неположительное число" end puts

def fact(n) f = 1 1.step(n,1) {|k| f *= k} return f end print "Введите целое положительное число: " if (num = gets.to_i) > 0 print "#{num}! = #{fact(num)}\n" else puts "Факториал числа #{num} не определен\n" end

puts print "Введите целое положительное число: " a, k = gets.to_i, 0 while a>0 a /= 10; k += 1 # отбросили последнюю цифру end print "Количество цифр в введенном числе равно #{k}.\n" puts

print "Введите число элементов массива: " sn = gets.chop!; n = sn.to_i b = Array.new(n) # создали массив из n элементов s = 0 # обнулили сумму for i in 0 .. n - 1 print "Введите #{i+1}-й элемент массива: " b[i] = gets.chop!.to_f; s = s + b[i] end print "Сумма всех элементов массива равна ", s, "\n" puts

puts "Введите массив чисел (разделяя их пробелами):"

a = gets.chop! b = a.split # разбили строку на отдельные числа s = 0 for i in 0 .. b.length - 1 s += b[i].to_f end puts "Сумма всех элементов массива равна #{s}" puts

=begin

for i in 1 .. 5 print i break if i == 3 print "*" end puts

for i in 1 .. 5 print i redo if i == 3 print "*" end puts

for i in 1 .. 5 print i next if i == 3 print "*" end puts

for i in 1 .. 5 print i retry if i == 3 print "*" end puts

=end

for i in 1 .. 5 print "Now at #{i}. Restart?(y/n) " retry if gets.chop == "y" end puts
Пример 1.8.
Закрыть окно





#!/usr/bin/env ruby

# 1

print " Введите первое число: "; a = gets.to_i print "Введите второе число: "; b = gets.to_i

k = a >= b ? a : b # теперь k - максимум

until (a%k == 0)&& (b%k == 0) k-=1 end print "НОД(#{a},#{b}) = #{k}\n"

#2 Алгоритм Евклида

print "Введите первое число: "; a = gets.to_i print "Введите второе число: "; b = gets.to_i m, n = a, b while !((m == 0) || (n == 0)) if m >= n m = m - n else n = n - m end end

k = m == 0 ? n : m print "НОД(#{a},#{b}) = #{k}\n"
Пример 1.9.
Закрыть окно





#!/usr/bin/env ruby = begin Напишите программу подсчета суммы всех нечетных чисел, заключенных в интервале от K до L, где K и L - аргументы командной строки =end

if ARGV.length < 2 puts "Слишком мало входных данных" exit(1) end

s = 0 k = ARGV[0].to_i l = ARGV[1].to_i for i in k .. l s += i if i%2 != 0 end puts "Сумма нечетных чисел в интервале " + "от #{k} до #{l} равна #{s}"
Пример 1.10.
Закрыть окно





#!/usr/bin/env ruby

=begin Напишите программу, получающую с качестве аргумента командной строки целое число n, и печатающую n-е число Фибоначчи. =end

def fib(n) if n<2 n else fib(n-2)+fib(n-1) end end t1 = Time.now n = ARGV[0].to_i puts "#{n}-е число Фибоначчи равно #{fib(n)}" t2 = Time.now puts "Время расчета около #{(t2-t1).round} сек."
Пример 1.11.
Закрыть окно





#!/usr/bin/env ruby

=begin Напишите программу, получающую с качестве аргумента командной строки целое число n, и печатающую n-е число Фибоначчи. =end t1 = Time.now n =ARGV[0].to_i f= [0, 1] fib = case n when 0 f[0] when 1 f[1] else for i in 2 .. n f[i] = f[i-1] + f[i-2] end f[n] end puts "#{n}-е число Фибоначчи равно #{fib}" t2 = Time.now puts "Время расчета около #{(t2-t1).round} сек." a = fib.to_s.split('") puts "Количество цифр в #{n}-м числе Фибоначчи равно #{a.size}."
Пример 1.12.
Закрыть окно





#!/usr/bin/env ruby

=begin Напишите программу, получающую с качестве аргумента командной строки целое число n, и печатающую n-е число Фибоначчи. =end t1 = Time.now n =ARGV[0].to_i if n > 1 prev, beforePrev = 1, 0 for i in 2 .. n fib = prev + beforePrev prev, beforePrev = fib, prev end else fib = n end puts "#{n}-е число Фибоначчи равно #{fib}" t2 = Time.now puts "Время расчета около #{(t2-t1).round} сек." a = fib.to_s.split("') puts "Количество цифр в #{n}-м числе Фибоначчи равно #{a.size}."
Пример 1.13.
Закрыть окно





#!/usr/bin/env ruby

# 1 f = File.new("fio.txt") n = 1 student = f.readlines student.each{ |i| print n, ". ", i n += 1 }

puts # 2 f = File.new("fio.txt") n = 1 student = f.readlines student.each{ |i| i.chop! fio = i. split print n, ". ", fio[0], " ", fio[0][0].chr, ". ", fio[1][0].chr, ".\n" n += 1 }
Пример 1.14.
Закрыть окно





#!/usr/bin/env ruby

# Метод Монте-Карло puts "Введите количество точек:" n1, n, t1 = 0, eval(gets.chop), Time.now for i in 1 .. n x = 2*rand() - 1 y = 2*rand() - 1 # проверяем попадание внутрь круга n1 += 1 if (x**2 + y**2) < 1 end puts "PI=#{4.0*n1/n}" t2 = Time.now puts "Число точек #{n}, время расчета " + "около #{(t2 - t1).round} сек."
Пример 1.15.
Закрыть окно





#!/usr/bin/env ruby

class Car @@NUM_CARS = 0 def initialize @@NUM_CARS = @@NUM_CARS + 1 puts @@ NUM_CARS end end class SportsCar < Car end class FamilyCar < Car end

a = Car.new b = SportsCar.new c = FamilyCar.new
Пример 1.16.
Закрыть окно




Содержание раздела