Стандартные функции и процедуры 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Стандартные функции и процедуры



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

математические;

преобразования типов;

обработки строк;

обработки числовых массивов;

доступа и управления файлами;

прочие процедуры и функции.

В качестве примера приведем имеющиеся в Object Pascal математические стандартные функции:

Таблица 1.2 математические стандартные функции.

         
  Стандартная функция Название Тип аргумента Тип результата  
  Abs(X) абсолютное значение Целое или вещественное выражение Совпадает с типом аргумента  
  ArcTan(X) арктангенс то же вещественный  
  Cos(x) косинус то же то же  
  Exp(x) экспонента то же то же  
  Frac(x) дробная часть аргумента:X-lnt(x) то же то же  
  Int(x) целая часть аргумента то же целый  
  Sqr(x) квадрат аргумента то же аргумента совпадает с типом  
  Sqrt(x) квадратный корень то же вещественный  
           

Лекция 4.Операторы.Ввод-вывод информации.

Операторы

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

Простые операторы - это операторы, не содержащие в качестве составных частей другие операторы. К простым относятся: оператор присваивания, оператор процедуры оператор перехода goto, пустой оператор. К сложным относятся: составной оператор условный оператор if, оператор выбора case, оператор цикла с параметром for, оператор цикла с предусловием while, оператор цикла с постусловием repeat, и оператор присоединения with.

Операторы можно помечать метками и ссылаться на них в операторах перехода goto. Пустой оператор не выполняет никаких действий, в него не входят какие- либо символы. Например, если в программе идут дна подряд символа «точка с запятой», то это означает, что между ними находиться пустой оператор. Или,если перед зарезервированным словом and стоит «;», то это означает, что между «;» и and стоит пустой оператор. Пустой оператор может быть помечен меткой и, таким образом, быть использованным для передачи управления в программе.

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

В общем виде оператор записывается:

< переменная >:= <выражение >;

Переменная и выражение должны быть идентичного или совместимого для присваивания типа. Например, переменной вещественного типа можно присвоить значение выражения вещественного или целого типа. Переменной же целого типа нельзя присвоить значение выражения вещественного типа.

Примеры использования оператора присваивания:

a:=b+с;

х:=(0<а) and (а<3);

w:=sin(sqr(t))/(s+ln(v));

s:=' строка';

d:=[ red, white, black, blue ];

Ввод-вывод информации

В консольном приложении ввод данных с клавиатуры осуществляется при помощи стандартных процедур read и readln, а вывод на экран дисплея - при помощи процедур write и writeln.

Процедуры Read и Readln

В Object Pascal имеет две основные процедуры ввода Read и Readln, которые используются для чтения данных, вводимых с клавиатуры. Общий формат этих процедур следующий:

Read(элемент1,элемент2,…); или

Readln(элемент1,элемент2,...); где каждый элемент представляет собой переменную целого, вещественного, символьного или строкового типа, например:

read(x,y,z);

readln(name,age);

При выполнении процедуры read происходит следующее. Программа приостанавливает свою работу и ждет, пока на клавиатуре будут набраны нужные данные и нажата клавиша Enter.

После нажатия клавиши Enter, введенные значения присваиваются переменным, имена которых указаны в процедуре read.

Данные, которые вводятся с клавиатуры, представляют собой символьные строки независимо от того, что он и содержат - числа или символы. При выполнении процедуры read эти строковые значения автоматически преобразуются к типу тех переменных, которым они предназначены. Например, в результате выполнения процедуры

Read(x0); и ввода с клавиатуры строки 32, значением переменной x0 будет целое число 32,если x0 имело тип integer, и вещественные число 32.0,если x0 имеет тип real.

Одна процедура read позволяет внести значения нескольких переменных. Если вводятся числовые значения, то они должны быть набраны в одной строке и разделены пробелами. Например, если тип переменных х,у и z - real, то в результате выполнения процедуры

read(х,у,z);

и ввода с клавиатуры строки

5.25, 10, -0.05

переменные будут иметь следующие значения:

х=5.25, у=10. 0, z=-0.05.

Если в строке экрана после запуска программы набрано больше чисел, чем задано элементов в списке ввода процедуры read, то оставшаяся часть строки будет проигнорирована или обработана следующей процедурой read, если такая имеется. Например, если k, I — переменные целого типа, то в результате выполнения процедур:

read(i,к);

read(I);

и ввода с клавиатуры строки

5, 10, 15

переменные получат следующие значения:

I=5, k=10, 1=15.

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

readln(s, t,w);

read(q); и ввода с клавиатуры строки

6, 9, 12, 15

переменные получат следующие значения (в предположении, что они все имеют целый тип):

s=6, t=9, w=12.

После чего программа будет ожидать нажатия клавиши Enter и ввода нового числа с новой строки дисплея, чтобы присвоить его переменной q.

Рассмотрим решение следующей задачи. Пусть требуется ввести данные: a= 3,7; b=-1,6 10^6; k= 101; 1=-25; с’*’; d=’?’; p=true и изобразить строки ввода данных на экране дисплея.

При решении этой задачи следует учитывать, что данные целого и вещественного типов отделяются друг от друга пробелами в строке ввода. Это значения переменных a,b,k и I. Целая часть от дробной отделяется точкой. Данные символьного типа (значе-ния переменных с и d) записываются в строке ввода подряд, без использования пробела в качестве разделителя. Данные логического типа (значение переменной р) нельзя вводить с использованием процедуры ввода. Одним из вариантов решения этой задачи может быть следующий:

................

const p=true;

readln(a,b,k,1);

readln(c,d);

...............

Строки ввода данных:

3.7, -1.6е-6, 101, -25

Процедуры Write и Writeln

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

writeln(элемент1,элемент2,...);

