- •Текстовый редактор
- •Прогон и отладка программы
- •Справочная служба Турбо Паскаля
- •Строка
- •Строка
- •Задание 2. Разветвления
- •Простейшие циклы
- •Вложенные циклы
- •Примечания
- •Строка
- •Процедуры и функции
- •Процедуры ввода
- •Обозначение
- •Представим определение языка Показушка в расширенной форме Бэкуса-Наура
- •Предложение
- •Синтаксис Паскаля
- •Задание 14
- •Операторы Паскаля
- •Задание 15
- •Новые типы данных. Определение типа. Диапазоны.
Задание 15 |
begin repeat |
Выполните синтаксический анализ оператора. |
read(c) |
№1. |
until (c<'0')or(c>'9'); |
if(x>0)and(x<2) |
t:=c='.' |
then y:=sqrt(cos(x)) |
end; |
else y:=-sin(sqrt(x)); |
№6. |
№2. |
k:=100*(ord(c2)-n0)+10*(ord(c1)-n0) |
if t |
+(ord(c0)-n0); |
then |
№7. |
begin |
begin |
d:=sqrt(d); a2:=2*a; |
d:=c mod 100 div 10; c1:=chr(n0+d) |
x1:=(-b+d)/a2; |
end; |
x2:=(-b-d)/a2 |
№8. |
end; |
begin |
№3. |
s:=0;i:=0; |
if w<>0 |
while i<5 do |
then |
i:=i+1; |
begin |
s:=s+1/i |
if cos(w)/sin(w)<0.5 |
end |
then w:=-w |
№9. |
end |
begin |
else w:=1; |
s:=0;i:=7; |
№4. |
while i>1 do |
while c<> '.' do |
begin |
begin |
s:=s+1/i; |
if c='a' |
i:=i-1 |
then ka:=ka+1 |
end |
else if c='b' |
end; |
then kb:=kb+1; |
№10. |
read(c) |
if a1>b1 |
end; |
then a1:=a1 mod b1 |
№5. |
else b1:=b1 mod a1; |
if(c>='0')and(c<='9') |
№11. |
then |
for i:=1 to 20 do |
55
for j:=1 to 20 do p:=p/(i+sqr(j)); №12.
for d1:=1 to 9 do for d2:=0 to 9 do for d3:=0 to 9 do
if d1+d2+d3=n then k:=k+1; №13.
for d:='1' to '9' do begin
for c:='1' to pred(d) do write('0'); write(d);
end; №14.
repeat k:=10*k+ord(c)-n0;read(c) until c=' '; №15.
for i:=1 to max do if i=k
then write('*') else if i=n
then write('I') else write (' ');
Задание 16
Выполните подробный синтаксический анализ всех операторов программы из задания 6.
Структура программы. Область действия идентификатора
Любая программа состоит из заголовка программы и некоторого блока (рис. 5-6). Блок содержит раздел описаний, в котором определяются все локальные по отношению к данной
программе объекты, и раздел операторов. Он задает действия которые необходимо выполнить над этими объектами.
Место, где программист вводит новый идентификатор, называется точкой определения. Описание или определение идентификатора имеет силу везде в блоке, где находится это описание или определение. Исключением являются лишь вложенные (внутренние) блоки, в которых переописываются или переопределяются данные идентификаторы. Область, где справедливо определение либо описание идентификатора, называется его областью действия.
Если идентификаторы описаны либо определены в блоке программы, то их называют глобальными. Если же идентификаторы описаны либо определены внутри блока, то они называются локальными по отношению к этому блоку. Идентификаторы не локальны по отношению к этому блоку, если они описаны или определены в блоке, включающий данный.
Идентификатор нельзя описывать на одном уровне или в одной области действия более одного раза.
Соблюдаются следующие правила.
1.Для идентификатора, определенного в блоке Б1, областью действия определения является блок Б1 и все входящие в него блоки, за исключением тех, где тот же идентификатор переопределяется.
2.Идентификатор не имеет смысла вне своей области действия, а также между началом области действия и точкой определения.
3.Идентификатор имеет смысл в любой точке своей области действия, расположенной за точкой его определения.
Ниже представлена область действия идентификаторов для примера программы с процедурой. Вертикальные линии соответствуют области действия.
Program prim4; |
n t x P |
56
var n,t: real; x:char;
procedure P(x,y: real); x y n var n:real;
begin n:=x+t; t:=y;
writeln(n,t,x);
end; begin read(n); t:=n/2; x:=’+’; P(n,0.8);
writeln(n,t,x)
end.
Задание 17
Приведите подробный синтаксический анализ программы из задания 8, а также выполните следующие задания.
a)Укажите части головной программы и процедур, в каких строках содержится каждая из частей.
b)Перечислите параметры-значения и параметры-переменные.
c)Укажите
•глобальные переменные;
•глобальные константы;
•локальные переменные и константы и к какой части они относятся, их область действия.
d)Перечислите встречающиеся в программе лексемы:
•специальные символы (не считая служебных слов);
•служебные слова;
•идентификаторы;
•числа;
•литералы;
e)Перечислите все предопределенные идентификаторы, использованные в программе.
f)Перечислите все идентификаторы, определенные программистом, которые использованы в программе, и укажите номера строк, содержащих их точки определения. Укажите область действия каждого идентификатора.
Новые типы данных. Определение типа. Диапазоны.
Каждый тип данных в Паскале определяет:
1.множество значений, принадлежаших к данному типу,
2.операции, которые могут выполняться над этими значениями,
3.свойства этого множества значений (например,
упорядоченность, длина строки у типа String и т.д.). Например, стандартный тип данных Integer определяет:
1.множество значений – целые числа в диапазоне от –32768 до
32767,
2.набор операций и встроенных функций с данными этого типа,
3.линейная упорядоченность всех значений (от меньшего к
большему).
Программист может описывать и использовать новые типы данных, основу которых составляют множества значений стандартных типов. Описать новый тип данных – это значит указать множество значений, принадлежащих этому типу (обязательно) и дать ему имя (это явное описание типа), можно имя типу не давать (это будет неявное описание типа). Заметьте, что набор операций для нового типа данных, а также в большинстве случаев и свойства , программист не определяет, они как бы наследуются от базового стандартного типа.
Неявное определение нового типа данных – в разделе описания переменных или внутри определения структурных типов данных указывается множество значений нового типа, например:
Var а: 1..20 – тип диапазона
b: (1,2,3) – тип перечисления
57
c:array [1..10] of integer – тип массива ([1..10] – неявное определение типа диапазона внутри неявного определения типа массива)
d: array [‘a’..’g’] of char – тип массива
Так как при неявном определении типа имя ему не дается, то и сослаться на него для описания других переменных нельзя.
Явное определение нового типа данных – в разделе описания типов, который начинается со служебного слова Type и находится перед разделом описания переменных, записывается имя нового типа и после знака= указывается его множество значений, например:
Type N_gruppa = 1..3; Podgruppa = (a,b);
Fio = array [1..25] of string;
Var 619fio : fio; (использование ранее описанного типа). Имя нового типа можно теперь использовать для описания
переменных и других типов не только в разделах описания типов и переменных программы, но и в подпрограммах.
58