Управляющая конструкция if




Целые числа

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

-12

В прошлой лекции мы упомянули лишь тип Integer, как основной тип целых чисел. Действительно, этот тип приходится использовать чаще всего, однако существуют и другие типы целых чисел. В таблице 3.1 представлены целые типы:

Таблица 3.1. Целые типы данных
Тип Диапазон возможных значений Размер памяти под переменную Примечание
Integer -2147483648 .. 2147483647 4 байта Знаковое
Cardinal 0 .. 4294967295 4 байта Без знака
Shortint -128 .. 127 1 байт Знаковое
Smallint -32768 .. 32767 2 байта Знаковое
Longint -2147483648 .. 2147483647 4 байта Знаковое
Int64 -263 .. 263 - 1 8 байт Знаковое
Byte 0 .. 255 1 байт Без знака
Word 0 .. 65535 2 байта Без знака
Longword 0 .. 4294967295 4 байта Без знака

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

Чаще всего вам придется работать с переменными типа Integer, это самый распространенный тип целых чисел, он годится почти для всех расчетов. Однако бывают моменты, когда не нужно такого большого диапазона значений. Например, вы будете использовать переменную для счетчика какого-то цикла, и знаете, что он будет длиться, к примеру, от 1 до 100. В таком случае, указав в качестве счетчика тип Integer, мы зря украдем у оперативной памяти 3 байта! 3 байта – это немного, но ведь в большой программе переменных будет очень много, и если все они будут тратить память попусту, то такая программа будет, мягко говоря, непрофессиональной. Приучайтесь сразу тратить столько байт оперативной памяти, сколько нужно. Не зря ведь придумали столько типов! Если Вы знаете, что в переменной будут числа от нуля и выше, то нет никакой необходимости брать знаковый тип, ведь отрицательным Ваше число все равно не будет!

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

Как мы уже говорили раньше, вещественные числаэто числа с запятой, после которой идут десятичные значения. Еще говорят, что они имеют плавающую точку (запомните это определение, оно будет часто встречаться). Некоторые начинающие программисты считают, что лучше такой тип переменных использовать всегда, даже при обработке целых чисел. Это большое заблуждение! Операции над числами с плавающей точкой отнимают у процессора гораздо больше времени, и требуют больше памяти. Компьютер воспринимает вещественное число, как два целых, и делает двойную работу при обработке чисел до запятой, и после нее. Однако иной раз бывает необходимо использовать именно такой тип данных. К примеру, если нужно поделить одно целое на другое. Хорошо, если это будет "4/2", результат тоже будет целым – 2. А если "4/3"? Тогда результатом будет 1,3333… и уж тут без вещественного числа не обойтись! А ведь мы заранее не знаем, какие числа будет делить пользователь, поэтому лучше сразу иметь в виду, что результат может быть не целым числом.

Как и целые, вещественные числа имеют несколько типов. В таблице 3.2 они представлены:

Таблица 3.2. Вещественные типы данных
Тип Диапазон возможных значений Значащих цифр максимально Размер в байтах
Real48 2.9 * 10-39 .. 1.7 * 1038 11-12
Real 5.0 * 10-324 .. 1.7 * 10308 15-16
Single 1.5 * 10-45 .. 3.4 * 1038 7-8
Double 5.0 * 10-324 .. 1.7 * 10308 15-16
Extended 3.6 * 10-4951 .. 1.1 * 104932 19-20
Comp -263+1 .. 263-1 19-20
Currency -922337203685477.5808 .. 922337203685477.5807 19-20

Третий столбец таблицы указывает количество максимально значащих цифр. Цифры, которые выходят за этот предел, будут игнорироваться. Тут важно помнить, что вещественные числа не равны целым. То есть, число 3,0 не будет равно 3! Чтобы сравнить оба эти числа, придется округлить вещественное число.

Изучим целые и вещественные типы на практике. Для этого создадим простую программу, которая делит одно целое число на другое. Результат будет выводиться, как вещественное число.

Строковые типы данных

Мы уже работали со строковым типом данных String. Однако, как и в случае с цифрами, бывает несколько строковых типов. Строка состоит из набора символов. Компьютер работает в двоичной системе исчисления, он работает только с цифрами. И символы компьютер воспринимает в виде цифр. Для этого в операционной системе существует таблица символов, где каждому символу соответствует какая либо цифра.