где каждый элемент - это то, что нужно напечатать на экране. Элементом списка вывода, может быть, например, целое или вещественное число (3.42,-1732.3), символ (‘a',’ Z’), строка ('Hello,world') или логические значение (true). Кроме того, им может быть именованная константа, переменная, разыменованный указатель или обращение к функции если она возвращает значение, которое имеет целый, вещественный, символьный, строковый или логический тип. Все элементы печатаются в одной строке дисплея в заданном порядке. После этого курсор устанавливается в начало следующей строки. Если вы хотите оставить курсор на той же строке после последнего элемента, то используйте процедуру:

write(элемент1,элемент2,...);

Когда распечатываются элементы списка вывода при помощи процедуры writeln, между ними пробелы автоматически не вставляются. Поэтому, если вы хотите разделим выводимые значения пробелами, то они должны быть указаны в списке вывода непосредственно, например:

writeln(a,' ',b,' ',...);

Предположим, что переменные x,y,z и student имеют значения: х:= 2; у:= 4: z:= 6 student:=’Ivan'. Тогда выполнение процедур вывода приведет к появлению на экране следующих строк:

Процедуры выводаРезультат

writeln(x,y,z); 246

writeln(x,' ',у,’ ', z); 2 4 6

writeln(‘Hello’,student); Hellolvan

writeln(‘Hello’,student); Hello, Ivan.

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

writeln(элемент1: ширина1, элемент2:ширина2,...)

где ширина - целое выражение (константа, переменная, обращение к функции или комбинация из них), определяющее общую длину поля, в котором должен быть записан элемент. Например, для переменных целого типа, имеющих значения k=50, m=3, n= 200 форматный вывод на экран дисплея даст следующий результат:

Процедуры вывода Результат

writeln(k,m,n); 503200

writeln(k:2,m:2,n:2); 50 3200

writeln (k: 3,m: 3,n: 3); 50 3200

writeln(k,m:2,n:4); 50 3 200

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

Что произойдет, если ширина поля меньше, чем необходимо? Во второй процедуре writeln из приведенного выше примера для переменной n, имеющей значение 200, указанна ширина поля 2, хотя необходима ширина 3. Мы видим, что в этом случае Object Pascal увеличил ширину поля до минимально необходимого размера.

Рассмотренный выше способ задания формата можно использовать для целых и ве-щественных значений, символов, строк и логических выражений. Однако при таком задании ширины поля вещественные числа распечатываются в экспоненциальной форме. Так для w = 123.45 будем иметь:

Процедуры вывода Результат

writeln(w); 1.2345000Q000000E+02

writeln(w:8); 1.2E+0002

Поэтому в Object Pascal для вещественных значений предусмотрено после ширины поля через двоеточие указывать и второй параметр - количество позиций, отводимых для дробной части из общей ширины поля. Этот второй параметр указывает распечатать вещественное число в формате с фиксированной точкой и определяет, сколько цифр поместить после десятичной точки. Например, переменную w можно вывести на экран следующим образом:

Процедуры вывода Результат

Writeln(w:6:2); 123.45

Writeln(w: 8:2); 123.45

Writeln(w: 8:4); 123.4500

Пример 1.

Составим программу для ввода и вывода данных. a= 3,7; b=-1,6 102; k=101; l=-25; с='*'; d=’?’; p=true. Выведем данные по стандартом формату (т.е. без указания формата), но формату с укачанной шириной поля и изобразим строки вывода.

Решение

При использовании процедур ввода read и readln принято перед выполнением каждой из них выдавать на экран дисплея соответствующее сообщение-подсказку о том, что необходимо ввести. Это можно сделать, используя процедуры write или writeln.

Консольное приложение создается в операционной системе Windows, где символы кодируются в соответствии с таблицей кодов ANSI. При запуске консольного приложения создается так называемая виртуальная MS-DOS-машина, использующая операционную систему MS-DOS и, соответственно, таблицу кодов ASCII. Таблицы кодой ANSI и ASCII содержат по 256 кодов символов, включая коды букв английского и русского алфавита. Буквы английского алфавита находятся в первой половине таблицы, а русского - во второй. Отличаются обе таблицы как раз второй половиной,содержащей буквы русского алфавита. Поэтому, если в консольном приложении сообщения-подсказки в процедурах write или writeln будут набраны на русском языке,то при выполнении приложения внутри виртуальной MS-DOS-машины сообщения будут искажены. Чтобы избежать этого, можно, например, записывать сообщения на английском языке. Можно, конечно, писать сообщения и на немецком, и на французском и даже на русском - только при этом необходимо все-таки использовать буквы английского алфавита. Указанное ограничение имеет место только для консольных приложений. Для оконных приложений, создаваемых и выполняемых в одной операционной системе — Windows - по ограничение отсутствует.

Программа

Program1;

{$APPTYPE CONSOLE}

Uses

SysUtils;

const p=true;

var a,b:real;

k,l:integer;

c,d:char;

Begin

writeln('enter a,b');

readln(a,b);

writeln('enter к,l');

readln(k,1);

writeln('enter c,d’};

readln(c,d);

writeln('standard format'};

writeln(a);

writeln(b);

writeln(k,l);

writeln(c,d,p);

writeln('given format');

writeln(a:3:l,b:ll:7);

writeln(k:4,l:4);

writeln(c:2,d:2,p:5);

readln

End.

Результаты работы программы

enter a,b

3,7,-1,62-6

enter k,1

101,-25

enter c,d

*?

standart format

3,70000000000000E+0000

-1,60000000000000E-0006

101,-25

*?true

given format

3.7,-0,0000016

101,-25

*? true

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



Поделиться:


Последнее изменение этой страницы: 2017-01-20; просмотров: 158; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.128.199.210 (0.053 с.)