Какие существуют типы переменных (выбрать несколько выриантов):
float
str
num
int
bool
real
Вопрос 13
Что будет в результате выполнения следующего алгоритма:
Входные данные: -57
x = int(input())
if x > 0:
print(x)
else:
print(-x)
Введите число:________________
Вопрос 14
Что будет в результате выполнения следующего алгоритма программы:
Входные данные:
15
45
a = int(input())
b = int(input())
if a % 10 == 0 or b % 10 == 0:
print(‘YES’)
else:
print(‘NO’)
#4 Real Вещественный тип данных в Паскаль. Неявное приведение типа. Примеры
Тип Real служит для описания и хранения данных, являющихся вещественными числами.
Переменные типа Real
Переменные типа real могут быть объявлены стандартным способом (подобно integer):
Таким переменным можно присваивать литералы вещественных чисел:
А также результаты любых арифметических выражений:
Сравнение с Real с Integer
Выражения, возвращающие Integer
Если значение арифметического выражения присваивается переменной типа integer, то в него должны входить только:
- целочисленные литералы
- или целочисленные переменные.
- Над указанными операндами должны выполняться операции (только эти — без операции деления):
- $+$ суммы (сложения)
- $-$ разности (вычитание)
- $*$ произведения (умножение)
Выражения, возвращающие Real
Если результат некоего арифметического выражения присваивается переменной типа real, то в это выражения могут входить любые операнды и целого и вещественного типа и над ними могут выполняться все четыре операции:
- $+$ суммы (сложения)
- $-$ разности (вычитание)
- $*$ произведения (умножение)
- $/$ деление («отношение»)
Можно сказать что тип, который возвращается выражением (тип его результата) определяется двумя моментами:
- типом операций (допустимые перечислены выше)
- типом операндов
Неявное приведение (преобразование) типа
Неявное приведение типа — это процесс преобразования типа без каких-то особо записанных в коде инструкций, которые бы явно указывали на то, что выполняется преобразование.
Когда неявное приведение имеет место быть
Неявное приведение типа возможно в двух случаях:
- В ходе операции присваивания — когда переменной типа real присваивается любое значение типа integer.
Например: - В ходе вычисления значения арифметического выражения, если хотя бы один из операндов (или результатов подвыражения, оказавшимся операндом) имеет тип real.
О втором случае поговорим подробнее.
Если в арифметическом выражении присутствуют целые числа (переменные, литералы или результаты подвыражений типа integer) и эти числа участвуют в одной операции с типом real, то:
- сначала целые числа будут приведены Паскалем к типу real (так как real может хранить любые данные типа integer, а обратное не верно)
- а затем уже будет вычислен результат арифметической операции, который тоже будет иметь тип real
Пусть у нас есть выражение:
— этом случае вычисления будут проходить так («под капотом» языка Паскаль):
— знание этой особенности позволяет правильно определить тип переменной для хранения результата выражения.
Что к чему приводится неявно
Если в арифметических выражениях если неявное приведение типа имеет место быть, то это всегда приведения integer к real как к более широкому и универсальному классу чисел.
Рассмотрим разные выражения и прокомментируем когда происходит неявное приведение типа, а когда нет и почему:
Присваивание несовместных типов. Что и чему можно присваивать
В операции присваивания оба операнда, должны , то есть переменная слева от оператора присваивания должна обладать тем же типом, что и значение справа от оператора присваивания (справа при этом, как мы говорили выше, могут быть данные любого вида — литералы, переменные или целые выражения).
Рассмотрим примеры присваивания переменным значений с комментариями, показывающими в каких строках ошибка:
Вывод вещественных чисел на экран
Переменные, литералы и результаты выражений типа real можно выводить точно также как и целые числа (их переменные, литералы и выражения).
В некоторых реализациях Паскаля, при выводе на экран может использоваться экспоненциальная форма записи числа, то есть дробное число записывается (две особенности):
- в виде некоторого числа (обычно с одной цифрой в целой части), умноженного на $10$ в какой-то степени (вещественное число всегда подразумевается обладающим дробной частью, просто иногда она равна нулю, тогда число называют целым).
- вместо множителя $10$ используют букву $E$.
Примеры экспоненциальной записи чисел
- Так, например число $125.35$:
$$125.35 = 1.2535 * 100 = 1.2535 * 10^<2>$$
в экспоненциальной форме может выглядеть так: - А число, скажем, $0.005567$:
$$0.005567 = 5.567 / 1000 = 5.567 / 10^3 = 5.567 * 10^ <-3>$$
в экспоненциальной форме может быть записано как:
Разбор задач
Пример №1
Пусть есть задача:
Выведите на экран произведение чисел $5$ и $7.3$
Самое простое решение:
Хотя по хорошему выводить данные с пояснениями, например используя в качестве первого аргумента литерал:
Или пример с выводом произведения переменных:
— тут вторым аргументом процедуры writeln() оказывается арифметическое выражение.
Ну и наконец, если требуется дополнительно записать результат арифметического выражения в переменную и уже потом вывести её значение, то:
Пример №2
Пусть есть задача:
Присвойте трем переменных значения $34$, $36.7$ и $7.3$, в четвертую переменную запишите разность между произведением первой и второй переменной и суммой второй и третей и выведете её значение на экран.
Для переменной $d$ нам пришлось использовать тип real, так как выражении:
две переменные были вещественного типа, а значит переменная $a$ тоже была бы неявно приведена к вещественному типу (а её значение 34 к 34.0) и результат выражения имел вещественный тип, а присваивать результат вещественного типа переменной целого типа нельзя (об этому говорилось в этом уроке выше и в предыдущем уроке), как как в этом случае неявное преобразование для присваивания не сработает (см. выше первый случай когда имеет место быть неявное преобразование типов).
Видео-пояснения
Для данного урока есть следующие видео:
Вопросы & Задачи
Теоретические вопросы:
- Что такое операнд? Приведите примеры операндов и операций.
- Для чего нужен тип real?
- Что такое неявное приведение типа и когда оно работает?
- Происходит ли приведение типа в выражениях (по каждому ответьте отдельно):
— поясните почему, также скажите какого типа будет результат каждого из этих выражений
Какие значения может принимать переменная типа REAL?
Это вещественный тип данных, тоесть действительные числа, диапазон меняется в зависимости от языка, отличительная особенность этого числового типа это знаки после запятой, и даже если ввели целое число и запишется и отображаться оно будет с так называемой плавающей точкой, к примеру если ввели 5, то будет отображаться 5.
0, хотя исключительно для паскаля там отображается как целая часть умноженная на ‘e’ в степени, и да что не самое маловажное так это — над вещественными числами можно проводить такую операцию как деление, в школьных языках программирования делить на интегер к примеру нельзя потому как может образоваться нецелое число.
В переменную какого типа следует записать результат деления двух переменных типа integer?
В переменную какого типа следует записать результат деления двух переменных типа integer?
1 — integer 2 — longint 3 — Boolean 4 — real.
Какие значения может принимать целая переменная Y, если в программе записано Y : = 10 + random(5) ?
Какие значения может принимать целая переменная Y, если в программе записано Y : = 10 + random(5) ;
Выберите возможные типы переменной f для внесения в неё значения » 77 » Выберите один или несколько ответов : a?
Выберите возможные типы переменной f для внесения в неё значения » 77 » Выберите один или несколько ответов : a.
Даны две переменные целого типа : A и B?
Даны две переменные целого типа : A и B.
Если их значения не равны, то присвоить каждой переменной сумму этих значений, а если равны, то присвоить переменным нулевые значения.
Вывести новые значения переменных A и B.
Задание на Borland Pascal Пусть в программе объявлены переменные : d : real Определите тип следующего выражения : d + 1?
Задание на Borland Pascal Пусть в программе объявлены переменные : d : real Определите тип следующего выражения : d + 1.
Переменная cos имеет тип real её значение 7?
Переменная cos имеет тип real её значение 7.
542E — 01 нужно её округлить до сотых , но не в виде writeln(cos : 4 : 2) (тоесть не при выводе ответа, а для промежуточных вычислений) а в виде cos : = ?
Написать инструкцию вывода значения переменной а(тип real) с тремя цифрами в дробной части?
Написать инструкцию вывода значения переменной а(тип real) с тремя цифрами в дробной части.
Помогите с таблицей?
Помогите с таблицей!
Тип переменной Русское название типа Диапазон значений Допустимые значения Integer real char.
1) Написать инструкцию , обеспечивающую во время работы программы ввод значения переменной raadius?
1) Написать инструкцию , обеспечивающую во время работы программы ввод значения переменной raadius.
2)Написать инструкцию вывода значения переменной a (тип real) с тремя цифрами в дробной части.
Ps : если есть возможность, то связать с паскалем, если нет, то с + + .
Заранее извиняюсь если выразился некорректно , практически не знаю языки программирования.
Какой тип переменных может принимать значения True и false : boolean , integer , byte, single?
Какой тип переменных может принимать значения True и false : boolean , integer , byte, single.
Вы перешли к вопросу Какие значения может принимать переменная типа REAL?. Он относится к категории Информатика, для 5 — 9 классов. Здесь размещен ответ по заданным параметрам. Если этот вариант ответа не полностью вас удовлетворяет, то с помощью автоматического умного поиска можно найти другие вопросы по этой же теме, в категории Информатика. В случае если ответы на похожие вопросы не раскрывают в полном объеме необходимую информацию, то воспользуйтесь кнопкой в верхней части сайта и сформулируйте свой вопрос иначе. Также на этой странице вы сможете ознакомиться с вариантами ответов пользователей.
Какие из предложенных переменных имеют тип real
Какие существуют типы переменных (выбрать несколько выриантов):
float
str
num
int
bool
real
Вопрос 13
Что будет в результате выполнения следующего алгоритма:
Входные данные: -57
x = int(input())
if x > 0:
print(x)
else:
print(-x)
Введите число:________________
Вопрос 14
Что будет в результате выполнения следующего алгоритма программы:
Входные данные:
15
45
a = int(input())
b = int(input())
if a % 10 == 0 or b % 10 == 0:
print(‘YES’)
else:
print(‘NO’)
1.Запишите, какие переменные к каким из типов integer, real, char, boolean могут быть отнесены. А:=’2′; b:=2; c:=true; d:=123458; e:=25.45678; f:=’25’;
g:=’pascfl’; h:=0.0000003; i:=’i’; j:=’false’;
2. Укажите номера правильных записей оператора вывода на Паскале.
1) write ln(‘а=’, а); 2) print(‘a=’, a); 3) println((a);
4) writeline(a); 5) WRITE(f); 6) writeln(f).
3. Из материалов ГИА.) Определите значение переменной a после исполнения алгоритма.
a:=4;
b:=8+2*a;
a:=b/2*a;
4. (Из материалов ГИА.) Определите значение переменной a после исполнения алгоритма.
5. (Из материалов ГИА.) Определите значение переменной a после исполнения алгоритма.
Unreal Features of Real Types, или Будьте осторожны с REAL
После публикации статьи об особенностях типизации в PostgreSQL, первый же комментарий был про сложности работы с вещественными числами. Я решил бегло пробежаться по коду доступных мне SQL-запросов, чтобы посмотреть, насколько часто в них используется тип REAL. Достаточно часто используется, как оказалось, и не всегда разработчики понимают опасности, стоящие за ним. И это несмотря на то, что в Интернете и на Хабре достаточно много хороших статей про особенности хранения вещественных чисел в машинной памяти и о работе с ними. Поэтому в этой статье я постараюсь применить такие особенности к PostgreSQL, и попробую «на пальцах» рассмотреть связанные с ними неприятности, чтобы разработчикам SQL-запросов было легче избежать их.
Документация PostgreSQL содержит лаконичную фразу: «Управление подобными ошибками и их распространение в процессе вычислений является предметом изучения целого раздела математики и компьютерной науки, и здесь не рассматривается» (при этом благоразумно отсылая читателя к стандарту IEEE 754). Что за ошибки здесь имеются в виду? Давайте обсудим их по-порядку, и скоро станет понятно, почему я снова взялся за перо.
Возьмем, к примеру, простой запрос:
В результате не увидим ничего особенного – получим ожидаемое 0.1. Но теперь сравним его с 0.1:
Не равны! Что за чудеса! Но дальше-больше. Кто-то скажет, мол, я знаю, что REAL плохо ведет себя с дробями, ну так я буду туда заносить целые числа, с ними-то точно все будет хорошо. Ок, давайте приведем число 123 456 789 к типу REAL:
А оно получилось больше на 3! Все, база окончательно разучилась считать! Или мы чего-то недопонимаем? Давайте разбираться.
Для начала вспомним матчасть. Как известно, любое десятичное число можно разложить по степеням десяти. Так, число 123.456 будет равно 1*10 2 + 2*10 1 + 3*10 0 + 4*10 -1 + 5*10 -2 + 6*10 -3 . Но компьютер оперирует числами в двоичном виде, следовательно представлять их приходится в виде разложения по степеням двойки. Поэтому число 5.625 в двоичном виде представляется как 101.101 и будет равно 1*2 2 + 0*2 1 + 1*2 0 + 1*2 -1 + 0*2 -2 + 1*2 -3 . И если положительные степени двойки всегда дают целые десятичные числа (1, 2, 4, 8, 16 и т.д.), то с отрицательными все сложнее (0.5, 0.25, 0.125, 0,0625 и т.д.). Проблема в том, что не всякую десятичную дробь можно представить в виде конечной двоичной дроби. Так, наше пресловутое 0.1 в виде двоичной дроби предстает как периодическое значение 0.0(0011). Следовательно, итоговое значение этого числа в машинной памяти будет меняться в зависимости от разрядности.
Теперь самое время вспомнить, как вещественные числа хранятся в памяти компьютера. Говоря в общих чертах, вещественное число состоит из трех основных частей – знака, мантиссы и экспоненты. Знак может быть либо плюс, либо минус, поэтому на него отводится один бит. А вот количество бит мантиссы и экспоненты определяется вещественным типом. Так, для типа REAL длина мантиссы составляет 23 бит (один бит, равный 1, неявно добавляется в начало мантиссы, и получается 24), а экспоненты – 8 бит. Итого получается 32 бит, или 4 байта. А для типа DOUBLE PRECISION длина мантиссы будет уже 52 бит, и экспоненты – 11 бит, в сумме составляющих 64 бит, или 8 байт. Большую точность PostgreSQL для чисел с плавающей точкой не поддерживает.
Давайте упакуем наше число 0.1 в десятичном виде в оба типа – REAL и DOUBLE PRECISION. Поскольку знак и значение экспоненты у нас совпадает, сосредоточимся на мантиссе (я сознательно упускаю неочевидные особенности хранения значений экспоненты и нулевых вещественных значений, поскольку они утяжеляют понимание и отвлекают от сути проблемы, если интересно – смотрите стандарт IEEE 754). Что мы получим? В верхней строчке я приведу «мантиссу» для типа REAL (с учетом округления последнего бита в 1 до ближайшего представимого числа, иначе получится 0.099999…), а в нижней – для типа DOUBLE PRECISION:
Очевидно, что это два совершенно разных числа! Поэтому при сравнении первое число будет дополнено нулями и, следовательно, будет больше второго (с учетом округления – помеченной жирным единички). Этим и объясняется неоднозначность из наших примеров. Во втором примере явно указанное число 0.1 приводится к типу DOUBLE PRECISION, после чего сравнивается с числом типа REAL. Оба приводятся к одному типу, и имеем ровно то, что видим выше. Видоизменим запрос, чтобы все встало на свои места:
И действительно, выполнив двойное приведение числа 0.1 к REAL и DOUBLE PRECISION получаем ответ на загадку:
Этим же объясняется и третий пример из указанных выше. Число 123 456 789 просто невозможно уместить в 24 бита мантиссы (23 явных + 1 подразумеваемый). Максимальное целое число, которое можно разместить в 24 бита, будет 2 24 -1 = 16 777 215. Поэтому наше число 123 456 789 округляется до ближайшего представимого 123 456 792. Сменив тип на DOUBLE PRECISION, мы уже не увидим такого сценария:
Вот и все. Оказывается, никаких чудес. Но все описанное – хороший повод призадуматься на предмет того, насколько вам действительно нужен тип REAL. Пожалуй, самый большой плюс его использования – быстрота вычислений с заведомо имеющейся потерей точности. Но будет ли это универсальным сценарием, оправдывающим столь частое использование этого типа? Не думаю.
Какие из предложенных переменных имеют тип real
В Паскале используется несколько типов представления числовых значений, на начальном этапе будут рассмотрены лишь некоторые из них:
integer – целые числа в интервале от -2147483648 до 2147483647
real – вещественные (реальные) – целые и дробные положительные и отрицательные числа
Описания констант в декларативной части производится перед переменными, и предусматривают определенную форму записи чисел (дополнительно тип константы не оговаривается): если константа записана с точкой, тип константы считается real. При записи значения константы используется знак равенства.
Пример описания констант:
c1=3.14159265; // с1 имеет тип real
с2=2; // c2 имеет тип integer
Переменная – это вид объектов в программе, предназначенный для хранения информации во время выполнения программы. По правилам Паскаля каждая переменная должна быть объявлена, т.е. описана в декларативной части программы.
Переменная не имеет какого-либо конкретного значения до тех пор, пока компьютеру не будет дано точное предписание, поместить что-либо определенное в соответствующую ячейку памяти.
На Паскале такого рода предписание обычно выражается предложением назначения, имеющим вид:
имя_переменной:=выражение_или_значение
например: a:=25; или rt:=a+b;
Выполнение такого предложения начинается вычислением выражения, стоящего справа от символа назначения (:=). Полученное значение потом помещается в переменную (присваивается ей), указанную слева от =:
Описание переменных следует за описанием констант. В описании переменных после двоеточия указывается тип переменной:
var a,d,c : integer;
В Паскале возможны следующие действия (группы операций записаны в порядке приоритета):
1) Операция возведения в степень (в стандартном Паскале отсутствует) – функция i:=power(x,y), где i — результат, x — основание, y — степень;
2) умножение ( * ), деление ( / ), деление целочисленное (div), получение остатка от целочисленного деления (mod);
3) сложение ( + ), вычитание ( — ).
В пределах одной группы приоритета порядок выполнения операций, если нет скобок, определяется последовательностью записи.
Если хотя бы одна из переменных, используемых в операциях умножения, сложения, вычитания относится к типу real, результат операции будет типа real.
Результат операции деления всегда типа real. Результат операций div и mod — integer.
Пример записи математической операции:
в программе на Паскале это будет выглядеть так:
Примечание. Квадрат числа sqr(c) можно (и проще!) записать как с*с
Обратите внимание на использование знака операции присваивания :=
При проведении математических операций следует учитывать, что вещественные числа (real) представляются с некоторым приближением.
Некоторые стандартные математические функции
При использовании стандартных функций необходимо контролировать тип аргумента (возможные типы указаны в скобках).
a:=random(x) – случайное число (если аргумент не указан, то результат real – число в интервале от 0 до 1, если x целое число от 0 до 65535, то результат случайное целое число в интервале от 0 до х-1;
a:=abs(x) – модуль (абсолютная величина) x (real или integer);
a:=int(x) – целая часть числа x (число real, результат integer), округление не проводится, дробная часть отсекается;
a:=frac(x) – дробная часть числа x (число и результат real),
a:=round(x) – целое число, полученное в результате округления числа x по правилам математики
a:=sqr(x) – квадрат числа x (real, integer);
a:=sqrt(x) – квадратный корень из числа x (real, x>0);
a:=sin(x) – синус x (x задается в радианах, real);
a:=cos(x) – косинус x (x задается в радианах, real);
a:=arctan(x) – арктангенс x (real);
а:=power(x,y) – степень числа
Наберите следующую программу и разберитесь в ее работе:
Вычислить сумму цифр трехзначного числа a, введенного с клавиатуры. В программе каждая цифра определяется как количество сотен, десятков и единиц с помощью арифметических операций.
var a, s, d, e, o : integer;
writeln(‘Сумма цифр трехзначного числа’);
write(‘Введите целое трехзначное число ‘);
writeln(‘Сумма цифр трехзначного числа=’, s+d+e);
writeln(‘Сумма цифр трехзначного числа=’, s+d+e);
Выполните задания с Begin9° по Begin30° по электронному задачнику (стр.11). Открыть его можно в режиме Помощь – Электронный задачник РТ.
Задачи для самостоятельного решения
1. Составить программу, чтобы компьютер по закону Ома для участка цепи, запрашивая с клавиатуры значения напряжения на концах участка и его сопротивления, определял и выводил на экран значение силы тока (I=U/R).