Алгоритмы с ветвлением, Циклы (1092191)
Текст из файла
ПрограммированиеАлгоритмы с ветвлениемЦиклыЛинейные алгоритмыВсепрограммы(заисключениемперечисляющей все классы), которые мы досих пор рассматривали, были линейными:утверждения в них выполнялись в том порядкев котором они записаны в программе. Толькоочень простые программы могут бытьреализованы в таком виде.Алгоритмы с ветвлениямиГораздо чаще встречаются алгоритмы, вкоторых порядок вычисления зависит отвыполнениятогоилииногоусловия(логического выражения).Запомните: только false и nil трактуются какложныевлогическомконтексте.Всёостальное,чтовычисляется,являетсяистинным.Условный операторif логическое_выражение thenтело_оператораelsif логическое_выражение thenтело_оператора...elseтело_оператораendЛогические операторы в условномвыраженииRubyподдерживаетвсестандартныелогические операторы:and (и)or (или)! (отрицание)Операторы and и or имеют одинаковыйприоритет!== (операция сравнения на равенство)!= (операция сравнения на неравенство)Условный оператор (пример)a, b, c = 5, 7, 4if a>=b and a>=c thenputs aelsif b>=a and b>=c thenputs belseputs cendУсловный операторКонструкции elsif и else могут отсутствовать,например,a=4if a == 3 thenputs 'a равно 3'endУсловный операторЕсли тело условного оператора без блока elseсостоит из одного оператора, то удобноиспользовать модифицированный оператор if:a=4puts 'a равно 3' if a == 3Тернарный операторОператор, содержащий три части, выглядиттак:логическое_выражение ? выражение1 : выражение2a=5a > 5 ? a+=a : a*=aputs aВыбор из нескольких альтернативПри выборе из большего числа альтернативудобнееиспользовать операторcase.Стоящее после ключевого слова caseвыражение последовательно сравнивается свыражениями, стоящими после слов when дотех пор пока не совпадет с одним из них, послечего выполняется соответствующий фрагменткода.Выбор из нескольких альтернативcase выражениеwhen тест1 then...when тест2 then...when тестN then...else...endВыбор из нескольких альтернативi = gets.to_icase iwhen 0 ..
9puts "число однозначное"when 10 .. 99puts "число двузначное"when 100 .. 999puts "число трехзначное"elseputs "число огромное"endВ программе использован оператор.. (двоеточие),который возвращает диапазон целых чисел,заключенных между левым и правымоперандами (включая их самих). Оператор… (троеточие)возвращаетдиапазонцелыхчисел,заключенных между левым и правымоперандами не включая правый операнд.Выбор из нескольких альтернативПосле обработки соответствующегоблокакода управление передается на первый оператор вне оператораcase (в отличии оттаких языков как C, C++, Java).n=0case nwhen 0puts n; n+=1when 1puts n; n+=1when 2puts n; n+=1endЦиклы и итераторыДля задания повторяющихся действий вбольшинствеязыковпрограммированияиспользуются операторы цикла.В Rubyимеется два таких оператора: while и until, атакже большое количество итераторов (от анг.iterate - повторять).Оператор цикла whileОператор while выполняет операторы,составляющее его тело, ноль или более раз,до тех пор, пока истинно его условие,задаваемоенекоторымлогическимвыражением.while выражение do...тело цикла...endПример# Печать чисел от одного до 5 включительноi=1while i <= 5puts ii += 1endОператор цикла untilНегативнаяформаоператорациклазадается оператором until, тело котороговыполняется ноль или более раз до тех пор,пока его условие ложно.until выражение do...тело цикла...endПример# Печать чисел от одного до 5 включительноi=1until i > 5puts ii += 1endПравила записи циклаКак в цикле while, так и в цикле until ключевоеслово do может быть опущено, но при этом телоцикла должно начинаться с новой строки, как этобыло сделано в предыдущих примерах.
Сиспользованием слова do можно все тело цикларазместить на одной строке.# Вычисление суммы четных чисел в# диапазоне от 0 до 100:i, s = 0, 0while i < 101 do s += i; i += 2 endputs sБесконечные циклыПри работе с циклами программист обязанследитьзаизменениемоднойилинесколькимипеременнымицикла–величинами, фигурирующими в логическомусловии. Если «забыть» об изменении ихзначений, то цикл никогда не завершится –программа «зациклится».Бесконечные циклыi=0s=0while i < 101s = s+iendputs sВ одном из предыдущих примеров условиезавершение зависит отпеременной i.
Будет личто-нибудь напечатано врезультатеработыпрограммы, если программист «забыл» об изменении этой переменной?Прерывание работы программыВсе программы, которые Вам предстоитреализовывать, должны завершать своюработу практически мгновенно. Если этого непроизошло, то скорее всего у Вас проблемы сзавершением цикла. Прервите выполнениепрограммы нажатием комбинации клавишCtrl+D и добавьте вспомогательную печать втело цикла, которая поможет Вам найтиошибку.ПримерПрограмма печатает текущее время черезкаждые 5 секунд:while truet = Time.nowputs "#{t.hour} ч.
#{t.min} м. #{t.sec} с."sleep(5) # ждем 5 секундendИтераторыПомимо рассмотренных операторов цикла вRuby имеется большое число итераторов,также предназначенных для выполненияциклических действий. При их использованиинет необходимости «вручную» следить заизменением переменных цикла.Итератор each(набор_данных).each do |переменная|действияendИтератор each удобен при работе снаборами величин.
Это могут быть диапазоны,создаваемые операторами .. или ..., но чащевсего его используют при работе с массивами(разговор о них пойдет чуть позже).переменная на каждом проходе циклапринимает новое значение из набора_данных,пока не примет все значения.(1..10).each do |i|puts iends=0(1...100).each do |i|s += iendputs sИтератор forRuby позволяет записать итератор each вдругой,болееудобнойформесиспользованием ключевого слова for.for переменная in набор_данных doдействияendfor i in 1..10 doputs iends=0for i in 1...100 dos += iendputs sДосрочное прекращениевыполнения циклаПрекратитьвыполнение цикладосрочно можнопри помощиконструкции break.i, count = 0, 0while trueif i%3 == 0 and i%4 == 0puts icount += 1endbreakifcount==5Решим задачу:i+=1выписать первые 5endчисел кратных 3 и 4одновременно.ЗадачаВычислимсуммуцифр целого числа,введенного с клавиатуры.Напомним, что результат деления целого числа на целоетакже является целым числом, например, 1234/10 = 123.puts "Введите число"num = gets.to_isum = 0while num > 0sum += num%10num /= 10endputs sum.
Характеристики
Тип файла PDF
PDF-формат наиболее широко используется для просмотра любого типа файлов на любом устройстве. В него можно сохранить документ, таблицы, презентацию, текст, чертежи, вычисления, графики и всё остальное, что можно показать на экране любого устройства. Именно его лучше всего использовать для печати.
Например, если Вам нужно распечатать чертёж из автокада, Вы сохраните чертёж на флешку, но будет ли автокад в пункте печати? А если будет, то нужная версия с нужными библиотеками? Именно для этого и нужен формат PDF - в нём точно будет показано верно вне зависимости от того, в какой программе создали PDF-файл и есть ли нужная программа для его просмотра.