Сравнительный анализ методов определения индекса пожарной опасности по российской и канадской системам

Важность определения показателя пожарной опасности. Анализ российской и канадской систем определения индекса пожарной опасности по условиям погоды на территории Красноярского края. Разработка программного обеспечения на языке программирования Delphi.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 10.05.2011
Размер файла 1,2 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

4. Увлажнение слоя РГМ за счет подъема капиллярной влаги на сырых почвах;

5. Различия в увлажнении осадками в связи с их неравномерным выпадением на территории;

6. Влияние фенологического состояния растительности.

Создание моделей, учитывающих все факторы, вряд ли возможно. Однако существует возможность учета некоторых особенностей развития пожарной опасности в данном районе на основе анализа статистически-закономерных, повторяющихся или не изменяющихся в течение пожароопасного сезона особенностей. Отсюда логично вытекают местные шкалы пожарной опасности, основанные на долгосрочных эмпирических наблюдениях. В России местные шкалы стали использоваться уже с 1955 года [19]. В Канаде местные шкалы были составлены лишь в 1983 году путем анализа региональных данных за 1953-1980 гг. о величине индекса FWI и о горимости лесов. В тоже время предлагаемая в данной работе методика оценки пожарной опасности с помощью спутниковых средств оперирует исходными данными, характеризующими физические параметры непосредственно проводников горения. И часть ограничений, приведенных выше, может быть оценена для каждого конкретного пикселя спутникового изображения данной территории. Таким образом, в предлагаемой методике привязка к местным шкалам пожарной опасности начинается уже на стадии сбора и предварительной обработки исходных данных, что повышает достоверность конечного показателя пожарной опасности.

5. Эксперементальные результаты и обсуждение

5.1 Общая характеристика программы

Разработанная на базе языка Delphi 7 программа "Gerc" предназначена для расчета показателей пожарной опасности по Канадской системе, для проведения корреляционного анализа Российской и Канадской систем определения индекса пожарной опасности. Позволяет провести анализ изменения индекса в течение сезона, выявить закономерности перемещения максимума пожарной опасности на территории Красноярского края.

Минимальные требования к системным ресурсам:

· Операционная система на платформе Windows;

· Процессор Pentium I;

· 128 МБ ОЗУ;

· Видеокарта 16 МБ;

· Свободное место на жёстком диске 50 Мб;

· Монитор с качеством цветопередачи 256 цветов, разрешением 1024* 768.

5.2 Описание программы

Основу программы составляет статистическая база данных (файл формата txt) составленная путем форматирования файла метеоданных и результатов расчета классов пожарной опасности по условиям погоды. (Приложение 1 П1.)

База данных содержит информацию по каждой метеостанции (код, название, географические координаты, показатель ПВ-1, показатель ПВ-2, класс ПО-1, класс ПО-2, температуру, скорость ветра и количество осадков, по данным красноярской авиабазы) на территории Красноярского края за период с 2004 - 2009 год. Программа позволяет рассчитать шесть показателей пожарной опасности по канадской системе, с возможностью сохранения и последующей загрузки посчитанных результатов в формате txt.

Статистическая база данных необходима для проведения корреляционного анализа Российской и Канадской систем расчета индекса пожарной опасности, для построения картосхем распределения индекса пожарной опасности по данным метеорологических станций и космической информации, для проведения анализа изменения индекса в течение сезона и установления закономерностей перемещения максимума пожарной опасности на территории Красноярского края.

Для проведения корреляционного анализа Российской и Канадской систем определения индекса пожарной опасности, в программу была включена возможность построения графической зависимости (ПВ-1, ПВ-2, FFMC, DMC, DC, ISI, FWI, BUI). Построение происходит согласно данным статистической базы и на основе рассчитанных индексов по Канадской системе. Программа допускает построение одновременно только двух графиков (ПВ-1 и DMC, ПВ-2 и DMC, ПВ-1 и BUI, ПВ-2 и BUI), это необходимо для проведения анализа. Дополнительно программа позволяет воссоздать метеорологическую обстановку и поведение метеорологических станций за весь период с 2004 - 2009 год, для этого строится зависимость ?T и ?W, где ?T - сумма температур, ?W - суммарное количество осадков за весь период времени. зависимость позволяет отнести все метеостанции к 5-ти районам:

1) засушливые, с малым количеством осадков;

2) теплые с небольшим количеством осадков;

3) умеренно сухие, со средними осадками;

4) умеренно холодные, со средним количеством осадков;

5) холодные, с большим количеством осадков. Программа допускает построение графиков для большого количества метеорологических станции за указанный период времени одновременно, одному году для каждой метеостанции соответствует один график определенного цвета.

5.3 Сравнение российской и канадской систем оценки индексов пожарной опасности

Было проведено сравнение эффективности работы индексов пожарной опасности, рассчитанных по российской (ПВ-1) и Канадской национальной системе оценки пожароопасного состояния лесов (CFFDRS) за 2009 год.

Результаты наблюдений по ряду метеостанций Красноярского края показали высокую корреляцию между этими индексами. В ряде случаев коэффициенты корреляции близки к 1. При этом стоит отметить, что наиболее подобен российскому индексу ПВ-1 соответствующий индекс канадской системы DMC (Duff Moisture Code), который показывает степень готовности к воспламенению и поддержанию горения в слое подстилки.

Отличие состоит в том, что канадский индекс менее чувствителен к количественному значению выпавших осадков, особенно к низким значениям в диапазоне 0,5 - 5 мм. В ряде случаев (особенно в условиях долгого периода предварительной сушки) такой подход оправдан, так как не приводил к резкому снижению показателя пожарной опасности. В то же время на графиках, представляющих российскую систему оценки пожарной опасности ПВ-1, в соответствующие сроки наблюдений присутствуют более резкие минимумы. Соответствующие иллюстрации приведены ниже (рис.3).

Рис.3. Сравнение российского показателя ПВ-1 и канадского DMC/CFFDRS по данным метеостанции Ярцево, Богучаны, Ванавара, Бор.

а) м/с Ярцево;

б) м/c Богучаны;

в) м/с Ванавара;

г) м/с Бор;

Рис.4. Индекс влагосодержания FFMC верхних тонких слоев ЛГМ канадской системы CFFDRS, рассчитанный для метеостанций Богучаны и Ярцево. 2009 год.

а) м/с Богучаны;

б) м/с Ярцево;

Состояние тонких верхних слоёв лесных горючих материалов в российской системе не анализируется отдельно. В канадской системе CFFDRS существует специальный показатель FFMC (Fine fuel Moisture Code), описывающий динамику влагосодержания данного типа проводников горения. На рис.4 показан пример расчета такого показателя для метеостанций Богучаны и Ярцево в 2009 году. Показатель FFMC канадской системы наиболее чувствителен к выпадению осадков и снижается даже при незначительном их количестве. Таким образом, можно более детально анализировать состояние всего комплекса ЛГМ, в том числе прогнозировать способность к воспламенению и поддержанию горения верхних слоев, что важно при прогнозировании динамики развития пожароопасной ситуации в целом, а также при прогнозировании вспышек массовых лесных пожаров на данной территории.

5.4 Динамика пожарной опасности в течение пожароопасного периода 2009 г

Пожарная опасность лесов, как основной многофакторный показатель вероятности возникновения лесных пожаров, определяется метеорологическими, лесотаксационными, физико-географическими параметрами региона. На примере Красноярского края можно выделить несколько групп районов, где динамика пожароопасного состояния лесов имеет сходный, повторяющийся характер. Это является причиной сходных пожарных режимов на данных территориях. Такое районирование в первую очередь определяется физико-географическими характеристиками районов, что в свою очередь является основополагающим фактором формирования лесных биогеоценозов, а также микроклимата. Анализируя данные за период 2009 года, можно выделить следующие территории в границах Восточно-Сибирского региона:

