Алгоритмы с ветвлением, Циклы (Презентации)
Описание файла
Файл "Алгоритмы с ветвлением, Циклы" внутри архива находится в папке "Презентации". PDF-файл из архива "Презентации", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве МПУ. Не смотря на прямую связь этого архива с МПУ, его также можно найти и в других разделах. Архив можно найти в разделе "лекции и семинары", в предмете "информатика" в общих файлах.
Просмотр PDF-файла онлайн
Текст из PDF
ПрограммированиеАлгоритмы с ветвлениемЦиклыЛинейные алгоритмыВсепрограммы(заисключениемперечисляющей все классы), которые мы досих пор рассматривали, были линейными:утверждения в них выполнялись в том порядкев котором они записаны в программе. Толькоочень простые программы могут бытьреализованы в таком виде.Алгоритмы с ветвлениямиГораздо чаще встречаются алгоритмы, вкоторых порядок вычисления зависит отвыполнениятогоилииногоусловия(логического выражения).Запомните: только 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.