Программирование на Турбо Паскале

 

Алгоритмический язык Паскаль был разработан Виртом в начале 70-х годов ХХ века как язык обучения программированию. Затем он широко распространился во всем мире особенно при решении задач на микро ЭВМ и ПК.

Семь основных понятий программирования, которые необходимо знать:

1. Ввод исходных данных (с клавиатуры, диска и т.д.)

2. Данные – сохраняемая информация (константы)

3. Операторы – правильные команды обработки данных, зарезервированные в интегрированной среде языка программирования

4. Условное выполнение

5. Цикл – повторяющееся выполнение группы операторов

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

7. Вывод результатов.

 

Турбо Паскаль

Структура программы

 

В стандартном Паскале программы имеют жесткий формат:

Program имя программы; {hg21_o}

Label <метки>;

Const <объявление констант>; {a=12; b=3;}

Type <определение типов данных>; {k=integer; - k- целый

Тип, p,u,l=real; - вещественный тип}

Var <объявление переменных>; {v,n,m:integer или v,n,m:k}

Procedures and functions;

Begin

<Тело прграммы>;

End.

 

В конкретной программе наличие всех пяти секций Label;

Const ; Type ; Procedures and functions необязательно. Но, если они нужны, то порядок их следования строго регламентирован и в программе они должны присутствовать только один раз.

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

 

Алфавит паскаля.

 

Алфавит паскаля включает:

1. буквы латинского алфавита,

2. цифры 0 – 9,

3. символы +, -, *, /, :, ; (, ), =, &, <, >, @, #, .? ,, ‘

 

Типы данных

 

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

1. простые типы: целые числа, вещественные числа, символы, логические типы; строки, регулярные типы.

2. структурированные типы;

3. указатели;

4. процедурные типы;

5. объекты.

 

Целые числа

 

Целые константы представляются в виде целых чисел со знаком или без знака. Например, 35, -123, +16, -8.

Существует пять типов целых переменных в зависимости от их величины.

Тип Диапазон Размер, байт Формат
byte (целое длиной в байт) 0 - 255 беззнаковый
shortint (короткое целое) -128 - +128 знаковый
integer (целое) -32768 - + 32768 знаковый
word (целое длиной в слово) 0 – 65535 беззнаковый
longint (длинное целое) -2147483648 - +2147483647 знаковый

 

Турбо Паскаль позволяет использовать шестнадцатеричные целые числа. Для них в написании числа перед константой ставится знак & Например: &27=36.

 

Вещественный тип данных

 

Константы вещественного типа бывают двух видов:

1. с фиксированной точкой,

2. с плавающей точкой.

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

<целое>.<дробь>,

где <целое> - целая часть числа,

<дробь> - дробная часть числа.

В качестве разделителя между целой и дробной частью используется десятичная точка. Например: 15.2, -24.346, -1.27.

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

<мантисса>Е<порядок> – для вещественных чисел или

<мантисса>D<порядок> – для вещественных чисел с двойной точностью,

где <мантисса> - вещественная константа с фиксированной точкой,

<порядок> - степень числа 10, на которое нужно умножить мантиссу, чтобы получить действительное число.

Например: 20.1Е003=20.1*103=20100, 1.8Е-2=1.8*10-2=0.018.

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

Тип Диапазон Значащие цифры Размер, байт
real (вещественное) 2.9*10-39 1.7*1038 11 - 12  
simple (с одинарной точностью) 1.5*10-45 3.4*1038 7 - 8
double (с двойной точностью) 5.0*10-324 1.7*10308 15 - 16
extended(повышенной точности) 1.9*10-4951 1.1*104932 19 - 20  
comp (сложный, состоящий из двух целых чисел) -2*1054 – 2*1062 19 - 20  

 

Символы и строки.

 

Символьная константа записывается в апострофах и имеет вид:

