Описание логики работы программы

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

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

В отдельном потоке происходит изменение чисел, путем последовательного возрастания от 1 до 20.

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

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

Приложение состоит из 3-х модулей (unit). Два из которых содержат формы и один(модуль) — поток TMyThread.

Листинг программы приведен в приложении А.

При разработке программного обеспечения были использованы следующие команды и действия:

Конъюнкция, дизъюнкция, импликация, эквиваленция, отрицание. На примерах из жизни. Логика.

· Создали поток класса TThread : TMyThread = class(TThread).

· Описали класс TThread: procedure TMyThread.Execute.

· Создали на форме поле Мemo, в котором будет отображаться поток.

· Для реализации запуска, приостановления и возобновления потока, а также остановки, сохранения и загрузки сохраненного потока реализовано следующее меню, состоящее из 5 основных кнопок:

— «Запуск» — запускает поток;

— «Пауза» — «Продолжить» — приостанавливает и возобновляет поток;

— «Остановка» — останавливает и сохраняет поток;

— «Сохранить» — сохраняет поток;

— «Загрузка» — загружает сохраненный поток.

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

· Добавили модуль SyncObjs, в котором находятся классы для реализации синхронизации.

· Использовали класс Tcriticalsection. Этот класс позволяет нам выполнять только один поток. При использовании нескольких потоков он дает возможность завершиться первому потоку, после чего будет начат второй поток.

· Для того, чтобы сохранить данные с поля Мemo мы использовали строку Memo1.Lines.SaveToFile(ExtractFilePath(Application.ExeName) + Save.txt’); где ExtractFilePath(Application.ExeName) — это путь к нашему проекту.

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

Описание пользовательского интерфейса

В интерфейсе проекта используются компоненты Delphi: Button, Memo, Label, SpinEdit.

Label — предназначен для отображения статического текста, то есть надписей и меток на Форме, которые не меняются в течение всего времени работы программы.

Memo — используется для ввода больших объёмов текста.

Button — используется для реализации в программе команд с помощью обработчика события OnClick этого компонента.

Небольшое описание базовой логики работы программы

SpinEdit — представляет собой сочетание Edit и UpDown, оформленное как отдельный тип компонента.

При запуске проекта мы попадаем на следующую форму:

Запуск проекта

Рис.1. Запуск проекта.

Далее при нажатии на кнопку «Запуск» происходит запуск потока путем последовательного возрастания чисел от 1 до 20.

Запуск потока

Рис.2. Запуск потока.

Запущенный поток можно приостановить, нажав на кнопку «Пауза», после чего кнопка «Пауза» меняется на кнопку «Продолжить», при нажатии на которую поток возобновляется.

Приостановка потока

Рис.3. Приостановка потока.

Возобновление потока

Рис.4. Возобновление потока.

Запущенный поток можно остановить и сохранить, нажав на кнопку «Остановка», после чего появляется окно о сохранении потока. При нажатии на кнопку «Да» поток сохраняется. Можно отказаться от сохранения потока, нажав на кнопку «Нет». Впоследствии остановленный поток возможно сохранить при нажатии на кнопку «Сохранить».

Остановка и сохранение потока

Рис.5. Остановка и сохранение потока.

Сохраненный поток возможно загрузить с состояния, с которого он был остановлен, и продолжить, нажав на кнопки «Загрузить» и «Запуск».

Загрузка сохраненного потока

Рис.6. Загрузка сохраненного потока.

Продолжение потока с сохраненного состояния

Рис.7. Продолжение потока с сохраненного состояния.

Так же в проекте есть дополнительная форма для вывода информация о проекте.

О программе

Рис.8. О программе.

Источник: studentopedia.ru

Описание логического представления данных

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

Интерес к персональным компьютерам постоянно растет,а круг их пользователей непрерывно расширяется.В число пользователей ПЭВМ вовлекаются как новички в компьютерном деле,так и специалисты по другим классам ЭВМ.

Язык С++ — универсальный язык общего назначения, область приложений которого — программирование систем в самом широком смысле. Кроме этого, С++ успешно используется как во многих приложениях, так и в мощных операционных системах. Реализация С++ осуществлена для машин в диапазоне от самых простых персональных компьютеров до самых мощных суперкомпьютеров и для всех операционных систем.

Постановка задачи

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

1) Ввод данных о книгах , имеющихся в библиотеке:название книги , автор , количество экземпляров , порядковый номер , стоимость книги

2) Вывод информации на экран (в файл) по запросу о книгах , имеющихся в библиотеке: читальном зале , абонементе , хранилище по названию , автору, тематике.

3) Сбор статистики о книгах одного автора с разными названиями.

4) Построение графической диаграммы для пункта по выбору.

Работа программы должна быть организована с использованием меню.

Программу разработать на языке С++ v.3.1.

Метод решения задачи

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

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

Читайте также:
Кто проводит обучение работников по специальным программам птм непосредственно в организации

Описание логического представления данных

Входными данными в программе являются:

Файл базы данных , который записан на диске в файле librarym.dat.

Данные , которые в процессе работы программы можно добавить , удалить или отредактировать.

Выходными данными в программе являются:

Данные , сортированные по названию или автору

Результат поиска по заданной маске

Файл базы данных , который записывается на диск в файл librarym.dat при завершении работы программы.

Данные об книге хранятся в массиве структур типа books:

Поле Тип Название
name строка 30 символов типа char Название
fio строка 30 символов типа char Автор
num int Количество
price float Стоимость
number long Порядковый номер
loc int Расположение
ss int Тематика
nn int Номер по названию
nf int Номер по автору

Глобальные переменные программы:

Поле Тип Название
cdt массив переменных типа books на 501 элемент Массив данных о странах
cnum Int Количество книг
sort Char тип сортировки
ftm Char Расположение

6 Спецификация на функциональные модули

Строка вызова: if (cmp(cdt[n].name,cdt[500].name)cmp(cdt[n].fio,cdt[500].fio) (cdt[n].price>=cdt[500].price))
Назначение: Осуществляет сравнение строки с маской
Функции: Просматривает последовательно заданную строку , и если в ней найдена маска , то возвращается 1 , если нет — 0.
Логические переменные: *a (char) — указатель на строку *b (char) — указатель на маску для поиска
Внутренние переменные: k (int) — результат сравнения n (int) — счётчик
Вызывает функции: нет
Вызывается из: index , find

6.2 Функция output

Строка вызова: output(sv,sk)
Назначение: Осуществляет вывод на экран списка книг
Функции: Очистка экрана , вывод 10 элементов , если элемент выбран , выделение цветом , вывод данных о книге на экран.
Логические переменные: sv,sk (int) — координаты первого элемента на экране
Внутренние переменные: n (int) — счётчик m (int) — временная переменная nd (int) — порядковый номер данной книги
Вызывает функции: нет
Вызывается из: scroll

6.3 Функция menu

Строка вызова: st=menu(30,5,»Добавить в список » «Удалить из списка » «Редактировать » «По Автору » «По Названию » «Выход в главное меню» «x0″) st=menu(30,5,» Список книг » » Поиск по маске » » Количество книг » » Выход из программы » «x0″) st=menu(40,6,» Расположение: » » Читальный зал » » Абонемент » » Хранилище » «x0»)
Назначение: Осуществляет обработку меню
Функции: Вывод меню на экран , опрос клавиатуры , при нажатии клавиш управления курсором (вверх , вниз) перемещение цветового курсора по пунктам меню , выбор определённого пункта меню при нажатии клавиши с номером пункта меню , при нажатии клавиши Enter возвращается номер выбранного пункта меню , при нажатии клавиши Esc возвращается -1.
Логические переменные: *capt (char) — указатель на текст меню x,y — координаты вывода меню на экран
Внутренние переменные: n,m (int) — Счетчики num (int) — Количество пунктов k (int) — Выбранный пункт *pt (char) — Временный указатель на символ c (char) — Считанный с клавиатуры символ
Вызывает функции: нет
Вызывается из: scroll , main

6.4 Функция sinput

Строка вызова: SInput(cdt[ed].name,30,35,6) SInput(cdt[ed].fio,30,35,8) SInput(name,40,20,23)
Назначение: Осуществляет ввод строки.
Функции: Вывод пустой строки , установка координат , вывод строки запроса, считывание строки посимвольно с клавиатуры , выход , если нажата клавиша Enter или Esc , если нажата Esc то строка не записывается.
Логические переменные: *s (char) — указатель на строку lng (int) — максимальная длина x,y — координаты ввода
Внутренние переменные: rs[100] (char) — Временная строка n (int) — Счетчик c (char) — Введённый с клавиатуры символ
Вызывает функции: нет
Вызывается из: edit , find

6.5 Функция dinput

Строка вызова: cdt[ed].price=DInput(35,10) cdt[ed].number=DInput(35,12) cdt[ed].num=DInput(35,14)
Назначение: Осуществляет ввод числа.
Функции: Вывод пустой строки , установка координат , вывод строки запроса, считывание строки посимвольно с клавиатуры , получение введённого числа , выход , если нажата клавиша Enter или Esc , если нажата Esc то число не записывается.
Логические переменные: *s (char) — указатель на строку lng (int) — максимальная длина x,y — координаты ввода
Внутренние переменные: s[100] (char) — Временная строка * сtpe (char) — указатель на сторку rs (double) — Результат n (int) — Счетчик c (char) — Введённый с клавиатуры символ
Вызывает функции: нет
Вызывается из: edit

6.6 Функция graph

Строка вызова: graph()
Назначение: Осуществляет построения столбчатой диаграммы по распределению книг .
Функции: Определение масштаба , построение осей координат , вывод диаграммы , ожидание нажатия пользователем клавиши.
Логические переменные: нет
Внутренние переменные: drv,mode (int) — для инициализации графики c (int) — Цвет k1,k2,k3 (int) — количество книг n (int) — Счетчик m (int) — Масштаб
Вызывает функции: нет
Вызывается из: main

6.7 Функция index

Строка вызова: index()
Назначение: Осуществляет индексирование массива — назначение номеров элементов по алфавиту для каждого поля записи.
Функции: Cтирание старых индексов , перебор всех возможных мест хранения , индексация по автору , поиск наименьшего , индексация по названию , поиск наименьшего.
Логические переменные: нет
Внутренние переменные: n,m (int) — счётчики tm (int) — перебор тем mxc (char[100]) — значение наименьшей строки nm (int) — номер очередного элемента
Вызывает функции: cmp
Вызывается из: scroll

6.8 Функция edit

Строка вызова: edit(cnum-1) edit(n) edit(500)
Назначение: Осуществляет редактирование элемента массива.
Функции: Ввод данных , вывод одного из полей структуры , опрос клавиатуры , выбор действия — редактирование поля или выход (клавиша Esc).
Логические переменные: ed (int) — номер элемента массива
Внутренние переменные: n (int) — счётчик en (int) — редактируемое поле c (char) — Введённый с клавиатуры символ
Вызывает функции: sinput , dinput
Вызывается из: scroll

6.9 Функция find

Строка вызова: find()
Назначение: Осуществляет поиск элемента в заданной строке по заданной маске.
Функции: Поиск элемента , Возврат результатов в файл или на экран.
Логические переменные: нет
Внутренние переменные: n (int) — счётчик *F(file — файл ввода name[50] (char) — Имя файла
Вызывает функции: cmp , sinput
Вызывается из: main

6.10 Функция scroll

Строка вызова: scroll ()
Назначение: Осуществляет обработку списка.
Функции: Вывод списка на экран , ввод символа с клавиатуры, обработка символа , в воодветствии с нажатой клавишей вызов меню , выбор пункта меню , выполнение действия , выход.
Логические переменные: нет
Внутренние переменные: st (int) — номер выбранного пункта меню n (int) — счётчик c (char) — Введённый с клавиатуры символ sv , sk (int) — первый элемент на экране и положение курсора
Вызывает функции: output , menu , edit , index.
Вызывается из: main
Читайте также:
Программы для бега лучшие

6.11 Функция load

Строка вызова: load()
Назначение: Осуществляет загрузку базы данных из файла.
Функции: Открытие файла с именем librarym.dat , чтение количества строк в массиве , чтение данных в массив , закрытие файла.
Логические переменные: нет
Внутренние переменные: *f (file) — указатель на файл
Вызывает функции: нет
Вызывается из: main

6.12 Функция save

Строка вызова: save()
Назначение: Осуществляет запись базы данных в файл.
Функции: Открытие файла librarym.dat , запись количества элементов , запись данных в файл , закрытие файла.
Логические переменные: нет
Внутренние переменные: *f (file) — указатель на файл
Вызывает функции: нет
Вызывается из: main

6.13 Основная программа — main

Назначение: Осуществляет установку начальных значений , чтение базы данных из файла , обработку , запись базы данных в файл.
Функции: Установка начальных значений переменных , вызов функции чтения данных из файла , вызов функции обработки , обработку меню, поиск по маске , построение диаграммы , вызов функции записи в файл ,установка параметров , выход из программы.
Вызывает функции: load , save , scroll , menu , find , graph.

Источник: megaobuchalka.ru

Описание логики работы программы

Документальные учебные фильмы. Серия «Программирование на CODESYS».

Речь пойдет о логических операциях, то есть об операциях «И», «ИЛИ», «НЕ».

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

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

Напомним, с чего мы начинаем всякий раз работу с CoDeSys. Когда Вы загрузили систему программирования, Вы создаете новый проект через меню «Файл». Там необходимо выбирать пункт «Создать». В появившемся окне «Настройки целевой платформы» мы выбираем тот тип ПЛК, с которым будем работать. В данном случае я выбираю ПЛК150-И-М, это не так важно, нам подойдет любой из них.

Мы продолжаем работать с языком функциональных блоков CFC. Именно этот язык выбираем при создании главной программы PLC_ PRG .

После этого переходим на вкладку ресурсы, выбираем пункт «Конфигурация ПЛК». Ранее я уже упоминал, что работа ПЛК происходит циклически. В программе мы описываем действия для одного цикла, одного повторения. А дальше, после загрузки проекта в ПЛК, котроллер постоянно повторяет подготовленный нами алгоритм.

Именно в этом разница между программированием приложений для персонального компьютера, и работой с задачами АСУ ТП. Итак, нам необходимо задать контроллеру время цикла его работы (время цикла ПЛК). То есть определить, с какой частотой необходимо повторять обработку программы. Для этого в окне «Конфигурации ПЛК» выделяем верхний пункт «PLC 150 I».

У Вас, в зависимости от вашей модели ПЛК, могут быть другие обозначения. Затем переходим на вкладку «Параметры модуля», расположенную в правой верхней части экрана.

По умолчанию, время цикла ПЛК1хх составляет 1 мс. То есть каждую миллисекунду ПЛК заново запускает обработку нашего алгоритма. И должен успеть ее завершить. Для тех простых программ, которыми мы занимаемся в рамках обучения, такая скорость обработки вполне допустима. С другой стороны, в более серьезных задачах полезно задать некоторый запас производительности ПЛК.

То есть указать время цикла, скажем, 10 мс. Для 80% задач, решаемых ПЛК1хх, этого будет достаточно. Возьмите себе за правило сразу же после создания проекта задавать время цикла 10 мс. Для этого в первой строчке, в поле «Значение» вместо 1 мс поставьте 10 мс. Это время цикла, за которое контроллер будет обрабатывать нашу программу.

Для того чтобы разобраться с работой дискретной логики, нам понадобится несколько входов и выходов ПЛК. Для этого Вы раскрываете элементы конфигурации ПЛК и задаете шесть дискретных входов. Пусть это будут переменные x1, х2, хЗ и т.д.

Напомню, для того, чтобы определить имя переменной для того или иного входа или выхода, Вы два раза щелкаете ЛКМ на надписи «АТ» в нужной строчке. Затем вводите имя переменной (английскими буквами и цифрами без пробелов), нажимаете «Enter» на вашей клавиатуре. Таким образом, у нас получилось 6 дискретных входов. По аналогии задаем четыре дискретных выхода. Пусть это будут переменные у1, у2, уЗ и у4.

• Вы определились с target-файлом,

• создали главную программу и выбрали язык программирования,

• задали время работы цикла ПЛК,

• определились с необходимыми входами и выходами,

• сохранили проект на вашем компьютере.

Вернемся к нашей главной программе. Напомню, она находится на вкладке «POU». Переходим нее и два раза щелкаем ЛКМ на программу «PLC PRG»

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

. Нажимаем на нее, переносим курсор на рабочую область и нажимаем левой кнопкой мыши еще раз, устанавливая элемент в нужном месте рабочей области. По умолчанию блок, который мы добавили, будет выполнять операцию логического «И». Она задается ключевым словом «AND».

Аналогичный блок можно вызвать через контекстное меню, нажав в рабочей области ПКМ и выбрав пункт «Элемент».

На вход операции «AND» подаются переменные типа «BOOL». Как раз такими переменными являются наши дискретные входы. В нашей программе мы вызываем значение переменной,

используя кнопку «Вход» . Можно это сделать через кнопку «F2» на вашей клавиатуре. В появившемся окне выбираем список глобальных переменных, и в нем находим нужные нам переменные х1 и х2 (рис.3.7).

Читайте также:
Как выйти из программы в навигаторе

Затем проводим линии связи.

На выходе операции логического «И» (блок AND) будет появляться сигнал TRUE или FALSE («ИСТИНА» или «ЛОЖЬ»), То есть значение типа BOOL. Это значение мы можем присвоить переменной того же типа, например, выходу y1. Для этого добавляем выход (

Вместо знаков вопроса прописываем имя переменной y1. Затем проводим линию связи между выходом операции AND и переменной y1.

Во время первых опытов работы с CoDeSys у Вас могут возникать некоторые сложности с изменением положения тех или иных элементов программы в рабочей области. Давайте разберем подробнее этот момент. Если Вам необходимо передвинуть один или несколько элементов программы в другое место, Вы выделяете нужную часть алгоритма, удерживая ЛКМ .

Постарайтесь сделать так, чтобы все элементы целиком попали в выделенную область. В результате, после отпускания ЛКМ один или несколько элементов окажутся выделенными пунктиром .

Давайте посмотрим, какие еще логические операции можно добавить в наш проект. Если Вам необходимо поработать с операцией «ИЛИ» вместо «И», то сделать это можно следующим образом. Вы добавляете новый элемент, выделяете заголовок ЛКМ и печатаете новое название «OR», затем нажимаете «Enter» .

Получили блок «ИЛИ». Принцип работы с ним абсолютно тот же самый. Мы вызываем в алгоритме значения дискретных входов ПЛК, на этот раз хЗ и х4. Затем подводим линии связи к нашему блоку OR. Результат работы этого блока мы будем передавать на второй дискретный выход контроллера, т.е. в переменную у2. На рисунке изображено то,

что должно было у Вас получиться.

Теперь поработаем с операцией «логическое НЕ» — блок NOT. Она, по сути, является той же самой инверсией . Сейчас мы разберем просто другой способ, как ее можно задать. Нажимаете кнопку «Элемент» или через ПКМ вызываете контекстное меню и выбираете пункт «Элемент». Таким образом создается новый блок и вместо надписи AND в нем задаете ключевое слово NOT. На выход операции NOT подключаете переменную уЗ.

Важный момент! С выхода одного и того же блока или из одной и той же переменной линию связи Вы можете вести на один или несколько возможных приемников этого самого сигнала. Поясню: из операции OR мы можем протянуть вторую линию связи на вход операции NOT. Для этого нажимаем ЛКМ на выход блока OR, т.е. на самый конец выходящей из него линии связи .

Удерживая ЛКМ, перетаскиваем вторую линию связи на вход блока NOT

, затем отпускаем ЛКМ. Полученный результат изображен на рисунке.

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

Тем же способом вы можете значение одной и той же переменной передавать на несколько блоков.

Для того чтобы удалить ненужную линию связи, Вы выделяете один из ее концов . Затем нажимаете на клавиатуре кнопку Del (Delete).

Вернемся к нашему алгоритму. Теперь, когда на выходе операции OR будет значение FALSE, у нас с Вами на выходе уЗ будет появляться сигнал TRUE, в то время как в переменной у2 он будет пропадать. И наоборот, когда на выходе OR появляется сигнал TRUE, он записывается в у2. В блоке NOT этот сигнал будет преобразовываться в FALSE и поступать в переменную уЗ. А в результате релейные выходы нашего ПЛК все время будут в разных состояниях.

Последний логический оператор в рамках этой главы — это «Исключающее ИЛИ». Он довольно часто используемый, например, для реализации проходных выключателей. «Исключающее ИЛИ» задается с помощью ключевого слова XOR.

На вход этой операции будем подавать значения переменных типа BOOL, например, переменные х5 и хб. Для того чтобы использовать повторно какие-то готовые части уже написанного алгоритма, мы можем воспользоваться стандартными операциями «Копировать» и «Вставить». При добавлении блока XOR используем их. Для начала, выделим цепь с оператором OR.

Затем сверху, на панели быстрого доступа нажимаем кнопку «Копировать» . Можно также использовать хорошо знакомое многим сочетание клавиш Ctrl+C.

Затем мы вставляем сделанную копию, для этого нажимаем кнопку «Вставить» .

На экране появляется копия выбранной части алгоритма. Нажав и удерживая ЛКМ на выделенных частях появившейся копии, мы перетаскиваем ее на новое место в рабочей области.

Теперь нам необходимо поменять в заголовке элемента оператор OR на оператор XOR. В качестве входных данных мы будем использовать переменные х5 и хб. Для замены имени переменной Вы просто нажимаете на соответствующий блок входа ЛКМ. Затем с клавиатуры вводите новое имя. Результат работы блока XOR будем передавать в переменную у4.

Суть операции XOR в следующем: когда значение переменных х5 и хб будут неодинаковыми, например, один — FALSE, а другой — TRUE, в переменной у4 будет сигнал TRUE. То есть выход у4 будет включен. Когда же х5 равно хб (либо обе переменные в состоянии «ЛОЖЬ», либо обе в состоянии «ИСТИНА»), тогда на выходе «ИСКЛЮЧАЮЩЕГО ИЛИ» будет значение «ЛОЖЬ».

Сейчас мы с Вами все это проверим, запустив программу непосредственно на ПЛК. Прежде чем это делать, еще несколько вещей, которые полезно себе записать и запомнить.

Перед загрузкой проекта на исполнение:

• Расставляем порядок обработки: нажимаем ПКМ на свободную область, выбираем «Порядок», а затем «В соответствии с потоком данных». Нумерация элементов, то есть порядок их обработки, станет более правильной.

• Сохраняем проект (Ctrl+s).

• Запускаем проект на проверку, т.е. компилируем. Для этого в меню «Проект» выбираем пункт «Компилировать все», либо нажимаем клавишу F11. Внизу, в окне сообщений, мы должны увидеть, что ошибок у нас «О». То есть можно этот простой алгоритм запускать на исполнение. Если ошибки все-таки есть, вам необходимо их исправить и снова запустить компиляцию.

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru