- •1. Приступаем к изучению языка delphi
- •I love Delhi
- •20 Degrees Celsius is 68 degrees Fahrenheit.
- •4.2 Light are 265608 astronomical units
- •2. Представление данных переменными
- •Integer is 4 bytes
- •Integer is 2147483647
- •Integer is -2147483648
- •3. Составные типы данных
- •Volume: Integer;
- •Volume: 1.40
- •Var a: array of integer;
- •4. Циклы и выражения сравнения
- •1952 Hudson Hornet
- •1951 Kaiser
- •5. Операторы ветвления и логические операции
- •If проверяемое_условие then
- •3 Spaces, 13 charaters total in sentence
- •If проверяемое_условие then
- •27 Is right!
- •6 Entries or enter a negative value.
- •4 Numbers in massive greater then your number
- •2 Spaces
3. Составные типы данных
Краткий обзор массивов
Массив — это тип данных, который может включать несколько значений одного типа. Например, массив может содержать 60 значений типа Integer — данные о продажах игр за пять лет, либо 12 значений типа ShortInt, каждое из которых представляет собой количество дней в определенном месяце, или 365 значений Real, которые отражают ежедневные расходы на продукты питания в течение года. Каждое значение представлено отдельным элементом массива, а компьютер сохраняет все элементы массива в памяти последовательно.
Для создания массива используется оператор объявления. Объявление массива должно содержать три аргумента:
имя массива
количество элементов в массиве
тип каждого элемента
Например, объявление
var months: array[1..12] of Integer; // создает массив из 12 элементов типа Integer
создает массив с именем months, который содержит 12 элементов. Каждый из них может хранить значение типа Integer. Каждый элемент, в сущности, является переменной, и его можно обрабатывать как обычную переменную.
Общая форма записи для объявления массива выглядит так:
var <имя массива>: array [<размерность массива>] of <тип элементов>;
Многие полезные свойства массива базируются на возможности обращаться к элементам массива по отдельности. Для этого нужно использовать индекс, который позволяет перечислять элементы. Для указания элемента массива используется запись индекса в квадратных скобках. Например, months[1] — первый элемент массива months, a months[12] — последний. Таким образом, объявление массива дает возможность создать несколько переменных одним объявлением, после чего можно использовать индекс, чтобы идентифицировать отдельные элементы и обращаться к ним.
Программа 3_1
// небольшие массивы целых чисел
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
yams: array[1..3] of Integer; //создается массив из трех элементов
yamcosts: array[1..3] of Integer = (20, 30, 5); //создание и инициализация массива
total: Integer;
begin
total := 0;
yams[1] := 7; //присвоение значения первому элементу
yams[2] := 8;
yams[3] := 6;
Writeln('Total yams = ', yams[1] + yams[2] + yams[3]);
Write('The package with ', yams[2], ' yams costs ');
Writeln(yamcosts[2], ' center per yam.');
total := total + yams[1] * yamcosts[1] + yams[2] * yamcosts[2];
total := total + yams[3] * yamcosts[3];
Writeln('The total yam expense is ', total, ' cents.');
Writeln;
Writeln('Size of yams array = ', SizeOf(yams), ' bytes.');
Writeln('Size of one element = ', SizeOf(yams[1]), ' bytes.');
Readln;
end.
Результат:
Total yams = 21
The package with 8 yams costs 30 center per yam.
The total yam expense is 410 cents.
Size of yams array = 12 bytes.
Size of one element = 4 bytes.
Сначала программа создает трехэлементный массив с именем yams. Поскольку yams имеет три элемента, они пронумерованы от 1 до 3, и программа использует значения индекса в диапазоне 1-3, чтобы присвоить значения трем отдельным элементам. Каждый отдельный элемент yams имеет тип Integer со всеми возможностями и преимуществами этого типа данных. Таким образом, в программе можно присваивать значения элементам, а также складывать их, умножать и отображать.
Для присвоения значений элементам yams в программе используется длинный путь. Однако возможен и более компактный способ сделать это — путем инициализации элементов в рамках оператора объявления. Этот более короткий путь проиллюстрирован при присвоении значений массиву yamcosts:
yamcosts: array[1..3] of Integer = (20, 30, 5);
Для того чтобы проинициализировать элементы массива в одном операторе, достаточно ввести разделенный запятыми список начальных значений, заключенный в скобки. Пробелы в списке необязательны. Если массив, определенный внутри функции, не будет проинициализирован, значения элементов останутся неопределенными. Это означает, что элемент принимает любое значение, которое ранее находилось в той же ячейке памяти.
После инициализации программа использует значения массива при выполнении нескольких вычислений. Эта часть программы выглядит загроможденной — слишком много индексов и скобок. Далее будет рассмотрен цикл for — его применение обеспечивает возможность эффективной работы с массивами и устраняет необходимость указывать каждый индекс явно. Однако пока что мы будем использовать массивы небольшого размера.
Как уже упоминалось, оператор sizeof возвращает размер типа или объекта данных в байтах. Заметим, что если оператор sizeof используется с именем массива, то выводится общее количество байтов массива. Если же sizeof используется с элементом массива, возвращается размер элемента в байтах (еще одно свидетельство того, что yams — массив, a yams[1] — обычное значение типа Integer).
Для любого массива определены следующие функции:
Length |
Число элементов массива |
High |
Наибольшее значение индекса |
Low |
Наименьшее значение индекса |
Впрочем, для рассматриваемых массивов использовать эти функции вряд ли имеет смысл, поскольку все эти значения известны из объявления массива.
Они используются для открытых и динамических массивов.
Для числовых массивов определены функции (добавить uses Math)
Функция |
Тип аргумента |
Тип результата |
Описание |
MaxIntValue |
array of integer |
integer |
Возвращает максимальное значение элемента массива целых чисел. |
MinlntValue |
array of integer |
integer |
Возвращает минимальное значение элемента массива целых чисел. |
MaxValue |
array of double |
double |
Возвращает максимальное значение элемента числового массива. |
MinValue |
array of double |
double |
Возвращает минимальное значение элемента числового массива. |
Sum |
array of double |
extended |
Возвращает сумму элементов массива. |
Константы - массивы
Синтаксис объявления константы-массива следующий:
const
ИмяМассива: array[Диапазон] of ТипДанных = (значение_1, значение_2, значение_n);
В ряде случаев применение констант-массивов позволяет радикально уменьшить объем кода.
const
MONTH: array[1..6] of string = ('Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь');
Строки
Строка – это ряд символов, хранящихся в последовательно расположенных байтах памяти. Доступ к отдельному символу некоторой строки S дается выражением вида S[i], где i — индекс символа в строке. Но это только для однобайтных символов. Тип данных для строк – String.
Краткий обзор структур (записей)
Предположим, что нужно сохранить информацию об игроке в баскетбол. Сюда входят следующие данные: имя, заработок, рост, вес, средний рейтинг, процент попаданий и т.д. Хотелось бы иметь некоторую форму данных, которая может содержать всю эту информацию в одном блоке. Массив для этого не годится, поскольку все его элементы должны быть одного типа. Иначе говоря, один массив может содержать двадцать элементов типа Integer, а другой — десять элементов типа Real, но один и тот же массив не может содержать элементы типа Integer и Real.
Решение состоит в применении структуры. Структура — более универсальная форма данных, чем массив, поскольку может содержать элементы, относящиеся к различным типам данных. Использование структуры позволяет унифицировать представление данных путем сохранения всей связанной с баскетболистом информации в единственной переменной структуры, а для ведения данных по целой команде можно использовать массив структур. Тип структуры также служит мостиком к классу, который является основой ООП (объектно - ориентированного программирования). Изучение структур позволит нам гораздо глубже понять, что представляет собой класс.
Структура (запись) — определяемый пользователем тип данных. Объявление структуры (записи) служит для того, чтобы задавать свойства типов данных. После определения типа можно создавать переменные этого вновь созданного типа. Таким образом, создание структуры предусматривает два этапа. Сначала создается описание структуры. При этом описываются и именуются различные типы данных, которые могут содержаться в структуре. Затем можно создавать структурные переменные или, более обобщенно, структурные объекты данных, которые соответствуют схеме описания.
Предположим, компания Bloataire хочет создать некий тип для описания видов надувных изделий. В частности, этот тип должен содержать название изделия, его объем в кубических футах и цену. Ниже приведено описание структуры, удовлетворяющей перечисленным условиям:
type
TInflatable = record
name: String;
