Описание констант
В этом разделе производится присваивание идентификатором констант постоянных значений.
Формат:
Const <идентификатор>=<значение>;
Например:
One=1;
Limit=-One;
Separator=’******’;
High=-1000;
Будучи определенной в программе, любой идентификатор константы может входить во все конструкции, в которых может присутствовать связанное с ним значение, например: Diar:= (x-High)/2+One;
Не допускаются ситуации, когда идентификатору константы предлагается изменить значение, например: High:= (x+y)*2;
Операндами константного выражения могут быть числа, строки, идентификаторы констант, стандартные функции, например:
Const
Min=0; Max=100;
Center= (Max-Min)/2; Message=’ Out of memory’;
Error_Txt=’Error:’+Message+’.’;
Удачное с точки зрения мнемоники именование констант и использование их в программе вместо записи конкретных значений считается хорошим стилем программирования, т.к. делает программу более читаемой и позволяет быстро вносить в нее корректировку.
Описание типов
Тип данных может быть описан либо в разделе описания типов, либо в разделе описания переменных. Выбор описания типа зависит только от программиста и специфики программы.
Формат:
Type <имя типа>=<значение типа>;
Например:
Type
Positive=word;
Diapason=1..20;
Var
LoopGoup: Positive;
Index: real;
Ind: Diapason;
First_Letter; ‘a’..’z’;
Описание переменных
Каждая встречающаяся в программе переменная должна быть описана. Описание обязательно предшествует использованию переменной.
Формат:
Var <идентификатор,…>;<mun>;
Например:
Var
А,B,C : integer;
Result, Summa: real;
Vxod: boolean;
Описание операторов
Раздел операторов является основным, т.к. именно в нем с предварительно описанными переменными, константами, значениями функций выполняются действия, позволяющие получить результат.
Формат:
Begin
<оператор;>
…
<оператор>
End.
Выражения
Операции в языке Паскаль подразделяются на арифметические, отношения, логические, строковые и др. Выражения соответственно называются арифметические, отношения, логические и т.д.
арифметические операции:
«+» сложение;
«» вычитание;
«*» умножение;
«/» деление;
div целочисленное деление;
mod взятие остатка от целочисленного деления
Например: 9/4=2.25; 9div 4=2; 9 mod 4=1.
Тип результата выражения зависит от типов операндов, участвующих в операции. Операции div и mod допустимы только над значениями целого типа.
операции отношения:
= равно;
<> не равно;
> больше;
< меньше;
>=, => больше или равно;
<=, =< меньше или равно;
in принадлежность.
Например: А in М
Результат всегда имеет булевский тип и принимает одно из двух значений: True – если значение выражения истинно; и False – если значение выражения ложно.
логические операции:
AND (логическое и).
Результат равен True, если аргументы одновременно равны True. В остальных случаях результат выражения будет равен False.
Например: А and В
OR (логическое или).
Результат равен True, если хотя бы один аргумент равен True. В остальных случаях результат выражения будет равен False.
Например: А or В
XOR (исключающее или).
Результат равен True, если аргументы одновременно равны False. В остальных случаях результат выражения будет равен False.
Например: А xor В
NOT (логическое отрицание).
Результат равен True, если аргумент равен False, и результат равен False, если аргумент равен True.
Например: not А
Вычисление выражений производится по следующим правилам:
запись выражения производится в одну строку без каких-либо подстрочных или надстрочных знаков с использованием только круглых скобок;
выполняются операции внутри скобок. Если имеется несколько пар скобок, вычисления начинаются с самых внутренних;
порядок вычислений внутри скобок определяется приоритетом (старшинством) операций:
а) вычисление значений функций;
б) not;
в) возведение в степень;
г) операции типа умножения (*, /, div, mod, and);
д) операции типа сложения (+, - , or, xor);
е) операции отношения.
Операция, имеющая высший приоритет, выполняется первой.
при наличии нескольких операций одного приоритета вычисления выполняются слева направо.
Стандартные арифметические функции
Таблица 5
Название функции |
Обозначение в математике |
Обозначение в Паскале |
Примечание |
Синус |
sin (x) |
SIN (x) |
Аргумент имеет целый или вещественный тип, а результат только вещественный |
Косинус |
cos (x) |
COS (x) |
То же |
Арктангенс |
arctg (x) |
ARCTAN (x) |
То же |
Экспонента |
exp (x)=ex |
EXP (x) |
То же |
Натуральный логарифм |
ln (x) |
LN (x) |
То же |
Десятичный логарифм |
lg (x) |
0.4343*LN (x) |
То же |
Квадратный корень |
√x |
SQRT (x) |
То же |
Возведение в квадрат |
x2 |
SQR (x) |
Результат имеет тот же тип, что и аргумент, который может быть целого или вещественного типа |
Абсолютное значение |
|х| |
ABS (x) |
То же |
Возвращает ближайшее целое число, меньшее или равное х, если х≥0, и большее или равное х, если х<0 |
- |
INT (x) |
Аргумент имеет целый или вещественный тип, а результат только вещественный |
Выделение дробной части х |
- |
FRAC (x) |
То же |
Возвращает ближайшее целое число, меньшее или равное х, если х≥0, и большее или равное х, если х<0 |
- |
TRUNC (x) |
Аргумент и результат могут иметь целый либо вещественный тип |
Возвращает значение х, округленное до ближайшего целого числа |
- |
ROUND (x) |
То же |
Число π |
π |
PI |
Π=3.14 |
Генерация случайного числа с равномерным законом распределения |
- |
RANDOM |
Тип результата вещественный |
Возвращает значение булевского типа, равное True, если х нечетное, и False, если х четное |
- |
ODD (x) |
Аргумент имеет целый или вещественный тип, а результат - булевский |
Возведение в n-ую степень |
xn |
xn=exp(n*LN(x)) |
|
Примеры:
у:= sin (60*pi/100); {y=8.6602540387E-01} y:=int(-1.2); {y= -1}
y:= cos (45*pi/100); {y=5.0000000E-01} y:=int(-1.5); {y= -1}
y:= arctan (180/pi); {y=1.553354}
Оператор присваивания
Формат:
< идентификатор>:=< выражение >;
Предписывает выполнить выражение, заданное в его правой части, и присвоить результат переменной, идентификатор которой расположен в левой части. Переменная и выражение должны иметь один и тот же тип, исключение,когда переменная вещественная, а выражение целочисленное. Пример: Rezalt:=l+sin(A)
Процедуры ввода READ и READLN
Обеспечивают ввод информации с клавиатуры для последующей обработки ее программой.
Формат:
read(x1,x2, ...,xn);
readln(х1, х2, .. хn);
где x1,x2,. .,Хn - имена переменных, значения которых вводятся .
Значения переменных набираются минимум через 1 пробел на клавиатуре. После набора данных для одной процедуры read или readln нажимается клавиша -«.Enter». Значения, вводимые с клавиатуры, должны иметь тот же тип, что и соответствующие им переменные, указанные в процедуре read или readln. Если соответствие нарушено, возникает ошибка ввода-вывода.
Пример:
Var
I : real ; J : integer; B : char;
Begin
Read( I ,J , B);
END.
Так, правильный набор данных с клавиатуры для данной процедуры read будет выглядеть, например:
235.98 100 ‘G’
а неправильный набор, например:
‘G’ 235.98 100
Процедуры read и readln аналогичны, их единственное отличие в следующем:
read (X,Y); readln (X,Y);
read (A, В); readIn (A, B);
ввод данных: ввод данных:
5 10 <Enter> 15 20 <Enter> 5 10 <Enter> 15 20 <Enter>
Данные для нескольких процедур read набираются на одной строке, т.к. после нажатия клавиши <Enter> перехода к началу следующей строки не происходит.
Данные для нескольких процедур readln набираются на разных строках, т.к. после набора данных для одной процедуры readln и нажатия клавиши <Enter> курсор переходит к началу новой строки, где набираются данные для следующей процедуры readln.
Процедура readln, записанная без параметров, вызывает перевод строки.
Процедуры вывода WRITE и WRITELN
Производят вывод информации на экран монитора.
Формат:
write (У1,у2,…,yn);
writeln (y1,y2,…,yn);
где y1,у2,...,Уn-имена переменных, значения которых выводятся.
Процедуры write и writeln аналогичны, их единственное отличие заключается в следующем:
write(X, Y); writeln(X,Y);
write(A, B) ; writeln(A, B) ;
вывод данных: вывод данных:
5 10 15 20 5 10
15 20
Данные для нескольких процедур write выводятся в одну строку, а данные для нескольких процедур writeln выводятся в разных строках.
Процедура writeln, записанная без параметров, вызывает перевод строки.
В процедурах вывода можно записывать комментарий, например:
write ('А=',А,' В=',В,' результат вычислений=',А*В/25);
На экране увидим следующее сообщение:
А=5 B=20 результат вычислений=1
Форматы вывода
В процедурах вывода write и writeIn имеется возможность записи выражения, определяющего ширину поля вывода.
В приведенных ниже форматах используются следующие обозначения:
I -целочисленное выражение;
р -целочисленное выражение;
g -целочисленное выражение;
R -выражение вещественного типа;
В -выражение булевского типа;
Сh -выражение символьного типа;
S -выражение строкового типа;
# -цифра;
* -знак "+" или "-";
- - пробел.
I - выводится десятичное представление величины I,
начиная с позиции расположения курсора.
Значение I Выражение Результат
134 write(I); 134
5671 write(I); 5671
287 write(I,I,I); 287287287
I:р - выводится десятичное представление величины I в крайние правые позиции поля шириной р.
Значение I Выражение Результат
134 write(I:6); __134
1 write(I:10); __________1
312 write(I+I:7); _____624
R - в поле шириной 18 символов выводится десятичное представление величины R в формате с плавающей точкой. Если R > 0.0, используется формат _#.######### Если R < 0.0, формат имеет вид _-#.#########E*##
Значение R Выражение Результат
715. 432 write(R); __7 15438OOOOOE+O2
-1.919Е+01 write(R); _-1.9190000000E+01
567.986 write(R/2); _2.8399300000E+02
R:p - в крайние правые позиции поля шириной р символов выводится десятичное представление значения R в формате с плавающей точкой.
Если R > 0.0, используется формат __..._#.##...#Е*#й, причем
минимальная длина поля вывода составляет 7 символов. Если R < 0.0, формат имеет вид __ .._-#.#*...#£*##. Минимальная длина поля выводится 8 символов. После десятичной точки выводится по крайней мере одна цифра.
Значение R Выражение Результат
511,04 write(R:15); -5.110400000E+02
-511.04 write(R:15); -5.11040000E+02
46.78 write(-R:12); -4.67800E+01
R:p:g - в крайние правые позиции поля шириной р символов выводится десятичное представление значения R в формате с фиксированной точкой, причем после десятичной точки выводится g цифр (0 <= g <= 24), представляющих дробную часть числа. Если g=0, ни дробная часть, ни десятичная точка не выводится. Если g > 24, то при выводе используется формат с плавающей точкой.
Значение R Выражение Результат
511.04 write(R:8:4); 511.0400
-46.78 write(R:7:2); _-46.78
-46.78 write(R:9:4); _-46.7800
(Ch - начиная с позиции курсора, выводится значение Ch.
Значение Ch Выражение Результат
‘x’ write(Ch); x
‘y’ write(Ch); y
‘I’ write(Ch,Ch,Ch); I I I
Ch:p - в крайнюю правую позицию поля шириной р выводится значение Ch.
Значение Ch Выражение Результат
‘x’ write(Ch:3); _x
‘y’ write(Ch:5); __y
‘i’ write(Ch:2,Ch:4); _i__i
В - выводится результат выражения B True или False, начиная с текущей позиции курсора.
Значение B Выражение Результат
True write(B); True
False write(B, not B); FalseTrue
B:p - л крайние правые позиции поля шириной р символов выводится результат булевского выражения В Irue или False
Значение В Выражение Результат
True write(B:6); _True
False write(B:10); ___False
True write(B:5,not B:7): _True__False
S - начиная с позиции курсора, выводится значения S (строка или массив символов, если его длина соответствует длине строки)
Значение S Выражение Результат
'Day N' write(S); Day N
‘Ведомость 11’ write(S); Ведомость 11
'RRRDDD' write(S,S); RRRDDDRRRDDD
S:p - значение S выводится в крайние правые позиции поля шириной р символов.
Значение S Выражение Результат
'Day N' wrjte(S:10); ____Day N
'Ведомость 11' write(S:13); _ Ведомость 11
•RRRDDD’ write(S:7,S:7); RRRDDD_RRRDDD
Если значение короче формата, излишек будет заполнен пробелами Если формат мал, то значение будет выводиться, игнорируя спецификацию, ошибки при этом не возникает Можно задавать выравнивание по левому краю, для этого надо ближайшую к значению спецификацию формата задать отрицательной, например
Выражение Результат
write(123. 456:6:1,22:4); 123.5 22
write(123.456:-6:1,22:-4); 123.522
Задание. Вычислить и вывести на экран значения переменных y и d, используя расчетные формулы:
;
;
где a=3.2; b=17.5; x=-4.8.
Блок-схема алгоритма решения.
Текст программы:
Program Lab1;
Var
a,b,x,y,d: real;
Begin
Writeln ('Введите a, b, x');
Read (a, b, x);
y:=b*sqr(sin(x)/cos(x))-a/sqr(sin(x/a));
d:=a*exp(-a*x)*cos(b*x/a);
Writeln ('y=',y:8:3, 'd=',d:8:3);
End.
Результаты выполнения программы:
y(3.2;17.5;-4.8)=2265.051
d(3.2;17.5;-4.8)=6569529.085
ПРИМЕР ВЫПОЛНЕНИЯ РАБОТЫ
Вычислить на ЭВМ значения у и р, используя расчетные формулы-
у=а 3x2+
p=ln(a+x2)+sin2
при значениях а=0,59, z=-4.8, х=2,1
Схема алгоритма решения представлена на рис. 3. В блоке 2 вводятся исходные данные а, х, z. В блоке 3 вычисляется значение тангенса. В блоках 4 и 5 вычисляются значения функций у и р. а в блоке 6 осуществляется вывод вычисленных значений.
Рисунок
Программа, реализующая приведенный алгоритм на рис., имеет вид
Program lab_1(input,output);
{ лабораторная работа №2}
{СТУДЕНТА ГРУППЫ ___ ИВАНОВА И.И.}
var
a,x,z,y,p,c: real;
begin
writeln(‘введите a,x,z’);
read(a,x,z);
c:=sin(x*x)/cos(x*x);
y:=a*c*c*c*sqr(sin(z*z/(a*a+x*x)));
p:=ln(a+x*x)+sqr(sin(z/a));
writeln(‘y=’,y:8:3,’p=’,p:8:3);
end.
Если сравнивать язык Си с языком Pascal, то можно сделать вывод, что Си дает большую свободу действиям программиста. С другой стороны Си позволяет совершить ошибки, которые в Pascal совершить невозможно.
Методические рекомендации к выполнению лабораторной работы
Отчет к лабораторной работе должен содержать:
Постановка задачи
Список входных данных
Список выходных данных
Список промежуточных переменных
Разработка алгоритма решения задач
Разработка блок-схемы решения задачи.
Список функций
3. Разработка программного кода к алгоритму.
4. Проверка алгоритма (листинг)
Рассмотрение всех не стандартных ситуаций
Ограничения и допущения, если имеются
5. Ответы на контрольные вопросы.
Задание к лабораторной работе
Разработать алгоритм решения задачи (по вариантам) и написать программы на языках Си и ТР.
Вариант задания |
Расчетные формулы |
Значения исходных данных |
1 |
a=2cos(x-/6)/1/2+sin2y b=1+z/3+z2/5 |
x=1.426 y=-1.220 z=3.5 |
2 |
b= xy/x y-z/(y-x) g=(y-x)(y-z /(y-x)) /1+(y-x)2
|
x=1.825 y=18.225 z=-3.298 |
3 |
Y=e-btsin(at+b)- S=bsin(at2cos2t)-1 |
a=-0.5 b=1.7 t=0.44 |
4 |
W=-b2sin3(x+a)/x Y=cos2x3-x |
a=1.5 b=15.5 x=-2.9 |
5 |
S=x3tg2(x+b)2+a/ Q=bx2-a/eax-1 |
a=16.5 b=3.4 x=0.61 |
6 |
R=x2(x+1)/b-sin2(x+a) S=+cos2(x+b)3 |
a=0.7 b=0.05 x=0.5 |
7 |
Y=sin3(x2+a)2- Z=(x+b)3 |
a=1,1 b=0,004 x=0,2 |
8 |
F= Z=m cos (bt sin t)+c |
m=2 c=-1 t=1,2 b=0,7 |
9 |
y=b tg2x- d=ae-axcos(bx/a) |
a=3,2 b=17,5 x=-4,8 |
10 |
f=ln(a+x2)+sin2(x/b) z=e-cx |
a=10,2 b=9,2 x=2,2 c=0,5 |
11 |
y= r=-b2sin3(x+a)/x |
a=0,3 b=0,9 x=0,61 |
12 |
Z=cos2 x 3-x/ |
a=0,5 b=3,1 x=1,4 |
13 |
U= F=e2x ln (a+x) -b3xln(b-x)
|
a=0,5 b=2,9 x=0,3 |
14 |
Z=-c m ln (b-x) S =e-ax+e –b x |
m=0,7 c=2,1 x=1,7 a=0,5 b=1,08 |
15 |
M=/1+tg3(n-k) H =sin k2-e-nk |
n=3,8 k=0.9 1=0,78 |
16 |
S= M=cos2t3-x/ |
v=1,72 t=-1,5 w=0.3 |
Контрольные вопросы
Опишите особенности линейной алгоритмической конструкции.
В чем сходства и различия языков Си/С++ и Turbo Pascal?
Сравните структуры программ, названия основных типов данных, описание раздела подключения библиотек, раздел описания переменных, функции ввода-вывода данных. Оформите в таблице сравнений:
|
Си |
Turbo Pascal |
Структура программы |
|
|
Основные типы данных: Целый Вещественный…. |
|
|