Решить леонардо фибоначчи: "сколько пар кроликов можно получить от одной пары кроликов в год, если каждая пара ежемесячно дает еще одну пару приплода, каждая новая пара становится к размножению в возрасте одного месяца и в течение года кролики не умирают." использовать два алгоритма: 1) с рекурсией 2) без рекурсии
пользователь вводит: n=количество месяцев
вывести на экран для каждого шага:
номер месяца, количество пар кроликов, приближенное значение, значение fn+1/fn, приближенное значение номера числа фибоначчи
сравнить с асимптотикой при больших n.
найти все n, для которых а) fn=n б) fn=n2 в) fn - простое
найти нод для двух чисел фибоначчи с номерами m и n и показать, что нод (fn, fm) = нод (n,m)
В примере выше логическим выражением является n < 100. Если оно возвращает истину, то выполнится строчка кода b = n + a. Если логическое выражение ложно, то выражение b = n + a не выполнится.
Данный пример вырван из контекста и сам по-себе не является рабочим. Полная версия программы могла бы выглядеть так:
b = 0
a = 50
n = 98
if n < 100:
b = n + a
print(b)
Последняя строчка кода print(b) уже не относится к условному оператору, что обозначено отсутствием перед ней отступа. Она не является вложенной в условный оператор, значит, не принадлежит ему.
Поскольку переменная n равна 98, а это меньше 100, то b станет равной 148-ми. Это значение будет выведено на экран. Если переменная n изначально была бы связана, например, со значением 101, то на экран был бы выведен 0. При n, равной 101, логическое выражение в заголовке условного оператора вернуло бы ложь. Значит, тело не было бы выполнено, и переменная b не изменилась бы.
Структуру программы можно изобразить следующим образом:
Основная ветка программы выполняется всегда, а вложенный код лишь тогда, когда в темно-зеленой строчке, обозначающей заголовок условного оператора, случается истина.
Для небольших программ иногда чертят так называемые блок-схемы, отражающие алгоритм выполнения. В языке блок-схем определенные конструкции обозначаются своими фигурами. Так блок действий обозначается прямоугольником, а логическое выражение – ромбом. Для кода выше блок-схема может выглядеть так:
Блок-схема оператора if
Условный оператор может включать не одну ветку, а две, реализуя тем самым полноценное ветвление.
Блок-схема конструкции if-else
В случае возврата логическим выражением False поток выполнения программы не возвращается сразу в основную ветку. На случай False существует другой вложенный код, отличный от случая True. Другими словами, встретившись с расширенной версией условного оператора, поток выполнения программы не вернется в основную ветку, не выполнив хоть какой-нибудь вложенный код.
В языках программирования разделение на две ветви достигается с добавления блока else, получается так называемое if–else (если-иначе). Синтаксис выглядит примерно так:
if логическое_выражение {
выражение 1;
выражение 2;
…
}
else {
выражение 3;
…
}
Если условие при инструкции if оказывается ложным, то выполняется блок кода при инструкции else. Ситуация, при которой бы выполнились обе ветви, невозможна. Либо код, принадлежащий if, либо код, принадлежащий еlse. Никак иначе. В заголовке else никогда не бывает логического выражения.
Пример кода с веткой else на языке программирования Python:
tovar1 = 50
tovar2 = 32
if tovar1 + tovar2 > 99 :
print("99 рублей недостаточно")
else:
print("Чек оплачен")
Следует иметь в виду, что логическое выражение при if может выглядеть "нестандартно", т. е. не так просто, как a > b и тому подобное. Там может стоять просто одна переменная, число, слово True или False, а также сложное логическое выражение, когда два простых соединяются через логически И или ИЛИ.
a = ?
if a:
a = 1
Если вместо знака вопроса будет стоять 0, то с логической точки зрения это False, значит выражение в if не будет выполнено. Если a будет связано с любым другим числом, то оно будет расцениваться как True, и тело условного оператора выполнится. Другой пример:
a = 5 > 0
if a:
print(a)
Здесь a уже связана с булевым значением. В данном случае это True. Отметим, что в выражении a = 5 > 0 присваивание выполняется после оператора сравнения, так что подвыражение 5 > 0 выполнится первым, после чего его результат будет присвоен переменной a. На будущее, если вы сомневаетесь в последовательности выполнения операторов, используйте скобки, например так: a = (5 > 0).
Третий пример:
if a > 0 and a < b:
print(b - a)
Тут, чтобы вложенный код выполнился, a должно быть больше нуля и одновременно меньше b. Также в Питоне, в отличие от других языков программирования, позволительна такая сокращенная запись сложного логического выражения:
if 0 < a < b:
print(b - a)
// Задание 2:
var x, y, z: real;
begin
Write('Введите x и y через пробел'); ReadLn(x, y);
if (x + y) > 0 then z := sin(2 * x)
else if (x + y) < 0 then z := 5 * x * y
else z := 0;
WriteLn('z(', x, ', ', y, ') = ', z:0:3);
end.
Объяснение:
Задание 1:
Один из самых популярных языков программирования высокого уровня - язык Паскаль (англ. Philips Automatic Sequence Calculator) был разработан швейцарским ученым Никлаусом Виртом в 1969 году как учебный язык, но спустя некоторое время приобрел популярность как отличный инструмент для решения серьезных задач. Программирование на Паскале обеспечивает высокую надежность программ. Программы на Паскале понятны любому программисту и в то же время они легко транслируются в эффективные машинные коды. Паскаль, наряду с Бейсиком, считается также учебным языком; он принят во многих учебных заведениях как базовый язык для изучения программирования. Так, в США с 1983 года Паскаль введен в учебные курсы всех средних школ для учащихся, специализирующихся в области информатики.
По мере своего развития язык Паскаль постоянно совершенствовался и приобретал новые свойства.
Структура простой программы на языке Паскаль включает в себя:
а) название программы, начинающееся с зарезервированного слова program и имени, состоящего из букв латинского алфавита и цифр. Турбо-Паскаль позволяет опускать объявление program, поэтому данная строка является необязательной. Однако использование слова program является признаком хорошего стиля программирования. Кстати, Среда программирования автоматически присваивает имя, идущее за словом program, файлу с исходным текстом (первые 8 символов);
б) определение меток, начинающееся с зарезервированного слова Label и перечисления через запятую используемых в программе меток, представляющих собой любые цифры от 1 до 9999 или символьные имена;
в) определение констант, начинающееся с зарезервированного слова Const и перечисления используемых в программе констант с присвоенными им именами, знаками = и их значениями и отделяемыми друг от друга точкой с запятой. Типизированные константы также объявляются после слова const, но имена через двоеточие связываются с типом, и лишь потом ставится знак равенства, и указываются значения. В связи с этим секция «const» может повторяться после секции type;
г) определение типов, начинающееся с зарезервированного слова Type и состоящее из перечисления через точку с запятой имен типов, вводимых пользователем, с пояснением через знак равенства (=), от каких базовых типов и как они происходят;
д) описание переменных, начинающееся с зарезервированного слова Var и перечисления используемых в программе переменных с указанием их типа. При этом имена переменных одного и того же типа, могут перечисляться через запятую, с указанием в конце записи после двоеточия их типа, а имена переменных разных типов описываются отдельно и отделяются друг от друга точкой с запятой. В языке Турбо-Паскаль все используемые в программе переменные должны быть объявлены. Это значит, что, во-первых, в начале каждой программы Вы должны привести список всех используемых переменных, а во-вторых, указать тип каждой из них;
е) описание процедур и функций, начинающихся с зарезервированного слова Procedure и имени процедуры или с зарезервированного слова Function и имени функции. В раздел описания каждой процедуры и функции могут входить все перечисленные выше разделы, а также раздел операторов, составляющий непосредственно сами процедуры и функции;
ж) раздел операторов, начинающийся с зарезервированного слова begin и кончающийся зарезервированным словом end и включающий в себя непосредственно весь процесс вычислений. Зарезервированные слова begin и end отмечают начало и конец программы. Они применяются также для того, чтобы объединить несколько операторов программы в составной оператор или “блок” (подробнее о составном операторе см. в теме № 2). После последнего слова end в программе ставится точка, указывающая на ее конец. При этом все, что набрано после слова end с точкой (end.), компилятором игнорируется.
Порядок разделов описаний может быть любым. Разделы друг от друга отделяются точкой с запятой. Раздел операторов является основным в программе. Все другие разделы, кроме раздела операторов могут отсутствовать. Операторы друг от друга отделяются точкой с запятой. В конце раздела операторов после ключевого слова end обязательно ставится точка, которая является признаком конца записи программы.
При записи программы на каждой строке можно писать либо по одному, либо по несколько операторов. Запись оператора можно начинать в любом месте строки. Ее можно продолжить на следующую строку, не разрывая имен констант, переменных, типов и символов. Кроме того, можно использовать пустые строки, чтобы отделить одну часть программы от другой.
Для записи исходных данных также можно использовать до 126 позиций строки. Числовые значения данных записываются на строке, отделяя одно от другого пробелами.