Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика часть 1.pdf
Скачиваний:
17
Добавлен:
02.05.2015
Размер:
489.96 Кб
Скачать

Задание 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