КУМИР. Вещественный и логический типы данных

ДЕТАЛИ
[+/-]

Виджеты

Виджеты<bs-widget-edit>

Требуемые страницы
Кто в сети?
Материал из Wiki Лицея
Перейти к: навигация, поиск

Вещественный и логический типы данных

Сегодня мы познакомимся с двумя типами данных. Но в начале урока разберем решение домашней задачи.

Задача.

На вход исполнителю подаются два целых числа n и т. Если m делится на n, или n делится на m, то требуется вывести 1, в противном случае - любое другое число.

Примеры.

входные данные выходные данные
2 8 1
0 0 100
5 0 1

Поясним полученные результаты. Если одно из чисел равно нулю (0), то ответом всегда будет 1, так как ноль делится на любое число. Если оба числа равны нулю, то ответ будет неопределенным, так как ноль на ноль не делится. Ну, а первый пример очевиден: 8 на 2 делится без остатка.

Один из способов решения данной задачи.

resh-nm.jpg
Разберем полученные результаты. Проанализируем тесты, представленные в этой задаче. Особенно интересными будут второй и третий тесты, где одна из переменных или обе равны нулю. Если одна из переменных равна нулю, то ответом может быть 1, так как ноль делится на любое число. Но если обе переменных равны нулю, то результат 0/0 будет неопределенным. Поэтому в решение задачи введены две новых переменных: n1 и m1. Посмотрим, чему будут равны их значения в каждом конкретном случае!

1 случай. n=2, m=8. m1= m + div(1,|m|+1) = 8 + 0 = 8, то есть m1=m! Аналогично n1=n.

2 случай. n=0, m=0. m1= m + div(1,|m|+1) = 0 + 1 = 1, то есть m1≠m! Но при делении n/m1 исполнитель не будет сообщать об ошибке выполнения (деление на ноль!). Аналогично n1=1. То есть n1≠n!

3 случай. n=5, m=0. m1= m + div(1,|m|+1) = 0 + 1 = 1, то есть m1≠m! n1=5+0. То есть n1=n!

Для того, чтобы выводилось требуемое число (при делимости чисел - 1, в противном случае - любое другое), формулу результата строим следующим образом:

rez:=1 + mod(n,m1)*mod(m,n1) + div(1,iabs(m)+iabs(n)+1)

В 1 случае: rez:=1 + 2*0 + 0 = 1

Во втором случае: rez:=1 + 0*0 + 1 = 2

В третьем случае: rez:=1 + 0*0 + 0 = 1

Стандартные функции, применяемые при решении данной задачи:

1. Функции вычисления модуля числа.

1.1. abs. Синтаксис: алг вещ abs(вещ x ) Абсолютная величина вещественного числа x (|x|).

1.2. iabs. Синтаксис: алг цел iabs(цел x ) Абсолютная величина целого числа x (|x|).

2. Функции целочисленного деления mod и div.

2.1. div - целая часть от деления. Значение не округляется, а дробная часть просто отбрасывается, в том числе и для отрицательных чисел.

Примеры:

  1. div(5,3) = 1
  2. div(-5,3) = -1
  3. div(5,-3) = -1
  4. div(-5,-3) = 1

2.2. mod - остаток от деления нацело: mod(a,b) = a - div(a,b)*b.

Примеры:

  1. mod(5, 3) = 2
  2. mod(-5, 3) = -2
  3. mod(5, -3) = 2
  4. mod(-5,-3) = -2

Вещественный тип данных

Данный тип данных применяется для работы с вещественными (действительными) числами. Служебное слово, обозначающее данный тип данных: вещ.

Примеры объявления:

вещ x

вещ x,y

некоторые стандартные функции КУМИРа, применяемые для обработки вещественных типов данных:

1. sqrt. Синтаксис: алг вещ sqrt(вещ x )

√𝑥 — квадратный корень из x (𝑥 ≥ 0).

2. sign. Синтаксис: алг цел sign(вещ x )

Знак числа x (-1, 0 или 1):

  • -1, если 𝑥 < 0
  • 0, если 𝑥 = 0
  • 1, если 𝑥 > 0

3. min. Синтаксис: алг вещ min(вещ x, вещ y)

Минимум из чисел x и y

4. max. Синтаксис: алг вещ max(вещ x, вещ y)

Максимум из чисел x и y.

5. int. Синтаксис: алг цел int(вещ x ) Целая часть x : максимальное целое число, не превосходящее x

6. rnd. Синтаксис: алг вещ rnd(вещ х) Случайное число от 0 до x : при последовательных вызовах этой функции получается последовательность случайных чисел, равномерно распределенных на [0,х].

7. МВЕЩ. Синтаксис: алг вещ МВЕЩ Самое большое вещественное число, которое можно использовать в языке КуМир. МВЕШ ≈ 1.797693×10308 (это немного меньше, чем 21024). Величина этого числа определяется способом представления чисел в современных компьютерах и примерно одинаковая в большинстве современных языков программирования.

8. МЦЕЛ. Синтаксис: алг цел МЦЕЛ Самое большое целое число, которое можно использовать в языке КуМир. МЦЕЛ =231 −1. Величина этого числа определяется способом представления чисел в современных компьютерах и примерно одинаковая в большинстве современных языков программирования.

Логический тип данных

Логическая переменная может принимать только два значения (да - истина, нет - ложь). Внутреннее представление этого типа данных в системе КУМИР: да=1, нет=0.

Логические значения получаются также при выполнении операций сравнения: = (равно); <> (не равно); < (меньше); > (больше); <= (меньше или равно); >= (больше или равно).

Объявление логического типа (пример): лог t.

Операции сравнения - частный случай логических выражений - выражений со значением да или нет. Помимо операций сравнения для построения логических выражений используются операции and, or, not.

Задания к уроку

1. Для стандартных функций обработки вещественных переменных (1-6) придумайте и реализуйте алгоритмы применения этих функций.

2. Решите задачи:

2.1. Напишите алгоритм, который будет считывать значения целых чисел a,b,c и распечатывать их в порядке возрастания. Значения чисел по модулю не превосходят 30000.

Решите задачу двумя способами:

а) не используя операторы присваивания и логическую операцию and.

б) используя операторы присваивания.

Примеры:

1. входные данные: 1 2 3 выходные данные: 1 2 3

2. входные данные: -1 -2 -3 выходные данные: -3 -2 -1

2.2. Поле шахматной доски определяется парой натуральных чисел, каждое из которых не превосходит 8. По введенным координатам двух полей (k,l) и (m,n) выясните, являются ли эти поля одного цвета?

На вход алгоритма подаются 4 целых числа k, l, m, n. Выведите да или нет в зависимости от ответа на вопрос задачи.

Примеры:

1. входные данные: 1 1 2 2 выходные данные: да

2. входные данные: 1 1 2 3 выходные данные: нет

2.3.* Разработать алгоритм определения нечетности числа. Если число четное, то функция (например, odd(x)) должна возвращать значение нет, иначе - да.