48530 (588561), страница 7

Файл №588561 48530 (Разработка алгоритмического и программного обеспечения ситуационного управления безопасностью магистральных газопроводов) 7 страница48530 (588561) страница 72016-07-29СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 7)

Рисунок 4.11 - Просмотр всех имеющихся в базе фактов

Для того, чтобы добавить вопрос объекта, необходимо ввести имя объекта, например "ветер на здание", и вопрос - "какова концентрация". После этого нажать кнопку "4. Добавить вопрос объекта" (рис.4.12).

Рисунок 4.12 - Добавление вопроса об объекте

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

Файл rules. txt будет иметь следующее содержание - рис.4.13.

Рисунок 4.13 - Содержание файла rules. txt

Для того, чтобы получить вопрос об объекте, необходимо ввести имя объекта ("ветер на здание") и нажать кнопку "5.1. Получить вопрос об объекте". В поле "Вопрос" выведется имеющийся в базе вопрос о данном объекте ("какова концентрация").

Для установления конкретного (одного) значения объекта из нескольких имеющихся (например, значения "концентрация <1%" для объекта "ветер на здание") необходимо выбрать номер значения 2 и нажать кнопку "5.2. Ответить на вопрос об объекте" (рис.4.14).

Рисунок 4.14 - Установка ответа на вопрос

Для ситуации "выброс газа" определим наименее вероятный сценарий развития событий, наиболее вероятный сценарий развития событий, сценарий с наименьшим ущербом, сценарий с наибольшим ущербом.

При нажатии кнопки "6. Поиск наименее вероятного сценария развития событий" в окне "Ход выполнения" отобразятся все возможные варианты развития событий, наименее вероятный сценарий развития событий, его вероятность и коэффициент ущерба (рис.4.15).

Рисунок 4.15 - Поиск наименее вероятного сценария развития событий

При нажатии кнопки "7. Поиск наиболее вероятного сценария развития событий" в окне "Ход выполнения" отобразятся все возможные варианты развития событий (рис.4.15), наиболее вероятный сценарий развития событий, его вероятность и коэффициент ущерба (рис.4.16).

Рисунок 4.16 - Поиск наиболее вероятного сценария развития событий

Для того, чтобы определить сценарий с наименьшим ущербом, необходимо нажать кнопку "8. Поиск сценария с наименьшим ущербом". Результаты поиска отобразятся в окне "Ход выполнения" (рис.4.17).

Рисунок 4.17 - Поиск сценария с наименьшим ущербом

Для того, чтобы определить сценарий с наибольшим ущербом, необходимо нажать кнопку "9. Поиск сценария с наибольшим ущербом". Результаты поиска отобразятся в окне "Ход выполнения" (рис.4.18).

Рисунок 4.18 - Поиск сценария с наибольшим ущербом

Для окончания работы с программой необходимо нажать кнопку "Выход".


5. Техническое обеспечение

Программа функционирует на универсальной ПЭВМ. ПЭВМ имеют небольшие габариты, обладают большой мощностью и быстродействием.

Для реализации программного обеспечения "МАГ" необходим набор аппаратных средств со следующими минимальными техническими характеристиками:

процессор INTEL Pentium IV с тактовой частотой 1,5 ГГц,

объем оперативной памяти не менее 128 Мб;

жесткий диск объемом 2 Гб;

видеоадаптер SVGA;

клавиатура;

манипулятор мышь;

17" SVGA монитор.

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

оперативность и качество принимаемых управленческих решений,

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

Кроме того, выбранный комплекс технических средств отвечает требованиям программного обеспечения "МАГ" - требованиям выбранного языка Delphi 7.


Заключение

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

В частности, в ходе выполнения работы выделены основные характеристики и поражающие факторы аварий на объектах нефтегазового профиля. Кроме того, выделены причины возникновения аварий на объектах транспорта газа и причины роста числа таких аварий. Это позволило определить основные направления обеспечения безопасности магистральных газопроводов.

В работе были рассмотрены существующие методы анализа риска. В результате было установлено, что для реализации процесса управления безопасностью объектов транспорта газа целесообразно использовать логико-графические методы построения и анализа "дерева отказов" и "дерева событий".

Кроме того, проведен анализ риска, включающий следующие стадии:

идентификация опасностей - выделены основные присущие системе транспорта газа опасности;

анализ частоты аварий - построены "дерево отказов" и "дерево событий", рассчитаны вероятности и частоты реализации возможных сценариев;

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

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

