Программирование в Delphi: основы языка, типы данных

Программирование в Delphi: основы языка, типы данных

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

Запустим среду разработки. Выберем в меню File -> New -> Console Application. Откроется редактор кода.

Сразу стираем весь код, мы с вами его отработаем с нуля.

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

Однако, отложим этот вопрос, и начнём с изучения синтаксиса программы.

Основы кода – зарезервированные слова (т. н. директивы), которые указывают компилятору, какая часть кода является объявлением переменной, какая – объявлением функции, и так далее. Вот директивы, которые нам поначалу понадобятся: program, uses, type, var, begin, end, procedure, function, for, to, downto, do, while, repeat, until, if, then, else.

Начнём с простого. Напишем в нашем коде: program SimpleProgram;

Данный кусок кода отвечает за название нашей программы. Ключевое слово program показывает, что следующай текст будет заголовком программы. После названия обязательно должна стоять точка с запятой «;». На следующей строчке напишите:

{$APPTYPE CONSOLE}

Данная строчка отвечает за появление окна консоли. Такая конструкция называется директивой компилятора, о них мы поговорим позже. Сейчас её напишите, не вдаваясь в то, зачем она. Теперь нужно написать главный блок программы. Блоки обычно начинаются ключевым словом begin и заканчиваются end. После end должна стоять «;» или «.». Если end находится в конце кода, то после неё должна стоять точка. Дополним наш код этой конструкцией: begin end.

Место между нашими блоками как раз и предназначено для кода. Окончательный вид нашей программы должен получиться такой: program SimpleProgram;

{$APPTYPE CONSOLE} begin end.

Hello, world!

Так уж вышло, что первая программа, которую пишет программист, должна выводить на экран фразу «Hello, world!». Мы не будем исключением. В этом нам помогут процедуры Read, ReadLn, Write, WriteLn.

Процедуры Write и WriteLn выводят данные на экран. Процедуры Read и ReadLn наоборот, считывают данные. При этом, пользоваться процедурой Read мы не будем, поскольку она менее надёжная, чем ReadLn, а разницы особой с первого взгляда даже нет. Разница между Write и WriteLn лишь в том, что вторая процедура после вывода переносит курсор на следующую строчку. Write этого не делает.

Как же использовать процедуры? Мы пишем название процедуры, после чего открываем скобку «(«, пишем параметры через запятую, в конце пишем «)». Заметьте, что после каждой операции необходимо ставить точку с запятой. Вот так выглядит вывод фразы:

WriteLn('Hello, world!');

Стоит отметить, что символы и строки пишутся через одинарные кавычки! Теперь необходимо дать возможность пользователю прочитать данные. Консоль после работы программы закрывается, из-за чего пользователь не успевает прочитать то, что она выводит, поэтому мы воспользуемся процедурой ReadLn. Мы не будем передавать ей никаких параметров, чтобы она просто среагировала на нажатие Enter:

ReadLn;

Теперь вставим этот код в нашу программу (в блок begin..end!): program SimpleProgram;

{$APPTYPE CONSOLE} begin

WriteLn('Hello, world!');

ReadLn; end.

А вот и результат работы программы:

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

Работа с переменными, операции

Перед блоком begin можно включить блок var, который отвечает за объявление переменных. Думаю, из школьной математики и так ясно, что такое переменная. Переменные бывают разных типов, о которых мы поговорим позже. Сейчас я покажу простой механизм объявления переменных: var i, j: Integer; c: Char;

После блока var не нужно ставить конструкцию begin..end. Блок var можно объявить в любом месте кода (разумеется, вне begin..end исполняемого кода и кода подрограмм, о которых – позже). Что мы сделали с помощью кода выше? Мы объявили две переменные, именуемые «i» и «j» типа Integer (целочисленный тип) и одну переменную «c» типа Char (символьный тип).

Какие же операции поддерживает компилятор? Среди них, разумеется, есть сложение (+), вычитание (-), умножение (*) и деление (/), деление нацело (div) и остаток от деления (mod). Также можно использовать скобки, как в алгебре. Также есть операция равенства (=) и присвоения (:=), а также логические операции (or, and, not, xor и т. д.).

Для того, чтобы присвоить значение переменной, необходимо использовать знак присвоения, например: i:=5; j:=-5; i:=i*j;

После каждой операции мы также ставим точку с запятой. Выводить переменные на экран и вводить их мы можем при помощи тех же процедур Write, WriteLn и ReadLn: i:=5;

WriteLn('Number i = ',i);

Write('Enter integer value: ');

ReadLn(j);

Весь код будет выглядеть примерно так: program SimpleProgram;

{$APPTYPE CONSOLE} var i, j: Integer; begin i:=5;

WriteLn('Number i = ',i);

Write('Enter integer value: ');

ReadLn(j);

ReadLn; end.

Если с этим проблем не возникло, то переходим дальше.

Типы данных

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

Порядковые типы

• • • Логические типы • • •

Тип данных Значения Объём памяти

Boolean false (ложь), true (истина) 1 байт

WordBool false (ложь), true (истина) 2 байта

LongBool false (ложь), true (истина) 4 байта

Особенность этого типа в том, что он хранит в себе лишь 2 значения: истина или ложь. С помощью этой переменной можно задавать паметры объектов, создавать условия (если истина, то делать A, иначе делать B) и так далее. Мы будем использовать только тип Boolean, 2 других нам не понадобятся.

• • • Целочисленные типы • • •

Тип данных Значения Объём памяти

