Компания ALT Linux
Опубликован: 10.04.2015 | Доступ: свободный | Студентов: 762 / 0 | Длительность: 14:03:00
Специальности: Программист, Преподаватель
Лекция 1:

Введение. Средства разработки программ на языке Free Pascal

Лекция 1: 123456 || Лекция 2 >
1.4.11 Консольное приложение среды Lazarus

В Lazarus можно создавать не только визуальные приложения с графическим интерфейсом, но и писать программы на Free Pascal в текстовом режиме. Для этого существует консольное приложение.

Чтобы создать новое консольное приложение, нужно выполнить команду Проект — Создать проект..., в появившемся диалоговом окне (рис. 1.281.29) выбрать фразу Программа пользователя и нажать кнопку Создать. На экране появится окно редактора программного кода (рис. 1.48), в котором уже представлена общая структура программы на языке Free Pascal.

Окно редактора в консольном приложении

Рис. 1.48. Окно редактора в консольном приложении

В общем виде программа на языке Free Pascal состоит из заголовка программы, раздела описаний и непосредственно тела программы.

Заголовок программы состоит из ключевого слова program и имени программы. В нашем случае (рис. 1.48) это Project1. Имя было присвоено программе автоматически. При желании его можно изменить.

Раздел описаний обычно включает в себя описание констант, типов, переменных, процедур и функций. На рис. 1.48 видно, что раздел описаний начинается со слова uses. Это раздел подключения модулей. Модуль — это специальная программа, которая расширяет возможности языка программирования. В нашем случае происходит подключение модуля SysUtils, который позволяет работать с файлами и каталогами, и модуля Classes, который работает с компонентами.

За разделом описаний следует исполняемая часть программы, или тело программы. Оно начинается со служебного слова begin и заканчивается служебным словом end и точкой. Тело программы содержит операторы языка, предназначенные для реализации поставленной задачи.

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

Рассмотрим пример. Пусть нужно решить задачу перевода градусной меры угла в радианную. Эта задача известна из школьного курса и формулируется так: чтобы найти радианную меру какогонибудь угла по данной градусной мере, нужно умножить число градусов на π/180, число минут на π/(180 * 60) и найденные произведения сложить.

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

	
program Project1;
{$mode objfpc}{$H+}
uses
	Classes, SysUtils
		{ you can add units after this };
var
	gradus, minuta : integer;
	radian : real;
begin
	write ( ’ gradus= ’ );
	readln ( gradus );
	write ( ’ minuta= ’ );
	readln ( minuta );
	radian := gradus * p i /180+minuta * p i / ( 180 * 60 );
	writeln ( ’ radian= ’, radian );
end.

Сохранить, открыть, откомпилировать, скомпоновать и запустить на выполнение программу в консольном приложении можно так же, как и в визуальном проекте. Результаты работы нашей программы будет иметь вид:

	
gradus=165
minuta=30
radian=2.8885199120506E+000

Нетрудно заметить, что к тексту, созданному автоматически, мы добавили описание переменных (все используемые в программе переменные должны быть описаны).

	
var
	gradus, minuta : integer; //Описаны две целочисленные переменные.
	radian : real; //Описана вещественная переменная.

и тело программы

	
begin //Начало тела программы.
	write ( ’ gradus= ’ ); //Вывод на экран символов gradus=.
	readln ( gradus ); //Ввод переменной gradus.
	write ( ’ minuta= ’ ); //Вывод на экран символов minuta=.
	readln ( minuta ); //Ввод переменной minuta.
	radian := gradus * pi /180+minuta * pi / ( 180 * 60 ); //Вычисление.
	writeln ( ’ radian= ’, radian ); //Вывод результата вычислений.
end. //Конец тела программы.

Так как в этой программе графический интерфейс отсутствует, мы разработали элементарный текстовый диалог "компьютер — пользователь". Для этого были использованы операторы ввода (read) и вывода (write) данных.

1.4.12 Операторы ввода — вывода данных

Ввод информации с клавиатуры осуществляется с помощью оператора read. Он может иметь один из следующих форматов:

read ( x1, x2,..., xn );

или

readln ( x1, x2,..., xn );

где x1, x2,..., xn — список вводимых переменных. При вводе вещественных значений целую и дробную часть числа следует разделять точкой.

Когда в программе встречается оператор read, её действие приостанавливается до тех пор, пока не будут введены исходные данные. При вводе числовых значений два числа считаются разделёнными, если между ними есть хотя бы один пробел, символ табуляции или конца строки (Enter). После ввода последнего значения следует нажать Enter.

Оператор readln аналогичен оператору read, разница заключается в том, что после считывания последнего в списке значения для одного оператора readln данные для следующего оператора readln будут считываться с начала новой строки. Но следует помнить, что Enter переведёт курсор на новую строку независимо от того, как именно происходит считывание данных.

Для вывода информации на экран служат операторы write и writeln. В общем случае эти операторы имеют вид:

write ( x1, x2,..., xn );

или

writeln ( x1, x2,..., xn );

где x1, x2,..., xn представляют собой список выводимых переменных, констант, выражений. Если элемент списка — текстовая информация, её необходимо взять в кавычки.

Операторы write и writeln последовательно выводят все переменные. Если используется оператор writeln, то после вывода информации курсор перемещается в новую строку.

Итак, в нашем примере оператор write(’gradus=’); выводит на экран символы gradus=, которые подсказывают пользователю, что он должен ввести значение переменной gradus, а оператор readln(gradus); предназначен для ввода значения переменной gradus. Оператор writeln(’radian=’, radian); выводит на экран два значения: строку radian= и значение переменной radian.

Как правило, вещественные данные выводятся в формате с плавающей точкой:

\#.\#\#\#\#\#\#\#\#\#\#\#E\pm\#\#\#,

где # — любая десятичная цифра от 0 до 9. Для того чтобы перейти к формату с фиксированной точкой, нужно число, расположенное до символа E (мантиссу числа), умножить на 10, возведённое в степень, значение которой указано после числа E (порядок числа). Например,

0.35469000000E - 01 = 0.35469000000 * 10^{-1}= 0.035469,\\
-5.43286710000E + 02 = -5.43286710000 * 10^2= -543.28671.

Чтобы выводить числа в формате с фиксированной точкой, необходимо использовать форматированный вывод. Для этого оператор write или writeln нужно задать следующим образом:

write (идентификатор : ширина_поля_вывода : дробная_часть );

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

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

	
gradus=165
minuta=30
radian=2.8885199120506E+000

Понятно, что оператор

writeln ( ’ radian= ’, radian );

вывел на экран значение переменной radian в формате с плавающей точкой.

Если воспользоваться оператором

writeln ( ’ radian= ’, radian : 5 : 3 );

то результат работы программы будет таким:

	
gradus=165
minuta=30
radian=2.889

где значение переменной radian представлено в формате с фиксированной точкой (всё число занимает пять позиций и три из них после запятой).

Лекция 1: 123456 || Лекция 2 >
Юрий Шутиков
Юрий Шутиков

По первому тесту выполнил дважды задания. Результат получается правильный (проверял калькулятором). Пишет, что "Задание не проверено" и предлагает повторить. 
 

Евгений Силуков
Евгений Силуков

Еще в декабре выполнил тест №1, а его все так и не проверили.