Какие из предложенных переменных имеют тип real
Перейти к содержимому

Какие из предложенных переменных имеют тип 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’)

#4 Real Вещественный тип данных в Паскаль. Неявное приведение типа. Примеры

vedro-compota's picture

Тип Real служит для описания и хранения данных, являющихся вещественными числами.

Переменные типа Real

Переменные типа real могут быть объявлены стандартным способом (подобно integer):

Таким переменным можно присваивать литералы вещественных чисел:

А также результаты любых арифметических выражений:

Сравнение с Real с Integer

Выражения, возвращающие Integer

Если значение арифметического выражения присваивается переменной типа integer, то в него должны входить только:

  • целочисленные литералы
  • или целочисленные переменные.
  • Над указанными операндами должны выполняться операции (только эти — без операции деления):
    1. $+$ суммы (сложения)
    2. $-$ разности (вычитание)
    3. $*$ произведения (умножение)

Выражения, возвращающие Real

Если результат некоего арифметического выражения присваивается переменной типа real, то в это выражения могут входить любые операнды и целого и вещественного типа и над ними могут выполняться все четыре операции:

  1. $+$ суммы (сложения)
  2. $-$ разности (вычитание)
  3. $*$ произведения (умножение)
  4. $/$ деление («отношение»)

Можно сказать что тип, который возвращается выражением (тип его результата) определяется двумя моментами:

  1. типом операций (допустимые перечислены выше)
  2. типом операндов

Неявное приведение (преобразование) типа

Неявное приведение типа — это процесс преобразования типа без каких-то особо записанных в коде инструкций, которые бы явно указывали на то, что выполняется преобразование.

Когда неявное приведение имеет место быть

Неявное приведение типа возможно в двух случаях:

  1. В ходе операции присваивания — когда переменной типа real присваивается любое значение типа integer.
    Например:
  2. В ходе вычисления значения арифметического выражения, если хотя бы один из операндов (или результатов подвыражения, оказавшимся операндом) имеет тип real.

О втором случае поговорим подробнее.

Если в арифметическом выражении присутствуют целые числа (переменные, литералы или результаты подвыражений типа integer) и эти числа участвуют в одной операции с типом real, то:

  1. сначала целые числа будут приведены Паскалем к типу real (так как real может хранить любые данные типа integer, а обратное не верно)
  2. а затем уже будет вычислен результат арифметической операции, который тоже будет иметь тип real

Пусть у нас есть выражение:

— этом случае вычисления будут проходить так («под капотом» языка Паскаль):

— знание этой особенности позволяет правильно определить тип переменной для хранения результата выражения.

Что к чему приводится неявно

Если в арифметических выражениях если неявное приведение типа имеет место быть, то это всегда приведения integer к real как к более широкому и универсальному классу чисел.

Рассмотрим разные выражения и прокомментируем когда происходит неявное приведение типа, а когда нет и почему:

Присваивание несовместных типов. Что и чему можно присваивать

В операции присваивания оба операнда, должны , то есть переменная слева от оператора присваивания должна обладать тем же типом, что и значение справа от оператора присваивания (справа при этом, как мы говорили выше, могут быть данные любого вида — литералы, переменные или целые выражения).

Рассмотрим примеры присваивания переменным значений с комментариями, показывающими в каких строках ошибка:

Вывод вещественных чисел на экран

Переменные, литералы и результаты выражений типа real можно выводить точно также как и целые числа (их переменные, литералы и выражения).

В некоторых реализациях Паскаля, при выводе на экран может использоваться экспоненциальная форма записи числа, то есть дробное число записывается (две особенности):

  1. в виде некоторого числа (обычно с одной цифрой в целой части), умноженного на $10$ в какой-то степени (вещественное число всегда подразумевается обладающим дробной частью, просто иногда она равна нулю, тогда число называют целым).
  2. вместо множителя $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) и результат выражения имел вещественный тип, а присваивать результат вещественного типа переменной целого типа нельзя (об этому говорилось в этом уроке выше и в предыдущем уроке), как как в этом случае неявное преобразование для присваивания не сработает (см. выше первый случай когда имеет место быть неявное преобразование типов).

Видео-пояснения

Для данного урока есть следующие видео:

Вопросы & Задачи

Теоретические вопросы:

  1. Что такое операнд? Приведите примеры операндов и операций.
  2. Для чего нужен тип real?
  3. Что такое неявное приведение типа и когда оно работает?
  4. Происходит ли приведение типа в выражениях (по каждому ответьте отдельно):

— поясните почему, также скажите какого типа будет результат каждого из этих выражений

Какие значения может принимать переменная типа 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).

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *