- •1.1 Оформление программы
- •1.2 Переменные и константы
- •1.2.1 Типы
- •1.2.2 Записи (структуры)
- •V: real; // 2-я переменная, скорость
- •Var // Служебное слово для обозначения
- •1.2.3 Массивы
- •Implementation // Определяет внешнюю видимость этого
- •I: integer; // объявление локальной внутри процедуры
- •Int s[10]; // Определение массива с
- •1.2.4 Локальные и глобальные переменные
- •I:integer; // переменных, в том числе «I»
- •Void __fastcall tForm1::Button1Click(tObject *Sender)
- •Int I; // объявление локальной внутри процедуры
- •1.3 Указатели
- •I:integer;
- •Inc(k,2); // перемещение указателя вперед на 2 длины
- •1.4 Команды
- •1.5 Пользовательские процедуры и функции
- •Void __fastcall tForm1::Button1Click(tObject *Sender)
- •Int n1,n2; // объявление локальных переменных
- •1.6 Объекты программы
- •Void __fastcall tForm1::Button1Click(tObject *Sender)
- •1.7 Пример программы пользователя
- •1.7.1 Постановка задачи
- •1.7.2 Подготовка формы
- •1.7.3 Алгоритм программы
- •1.7.4 Последовательность разработки программы
- •1.7.5 Программа в Delphi
- •Interface // Определяет внешнюю видимость этого модуля
- •Implementation
- •2Перемещение объектов по форме
- •2.1 Общие сведения
- •2.1.1 Изменение положения объектов на форме
- •2.1.1.1Подготовка формы
- •2.1.1.2Блок-схема программы
- •2.1.1.3Листинг программы в среде Delphi:
- •Interface
- •Implementation
- •Void __fastcall tForm1::Button1Click(tObject *Sender)
- •Void __fastcall tForm1::Timer1Timer(tObject *Sender)
- •2.1.2 Расчет положения объекта на форме по физическим координатам моделируемого объекта
- •2.1.3 Расчет координат связанных объектов
- •2.2 Дифференциальные уравнения
- •2.2.1 Дифференциальные уравнения движения
- •2.2.2 Методика решения дифференциальных уравнений движения
- •2.2.3 Алгоритмы управления движущимся объектом
- •Xmax, Ymax, Dx, Dy: real;
1.2.2 Записи (структуры)
Для удобства восприятия многочисленных переменных их можно логически группировать в некую структуру с единым именем. Чаще всего группируются переменные, относящиеся к одному конкретному объекту, действию или событию. Например, для математического описания движения объекта «тележка мостового крана» необходимы следующие переменные:
- положение тележки относительно крана;
- скорость тележки;
- ускорение тележки.
Так как все переменные предназначены для хранения данных в виде десятичных дробей, например «1.25», (для повышения точности – целый тип в этом случае неприменим!), то тип переменных должен быть «real» или «double». Организация записи на языке Pascal в этом случае будет выглядеть следующим образом:
type // Служебное слово для обозначения
// пользовательского типа
TTelegka = record // Имя пользовательского типа TTelegka
// Служебное слово, обозначающее
// начало записи.
s: real; // 1-я переменная, позиция
V: real; // 2-я переменная, скорость
a: real; // 3-я переменная, ускорение
end; // конец записи
Var // Служебное слово для обозначения
// списка пользовательских переменных
Telegka: TTelegka; // Переменная Telegka типа TTelegka
На языке C++:
typedef // Служебное слово для обозначения
// пользовательского типа
struct // Служебное слово, обозначающее
// начало структуры.
{
double s; // 1-я переменная, позиция
double v; // 2-я переменная, скорость
double a; // 3-я переменная, ускорение
} TTelegka; // Имя пользовательского типа TTelegka
TTelegka Telegka; // Определение переменной Telegka типа
// TTelegka
В приведенных выше примерах имя типа похоже на имя определяемой переменной за исключением буквы «T» в начале (от первой буквы служебного слова «Type»). Строго говоря, это требование не обязательное, так как имя типа и имя переменной могут совершенно не совпадать. Но для облегчения восприятия программы, когда это возможно, следует пользоваться данным правилом.
В самой программе доступ к той или иной переменной в записи (структуре) осуществляется следующим образом.
На языке Pascal:
Telegka.s := 0; // Имя записи и переменной в этой записи
Telegka.s := Telegka.s + Telegka.v * 0.01;
На языке C++:
Telegka.s = 0; // Имя записи и переменной в этой записи
Telegka.s = Telegka.s + Telegka.v * 0.01;
1.2.3 Массивы
Иногда для решения поставленной задачи необходимо обработать последовательность переменных одного и того же типа (массивы). Например, для моделирования передвижения нескольких объектов по конвейеру удобно эти объекты объединить в последовательность. Или же для обработки статистических данных, поступающих с какого-нибудь датчика, эти данные удобно расположить последовательно друг за другом. Позиция данных в этой последовательности будет определять время их считывания.
Типы данных, которые могут быть помещены в массивы, различны. Это могут быть и стандартные типы (таблица 1.1), и определенные пользователем, в том числе и записи (структуры).
Пример определения массивов на языке Pascal:
S: array [1..10] of integer; // Определение массива с
// именем S, состоящего из
// 10 элементов целого типа
// с индексами с 1 по 10
MTelegka: array [1..20] of TTelegka; // Определение массива с
// именем MTelegka, состоящего из
// 10 элементов типа TTelegka
// с индексами с 1 по 10
На языке C++:
