Программирование на Турбо Паскале
Алгоритмический язык Паскаль был разработан Виртом в начале 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; просмотров: 1154;