Byte 0..255 1 байт

ShortInt -128..127 1 байт

Word 0..65535 2 байта

SmallInt -32768..32767 2 байта

Cardinal 0..4294967296 4 байта

LongWord 0..4294967296 4 байта

Integer -2147483648..2147483647 4 байта

LongInt -2147483648..2147483647 4 байта

Int64 -9223372036854775808..9223372036854775807 8 байт

Целочисленные типы – типы, поддерживающие числа, не имеющих дробной части. Самые распространённые типы – Integer и Cardinal. Разница в том, что Integer может принимать отрицательные значения, а Cardinal отлично подходит для ситуаций, когда отрицательные числа не используются.

• • • Символьные типы • • •

Тип данных Значения Объём памяти

AnsiChar #0..#255 1 байт

Char #0..#65535 2 байта

WideChar #0..#65535 2 байта

Символьные типы – типы, хранящие в себе лишь 1 единственный символ. Символ можно присваивать, введя значение символа (‘K’) или его код (#80). Тип AnsiChar имеет меньший диапазон символов, зато меньше занимает места в памяти. Мы с вами будем использовать в основном тип Char.

• • • Тип диапазон • • •

Данный тип включает в себя лишь те значения, которые мы указали при объявлении диапазона. Вес такой переменной также зависит от диапазона. Например, нам надо объявить переменную с диапазоном от 20 до 100. Делается это так: var d1: 20..100;

Также диапазон можно объявить на все порядковые: var d1: 'A'..'Z'; d2: 'd'..'f'; d3: 1..10;

• • • Перечислимый тип • • •

С помощью данного типа мы можем наглядно в коде вместо привычных цифр использовать определённый набор констант, которые помогают лучше воспринимать код. Пример такого типа – Boolean: он может принимать в себя значения True и False. Также можно самому объявить переменную этого типа (лучше всего это делать через конструкцию type, о которой мы поговорим позже): program SimpleProgram;

{$APPTYPE CONSOLE} var r: (t1, t2, t3); begin r:=t1;

ReadLn; end.

Вещественные типы

Тип данных Значения Объём памяти

Single 1.18*10^(-38)..3.4*10^38 4 байта

Real 5*10^(-324)..1.7*10^308 6 байт

Double 2.23*10^(-308)..1.79*10^308 8 байт

Extended 3.37*10(-4932)..1.18*10^4932 10 байт

Типы с плавающей запятой используются редко и нужно только в дейтвительно исключительных случаях. Используйте их, если это без этого нельзя обойтись.

Массивы

Как и во многих языках, в Delphi есть массивы. Массив – это набор однотипных элементов, идущих друг за другом. Доступ осуществляется по индексу, который указывается в квадратных скобках «[5]«. Массив объявляется таким образом: var

<название переменной>: array [<порядковый тип>] of <тип массива>;

Пример работы с массивом: program SimpleProgram;

{$APPTYPE CONSOLE} var

A: array [1..3] of Integer; begin

A[1]:=5;

A[2]:=2*A[1];

A[3]:=A[2]-A[1]+10;

WriteLn(A[1],' ',A[2],' ',A[3]);

ReadLn; end.

Более подробно мы разберём массивы позже.

Строки

Строка – частный случай массивов. По факту, строка – это последовательность символов (array of Char). Объявляется строка при помощи переменной String: var s: String;

Мы также можем ограничить длину строки, поставив в квадратных скобках число символов: var s1: String[20];

Строки также можно выводить и вводить при помощи ReadLn, Write и WriteLn. Также можно обратиться к определённому символу строки, например, «s[1]«, и мы получим значение символа. Если обратиться к нулевому символу, то мы получим длину строки. Пример работы со строкой: program SimpleProgram;

{$APPTYPE CONSOLE} var s: String; begin

Write('Enter string: ');

ReadLn(s); s:=s+'A'; s:=s+'qwerty'; s[2]:='q';

WriteLn(s);

ReadLn; end.

Разумеется, всё это совершенно не нужно моментально запомнить. Из всей информации, что я предоставил, достаточно запомнить информацию о символах, строках, массивах, а также типы Boolean, Integer, Cardinal, Single и Double.

Функции для работы с данными

Ord(<порядковая переменная>): SmallInt – возвращает порядковый номер порядковой переменной.

Chr(Byte): AnsiChar – возвращает символ по его номеру.

UpCase(AnsiChar): AnsiChar – возвращает символ в верхнем регистре.

SizeOf(<переменная>): SmallInt – возвращает размер переменной в байтах.

Abs(<число>): <число> – возвращает модуль числа.

Sqr(<число>): <число> – возвращает квадрат числа.

Random(Word): Word – возвращает случайное число. Перед использованием данной функции рекомендуется выполнять процедуру Randomize.

Sqrt(<число>): Real – возвращает корень квадратный числа.

Odd(<целочисленная переменная>): Boolean – возвращает true, если число нечётное, и false, если число чётное.

Frac(<число>): SmallInt – целая часть числа.

Trunc(<число>): Real – дробная часть числа.

Delete(<строка>,<позиция>,<число символов>) – Удаляет из строки символы, начиная с указанной позиции.

Insert(<вставляемая строка>,<строка>,<позиция>) – вставляет в строку часть строки.

Copy(<строка>,<позиция>,<число символов>): String – возвращает подстроку (часть строки).

Length(<строка>): SmallInt – возвращает длину строки.


Карта сайта


Информационный сайт Webavtocat.ru