Самая первая таблица символов, созданная для операционной системы MS-DOS, называлась ASCII. Эти символы были 7-ми битными, как следствие, таблица содержала максимум 128 символов. Поскольку в одном байте содержится 8 бит, один бит терялся впустую. У этой таблицы были свои языковые расширения, то есть, для каждого языка делалась своя такая таблица.

Для операционной системы Windows была разработана таблица символов ANSI, которая используется по сей день. Эта таблица использует 8-ми битные символы, то есть, содержит 256 символов, от 0 до 255. В Delphi такая таблица используется, как основная. Большее количество символов позволило вставить в таблицу не только основные символы, но и цифры, знаки препинания, специальные символы. Мы будем работать, в основном, с этой таблицей.

Для того, чтобы удовлетворить потребности пользователей других языков, была создана таблица UNICODE. Эта таблица использует 16 бит, и в нее помещается от 0 до 65 535 символов. Эта таблица, начиная с Windows 2000, используется все более широко, и когда-нибудь станет стандартом, но пока что она встречается гораздо реже, чем ANSI.

Имеются следующие строковые типы данных:

ShortStringкороткая строка из ANSI символов. Количество символов может быть от 0 до 255. Иными словами, строку длиной более 255 символов в ShortString записать нельзя.

LongStringдлинная строка из ANSI символов. Длина строки здесь почти не ограничена, в одну переменную такого типа можно записать текстовый файл с романом "Война и мир". Этот тип используется по умолчанию, то есть, когда мы указываем тип String, подразумевается именно этот тип данных. С ним нам чаще всего и придется работать.

WideStringдлинная строка из UNICODE символов. От LongString отличается только тем, что использует иную таблицу символов.

Существует еще один тип строк – PChar. Этот тип работает с процессором совершенно иначе, чем предыдущие типы строк. Он очень неудобен в использовании и остался для совместимости с программами старых версий. Кроме того, встроенные в Windows функции работают именно с таким типом данных, поэтому его все же придется использовать. Когда мы начнем работать с этими функциями, разберем этот тип подробней.

Символьные типы данных

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

AnsiCharсимвол ANSI таблицы. Используется по умолчанию, то есть, когда мы указываем тип Char, подразумеваем именно этот тип.

WideCharсимвол UNICODE таблицы. Разница между ними такая же, как и у строк этих типов.

Как и в случае со строками, программист обычно объявляет тип Char, что соответствует типу AnsiChar.

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

Логический тип данных используется в условных выражениях. Он необходим для создания логики программы. Условное выражение проверяет – соответствует ли действительность заданному условию? Если соответствует, то выражение возвращает результат True (Истина). Если не соответствует, то возвращается False (Ложь). Таким образом, логический тип данных может иметь только одно из двух этих значений.

Booleanлогический тип данных.

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

Таблица 4.1. Логические операнды
Логическая операция Описание Логическая операция Описание
= Равно >= Больше или равно
> Больше <= Меньше или равно
< Меньше <> Не равно
== Точное равно    

Предположим, у нас есть два числа, и нужно проверить их на равенство. Эти числа хранятся в переменных целого типа a и b. Тогда выражение сравнения будет выглядеть так:

a = b;

Если в обоих переменных хранится одно и то же значение, то результатом такого сравнения будет True, иначе – False.

Begin .. end

В языке программирования Delphi, как и в других языках, существуют программные скобки, показывающие начало и конец какого-либо блока кода. Эти скобки имеют вид

Begin //блок кодаend;

Обратите внимание, что после слова Begin точка с запятой не ставится. Эти программные скобки обязательны для каждой процедуры или функции, даже если они содержат только одну команду. Однако эти же скобки часто применяются в управляющих конструкциях или циклах. Циклы, как и управляющие конструкции, работают только с одним оператором (командой). А что, если в этом месте требуется использовать более одного оператора? Тут на помощь приходят эти самые программные скобки. Весь блок кода, сколько бы команд там не было, заключенный между Begin и End воспринимается, как один оператор. Мы не раз будем использовать эти скобки.