На основе обработанной информации построен алгоритм поиска возможного пути развития аварийной ситуации на магистральном газопроводе.

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

На базе выбранного комплекса технических средств данный алгоритм реализован программно. Корректность работы программы проверена на контрольном примере.

Правила пользования разработанным программным средством приведены в инструкции по эксплуатации программы.

Разработанная программа позволяет оперативно прослеживать ход развития аварийной ситуации на магистральном газопроводе, определять вероятности достижения системой интересующих оператора состояний.


Библиографический список

  1. Анализ аварий и несчастных случаев на трубопроводном транспорте России: учеб. пособие для вузов/ Под ред. Б.Е. Прусенко, В.Ф. Мартынюка. - М.: Анализ опасностей, 2003. - 351 с.

  2. Андриянова М.А. Управление риском эксплуатации потенциально опасных объектов. Автореферат диссертации на соискание ученой степени кандидата технических наук. Тулу, ТулГУ, 1999.

  3. Арсеньев Ю.Н., Бушинский В.И., Фатуев В.А. Принципы техногенной безопасности производств и построения систем управления риском. ТулГУ, Тула, 1994. - 111 с.

  4. Бушинский В.И., Охинько В.А., Смолин С.А., Кузьмина Н.В. Исследование влияния управления персоналом на безопасность жизнедеятельности человека. Монография. Воронеж, 1999. - 310 с.

  5. Гражданкин А.И., Дегтярев Д.В., Лисанов М.В., Печеркин А.С. Основные показатели риска аварии в терминах теории вероятностей // Безопасность труда в промышленности. - 2002. - №7. - с.35-39

  6. Захаров В. Интеллектуальные технологии в современных системах управления // Проблемы теории и практики управления. - 2005. - №4. - с.2-10

  7. Кульечев В.М., Иванов Е.А., Дадонов Ю.А., Мокроусов С.Н. Трубопроводный транспорт природного газа, нефти и нефтепродуктов и его роль в обеспечении развития и стабильности топливно-энергетического комплекса // Безопасность труда в промышленности. - 2002. - №7. - с.4-10

  8. Мартынюк В.Ф., Прусенко Б.Е. Защита окружающей среды в чрезвычайных ситуациях. Москва, 2003.

  9. Мокроусов С.Н. Пути повышения безопасности работы нефтегазового комплекса и систем магистрального трубопроводного транспорта // Безопасность труда в промышленности. - 2005. - №1. - с.18-20

  10. Поспелов Д.А. Ситуационное управление: теория и практика. - М.: Наука, 1986. - 288 с.

  11. Саати Т., Кернс К. Аналитическое планирование. Организация систем. М.: Радио и связь, 1991. - 216 с.

  12. Управление безопасностью магистральных газопроводов / В.А. Фатуев, С.А. Васин, В.И. Бушинский, В.М. Митин, К.А. Морозов; Под ред. д. т. н., проф., академика МАНЭБ В.А. Фатуева; изд.2-е; ТулГУ, М.: Недра, 2000. - 144 с.

  13. Фатуев В.А., Митин В.М., Морозов К.А., Югфельд А.С. Теоретические основы построения систем управления риском опасных производств. - Учебное пособие. Тула, Тульский государственный университет, 2000. - 179 с.

  14. Фатуев В.А., Морозов К.А., Югфельд А.С., Шадрин А.А. Обеспечение надежности магистральных газопроводов. - Тула: Гриф и К, 2003. - 130 с.

  15. Чекинов Г.П., Чекинов С.Г. Ситуационное управление: состояние и перспективы // Информационные технологии. - 2004. - №2. -Приложение


Приложение А

Текст программы управления безопасностью магистральных газопроводов:

unit MainUnit;

interface

uses

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

Dialogs, StdCtrls, ExtCtrls, Spin, ComCtrls;

const

word_max=100;

line_max=255;

colon=': ';

period='. ';

comma=',';

spase='';

equals='=';

nextrow=#13#10;

definite=100;

type

TMainForm = class (TForm)

Memo_Report: TMemo;

LE_Crash_Name: TLabeledEdit;

Bevel1: TBevel;

Bevel2: TBevel;

Bevel3: TBevel;

Bevel4: TBevel;

Bevel5: TBevel;

Bevel6: TBevel;

Bevel7: TBevel;

Label1: TLabel;

Label2: TLabel;

Bevel9: TBevel;

B_AddFact: TButton;

LE_AddFact_Frime: TLabeledEdit;

LE_AddFact_Value: TLabeledEdit;

LE_AddFact_Cf: TLabeledEdit;

B_TestFact: TButton;

LE_TestFact_Frime: TLabeledEdit;

LE_TestFact_Value: TLabeledEdit;

B_SeeFacts: TButton;

B_MakeFrimeMultivalid: TButton;

LE_MakeMulti_Frime: TLabeledEdit;

B_MakeLegal: TButton;

LE_MakeLegal_Frime: TLabeledEdit;

B_AddQuestion: TButton;

LE_AddQuestion_Frime: TLabeledEdit;

B_Answer: TButton;

LE_Answer_Frime: TLabeledEdit;

B_GetQuestion: TButton;

SE_Answer: TSpinEdit;

LE_Answer_Value: TLabeledEdit;

B_Answer_GetNumVals: TButton;

M_MakeLegal_Value: TMemo;

LE_AddQuestion_Value: TLabeledEdit;

LE_GetQuestion: TLabeledEdit;

B_GetTarget: TButton;

LE_GetTarget: TLabeledEdit;

Button1: TButton;

Bevel8: TBevel;

Button2: TButton;

Label3: TLabel;

procedure FormCreate (Sender: TObject);

procedure B_AddFactClick (Sender: TObject);

procedure B_TestFactClick (Sender: TObject);

procedure B_SeeFactsClick (Sender: TObject);

procedure B_MakeFrimeMultivalidClick (Sender: TObject);

procedure B_MakeLegalClick (Sender: TObject);

procedure B_AddQuestionClick (Sender: TObject);

procedure B_AnswerClick (Sender: TObject);

procedure B_GetQuestionClick (Sender: TObject);

procedure B_Answer_GetNumValsClick (Sender: TObject);

procedure LE_OnExit (Sender: TObject);

procedure M_MakeLegal_ValueExit (Sender: TObject);

procedure B_GetTargetClick (Sender: TObject);

procedure Button1Click (Sender: TObject);

procedure Button2Click (Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

word_string=string [word_max] ;

line_string=string [line_max] ;

value_ptr=^value;

legal_ptr=^legal_value;

frime_ptr=^frime;

value=record // значение

name: word_string; // Имя

cert: integer; // коэффициент доверия

next: value_ptr; // указатель на след. значение

end;

legal_value=record // Допустимое значение

name: word_string; // Имя

next: legal_ptr; // Указатель на следующее допуст. значение

end;

frime=record // Фрейм

name: word_string; // имя

question: line_string; // атрибут ("вопрос")

question: line_string; // атрибут ("вопрос")

multivald: boolean; // флаг многозначности

legal_list: legal_ptr; // указатель на 1ый элемент списка допустимых значений

sought: boolean; // флаг "найденности"

value_list: value_ptr; // указатель на 1ый элемент списка значений ("ответ (ы)")

next: frime_ptr // указатель на следующий фрейм

end;

prem_ptr=^prem;

con_ptr=^con;

rule_ptr=^rule;

prem=record // Предпосылка

frime: word_string; // имя фрейма

value: word_string; // имя значение

next: prem_ptr; // указатель на следующую

end;

con=record // заключение

frime: word_string; // имя фрейма

value: word_string; // имя значения

cert: integer; // коэффициент доверия

next: con_ptr; // указатель на следующее

end;

rule=record // правило

name: word_string; // имя

prem: prem_ptr; // указатель на предпосылку

con: con_ptr; // указатель на заключение

next: rule_ptr; // указатель на следующее

end;

var

MainForm: TMainForm;

last_try, // результат последнего поиска

top_fact: frime_ptr; // указатель на начало списка фреймов-объктов

top_rule: rule_ptr; // указатель на начало списка правил

rulesFile: TextFile;

explain: boolean;

procedure make_node (var curr_frime: frime_ptr);

function find_frime (f_frime: word_string): frime_ptr;

procedure split (f_line: line_string; var f_frime,f_value: word_string);

function test (f_frime,f_value: word_string): value_ptr;

procedure add_frime (f_frime,f_value: word_string);

procedure see_vals (curr_frime: frime_ptr; cf_on: boolean);

procedure see_frimes (cf_on: boolean);

function get_cf (f_line: line_string): integer;

function blend (cf1,cf2: integer): integer;

procedure add_cf (f_frime,f_value: word_string; cf2: integer);

function ok_add (f_frime: word_string; cf: integer): boolean;

procedure make_multi (f_frime: word_string);

function find_word (f_line: line_string; n: integer; var _word: word_string): boolean;

procedure add_legal (f_legal: word_string; curr_frime: frime_ptr);

function find_legal (f_frime: word_string; n: integer; var _word: word_string): boolean;

procedure make_legals (m_line: word_string);

procedure make_legals_from_form (f_frime: word_string);

procedure add_question (f_frime,s_value: word_string);

function p_question (f_frime: word_string): line_string;

procedure ask (f_frime: word_string; var f_value: word_string);

procedure p_read (var oline: line_string);

function add_prem (curr_prem: prem_ptr; f_line: line_string): prem_ptr;

function add_con (curr_con: con_ptr; f_line: line_string): con_ptr;

procedure p_rule (curr_rule: rule_ptr);

procedure enter_rule (rule_name: word_string);

procedure LoadFormFile;

procedure SaveToFile;

function find_rule (fri: word_string; curr_rule: rule_ptr): rule_ptr;

procedure pursue (f_frime: word_string);

procedure q_result (f_frime: word_string);

procedure explain_how (curr_rule: rule_ptr);

procedure explain_why (f_frime: word_string);

implementation

{$R *. dfm}

procedure make_node;

var

head: frime_ptr;

begin

new (curr_frime);

head: =top_fact;

top_fact: =curr_frime;

with curr_frime^ do begin

next: =head;

value_list: =nil;

question: ='';

legal_list: =nil;

multivald: =false;

sought: =false;

end;

end;

function find_frime;

var

curr_frime: frime_ptr;

begin

if (last_try<>nil) and (last_try^. name=f_frime)

then begin

Result: =last_try;

exit;

end

else begin

curr_frime: =top_fact;

last_try: =nil;

Result: =nil;

while (curr_frime<>nil) and (Result=nil) do begin

if (curr_frime^. name=f_frime)

then begin

Result: =curr_frime;

Last_try: =curr_frime;

exit;

end;

curr_frime: =curr_frime^. next;

end;

end;

end;

procedure split;

var

st_left,

st_right: integer;

begin

st_right: =pos (period,f_line);

if st_right=length (f_line) then f_line: =copy (f_line,1,st_right-1);

st_left: =pos (equals,f_line);

st_right: =pos (comma,f_line);

if ( (st_left=0) and (st_right=0)) then f_frime: =f_line;

if (st_right=0) then st_right: =length (f_line) +1;

if st_left>0

then begin

f_frime: =copy (f_line,1,st_left-1);

if pos (') ',f_frime) =0

then f_value: =copy (f_line,st_left+1,st_right-st_left-1);

end;

st_right: =pos (') ',f_frime);

Приложение А (продолжение)

if st_right>0 then f_frime: =copy (f_line,1,st_right-1);

end;

function test (f_frime,f_value: word_string): value_ptr;

var

curr_frime: frime_ptr;

curr_value: value_ptr;

begin

curr_frime: =find_frime (f_frime);

Result: =nil;

if curr_frime<>nil

then begin

curr_value: =curr_frime^. value_list;

while (curr_value<>nil) do begin

if curr_value^. name= f_value

then Result: =curr_value;

curr_value: =curr_value^. next;

end;

end;

end;

procedure add_frime (f_frime,f_value: word_string);

var

curr_frime: frime_ptr;

value_list,head: value_ptr;

begin

curr_frime: =find_frime (f_frime);

if curr_frime=nil

then begin

make_node (curr_frime);

curr_frime^. name: =f_frime;

end;

curr_frime^. sought: = true;

value_list: =test (f_frime, f_value);

if value_list=nil

then begin

head: =curr_frime^. value_list;

new (value_list);

with value_list^ do begin

next: =head;

cert: =0;

name: =f_value;

end;

curr_frime^. value_list: =value_list;

end;

end;

procedure see_vals;

var

curr_value: value_ptr;

cf: integer;

bufStr: string;

begin

curr_value: =curr_frime^. value_list;

bufStr: =curr_frime^. name+equals;

if curr_value=nil

then bufStr: =bufStr+' He определено';

while (curr_value<>nil) do begin

bufStr: =bufStr+curr_value^. name;

if (cf_on=true)

then begin

cf: =curr_value^. cert;

bufStr: =BufStr+' (Кд='+IntToStr (cf) +') ';

end;

curr_value: =curr_value^. next;

if curr_value<>nil then bufStr: =BufStr+','+NextRow;

end;

MainForm. Memo_Report. Lines. Add (BufStr);

end;

procedure see_frimes (cf_on: boolean);

var

curr_frime: frime_ptr;

begin

MainForm. Memo_Report. Lines. Add ('');

MainForm. Memo_Report. Lines. Add ('Просмотр фактов базы знаний: ');

curr_frime: =top_fact;

while (curr_frime<>nil) do begin

see_vals (curr_frime,cf_on);

curr_frime: =curr_frime^. next;

MainForm. Memo_Report. Lines. Add ('');

end;

end;

function get_cf;

var

resultat,

st_right: integer;

trim: line_string;

begin

Result: =definite;

st_right: =pos (period,f_line);

if st_right=length (f_line)

then f_line: =copy (f_line, 1,st_right-1);

st_right: =pos ('Кд',f_line);

if (st_right>0) and (st_right+3

then begin

trim: =copy (f_line,st_right+3,length (f_line) - st_right-2);

val (trim,Result,resultat);

if result>0 then Result: =definite;

if pos ('Плохой',trim) >0

then Result: =25;

if pos ('Средний',trim) >0

then Result: =50;

if pos ('Хороший',trim) >0

then Result: =75;

if pos ('Абсолютный',trim) >0

then Result: =definite;

end;

end;

function blend;

begin

blend: = (100* (cf1+cf2) - (cf1*cf2)) div 100;

end;

procedure add_cf (f_frime,f_value: word_string; cf2: integer);

var

cf1: integer;

curr_value: value_ptr;

begin

curr_value: =test (f_frime,f_value);

cf1: =curr_value^. cert;

curr_value^. cert: =blend (cf1,cf2);

end;

function ok_add;

var

curr_frime: frime_ptr;

curr_value: value_ptr;

is_100: boolean;

begin

is_100: =false;

curr_frime: =find_frime (f_frime);

if curr_frime<>nil

then begin

curr_value: =curr_frime^. value_list;

while (curr_value<>nil) do begin

if curr_value^. cert=definite

then begin

is_100: =true;

break;

end;

curr_value: =curr_value^. next;

end;

end;

Result: =not ( (cf=definite) and (is_100) and (not (curr_frime^. multivald)));

end;

procedure make_multi;

var

curr_frime: frime_ptr;

begin

curr_frime: =find_frime (f_frime);

if curr_frime=nil

then begin

make_node (curr_frime);

curr_frime^. name: =f_frime;

end;

curr_frime^. multivald: =true;

end;

function find_word;

var

x, com_place: integer;

begin

Result: =false;

_word: ='';

for x: =1 to n do begin

com_place: =pos (comma,f_line);

if com_place=0

then begin

com_place: =length (f_line) +1;

Result: =true;

end;

_word: =copy (f_line,1,com_place-1);

f_line: =copy (f_line,com_place+1,length (f_line) - com_place);

end;

end;

procedure add_legal;

var curr_legal,head: legal_ptr;

begin

new (curr_legal);

curr_legal^. next: =nil;

curr_legal^. name: =f_legal;

head: =curr_frime^. legal_list;

if head<>nil

then begin

while (head^. next<>nil) do

head^. next: =curr_legal;

end

else

curr_frime^. legal_list: =curr_legal;

end;

function find_legal;

var

curr_frime: frime_ptr;

curr_legal: legal_ptr;

counter: integer;

begin

curr_frime: =find_frime (f_frime);

Result: =true;

if curr_frime<>nil

then begin

curr_legal: =curr_frime^. legal_list;

_word: =curr_legal^. name;

counter: =1;

if curr_legal=nil

then Result: =false;

while (curr_legal<>nil) and (counter

curr_legal: =curr_legal^. next;

if curr_legal<>nil

then begin

_word: =curr_legal^. name;

inc (counter);

end

else

Result: =False;

end;

end

else

Result: =False;

end;

procedure make_legals;

var

curr_frime: frime_ptr;

counter,

st_place: integer;

new_line: line_string;

_word,

f_frime,

dummy: word_string;

done: boolean;

begin

split (m_line,f_frime,dummy);

curr_frime: =find_frime (f_frime);

if curr_frime=nil

then begin

make_node (curr_frime);

curr_frime^. name: =f_frime;

end;

st_place: =pos (equals,f_frime);

new_line: =copy (f_frime,st_place+1,length (f_frime) - st_place);

counter: =1;

done: =false;

while not done do begin

done: =find_word (new_line,counter,_word);

add_legal (_word,curr_frime);

counter: =counter+1;

end;

end;

procedure make_legals_from_form;

var

curr_frime: frime_ptr;

i: integer;

begin

curr_frime: =find_frime (f_frime);

if curr_frime=nil

then begin

make_node (curr_frime);

curr_frime^. name: =f_frime;

end;

with MainForm. M_MakeLegal_Value do

If Lines. Count>0 then

for i: =0 to Lines. Count-1 do

add_legal (Lines [i],curr_frime);

end;

procedure add_question;

var

curr_frime: frime_ptr;

begin

curr_frime: =find_frime (f_frime);

if curr_frime=nil

then begin

make_node (curr_frime);

curr_frime^. name: =f_frime;

end;

curr_frime^. question: =s_value;

end;

function p_question;

var

curr_frime: frime_ptr;

begin

curr_frime: =find_frime (f_frime);

if curr_frime<>nil

then begin

if curr_frime^. question<>''

then

Result: =curr_frime^. question

else

Result: ='Вопрос объекта пуст';

еnd

else

Result: ='Объект в базе не найден';

end;

procedure ask;

var

pick,

num_vals: integer;

_word: word_string;

begin

if not find_legal (f_frime,1,_word)

then begin

MainForm. Memo_Report. Lines. Add ('Введите значение и нажмите кнопку "Выбрать"');

MainForm. B_Answer_GetNumVals. Enabled: =True;

while MainForm. B_Answer_GetNumVals. Tag=0 do

Application. ProcessMessages;

MainForm. B_Answer_GetNumVals. Tag: =0;

f_value: =MainForm. LE_Answer_Value. Text; // readln (f_value)

end

else begin

num_vals: =1;

with MainForm. Memo_Report. Lines do begin

Add ('Допустимые значения объекта "'+f_frime+'": ');

while find_legal (f_frime,num_vals,_word) do begin

Add (IntToStr (num_vals) +'. '+_word);

inc (num_vals);

end;

end;

MainForm. SE_Answer. MaxValue: =num_vals-1;

MainForm. Memo_Report. Lines. Add ('Выберите номер ответа и нажмите кнопку "Выбрать"');

MainForm. B_Answer_GetNumVals. Enabled: =True;

while MainForm. B_Answer_GetNumVals. Tag=0 do

Application. ProcessMessages;

pick: =MainForm. SE_Answer. Value; // ord (select [1]) - 48;

MainForm. B_Answer_GetNumVals. Tag: =0;

find_legal (f_frime,pick,_word);

f_value: =_word;

end;

end;

procedure p_read;

var

c: char;

len,

counter,

st_place: integer;

supress: boolean;

in_line: line_string;

begin

readln (RulesFile, in_line);

in_line: =AnsiLowerCase (in_line);

oline: ='';

len: =length (in_line);

st_place: =pos (' (', in_line);

if st_place>0

then len: =st_place;

supress: =false;

for counter: =1 to len do begin

c: =in_line [counter] ;

if (c=equals) and (pos ('вопрос',oline) >0)

then supress: =true;

if ord (c) =9

then c: =' ';

if (c<>'') or (supress=true)

then oline: =concat (oline,c);

end;

end;

function add_prem;

var

new_prem: prem_ptr;

f_frime,f_value: word_string;

begin

split (f_line,f_frime,f_value);

add_prem: =curr_prem;

new (new_prem);

with new_prem^ do begin

frime: =f_frime;

value: =f_value;

next: =nil;

end;

if curr_prem=nil

then

add_prem: =new_prem

else begin

while (curr_prem^. next<>nil) do

curr_prem: =curr_prem^. next;

curr_prem^. next: =new_prem;

end;

end;

function add_con (curr_con: con_ptr; f_line: line_string): con_ptr;

var

new_con: con_ptr;

f_frime,

f_value: word_string;

begin

split (f_line,f_frime,f_value);

add_con: =curr_con;

new (new_con);

with new_con^ do begin

frime: =f_frime;

value: =f_value;

cert: =get_cf (f_line);

next: =nil;

end;

if curr_con=nil

then

Характеристики

Список файлов ВКР

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6549
Авторов
на СтудИзбе
300
Средний доход
с одного платного файла
Обучение Подробнее