1. Северные районы Красноярского края (пожароопасная ситуация отслеживалась по данным метеостанций Бор, Ворогово)

2. Северо-восточные районы (м/с Ванавара)

3. Приангарье (м/с Богучаны)

4. Южные районы края (м/с Ермаковское)

Следует отметить, что сезон 2009 года, так же как и 2006 год, был наиболее экстремален для северных территорий Восточной Сибири. Данные территории входят в зону совместной ответственности системы авиационной охраны лесов и спутникового мониторинга.

Северные районы Красноярского края, представленные данными с метеостанций Бор, Ворогово характеризовались периодичностью с 3 максимумами пожароопасного состояния, приходящимися на 1 декаду июня, 3 декаду июня и 2 декаду августа. (Рис.5, а, б). Ситуацию в данном регионе в пожароопасный период 2009 г. можно охарактеризовать как стабильно-напряженную, с преобладанием 4 и 5 классов пожарной опасности.

Рис.5. Динамика пожарной опасности в северных районах Красноярского края в 2009 году

а) по данным м/с Бор, 2009 г.

б) по данным м/с Ворогово, 2009 г.

Период активного высыхания ЛГМ начался в первой декаде июня, что привело к установлению 5 класса пожарной опасности в отдельных районах региона. В июне-июле наблюдаются продолжительные периоды сушки от 15 до 20 дней. Частое выпадение осадков характеризует начало сезона (3 декада мая) и конец лета (3 декада июля - начало августа). Максимальные значения показателя пожарной опасности ПВ-1 5400 (м/с Бор), 5500 (м/с Ворогово).

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

В сезоне 2009 года по данным метеостанций Ванавара можно выделить один летних максимума, с незначительными осадками в течение данного периода. Вследствие чего показатель пожарной опасности достигал величины 3900 ед. (рис.7, а).

Рис.7. Динамика пожарной опасности в северо-восточных районах Красноярского края в 2009 году

а) по данным м/с Ванавара;

Таким образом, пожароопасная ситуация в данном регионе оставалась стабильно напряженной всю вторую половину лета. Анализ пожароопасной обстановки в Приангарье проводился по данным, собранным на метеостанции Богучаны. Данный район традиционно является территорией с высокой и экстремально-высокой пожароопасной ситуацией в пожароопасный период. Это вызвано климатическими особенностями, и, в немалой степени, уровнем хозяйственного освоения данного региона. Здесь наблюдается большое количество лесов, поврежденных пожарами, вырубки, что повышает риск возникновения повторных лесных пожаров по гарям и вырубкам. Наличие развитой дорожной сети позволяет населению достигать удаленных районов, что привносит дополнительный антропогенный фактор источника огня. В данном регионе следует отметить относительно спокойный весенний период, а также продолжительный период сушки с 1 декады июля по 3 декаду июля. Здесь были достигнуты максимально высокие в 2009 году значения показателя ПВ-1, равные 4400 ед. (рис.8).

Рис.8. Динамика пожарной опасности в Приангарье Красноярского края в 2009 году по данным м/с Богучаны.

Южные районы края (м/с Ермаковское)

Рис.10. Динамика пожарной опасности в южных районах Красноярского края по данным м/с Ермаковское, 2009 г.

Сезон 2009 года в южных районах Красноярского края характеризовался высокой периодичностью дней с осадками, вариация количества которых 2-16 мм, а среднее значение 5 мм. Однако осадки, как правило, были вызваны прохождением фронтов и циклонической активностью, что привело к группировке дней с осадками, а, следовательно, к закономерному снижению пожароопасного состояния, что отражено на рис.10. Максимальные значения показателя пожарной опасности не превышают отметки 2400 ед.

Максимум пожароопасного состояния в сезоне в данном районе приходится на 1-2 декады июля, что согласуется с долговременными наблюдениями за данным районом.

6. Результаты

В проделанной работе получены следующие результаты:

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

· Разработан алгоритм построения картосхем для распределения индекса пожарной опасности по данным метеорологических станций и космической информации.

· Обработаны данные пожароопасного сезона в Красноярском крае за 2009 г.

· Проведен анализ изменения индекса в течение сезона, установлены закономерности перемещения максимума пожарной опасности на территории Красноярского края.

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

· Проведен корреляционный анализ Российской и Канадской систем определения показателя пожарной опасности. В ряде случаев коэффициенты корреляции близки к 1 (принимает значения в промежутке 0,79-0,97). При этом стоит отметить, что наиболее подобен российскому индексу ПВ-1 соответствующий индекс канадской системы DMC (Duff Moisture Code), который показывает степень готовности к воспламенению и поддержанию горения в слое подстилки

7. Выводы

На основе полученных результатов были сделаны следующие выводы:

· Применение теплофизического подхода позволило обосновать связь влагосодержания лесных горючих материалов с аккумулированной температурой поверхности - базового компонента индекса пожарной опасности.

· Был проведен корреляционный анализ изменения индекса в течение сезона по Российской и Канадской системам. Стоит отметить, что наиболее подобен российскому индексу ПВ-1 соответствующий индекс канадской системы DMC (Duff Moisture Code), который показывает степень готовности к воспламенению и поддержанию горения в слое подстилки. В результате анализа было выявлено, что канадский индекс менее чувствителен к количественному значению выпавших осадков, особенно к низким значениям в диапазоне 0,5 - 5 мм. В то же время на графиках, представляющих российскую систему оценки пожарной опасности ПВ-1, в соответствующие сроки наблюдений присутствуют более резкие минимумы.

· Была установлена закономерность перемещения максимума пожарной опасности на территории Красноярского края. Следует отметить, что сезон 2009 года, так же как и 2008 год, был наиболее экстремален для северных территорий Восточной Сибири.

8. Список литературы

1. Сухинин А.И. Веpоятность обнаpужения лесных пожаpов дистанционными методами // сб. Лесные пожаpы и боpьба с ними, изд. ВНИИПОМлесхоз, Кpаснояpск, 1991 стр.56-69

2. Michael Matson, Jeff Dozier. Identification of Subresolution High Temperature Sources Using a Thermal IR Sensor // Photogrammetic Engineering and Remote Sensing №9, 1991 стр.1311-1318

3. Кашкин В.Б., Сухинин А.И. Дистанционное зондирование земли из космоса. Цифровая обработка изображений // М.: "Научный мир", 2000. - С.36-37.

4. Richard Barbieri, Harry Montgomery и др. Algorithm Technical Background Document // MODIS ATBD: THEORETICAL BASIS 1, 1997. - P.27 - 29

5. Коpовин Г.Н., Андpеев Н.А. Авиационная охpана лесов, М., Агpопpомиздат, 1988. - 223 с.

6. Софронов М.А., Волокитина А.В. Пирологическое районирование в таежной зоне. Новосибирск: Наука, 1990. - 205 с.

7. Карслоу Дж., Егер Д. Теплопроводность твердых тел, М.: Наука, 1969. - 340 с.

8. Берлянд М.Е. Распределение солнечной радиации на континентах. Л.: Гидрометеоиздат, 1961. - 260 с.

9. Кондратьев К.Я., Пивоварова З.И., Федорова М.П. Радиационный режим наклонных поверхностей. Л.: Гидрометеоиздат, 1978. - 250 с.

10. Лыков А.В. Теория сушки. М.: Энергия, 1968. - 472 с.

11. Будаговский А.И. Испарение почвенной влаги. М.: Наука, 1964.

12. Коpовин Г.Н., Андpеев Н.А. Авиационная охpана лесов, М., Агpопpомиздат, 1988. - 223 с.

13. Жуковская В.И. Увлажнение и высыхание гигроскопических лесных горючих материалов // Красноярск: ИЛиД, 1970. - С.105-141.

14. Софронов М.А. Система пирологических характеристик и оценок как основа управления пожарами в бореальных лесах // Дисс. в виде научного доклада… Красноярск, 1998. - 60 с.

15. Вонский С.М., Жданко В.А., Корбут В.И., Семенов М.М., Тетюшева Л.В., Завгородняя Л.С. Составление и применение местных шкал пожарной опасности в лесу // Ленинград: ЛенНИИЛХ, 1975. - 57 с.

16. Жданко В.А., Гриценко М.В. Метод анализа лесопожарных сезонов. Практические рекомендации. Ленинград: ЛНИИЛХ, 1980.

17. Софронов М.А., Волокитина А.В., Фомина О.А., Тартаковская Т.М. Методические рекомендации по оценке и прогнозу пожарной опасности на основе карт лесных горючих материалов и метеопрогнозов // Красноярск, 1992. - 47 с.

18. Софронов М.А., Волокитина А.В. Канадская система оценки пожарной опасности в лесах. М.: ВНИИЦлесресурс, 1996. - С.2 - 22.

19. Курбатский Н.П. Пожарная опасность в лесу и ее определение по местным шкалам // В кн.: "Лесные пожары и борьба с ними". М.: Изд. АН СССР, 1963. с.5 - 30.

Приложения

Приложение 1. Текст программы "METEO" на языке программирования DELPHI 7.

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, Menus, Grids, XPMan, ExtCtrls, Math,

StdCtrls, Buttons, ComCtrls;

type

TForm1 = class (TForm)

StringGrid1: TStringGrid;

MainMenu1: TMainMenu;

N1: TMenuItem;

N6: TMenuItem;

N7: TMenuItem;

XPManifest1: TXPManifest;

N13: TMenuItem;

N14: TMenuItem;

XT1: TMenuItem;

OpenDialog2: TOpenDialog;

PopupMenu1: TPopupMenu;

N16: TMenuItem;

N17: TMenuItem;

PopupMenu2: TPopupMenu;

N20: TMenuItem;

StringGrid2: TStringGrid;

N21: TMenuItem;

XT2: TMenuItem;

N26: TMenuItem;

N27: TMenuItem;

N28: TMenuItem;

N29: TMenuItem;

Panel1: TPanel;

Image1: TImage;

Image4: TImage;

Memo1: TMemo;

GroupBox1: TGroupBox;

Label2: TLabel;

Label3: TLabel;

ListBox1: TListBox;

Button2: TButton;

Button3: TButton;

Edit1: TEdit;

Edit2: TEdit;

Button4: TButton;

RadioButton1: TRadioButton;

RadioButton2: TRadioButton;

RadioButton3: TRadioButton;

GroupBox2: TGroupBox;

Label4: TLabel;

Label5: TLabel;

Label6: TLabel;

Memo2: TMemo;

GroupBox3: TGroupBox;

BitBtn1: TBitBtn;

BitBtn2: TBitBtn;

ProgressBar1: TProgressBar;

BitBtn3: TBitBtn;

ListBox2: TListBox;

ListBox3: TListBox;

N2: TMenuItem;

N3: TMenuItem;

N4: TMenuItem;

SaveDialog1: TSaveDialog;

N5: TMenuItem;

N8: TMenuItem;

N9: TMenuItem;

RadioButton4: TRadioButton;

CheckBox1: TCheckBox;

RadioButton5: TRadioButton;

RadioButton6: TRadioButton;

CheckBox2: TCheckBox;

RadioButton7: TRadioButton;

Panel2: TPanel;

Label1: TLabel;

ProgressBar2: TProgressBar;

N10: TMenuItem;

Memo3: TMemo;

N11: TMenuItem;

procedure FormCreate (Sender: TObject);

procedure N7Click (Sender: TObject);

procedure N14Click (Sender: TObject);

procedure Button2Click (Sender: TObject);

procedure Button3Click (Sender: TObject);

procedure Button4Click (Sender: TObject);

procedure Memo2Click (Sender: TObject);

procedure Image4Click (Sender: TObject);

procedure ListBox1Click (Sender: TObject);

procedure RadioButton1Click (Sender: TObject);

procedure N16Click (Sender: TObject);

procedure N17Click (Sender: TObject);

procedure Image1MouseDown (Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure Image1MouseUp (Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure Image1MouseMove (Sender: TObject; Shift: TShiftState; X,

Y: Integer);

procedure N19Click (Sender: TObject);

procedure N20Click (Sender: TObject);

procedure Image1Click (Sender: TObject);

procedure XT1Click (Sender: TObject);

procedure XT2Click (Sender: TObject);

procedure N26Click (Sender: TObject);

procedure N28Click (Sender: TObject);

procedure BitBtn1Click (Sender: TObject);

procedure BitBtn2Click (Sender: TObject);

procedure BitBtn3Click (Sender: TObject);

procedure ListBox3Click (Sender: TObject);

procedure N4Click (Sender: TObject);

procedure ListBox4Click (Sender: TObject);

procedure N8Click (Sender: TObject);

procedure N9Click (Sender: TObject);

procedure CheckBox1Click (Sender: TObject);

procedure CheckBox2Click (Sender: TObject);

procedure FormActivate (Sender: TObject);

procedure N10Click (Sender: TObject);

procedure N11Click (Sender: TObject);

procedure Memo3Click (Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

procedure drawinggraphix1 (a460,b460: integer; pic: tcanvas);

const xp=300;

yp=-600;

bn=-1.2;

x1=0;

y1=0;

x2=500;

y2=722;

var xcarte,ycarte,

xm,ym,xx,yy: integer;

Form1: TForm1;

filename, // имя загруженного файла базы данных

progname: string; // название данной программы

graphix,cartestatus,m,lang, index: byte;

maxpv1,maxpv2,maxt,maxw,maxffmc,maxdmc,maxdc,maxisi,maxbui,maxfwi: real;

pv1,pv2,ffmc,dmc,dc, isi,bui,fwi,t1,w1: array [0.20,1.31,1.12,0.20] of real;

cor: array [0.3,0.20,0.20] of real;

carteload,carte,oldfires: array [0.3] of tbitmap;

mindate,maxdate: string;

implementation

uses Unit7, Unit8;

{$R *. dfm}

// процедура управления видимостью

// базы данных по метеостанциям и некоторых пунктов меню

procedure vis (a: boolean);

var i: integer;

begin

form1. StringGrid1. Visible: =a;

form1. N4. Visible: =a;

form1. N26. Visible: =a;

form1. N10. Visible: =a;

form1. Button2. enabled: =a;

form1. Button3. enabled: =a;

form1. Button4. enabled: =a;

form1. RadioButton1. enabled: =a;

form1. RadioButton2. enabled: =a;

form1. RadioButton3. enabled: =a;

form1. RadioButton4. enabled: =a;

form1. RadioButton5. enabled: =a;

form1. RadioButton6. enabled: =a;

form1. RadioButton7. enabled: =a;

form1. CheckBox1. enabled: =a;

form1. CheckBox2. enabled: =a;

form1. ListBox1. enabled: =a;

if a=true then else

for i: =0 to form1. StringGrid1. ColCount-1 do

form1. StringGrid1. Cells [i,1]: ='';

end;

// процедура управления видимостью

// базы данных по пожарам и некоторых пунктов меню

procedure vis2 (a: boolean);

var i: integer;

begin

form1. StringGrid2. Visible: =a;

form1. N28. Visible: =a;

form1. BitBtn1. enabled: =a;

form1. BitBtn2. enabled: =a;

form1. BitBtn3. enabled: =a;

form1. ProgressBar1. Enabled: =a;

if a=true then else

for i: =0 to form1. StringGrid2. ColCount-1 do

form1. StringGrid2. Cells [i,1]: ='';

end;

// процедура коррекции заголовка окна главной формы

procedure formcaptionstatus;

var s: string;

begin

if filename='' then

if lang=0 then s: ='файл не загружен' else

s: ='file not loaded' else s: =filename;

form1. caption: =progname+' - '+s;

end;

procedure drawcarte (x,y: integer);

begin

form1. image1. canvas. draw (x,y,carte [cartestatus]);

if cartestatus and 1=0 then

if lang=0 then form1. n16. caption: ='Показать сетку' else

form1. n16. caption: ='Show grid' else

if lang=0 then form1. n16. caption: ='Убрать сетку' else

form1. n16. caption: ='Hide grid';

if cartestatus and 2=0 then

if lang=0 then form1. n17. caption: ='Увеличить масштаб' else

form1. n17. caption: ='Big carte' else

if lang=0 then form1. n17. caption: ='Уменьшить масштаб' else

form1. n17. caption: ='Small carte';

end;

procedure shownames;

const maxnames=19;

name: array [0.1,0. maxnames-1] of string= ( // названия колонок базы данных

('Дата',

'Код метеостанции',

'Название метеостанции',

'GRID',

'Широта',

'Долгота',

'Показатель ПВ-1',

'Показатель ПВ-2',

'Класс ПО 1',

'Класс ПО 2',

'T',

'W, мм',

'V',

'FFMC',

'DMC',

'DC',

'ISI',

'BUI',

'FWI'),

('Date',

'Meteostation'+#39+'s code',

'Meteostation'+#39+'s name',

'GRID',

'Latitude',

'Longitude',

'Indicator ПВ-1',

'Indicator ПВ-2',

'Class ПО 1',

'Class ПО 2',

'T',

'W, мм',

'V',

'FFMC',

'DMC',

'DC',

'ISI',

'BUI',

'FWI'));

maxnames1=4;

name1: array [0.1,0. maxnames1-1] of string= (

('Дата','Широта','Долгота','Площадь, м2'),

('Date','Latitude','Longitude','Area, м2'));

var i: integer;

begin

for i: =0 to maxnames-1 do

form1. stringgrid1. cells [i,0]: =name [lang, i]; // отображение названий колонок базы данных

for i: =0 to maxnames1-1 do

form1. stringgrid2. cells [i,0]: =name1 [lang, i]; // отображение названий колонок второй базы данных

end;

// Процедура задания начальных значений

// переменным при запуске программы

procedure TForm1. FormCreate (Sender: TObject);

var i,j,x,y: integer;

sx,sy: string;

p: tbitmap;

begin

lang: =0;

form1. width: =1024;

form1. height: =768;

panel1. top: =0;

panel1. left: =0;

panel1. width: =form1. width;

panel1. height: =form1. height;

panel2. top: = (form1. height-panel2. height) div 2;

panel2. left: = (form1. width-panel2. width) div 2;

image1. top: =0;

image1. left: =0;

image1. width: =450;

image1. height: =form1. height;

image4. width: =569;

image4. height: =481;

memo2. width: =561;

memo2. height: =499;

with image4. canvas do

begin

pen. color: =$e0e0e0;

brush. color: =pen. color;

rectangle (0,0, image4. Width, image4. Height);

end;

progname: =form1. caption;

form1. stringgrid1. align: =alclient;

form1. stringgrid2. align: =alclient;

vis (false);

vis2 (false);

shownames;

formcaptionstatus;

graphix: =0;

for i: =0 to 3 do

begin

carte [i]: =tbitmap. create;

carteload [i]: =tbitmap. create;

oldfires [i]: =tbitmap. create;

end;

for i: =0 to 1 do

begin

carte [i]. width: =512;

carte [i]. height: =730;

carte [i+2]. width: =898;

carte [i+2]. height: =1280;

carteload [i]. width: =512;

carteload [i]. height: =730;

carteload [i+2]. width: =898;

carteload [i+2]. height: =1280;

oldfires [i]. width: =512;

oldfires [i]. height: =730;

oldfires [i+2]. width: =898;

oldfires [i+2]. height: =1280;

end;

p: =tbitmap. create;

p. loadfromfile ('cartesmall. bmp');

carteload [0]. canvas. draw (0,0,p);

carteload [1]. canvas. draw (-512,0,p);

p. loadfromfile ('cartebig. bmp');

carteload [2]. canvas. draw (0,0,p);

carteload [3]. canvas. draw (-898,0,p);

xcarte: =0;

ycarte: =0;

cartestatus: =0;

for i: =0 to 3 do

begin

carte [i]. canvas. draw (0,0,carteload [i]);

oldfires [i]. canvas. draw (0,0,carteload [i]);

end;

drawcarte (xcarte,ycarte);

m: =0;

form1. BitBtn1. caption: ='';

form1. BitBtn2. caption: ='';

form1. BitBtn3. caption: ='';

end;

// Выход из программы по выбору пункта меню "Выход"

procedure TForm1. N7Click (Sender: TObject);

begin

close;

end;

procedure TForm1. N14Click (Sender: TObject);

begin

panel1. show;

end;

procedure TForm1. Button2Click (Sender: TObject);

var a, i,j: integer;

begin

for i: =0 to form1. ListBox2. count-1 do

if form1. ListBox2. Selected [i] then

begin

a: =0;

for j: =0 to form1. ListBox1. count-1 do

if form1. ListBox2. Items [i] =form1. ListBox1. Items [j] then a: =1;

if a=0 then form1. ListBox1. items. add (form1. ListBox2. items [i]);

end;

end;

procedure TForm1. Button3Click (Sender: TObject);

var i: integer;

begin

for i: =form1. ListBox1. count-1 downto 0 do

if form1. ListBox1. Selected [i] then

form1. ListBox1. items. delete (i);

end;

function datetostring (day,month: integer): string;

var s: string;

begin

if day<10 then s: ='0' else s: ='';

s: =s+inttostr (day) +'. ';

if month<10 then s: =s+'0';

s: =s+inttostr (month);

datetostring: =s;

end;

function dateok (date: string): boolean;

var day,month,code: integer;

begin

val (copy (date,1,2),day,code);

val (copy (date,4,2),month,code);

case month of

1,3,5,7,8,10,12: if (day>0) and (day<32) then dateok: =true else dateok: =false;

4,6,9,11: if (day>0) and (day<31) then dateok: =true else dateok: =false;

2: if (day>0) and (day<30) then dateok: =true else dateok: =false;

else dateok: =false;

end;

end;

function distancedates (date1,date2: string): integer;

var d,e,day,day1,day2,month,month1,month2: integer;

begin

d: =0;

e: =0;

val (copy (date1,1,2),day1,day);

val (copy (date1,4,2),month1,month);

val (copy (date2,1,2),day2,day);

val (copy (date2,4,2),month2,month);

for month: =1 to 12 do

for day: =1 to 31 do

begin

if (day=day1) and (month=month1) and (e=0) then

e: =1;

if (e=1) and (dateok (datetostring (day,month))) then d: =d+1;

if (day=day2) and (month=month2) then

e: =2;

end;

distancedates: =d;

end;

function convdata (s: string): string;

begin

convdata: =copy (s,4,2) +copy (s,1,2);

end;

procedure drawinggraphix1 (a460,b460: integer; pic: tcanvas);

const maxcolors=5;

colors: array [0. maxcolors-1] of longword= ($ef7000,$3080a0,$20a000,$c0b000,$909090);

var i,k,day,month,year,n,code: integer;

kt,kw: real;

st,sw,s: string;

p: tbitmap;

procedure drawing (y,max: real; ss: string; vv: byte; p: tbitmap);

var temppencolor,tempbrushcolor,temppenwidth: longword;

begin

if y>0 then

with p. canvas do

begin

lineto (distancedates (form1. edit1. text,datetostring (day,month)) * (b460 div n),a460-round (y/max*a460));

if vv=0 then

rectangle (distancedates (form1. edit1. text,datetostring (day,month)) * (b460 div n) - 2,a460-round (y/max*a460) - 2,distancedates (form1. edit1. text,datetostring (day,month)) * (b460 div n) +2,a460-round (y/max*a460) +2) else

begin

temppencolor: =pen. color;

tempbrushcolor: =brush. color;

temppenwidth: =pen. width;

pen. color: =0;

brush. color: =$ffffff;

pen. width: =1;

ellipse (distancedates (form1. edit1. text,datetostring (day,month)) * (b460 div n) - 3,a460-round (y/max*a460) - 3,distancedates (form1. edit1. text,datetostring (day,month)) * (b460 div n) +3,a460-round (y/max*a460) +3);

pen. color: =temppencolor;

brush. color: =tempbrushcolor;

pen. width: =temppenwidth;

end;

s: =datetostring (day,month) +'. '+form1. ListBox3. items [year];

str (y: 0: 3,st);

form1. memo2. lines. add (s+' '+ss+' = '+st);

end;

end;

begin

if graphix>0 then

if form1. RadioButton1. Checked then

begin

p: =tbitmap. Create;

p. Width: =b460+1;

p. Height: =a460+1;

kt: = (a460 div 10) / (trunc (maxt/10) +1);

kw: = (b460 div 10) / (trunc (maxw/10) +1);

with p. canvas do

begin

pen. style: =pssolid;

for i: =0 to (b460 div 2-1) do

begin

pen. color: =rgb ($f0,$b0+round (i/ (b460 div 2-1) *$40),$b0);

moveto (0,a460);

lineto (i,0);

pen. color: =rgb ($f0-round (i/ (b460 div 2-1) *$40),$f0,$b0);

moveto (0,a460);

lineto (i+ (b460 div 2),0);

end;

for i: =0 to (a460 div 2-1) do

begin

pen. color: =rgb ($b0,$f0,$b0+round (i/ (a460 div 2-1) *$40));

moveto (0,a460);

lineto (b460, i);

pen. color: =rgb ($b0,$f0-round (i/ (a460 div 2-1) *$40),$f0);

moveto (0,a460);

lineto (b460, i+ (a460 div 2));

end;

pen. color: =0;

for i: =0 to 10 do

begin

moveto (i* (b460 div 10),0);

lineto (i* (b460 div 10),10* (b460 div 10));

end;

for i: =0 to 10 do

begin

moveto (0, i* (a460 div 10));

lineto (10* (b460 div 10), i* (a460 div 10));

end;

pen. color: =$9030ff;

moveto (0,a460);

lineto (b460,0);

form1. memo2. clear;

for year: =0 to form1. ListBox3. Items. count-1 do

for k: =0 to form1. ListBox1. Items. count-1 do

begin

if (form1. listbox1. Selected [k]) and

(form1. listbox3. Selected [year]) then

pen. width: =3 else pen. width: =1;

form1. memo2. lines. add (form1. listbox1. items [k] +': ');

pen. color: =colors [k mod maxcolors];

brush. color: =pen. color;

moveto (0,a460);

for month: =1 to 12 do

for day: =1 to 31 do

if (t1 [k,day,month,year] >0) or

(w1 [k,day,month,year] >0) then

begin

lineto (round (w1 [k,day,month,year] *kw),a460-round (t1 [k,day,month,year] *kt));

rectangle (round (w1 [k,day,month,year] *kw) - 2,a460-round (t1 [k,day,month,year] *kt) - 2,round (w1 [k,day,month,year] *kw) +2,a460-round (t1 [k,day,month,year] *kt) +2);

moveto (round (w1 [k,day,month,year] *kw),a460-round (t1 [k,day,month,year] *kt));

s: =datetostring (day,month) +'. '+form1. ListBox3. items [year];

str (t1 [k,day,month,year]: 8: 3,st);

str (w1 [k,day,month,year]: 8: 3,sw);

form1. memo2. lines. add (s+' t = '+st+' w = '+sw);

end;

end;

end;

with pic do

begin

pen. color: =$e0e0e0;

brush. color: =$e0e0e0;

rectangle (0,0,b460*2,a460*2);

draw (58,6,p);

pen. color: =0;

for i: =1 to 10 do

begin

str (i* (a460 div 10) /kt: 0: 0,s);

textout (55-textwidth (s),a460-i* (a460 div 10),s);

str (i* (b460 div 10) /kw: 0: 0,s);

textout (i* (b460 div 10) +58-textwidth (s) div 2,a460+10,s);

end;

brush. style: =bsclear;

textout (59,a460+10,'0');

textout (62,10,'T'+#176+'C');

textout (b460+25,a460-12,'W мм');

brush. style: =bssolid;

end;

end else

begin

p: =tbitmap. Create;

p. Width: =b460+1;

p. Height: =a460+1;

with p. canvas do

begin

pen. style: =pssolid;

pen. color: =$e0e0e0;

brush. color: =pen. color;

rectangle (0,0,p. width,p. height);

pen. color: =$909090;

n: =distancedates (form1. edit1. text,form1. edit2. text);

if n>1 then

begin

for i: =0 to 10 do

begin

moveto (0, i* (a460 div 10));

lineto (n* (b460 div n), i* (a460 div 10));

end;

for i: =0 to n do

begin

moveto (i* (b460 div n),0);

lineto (i* (b460 div n),10* (a460 div 10));

end;

form1. memo2. clear;

for year: =0 to form1. ListBox3. Items. count-1 do

for k: =0 to form1. ListBox1. Items. count-1 do

begin

if (form1. listbox1. Selected [k]) and

(form1. listbox3. Selected [year]) then

pen. width: =3 else pen. width: =1;

pen. color: =colors [k mod maxcolors];

brush. color: =pen. color;

moveto (0,a460);

form1. memo2. lines. add (form1. listbox1. items [k] +': ');

for month: =1 to 12 do

for day: =1 to 31 do

if form1. RadioButton2. Checked then

drawing (pv1 [k,day,month,year],maxpv1,'ПВ1',0,p) else

if form1. RadioButton3. Checked then

drawing (pv2 [k,day,month,year],maxpv2,'ПВ2',0,p) else

if form1. RadioButton4. Checked then

drawing (ffmc [k,day,month,year],maxffmc,'FFMC',0,p) else

if form1. RadioButton5. Checked then

drawing (dc [k,day,month,year],maxdc,'DC',0,p) else

if form1. RadioButton6. Checked then

drawing (isi [k,day,month,year],maxisi,'ISI',0,p) else

if form1. RadioButton7. Checked then

drawing (fwi [k,day,month,year],maxfwi,'FWI',0,p);

if form1. RadioButton2. Checked or form1. RadioButton3. Checked then

begin

moveto (0,a460);

pen. style: =psdashdot;

for month: =1 to 12 do

for day: =1 to 31 do

if form1. checkbox1. Checked then

drawing (dmc [k,day,month,year],maxdmc,'DMC',1,p) else

if form1. checkbox2. Checked then

drawing (bui [k,day,month,year],maxbui,'BUI',1,p);

pen. style: =pssolid;

end;

end;

with pic do

begin

pen. color: =$e0e0e0;

brush. color: =$e0e0e0;

rectangle (0,0,b460*2,a460*2);

draw (58,6,p);

pen. color: =0;

for i: =0 to 10 do

begin

if form1. RadioButton2. Checked then str (maxpv1/10*i: 0: 0,s) else

if form1. RadioButton3. Checked then str (maxpv2/10*i: 0: 0,s) else

if form1. RadioButton4. Checked then str (maxffmc/10*i: 0: 0,s) else

if form1. RadioButton5. Checked then str (maxdc/10*i: 0: 0,s) else

if form1. RadioButton6. Checked then str (maxisi/10*i: 0: 0,s) else

if form1. RadioButton7. Checked then str (maxfwi/10*i: 0: 0,s);

textout (55-textwidth (s),a460-i* (a460 div 10),s);

if form1. checkbox1. checked then

begin

str (maxdmc/10*i: 0: 0,s);

textout (n* (b460 div n) +63,a460-i* (a460 div 10),s);

end;

if form1. checkbox2. checked then

begin

str (maxbui/10*i: 0: 0,s);

textout (n* (b460 div n) +63,a460-i* (a460 div 10),s);

end;

end;

if form1. RadioButton2. Checked then textout (63,0,'ПВ1') else

if form1. RadioButton3. Checked then textout (63,0,'ПВ2') else

if form1. RadioButton4. Checked then textout (63,0,'FFMC') else

if form1. RadioButton5. Checked then textout (63,0,'DC') else

if form1. RadioButton6. Checked then textout (63,0,'ISI') else

if form1. RadioButton7. Checked then textout (63,0,'FWI');

if form1. checkbox1. checked then textout (n* (b460 div n) +30,0,'DMC');

if form1. checkbox2. checked then textout (n* (b460 div n) +30,0,'BUI');

if n<10 then k: =1 else k: =n div 10+1;

for month: =1 to 12 do

for day: =1 to 31 do

if (distancedates (form1. edit1. text,datetostring (day,month)) mod k=0) and (convdata (datetostring (day,month)) >=convdata (form1. edit1. text)) and (convdata (datetostring (day,month)) <=convdata (form1. edit2. text)) then

textout (distancedates (form1. edit1. text,datetostring (day,month)) * (b460 div n) +44,a460+9,datetostring (day,month));

end;

end;

end;

end;

end;

procedure formyears;

var year,year1,year2: integer;

begin

form1. ListBox3. clear;

val (copy (form1. edit1. text,7,4),year1,year);

val (copy (form1. edit2. text,7,4),year2,year);

if (year1>0) and (year2>0) then

for year: =year1 to year2 do

form1. ListBox3. Items. add (inttostr (year));

end;

procedure formdata;

var n,k,day,month,year,year1,year2,code: integer;

s: string;

t,w,temp: real;

begin

maxt: =0;

maxw: =0;

maxpv1: =0;

maxpv2: =0;

maxffmc: =0;

maxdmc: =0;

maxdc: =0;

maxisi: =0;

maxbui: =0;

maxfwi: =0;

val (copy (form1. edit1. text,7,4),year1,code);

val (copy (form1. edit2. text,7,4),year2,code);

for k: =0 to form1. ListBox1. count-1 do

for year: =year1 to year2 do

begin

t: =0;

w: =0;

for month: =1 to 12 do

for day: =1 to 31 do

begin

pv1 [k,day,month,year-year1]: =0;

pv2 [k,day,month,year-year1]: =0;

ffmc [k,day,month,year-year1]: =0;

dmc [k,day,month,year-year1]: =0;

dc [k,day,month,year-year1]: =0;

isi [k,day,month,year-year1]: =0;

bui [k,day,month,year-year1]: =0;

fwi [k,day,month,year-year1]: =0;

t1 [k,day,month,year-year1]: =0;

w1 [k,day,month,year-year1]: =0;

if day<10 then s: ='0' else s: ='';

s: =s+inttostr (day) +'. ';

if month<10 then s: =s+'0';

s: =s+inttostr (month) +'. '+inttostr (year);

if (convdata (s) >=convdata (form1. edit1. text)) and

(convdata (s) <=convdata (form1. edit2. text)) then

begin

n: =1;

while (n<form1. StringGrid1. RowCount)

and not ( (form1. StringGrid1. cells [0,n] =s)

and (form1. StringGrid1. cells [1,n] =copy (form1. ListBox1. items [k],1,5))) do n: =n+1;

if form1. StringGrid1. cells [0,n] =s then

begin

val (form1. StringGrid1. Cells [6,n],pv1 [k,day,month,year-year1],code);

val (form1. StringGrid1. Cells [7,n],pv2 [k,day,month,year-year1],code);

val (form1. StringGrid1. Cells [13,n],ffmc [k,day,month,year-year1],code);

val (form1. StringGrid1. Cells [14,n],dmc [k,day,month,year-year1],code);

val (form1. StringGrid1. Cells [15,n],dc [k,day,month,year-year1],code);

val (form1. StringGrid1. Cells [16,n], isi [k,day,month,year-year1],code);

val (form1. StringGrid1. Cells [17,n],bui [k,day,month,year-year1],code);

val (form1. StringGrid1. Cells [18,n],fwi [k,day,month,year-year1],code);

val (form1. StringGrid1. Cells [10,n],temp,code);

t: =t+temp;

t1 [k,day,month,year-year1]: =t;

val (form1. StringGrid1. Cells [11,n],temp,code);

w: =w+temp;

w1 [k,day,month,year-year1]: =w;

if t1 [k,day,month,year-year1] >maxt then

maxt: =t1 [k,day,month,year-year1];

if w1 [k,day,month,year-year1] >maxw then

maxw: =w1 [k,day,month,year-year1];

if pv1 [k,day,month,year-year1] >maxpv1 then

maxpv1: =pv1 [k,day,month,year-year1];

if pv2 [k,day,month,year-year1] >maxpv2 then

maxpv2: =pv2 [k,day,month,year-year1];

if ffmc [k,day,month,year-year1] >maxffmc then

maxffmc: =ffmc [k,day,month,year-year1];

if dmc [k,day,month,year-year1] >maxdmc then

maxdmc: =dmc [k,day,month,year-year1];

if dc [k,day,month,year-year1] >maxdc then

maxdc: =dc [k,day,month,year-year1];

if isi [k,day,month,year-year1] >maxisi then

maxisi: =isi [k,day,month,year-year1];

if bui [k,day,month,year-year1] >maxbui then

maxbui: =bui [k,day,month,year-year1];

if fwi [k,day,month,year-year1] >maxfwi then

maxfwi: =fwi [k,day,month,year-year1];

end;

end;

end;

end;

end;

procedure formcor;

var k,day,month,year: integer;

srpv1,srpv2,srdmc,srbui: array [0.20,0.20] of real;

npv1,npv2,ndmc,nbui: array [0.20,0.20] of integer;

sumc,sumz1,sumz2: array [0.3,0.20,0.20] of real;

begin

form1. memo3. clear;

for year: =0 to form1. ListBox3. Items. count-1 do

for k: =0 to form1. ListBox1. Items. count-1 do

begin

srpv1 [k,year]: =0;

srpv2 [k,year]: =0;

srdmc [k,year]: =0;

srbui [k,year]: =0;

npv1 [k,year]: =0;

npv2 [k,year]: =0;

ndmc [k,year]: =0;

nbui [k,year]: =0;

for day: =0 to 3 do

begin

sumc [day,k,year]: =0;

sumz1 [day,k,year]: =0;

sumz2 [day,k,year]: =0;

end;

for month: =1 to 12 do

for day: =1 to 31 do

begin

if pv1 [k,day,month,year] >0 then

begin

srpv1 [k,year]: =srpv1 [k,year] +pv1 [k,day,month,year];

npv1 [k,year]: =npv1 [k,year] +1;

end;

if pv2 [k,day,month,year] >0 then

begin

srpv2 [k,year]: =srpv2 [k,year] +pv2 [k,day,month,year];

npv2 [k,year]: =npv2 [k,year] +1;

end;

if dmc [k,day,month,year] >0 then

begin

srdmc [k,year]: =srdmc [k,year] +dmc [k,day,month,year];

ndmc [k,year]: =ndmc [k,year] +1;

end;

if bui [k,day,month,year] >0 then

begin

srbui [k,year]: =srbui [k,year] +bui [k,day,month,year];

nbui [k,year]: =nbui [k,year] +1;

end;

end;

if npv1 [k,year] >0 then

srpv1 [k,year]: =srpv1 [k,year] /npv1 [k,year] else

srpv1 [k,year]: =0;

if npv2 [k,year] >0 then

srpv2 [k,year]: =srpv2 [k,year] /npv2 [k,year] else

srpv2 [k,year]: =0;

if ndmc [k,year] >0 then

srdmc [k,year]: =srdmc [k,year] /ndmc [k,year] else

srdmc [k,year]: =0;

if nbui [k,year] >0 then

srbui [k,year]: =srbui [k,year] /nbui [k,year] else

srbui [k,year]: =0;

for month: =1 to 12 do

for day: =1 to 31 do

begin

if (pv1 [k,day,month,year] >0) or (dmc [k,day,month,year] >0) then

begin

sumc [0,k,year]: =sumc [0,k,year] + (pv1 [k,day,month,year] - srpv1 [k,year]) * (dmc [k,day,month,year] - srdmc [k,year]);

sumz1 [0,k,year]: =sumz1 [0,k,year] +sqr (pv1 [k,day,month,year] - srpv1 [k,year]);

sumz2 [0,k,year]: =sumz2 [0,k,year] +sqr (dmc [k,day,month,year] - srdmc [k,year]);

end;

if (pv1 [k,day,month,year] >0) or (bui [k,day,month,year] >0) then

begin

sumc [1,k,year]: =sumc [1,k,year] + (pv1 [k,day,month,year] - srpv1 [k,year]) * (bui [k,day,month,year] - srbui [k,year]);

sumz1 [1,k,year]: =sumz1 [1,k,year] +sqr (pv1 [k,day,month,year] - srpv1 [k,year]);

sumz2 [1,k,year]: =sumz2 [1,k,year] +sqr (bui [k,day,month,year] - srbui [k,year]);

end;

if (pv2 [k,day,month,year] >0) or (dmc [k,day,month,year] >0) then

begin

sumc [2,k,year]: =sumc [2,k,year] + (pv2 [k,day,month,year] - srpv2 [k,year]) * (dmc [k,day,month,year] - srdmc [k,year]);

sumz1 [2,k,year]: =sumz1 [2,k,year] +sqr (pv2 [k,day,month,year] - srpv2 [k,year]);

sumz2 [2,k,year]: =sumz2 [2,k,year] +sqr (dmc [k,day,month,year] - srdmc [k,year]);

end;

if (pv2 [k,day,month,year] >0) or (bui [k,day,month,year] >0) then

begin

sumc [3,k,year]: =sumc [3,k,year] + (pv2 [k,day,month,year] - srpv2 [k,year]) * (bui [k,day,month,year] - srbui [k,year]);

sumz1 [3,k,year]: =sumz1 [3,k,year] +sqr (pv2 [k,day,month,year] - srpv2 [k,year]);

sumz2 [3,k,year]: =sumz2 [3,k,year] +sqr (bui [k,day,month,year] - srbui [k,year]);

end;

end;

for day: =0 to 3 do

cor [day,k,year]: =sumc [day,k,year] /sqrt (sumz1 [day,k,year] *sumz2 [day,k,year]);

form1. memo3. lines. add (form1. listbox3. items [year] +'. '+#9+form1. listbox1. items [k]);

form1. memo3. lines. add ('ПВ1, DMC: '+#9+floattostr (cor [0,k,year]));

form1. memo3. lines. add ('ПВ1, BUI: '+#9+floattostr (cor [1,k,year]));

form1. memo3. lines. add ('ПВ2, DMC: '+#9+floattostr (cor [2,k,year]));

form1. memo3. lines. add ('ПВ2, BUI: '+#9+floattostr (cor [3,k,year]));

form1. memo3. lines. add ('');

end;

end;

procedure TForm1. Button4Click (Sender: TObject);

var i, ii,k,code: integer;

tt,ww,pv: real;

begin

formyears;

formdata;

formcor;

graphix: =1;

drawinggraphix1 (460,460,form1. image4. canvas);

end;

procedure TForm1. Memo2Click (Sender: TObject);

begin

memo2. hide;

end;

procedure TForm1. Image4Click (Sender: TObject);

begin

memo2. show;

end;

procedure TForm1. ListBox1Click (Sender: TObject);

begin

drawinggraphix1 (460,460,form1. image4. canvas);

end;

procedure TForm1. RadioButton1Click (Sender: TObject);

begin

drawinggraphix1 (460,460,form1. image4. canvas);

end;

procedure TForm1. N16Click (Sender: TObject);

begin

cartestatus: =cartestatus xor 1;

drawcarte (xcarte,ycarte);

end;

procedure TForm1. N17Click (Sender: TObject);

begin

cartestatus: =cartestatus xor 2;

xcarte: =0;

ycarte: =0;

with form1. Image1. canvas do

begin

pen. color: =$ffffff;

brush. color: =pen. color;

rectangle (0,0, image1. width, image1. Height);

end;

drawcarte (xcarte,ycarte);

end;

procedure TForm1. Image1MouseDown (Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

if button=mbleft then

begin

xm: =x;

ym: =y;

m: =1;

end;

end;

procedure TForm1. Image1MouseUp (Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

if m=1 then

begin

m: =0;

xcarte: =xx;

ycarte: =yy;

end;

end;

function precoords (a: real; b,c: byte): string;

var sg,sm: string;

g,m: byte;

begin

g: =trunc (a);

a: = (a-g) *60;

m: =trunc (a);

str (g,sg);

while length (sg) <b do sg: ='0'+sg;

str (m,sm);

while length (sm) <c do sm: ='0'+sm;

precoords: =sg+#176+sm+#39;

end;

// Перевод декартовых координат в полярные

procedure polar (xc,yc: real; m: byte; var r,fi: real);

const xr=645;

yr=-1230;

begin

if m=0 then

begin

xc: =round (xc/0.55);

yc: =round (yc/0.55);

end else

begin

xc: =round (xc/0.961);

yc: =round (yc/0.961);

end;

r: = (8500-sqrt (sqr (xr-xc) +sqr (yr-yc))) /100*20/12.59+72-72.23*20/12.59;

if xr-xc=0 then fi: =0 else fi: =arctan ( (xr-xc) / (yr-yc));

fi: =fi*30*24/11.1+102-1.37*24/11.1;

end;

procedure TForm1. Image1MouseMove (Sender: TObject; Shift: TShiftState; X,

Y: Integer);

var r,fi: real;

i,xc,yc: integer;

begin

xc: =x-xcarte;

yc: =y-ycarte;

if cartestatus<2 then

polar (xc,yc,0,r,fi) else polar (xc,yc,1,r,fi);

if lang=0 then

begin

label4. caption: ='Широта: '+precoords (r,2,2);

label5. caption: ='Долгота: '+precoords (fi,3,2);

end else

begin

label4. caption: ='Latitude: '+precoords (r,2,2);

label5. caption: ='Longitude: '+precoords (fi,3,2);

end;

form1. label6. caption: ='??? ';

for i: =1 to form7. stringgrid1. rowcount-1 do

if (copy (form7. stringgrid1. cells [3, i],1,4) =copy (precoords (r,2,2),1,4)) and

(copy (form7. stringgrid1. cells [4, i],1,5) =copy (precoords (fi,3,2),1,5)) then

form1. label6. caption: =form7. stringgrid1. cells [0, i] +' '+form7. stringgrid1. cells [1, i];

if m=1 then

begin

xx: =xcarte+x-xm;

yy: =ycarte+y-ym;

if xx<form1. image1. width-carte [cartestatus]. width then

xx: =form1. image1. width-carte [cartestatus]. width;

if xx>0 then xx: =0;

if yy<form1. image1. height-carte [cartestatus]. height then

yy: =form1. image1. height-carte [cartestatus]. height;

if yy>0 then yy: =0;

drawcarte (xx,yy);

end;

end;

procedure TForm1. N19Click (Sender: TObject);

begin

form7. ShowModal;

end;

procedure TForm1. N20Click (Sender: TObject);

var i: integer;

begin

form8. Image1. width: =1024;

form8. Image1. height: =768;

form8. listbox1. items: =form1. listbox1. items;

form8. listbox2. items: =form1. listbox3. items;

for i: =0 to form1. listbox1. count-1 do

form8. listbox1. selected [i]: =form1. listbox1. selected [i];

for i: =0 to form1. listbox3. count-1 do

form8. listbox2. selected [i]: =form1. listbox3. selected [i];

drawinggraphix1 (700,890,form8. Image1. canvas);

form8. showmodal;

end;

procedure TForm1. Image1Click (Sender: TObject);

var i: integer;

begin

if length (label6. caption) >3 then

for i: =0 to form1. listbox2. count-1 do

if form1. listbox2. items [i] =label6. caption then

form1. listbox2. Selected [i]: =true else form1. listbox2. Selected [i]: =false;

end;

procedure texttogrid (n: integer; s: shortstring);

var i,j: integer;

q: shortstring;

procedure next;

begin

q: ='';

while (s [i] <>#9) and (i<=length (s)) do

begin

q: =q+s [i];

i: =i+1;

end;

i: =i+1;

end;

begin

i: =1;

next;

form1. StringGrid1. cells [0,n]: =q;

next;

next;

form1. StringGrid1. cells [1,n]: =q;

next;

form1. StringGrid1. cells [10,n]: =q;

next;

next;

form1. StringGrid1. cells [12,n]: =q;

for j: =1 to 3 do next;

form1. StringGrid1. cells [11,n]: =q;

for j: =1 to 3 do next;

form1. StringGrid1. cells [6,n]: =q;

next;

form1. StringGrid1. cells [7,n]: =q;

next;

next;

form1. StringGrid1. cells [8,n]: =q;

next;

form1. StringGrid1. cells [9,n]: =q;

if index=1 then

for j: =13 to 18 do

begin

next;

form1. StringGrid1. cells [j,n]: =q;

end;

end;

// Процедура расчета индексов по канадской системе

procedure canadian;

const h=60;

mm=250;

le: array [1.12] of real= (6.5,7.5,9,12.8,13.9,13.9,12.4,10.9,9.4,8,7,6);

lf: array [1.12] of real= (-1.6,-1.6,-1.6,0.9,3.8,5.8,6.4,5.0,2.4,0.4,-1.6,-1.6);

var i,meteo,day,month,year,year1,year2,code: integer;

t,w,r0,f0,m0,rf,mr,ed,ew,k0,kd,k1,kw,m,ffmc,

k,p0,p,re,b,pr,

d0,v,d,rd,q0,qr,dr,

ff,fw,r,

u,

fd,s1,fm,sf,si,

bui1,fwi1,bb,cc: real;

s: string;

procedure calculateffmc;

begin

m0: =147.2* (101-f0) / (59.5+f0);

if r0>0.5 then

begin

rf: =r0-0.5;

mr: =m0+42.5*rf*exp (-100/ (251-m0)) * (1-exp (-6.93/rf));

if m0>150 then mr: =mr+0.0015*sqr (m0-150) *sqrt (rf);

m0: =mr;

end;

if mr>250 then mr: =250;

ed: =0.942*power (h,0.679) +11*exp ( (h-100) /10) +0.18* (21.1-t) * (1-exp (-0.115*h));

m: =m0;

if m0>ed then

begin

k0: =0.424* (1-power (h/100,1.7)) +0.0694*sqrt (w) * (1-power (h/100,8));

kd: =k0*0.581*exp (0.0365*t);

m: =ed- (m0-ed) *power (10,-kd);

end else

if m0<ed then

begin

ew: =0.618*power (h,0.753) +10*exp ( (h-100) /10) +0.18* (21.1-t) * (1-exp (-0.115*h));

if m0<ew then

begin

k1: =0.424* (1-power ( (100-h) /100,1.7)) +0.0694*sqrt (w) * (1-power ( (100-h) /100,8));


Подобные документы

  • Охранно–пожарная сигнализация. Принципы работы систем пожарной сигнализации. Блок-схема алгоритма функционирования разработанного устройства. Выбор и обоснование элементной базы. Схема электрической принципиальной и проектирование цифровых устройств.

    курсовая работа [786,6 K], добавлен 10.11.2011

  • Характеристика, механизм и назначение кодового и фазового метода определения дальностей. Их сравнительный анализ и значение при различных способах позиционирования. Особенности применения при измерениях кодового и фазового методов определения дальностей.

    курсовая работа [79,4 K], добавлен 25.12.2012

  • Возможности среды программирования delphi при разработке приложения с визуальным интерфейсом. Разработка спецификации программного обеспечения и на ее основе кода программного продукта. Отладка программы "трассировкой", ее тестирование и оптимизация.

    курсовая работа [501,4 K], добавлен 07.12.2016

  • Понятие и классификация алгоритмов маршрутизации. Основное определение теории графов. Анализ и разработка алгоритмов Дейкстры и Флойда на языке программирования C# для определения наилучшего пути пакетов, передаваемых через сеть. Их сравнительный анализ.

    курсовая работа [1,2 M], добавлен 16.05.2015

  • Проведение формализации математической модели и разработка алгоритма программы для определения локальных экстремумов функции средствами Delphi 7.0, Visual C. Создание инсталляционной версии приложения и его тестирование в различных операционных системах.

    курсовая работа [2,7 M], добавлен 11.06.2015

  • Возможности среды программирования delphi при разработке приложения с визуальным интерфейсом. Отладка программных модулей с использованием специализированных программных средств. Тестирование программного обеспечения. Оптимизация программного кода.

    курсовая работа [974,0 K], добавлен 21.12.2016

  • Разработка программного обеспечения для работы с информацией и ее обработкой на языке программирования Delphi. Описание алгоритмов процедуры работы со стеком - добавление, удаление элементов, редактирование записи. Инструкция по использованию программы.

    курсовая работа [2,9 M], добавлен 06.02.2013

  • Особенности разработки приложений для операционной системы с помощью императивного, структурированного, объектно-ориентированного языка программирования Delphi. Формальное начало программы. Выделение конца программного блока. Листинг и описание программы.

    курсовая работа [1,2 M], добавлен 04.08.2014

  • Этапы процедуры принятия решений. Разработка математического алгоритма. Блок-схема алгоритма работы программы. Разработка программы на языке программирования С++ в среде разработки MFC. Текст программы определения технического состояния станка с ЧПУ.

    курсовая работа [823,0 K], добавлен 18.12.2011

  • Описание вычислительной техники, характеристика операционных систем и языков программирования. Сравнительный анализ аналогов и прототипов. Разработка алгоритма решения задачи. Выбор средств и методов решения задач. Проектирование программного обеспечения.

    отчет по практике [1,0 M], добавлен 23.03.2015

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.