‘<символ>’, где <символ> - любой символ, в том числе может быть и символом русского алфавита. Например: ‘A’, ‘a’, ‘g’ ,’2’ . Необходимо помнить , символы ‘A’ и ‘a’ разные, поскольку имеют разную кодировку. Символ ’2’ не является целым числом.

Переменные символьного типа описываются при помощи ключевого слова char.

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

‘<строка>’,

где ‘<строка> - любой набор символов, т.е. текст.

Например, ‘table’, ‘ИжГТУ’, ‘Группа 1-71-1, подгруппа 1’.

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

<имя>:string[<длина>];

где <имя> - имя переменной, описывающей строку,

<длина> - длина строки в символах. Если длина строки не указана, то по умолчанию компьютер резервирует для нее память длиной в 255 символов.

Например,

Program fff;

Var

G,k: string[30];

A:string[5];

Begin

G:=’Группа ИжГТУ 1-71-1’;

K:=’СТиА факультет’;

A:=’hello’;

End.

 

Булевские данные

Константы булевского типа имеют значения true - истина и false - ложь.

Переменные булевского типа описываются при помощи ключевого слова Boolean.

Данные этого типа используются в логических выражениях.

 

Указатели

 

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

 

Идентификаторы

 

Имена, которые даются программе, типам данных, константам, переменным и т.д., называются идентификаторами.

Правила образования идентификаторов:

1. Все идентификаторы начинаются с латинской буквы или знака подчеркивания,

2. Следующими символами могут быть латинские буквы, знак подчеркивания, цифры от 0 до 9. Другие символы недопустимы. Причем заглавные и маленькие символы в идентификаторах идентичны, т.е. А и а в идентификаторах не различаются.

3. Идентификаторы могут иметь различную длину, но различаются только по 63 символам. Желательно задавать идентификаторы длиной не более 8 символов.

 

Операции и их приоритет

 

1. Арифметические операции

 

+ - сложение,

- - вычитание,

* - умножение,

/ - деление

mod – остаток от деления целого числа на целое, результат – целый

25 mod 3=1

div – деление нацело. Целое число делится на целое – результат – целое.

25 div 3=8.

Возведение любого числа х в степень а xa осуществляется по формуле:

1. для x>0 xa=exp(a*ln(x));

2. для x<0

1) a – четное xa=exp(a*ln(abs(x)));

2) a – нечетное xa=-exp(a*ln(abs(x)));

3. х=0, ха=0.

 

2. Операции отношения

> - больше

< - меньше

>= - больше или равно

<= - меньше или равно

= - равно

<> - не равно

 

3. Логические операции

And – коньюнкция (логическое умножение) – и.

Операция имеет вид:

<операция отношения 1> and <операция отношения 2>.

5>14 and 17=17 - false

Логическая операция and принимает значение истины только в том случае, когда обе операции отношения истинны.

Or – дизьюнкция (логическое сложение) – или.

Операция имеет вид:

<операция отношения 1> Or <операция отношения 2>.

5>14 or 17=17 - true

Логическая операция Or ложна только в том случае, когда обе операции отношения ложны.

Not – отрицание

Операция имеет вид:

Not(<логическое выражение>).

Not(5>14)- true

Логическая операция not принимает значение противоположное тому, которое имеет логическое выражение.

 

Приоритет операций:

1. В первую очередь выполняются операции в скобках.

2. *, /, div, mod

3. +, -

4. Логические операции.

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

 

Оператор присваивания

 

Оператор присваивания имеет вид:

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

где имя – идентификатор переменной;

выражение – арифметическое или логическое выражение.

Например, а:=15;

В:=2>=4;

О:=а mod b;

Определить приоритет операций:

Y:=(k div l*(c+d)>=x=3) or not(sqr(a+b)>=3).

 

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

 

Обращение Ограничения Результат Примечание
abs(x) функция x:integer x:real IxI Тип результата совпадает с типом аргумента var r:real; i:integer; begin r:=abs(-2.3); { = 2.3} i:=abs(-156); { = 156} end.
arctan(х) функция x :real arctgx Результат в радианах
copy(s,I,c функция) s – выражение строкового типа, I,c – целые Из строки s выбирается с символа, начиная с символа i. S:=’ASDRELK’; s:=copy(s,2,3);   {s=’SDR}
cos(x) функция x:real cosx x – в радианах
dec(x,n) процедура x,n – целые x:=x – n dec(x) x:=x-1 уменьшение переменной на величину шага , по умолчанию шаг принимается равным 1
delete(s,I,c) функция s:string; I,c:integer; Из строки s удаляется c символов, начиная с символа с номером i s:=’fgkjhj’; f:=delete(s,2,3); {f=’ fhj’}
ехр(х) функция х – целое или вещественное ех  
frac(x) x:real yjhvfkbpjdfyyfz мантисса – дробная часть числа со знаком frac(123.87); {0.87} frac(-34.75); {-0.75}
inc(x,n) x,n:integer x:=x+n inc(x) {x=x+1)
insert(s,c,i) s,c:string; i:integer вставка строки s в строку c, начиная с I – той позиции s1:=’ASD’; s2:=’GHJL’; insert(s1,s2,3); {s2:=‘GHJASDL}
int(x) функция x:real целая часть аргумента y:=int(123.76); {123}
ln(x) функция x:integer, real lnx lgx=ln(x)/ln(10)
odd(x) функция x:integer true – если х –нечетное и false – если х – четное проверка, является ли х нечетным числом
ord(x) функция х – выражение перечисляемого типа порядковый номер в кодировке для х ord(‘0’)=240 ord(‘1’)=241 ord(‘A’=193
pi функция   3.1415926539897832385  
pred(x) x – перечисляемый предыдущее значение перед х pred(9); {8} pred(‘C’); {‘B’}
random(n) функция   случайное число от 0 до n-1 x:=random; {0<=x<1}
randomize процедура     С помощью случайного значения инициализирует встроенный генератор случайных чисел
round(x) функция x:real округление х до целого round(12.5); {13} round(-3.24); (3)}
sin(x) функция x:real sinx   х – в радианах храдград/180
sqr(x) функция x:real, integer x2  
sqrt(x) функция x:real, integer x1/2  
succ(x) х – перечисляемый следующее значение после х succ (8); {9} succ succ (‘C’); {‘D’}
trunk(x) функция x:real целая часть числа х дробная часть отбрасывается

 

Процедура ввода

 

Процедура ввода имеет один из видов:

1. read(<список>);

где список – это перечень переменных, разделенных друг от друга запятой, в которые вводятся данные с клавиатуры. При этом формируется стандартный текстовый файл input, который мы видим на экране дисплея. При вводе данных с клавиатуры необходимо разделять их пробелом. После набора всех значений, соответствующих списку ввода, необходимо нажать клавишу Enter (количество введенных значений и их тип должны соответствовать количеству и типу переменных в списке ввода). После ввода всех значений текущий указатель остается на той же строке в текущем стандартном файле input.

2. readln(<список>);

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

3. readln;

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

 

Процедура вывода

 

Процедура вывода имеет один из видов:

1. write(<список>);

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

При этом формируется стандартный текстовый файл вывода output.

2. writeln(<список>);

 

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

3. writeln;

Переход на начало следующей строки.

4. writeln(<элемент>:<ширина>,<элемент>:<ширина>,…);

где <элемент> - это то, что нужно вывести на экран: <ширина> - количество символов, выделенных для вывода элемента.

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

A:=4; D:=-14: h:=’abcdef, которые необходимо вывести на экран Рассмотрим несколько вариантов вывода:

А). writeln(A,D,h);

Б). writeln(A,’ ‘,D,h:4);

В). writeln(A,D:4,h:8);

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

4-14abcdef {A}

4 -14abcgef {Б}

4 -14 abcdef {В}

Из приведенных примеров видно, что выводимые значения выравниваются справа, т.е., если выводимых на экран символов меньше, чем заданная ширина поля, то в начале выделенного поля выводятся пробелы.

Если ширина поля меньше, чем количество выводимых символов, то паскаль увеличивает ширину до минимально – необходимого. При выводе вещественных чисел, они выводятся на экран в экспоненциальной форме. Например, a:=-138.76;

Writeln(a);

Результат:

-0.13876000000Е0003

5. writeln(<элемент>:<ширина>:<количество>,<элемент>:<ширина>,<количество>…); - для вывода на экран вещественных чисел

где <элемент> - это то, что нужно вывести на экран:<ширина> - количество символов, выделенных для вывода элемента, >,<количество> - количество знаков после запятой в числе с фиксированной точкой.

Например, пусть необходимо вывести на печать следующие переменные: a:=12.5; b:=34; c:=-16.75.

Рассмотрим несколько вариантов вывода

a). Writeln(a,’ ‘,b,’ ‘,c);

b) Writeln(a:4:1,’ ‘,b:2,c:5:2);

c). Writeln(a:4:1,b:4,c:7:2);

Результат:

0.125000000000е0002 34 -0.16750000000e0002 {a}

0.125000000000е000234-0.16750000000e0002 {b}

12.5 34 -16.75 {c}

 

Условные операторы

Оператор if

Оператор условного перехода if имеет вид

if <условие>

then <оператор 1>

else <оператор 2>;

где <условие> - это любое выражение логического типа, принимающее значение true или false.

Если условие справедливо, т.е. принимает значение true, то выполняется оператор 1, в противном случае – оператор 2.

Веточка else (иначе) является необязательной. При ее отсутствии в том случае, если условие ложно, управление передается следующему после if оператору.

Если в одной из ветвей оператора условного перехода нужно выполнить несколько операторов, то используется составной оператор, имеющий вид:

begin

<оператор 1>;

<оператор 2>;

…………….

<оператор N>

end;

Пример

Проверить, можно ли из отрезков с длинами х, у, z (х, у, z >0) построить треугольник.

 

program tree;

var

x, y, z: real;

r: boolean;

begin

writeln(‘ Ввести три отрезка х, у, z’);

readln(x, y, z);

writeln(‘x=’,x:4:1, ‘ y=’,y:4:1,’ z=’,z:4:1);

r:=(x+y>z) and (x+z>y) and (y+z>x);

if r

then

writeln(‘Треугольник можно построить’)

else

writeln(‘Треугольник нельзя построить’);

readln;

end.

 

В операторе условного перехода if после ключевых слов then или else может быть использован также оператор условного перехода. В этом случае говорят, оператор условного перехода имеет вложенную конструкцию: Такая конструкция может иметь вид:

1). If <условие 1>

then <оператор 1>

else

if <условие 2>

then <оператор 2>

else <оператор 3>;

Если <условие 1> - истинно, то выполняется <оператор 1>.

Если <условие 1> - ложно, то проверяется <условие 2>; если <условие 2> - истинно, то выполняется оператор 2>, в противном случае - <оператор 3>;

 

2). If <условие 1>

then

if <условие 2>

then <оператор 1>

else <оператор 2>

else <оператор 3>

Если <условие 1> справедливо, то проверяется <условие 2>. Если <условие 2>. – справедливо, то выполняется <оператор 1>, если <условие 2> - не справедливо, то выполняется <оператор 2>. Если <условие 1> 0 не справедливо, то выполняется <оператор 3>.

 

3). If <условие 1>

then

if <условие 2>

then <оператор 1>

else <оператор 2>;

В этом виде оператора для <условие 1> отсутствует веточка else.

 

Пример

Проверить, можно ли из отрезков x, y, z построить треугольник, если

x, y, z – положительны. .Если можно, то вычислить площадь этого треугольника по формуле

,

где

.

 

program trea1;

uses crt;

const

k:=0.5;

var

x, y, z, p, s: real;

r: Boolean;

begin

writeln(‘Введите три числа’);

readln(x, y, z);

clrscr;

writeln(‘x=’,x:5:1,’ y=’,y:5:1,’ z=’,z:5:1);

if (x>0) and (y>0) and (z>0)

then

if (x+y>z) and (x+z>y) and (y+z>x)

then

begin

writeln(‘Треугольник построить можно’);

p:=k*(x+y+z);

s:=sqrt(p*(p-x)*(p-y)*(p-z));

writeln(‘Площадь треугольника=’,s:6:1);

end {then}

else

writeln(‘Некорректные исходные данные’);

readln;

end.

 

Оператор варианта

 

Оператор варианта case также является условным оператором, но он более мощный по сравнению с оператором условного перехода ifю

Вид оператора:

Case <селектор>

<м1>: <оператор 1>;

<м2>: <оператор 2>;

………………….

<мn>: <оператор n>;

else

<оператор n+1>

end;

где <селектор> - выражение, которое принимает одно из значений м1, м2, …, мn, которые называются метками варианта.

В зависимости от того, какое значение имеет селектор, на ту метку и передается управление для выполнения соответствующего оператора. Например, если значение селектора равно м1, то будет выполнен оператор 1, а затем управление передастся следующему после case оператору. Если в каком либо варианте необходимо выполнить несколько операторов, то они записываются в виде составного оператора между операторными скобками begin и end. Если значение селектора не совпадает ни с одной из меток варианта, то выполняется <оператор n+1>, стоящий в веточке else (при отсутствии веточки else управление передается следующему после case оператору).

Правила, которые должны соблюдаться при использовании оператора варианта:

1). Значение <селектора > должно быть определено к началу выполнения оператора варианта;

2). Значение <селектора > должно принадлежать дискретному (перечисляемому) типу;

3). Тип констант, играющих роль метки варианта, должен совпадать с типом <селектора >;

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

Например,

case k of

2: y:=sqr(3*g);

3,15: y:=exp(g*x);

4..9: y:=ln(2+x);

end;

 

case b of

‘C’,’c’: ck:=ck+1;

‘H’,’h’: hk:=hk+1;

‘E’,’e’: ek:=ek+1;

end;

 

Циклы

 

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

 

Цикл с параметрами

 

Цикл с параметрами имеет формат:

For <имя>:=<начало> to <конец> do

<тело цикла>;

где <имя> - идентификатор переменной цикла, <начало> - начальное значение переменной цикла, <конец> - конечное значение переменной цикла. Переменная цикла должна иметь перечисляемый тип. Тип начального и конечного значения должен совпадать с типом переменной цикла. <Тело цикла> состоит из одного или нескольких операторов. Если в теле цикла должно выть несколько операторов, то они записываются в виде составного оператора между begin и end/

Оператор цикла for работает следующим образом

1. переменной цикла присваивается начальное значение.

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

3. Если значение переменной цикла не превышает конечного значения, то выполняется тело цикла и переменная цикла увеличивается на 1, а затем осуществляется возврат на пункт 2.

Необходимо помнить, что в этом операторе цикла шаг приращения переменной равен 1 или -1.

Если необходимо задать шаг приращения -1, то оператор цикла должен иметь вид:

For <имя>:=<начало> downto <конец> do

<тело цикла>;

Пример

Вычислить сумму десяти чисел, введенных с клавиатуры.

 

Program summa;

Var

i: integer; {переменная цикла-счетчик количества введенных чисел}

a,s: real; {a-число s-сумма}

begin

s:=0;

for i:=1 to 10 do

begin

write(‘Ввести число ’);

readln(a);

s:=s+a

end; {for i}

writeln(‘Сумма=’,s:8:2);

readln;

end.

 








Дата добавления: 2016-02-24; просмотров: 1162;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.14 сек.