Pascal вывести целое число

Pascal вывести целое число

Получение знаний по работе с числами всех типов, преобразование чисел в другие типы данных, закрепление материала на практике.

Целые числа

В Lazarus (а точнее, в Free Pascal ), как и в любом другом языке программирования, числа играют довольно важную роль. Трудно представить себе программу, в которой не использовались бы числа. Даже когда вы просто установите какой-то компонент на форму, автоматически начинают действовать множество настроек. Left , Top , Height , Width — все эти свойства есть в любом визуальном компоненте, и они содержат числа. Числа бывают целые и вещественные, знаковые и беззнаковые.

В этом разделе поговорим о целых числах, как знаковых, так и беззнаковых. Что такое целое число? Это число без запятой, то есть, без десятичной части. Знаковым называют число со знаком: -1, например. Беззнаковое число — это число от нуля и больше.

В программировании базовым целым числом является integer , который мы уже не раз использовали. Но вы, вероятно, догадались, что это не единственный возможный целый тип? Есть разные типы целых чисел, они могут быть со знаком и без него, имеют разный диапазон возможных значений и, соответственно, занимают разный размер оперативной памяти. Разберем эти типы:

Таблица 8.1. Целые числа
Тип Диапазон Размер в байтах
Byte 0…255 1
ShortInt -128…127 1
Word 0…65 535 2
Smallint -32 768…32 767 2
LongWord 0…4 294 967 295 4
Cardinal 0…4 294 967 295 4
LongInt -2 147 483 648…2 147 483 647 4
Integer -2 147 483 648…2 147 483 647 4
Int64 8
Читайте также:  Чем вывести желтые пятна от долгого хранения

Обратите внимание, здесь диапазон и размер Integer совпадает с LongInt . Вообще-то, это зависит от режима компилятора FPC. Проект можно скомпилировать в разных режимах, с поддержкой Delphi, например, или TP (Turbo Pascal ). По умолчанию, выставлен режим Object Pascal, это можно проверить, выполнив в среде Lazarus команду меню Проект -> Параметры проекта, затем в разделе Параметры компилятора выбрать Обработка. В верхней части там указан Режим синтаксиса, по умолчанию это Object Pascal, но при необходимости его можно и поменять.

Так вот, если там выставлен режим Object Pascal или Delphi, тогда Integer имеет размер 32 бита, или 4 байта. Если же выставлен старый режим Turbo Pascal или Free Pascal, то Integer будет иметь размер в 16 бит или 2 байта, и будет соответствовать типу Smallint .

Зачем нужно такое разнообразие целых типов? В былые времена оперативная память была довольно маленькой. Если сейчас у меня на ПК установлена оперативная память 4 Гб, то когда-то давно я был вынужден обходиться компьютером с процессором 486 и оперативкой аж в 16 мегабайт , и можете поверить, это был далеко не самый худший компьютер ! В те времена программисты сражались за каждый байт памяти, переписывая и минимизируя код, выбирая самые маленькие из возможных типы данных. Это называлось оптимизацией кода. Допустим, вам нужно выполнить какой-то цикл 10 раз. Для подсчета шагов цикла вам придется создать переменную целого типа. Но зачем использовать переменную Integer в 4 байта, когда вполне можно обойтись однобайтовым Byte ? Сейчас конечно, это не играет такой большой роли, как прежде, но всё равно, оптимизация кода — это признак хорошего программиста, это хороший тон в программировании. Так что старайтесь не тратить понапрасну лишнюю память .

Читайте также:  Не могу вывести прусаков

Рекомендации тут следующие: если вы знаете, что число будет без знака, то и выбирайте беззнаковые типы. Если вы точно знаете, что максимальное число в переменной будет маленьким, выбирайте типы поменьше. Если вам неизвестно, какого размера число попадет в переменную, то выбирайте Integer — это универсальный тип, годный для большинства случаев. Ну а если вы уверены, что число будет очень большим, то используйте 4-х или даже 8-ми байтовые типы.

Вещественные числа

Вещественными называются числа с дробной частью, причем, если дробная часть равна нулю, её все равно нужно указать. Например:

Такие числа еще называют числами с плавающей точкой, поскольку количество цифр после точки может быть различным. Записываются вещественные числа по определенным правилам. Если в математике мы дробную часть отделяем запятой, в Lazarus для этого используют точку. При указании очень большого числа можно выбрать сокращенную форму. Если в математике для этого число умножают на десятичную степень, например,

то в Lazarus вместо 10 указывают букву E (от англ. exponent — показатель степени):

Степени могут быть и отрицательными:

Вещественных типов тоже много. В характеристике вещественных чисел роль играет не только размер, занимаемый в памяти, но и количество значащих цифр:

Таблица 8.2. Вещественные числа
Тип Диапазон Количество значащих цифр Размер в байтах
Single 1.5E-45…3.4E38 7-8 4
Real 5.0E-324…1.7E308 15-16 8
Double 5.0E-324…1.7E308 15-16 8
Comp -2E64+1…2E63-1 19-20 8
Currency -922 337 203 685 477.5808 … 922 337 203 685 477.5807 19-20 8
Extended 1.9E-4932…1.1E4932 19-20 10

Как видите, вещественные числа куда больше целых, процессорного времени на обработку таких чисел тратится тоже больше. Поэтому вещественные числа имеет смысл применять только по необходимости, когда целыми числами явно не обойтись. Не слушайте тех, кто предлагает на все случаи жизни использовать тип Real — и для целых, и для вещественных чисел.

Рекомендации тут такие же, как и для целых чисел — выбирайте типы по необходимости. Особо выделю тип Currency — его создали специально для финансовых расчетов, поэтому для всякого рода бухгалтерских расчетов лучше выбирать именно этот тип, как наиболее точный. Но чаще всего обходятся типом Real (или Double ).

Операции над целыми и вещественными числами

Целые числа можно складывать (+), отнимать (-) и умножать (*) друг на друга. С делением дело обстоит сложней. Допустим, нам нужно 10 разделить на 3. Получится 3,33333…, а это уже не целое число . Поэтому для целых чисел в Паскале предусмотрено деление нацело. Операция div обеспечивает деление нацело, и возвращает целую часть, отбрасывая дробную. Например, 10 разделить на 8 будет равно 1,25. Если применить целочисленное деление , то 10 div 8 = 1 . Чтобы узнать остаток от такого деления, применяют операцию mod. 10 mod 8 = 2 .

Арифметика над вещественными числами еще проще, здесь применяют следующие стандартные операции : + ( сложение ), — ( вычитание ), * ( умножение ), / ( деление ).

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

Очень часто приходится использовать большие и сложные выражения, где вместе с арифметическими используются и логические операторы . Здесь главное — не забывать о приоритетах. Возьмем выражение

Что попадет в переменную r ? Если вы ответили 11, то вы правы. Чтобы сначала выполнить сложение , его нужно поместить в скобки, которые имеют высший приоритет:

В этом случае, в переменную r попадет число 14.

Таблица 8.3. Приоритеты
Порядок Операции
1 ( ) — То, что в круглых скобках, вычисляется в первую очередь
2 NOT
3 *, /, DIV, MOD, AND
4 +, -, OR, XOR
5 =, <>, >, =,

Преобразования типов

Нередко возникают ситуации, когда нужно преобразовать один тип данных в другой. Например, целое число в вещественное или в строку, и обратно.

Целое число можно сразу же присвоить вещественному — преобразование произойдет автоматически. Например,

Если есть желание, вы можете поступить так же, как в прошлых лекциях: создать новый проект с одной кнопкой, сгенерировать для кнопки событие нажатия, и все примеры пробовать в этом событии. Раздел переменных и начало события begin указаны, не забудьте в конце события оставить end ;

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

Математическая функция Round() округляет вещественное число до ближайшего целого:

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

Для обратного преобразования используют функцию StrToInt() , программист должен следить, чтобы в эту функцию попадало действительно целое число в виде строки. Пример:

Если строку требуется преобразовать в вещественное число , используют функцию StrToFloat() :

Обратите внимание — здесь в строковую переменную мы внесли вещественное число в виде строки. При этом десятичную часть мы разделили не точкой, а запятой: «3,14». Так положено вносить числа в операционной системе, если установлена русская версия Windows . В английской версии разделителем является точка. Данная настройка зависит от глобальной переменной DecimalSeparator . Переменную объявлять не нужно — она уже объявлена, и содержит символ системного разделителя дробной части.

Для преобразования вещественного числа в строку можно использовать две функции. Проще всего воспользоваться функцией FloatToStr() :

Если мы попытаемся ввести в вещественную переменную r число, используя в качестве разделителя запятую, то произойдет ошибка. Числа нужно разделять точкой, а числа в виде строки — запятой (в русской Windows ).

Но лучше всего для преобразования числа в строку использовать функцию FormatFloat() . Эта функция не только преобразует вещественное число в строку, но и выводит его в нужном формате. Желаемый формат задается маской — строкой со специальными символами. Синтаксис функции:

Формат — это строка с маской, Значение — исходное вещественное число . Функция возвращает в качестве результата указанное вещественное число в виде строки, отформатированной согласно маске.

Таблица 8.4. Символы формата
Символ Описание
0 В данную позицию записывается цифра. Если в исходном числе в данной позиции была цифра — записывается она. Иначе будет записан ‘0’.
# В данную позицию записывается цифра. Если в исходном числе в данной позиции была цифра — записывается она. Иначе в данную позицию ничего не записывается.
. Данный символ, встречающийся в маске первый раз, определяет расположение десятичного разделителя. Любой последующий символ ‘.’ игнорируется. Символ, который будет использован в качестве десятичного разделителя в результирующей строке, хранится в глобальной переменной DecimalSeparator .
, Если маска содержит данный символ, то в отформатированной строке, между каждой группой из трех цифр слева от десятичной точки, будут вставлены разделители тысяч. Положение и количество символов ‘,’ в маске на результат не влияет. Символ, который будет использован в качестве разделителя тысяч, определяется глобальной переменной ThousandSeparator .
E+ Экспоненциальный формат. Если любая из строк: ‘E+’, ‘E-‘, ‘e+’, ‘e-‘, содержится в строке формата, то результирующее значение будет представлено в экспоненциальном виде. За одной из этих строк могут следовать символы ‘0’, определяющие минимальное число цифр в экспоненте.
; Отделяет в маске варианты форматирования для положительного, отрицательного и нулевого значения.

Для денежных расчетов можно применить маску ‘#.00’ — это гарантирует две цифры после запятой. Если цифр нет, будут выведены нули, например

Практика

Теперь, когда вы знаете про цифры почти всё, самое время закрепить материал на практике. Мы напишем программу, которая будет определять нормальный ли у нас вес , избыточный, или наоборот, недостаточный.

Общее признание получил так называемый индекс массы тела (ИМТ). Его расчет таков: разделите свой вес в килограммах на рост в метрах в квадрате. Пример: ИМТ = 68 кг / (1,72 м * 1,72 м) = 23 . Эта формула хороша тем, что работает и для «малышей», и для «гулливеров», и для женщин, и для мужчин. Нормой считается ИМТ от 19 до 25. ИМТ меньше 19 — дефицит веса, 25-30 — избыточный вес , 30-40 — ожирение, более 40 — сильное ожирение.

Загрузите Lazarus с новым проектом. Если он у вас уже загружен — закройте проект и создайте новый. Сохраните проект в папку 08-01 под именем IMT, модуль главной формы назовите Main, а свойство Name формы переименуйте в fMain . Сделаем предварительные настройки формы. В свойстве Caption напишите:

В свойстве BorderStyle установите bsDialog , а в Position — poDesktopCenter .

От пользователя нам нужно получить вес и рост, причем рост должен быть вещественным числом, а вес — целым. Например, вес 68, рост 172,34. Чтобы гарантировать правильность ввода, используем компонент TMaskEdit с вкладки Additional Палитры компонентов. Нам понадобятся два таких компонента, две метки TLabel и одна кнопка для вывода результатов. Оформите форму похожим образом:

Измените свойство Name верхнего TMaskEdit на ME1 , нижнего — на ME2 . Имена остальных компонентов можно оставить по умолчанию. Нам еще понадобится изменить свойства EditMask обоих компонентов. Для ME1 установите EditMask :

Это нам гарантирует правильный ввод пользователем своего роста. Однако не забывайте, что на самом деле, пользователь будет вводить не число, а строку! К примеру, он введет «1,82» — это не вещественное число , как можно было бы подумать, а строка из цифровых символов. И нам ещё придётся преобразовать её в настоящее число. Для ME2 маска будет

Учитывая, что вес может быть и трехзначным целым числом.

Теперь нам осталось только сделать расчет. Правда, пока мы не будем делать проверку — ввел ли вообще пользователь в ME1 и ME2 что-нибудь? Оставим это на совести пользователя. О том, как делать «защиту от дураков», мы ещё поговорим в одной из следующих лекций.

Сгенерируйте событие нажатия на кнопку, и оформите его следующим образом:

Источник

Оцените статью