Управляющая конструкция if

В предыдущих примерах нам уже приходилось применять эту конструкцию на практике, теперь пришло время познакомиться с ней поближе. Управляющая конструкция if является основной конструкцией, на которой строится логика программы. Простейший синтаксис этой конструкции выглядит так:

if условие then оператор;

Кто знаком с английским языком, уже ухватил суть этой конструкции. На русский язык это выражение можно перевести так:

если условие то оператор;

Другими словами, если какое-то заданное условие верно, то выполняется указанный оператор. Иначе этот оператор не выполняется.

Часто одного оператора бывает недостаточно, тогда используют программные скобки:

if условие then begin Оператор 1; Оператор 2; ... Оператор n;end;

Операторы, заключенные в программные скобки begin .. end воспринимаются, как единый оператор. Иногда и этого бывает недостаточно. Что, если по логике программы требуется выполнить один оператор, если условие верно, и другой, если оно неверно? Тут приходит на помощь расширенная конструкция:

if условие then оператор 1else оператор2;

Как видно из синтаксиса, если указанное условие истинно, то выполнится оператор 1. Иначе выполнится оператор 2. Еще одно правило, которое следует запомнить: перед словом else точка с запятой не ставится!

Конечно же, с помощью программных скобок можно расширить и эту конструкцию:

if условие then begin Оператор 1; … Оператор n;end else begin Оператор 1; … Оператор n;end;

Сейчас самое время упомянуть о классических стилях программирования. Мы уже говорили, что хороший стиль программирования подразумевает каждый отдельный оператор писать на своей строке, применять отступы. В литературе по программированию часто встречается два классических стиля. Один стиль выглядит так:

if условие then begin Оператор 1; … Оператор n;end;

То есть, слово begin пишется на отдельной строке. Другой стиль выглядит иначе:

if условие then begin Оператор 1; … Оператор n;end;

Оба эти стиля являются классическими, какой из них применять – дело вкуса. На этой лекции будет использоваться второй стиль.

Однако и это еще не все. В предыдущем примере мы рассматривали только одно условие. Если оно верно, то выполнялся один оператор, а если нет – другой. А что, если по логике программы требуется проверить более, чем одно условие? И снова мы можем расширить эту конструкцию. Взгляните на синтаксис:

if условие 1 then оператор 1else if условие 2 then оператор 2else оператор 3;

Здесь, если условие 1 будет верно, конструкция выполняет оператор 1 и завершает работу. Если это условие неверно, проверяется условие 2. Если условие 2 верно, то выполняется оператор 2, и конструкция завершает работу. Если же оба условия неверны, выполняется оператор 3. Расширений else if в такую конструкцию можно вставлять сколько угодно.

Давайте теперь проанализируем часть кода из примера прошлой лекции.

If Perem2 = 0 then begin Soobshenie; Edit3.Text := '0'; end else begin Perem3 := Delenie(Perem1, Perem2); Edit3.Text := FloatToStr(Perem3); end;

Вам уже должно быть понятно, что если Perem2 действительно равна 0, то выполнится первый блок кода. Иначе будет выполнен второй блок кода.

Цикл for

Еще один мощный инструмент в Delphi – циклы. Эти циклы выполняют оператор или блок операторов заданное количество раз. Синтаксис цикла for следующий:

for счетчик := нач_значение to кон_значение do оператор;

В расширенном варианте синтаксис такой:

for счетчик := нач_значение to кон_значение do begin

оператор 1;

оператор 2;

оператор n;

end;

Здесь:

  • счетчик – переменная любого целого типа;
  • нач_значение – начальное значение счетчика;
  • кон_значение – конечное значение счетчика.

В качестве счетчиков используют обычно целые переменные. Чтобы не тратить попусту оперативную память, счетчикам назначают тип Byte или Word, в зависимости от того, какое значение может оказаться у конечного значения.

В самом начале счетчик будет равен начальному значению. Когда выполнятся все указанные операторы блока, управление вновь вернется к началу цикла. Счетчик увеличится на единицу, и цикл будет выполнен снова. И так далее, до тех пор, пока счетчик не станет равным конечному значению.

 

 





©2015-2017 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.

Обратная связь

ТОП 5 активных страниц!