Ответы на курс: Программирование на языке Pascal
Свойство алгоритма, позволяющее ему решать множество однотипных задач, различающихся лишь входными данными, называется:
К каким типам относится описанная ниже константа?
const a = 100000000000
Строка, начинающаяся символoм {, может являться:
К каким типам относится описанная ниже константа?
const a: real = 10.00
Свойство алгоритма, позволяющее в каждый момент его исполнения однозначно определить оператор, который будет выполнен следующим, называется:
Идентификатор, описанный после ключевого слова label, является именем:
Строка, начинающаяся символами {$, является:
К каким типам относится описанная ниже константа?
const a: integer = 1000
Идентификатор, описанный после ключевого слова const, является именем:
Свойство алгоритма, обязывающее его в той или иной форме сообщать итоги своей работы, называется:
Идентификатор, описанный после ключевого слова var, является именем:
Строка, начинающаяся символами {*, является:
Какие последовательности символов являются правильными идентификаторами (с точки зрения компилятора языка Pascal)?
Типы данных real и integer являются:
Типы данных byte и shortint являются:
Какой тип будет иметь результат выражения a+b при a:byte, b:shortint?
Тип данных boolean является
Какой тип будет иметь результат выражения a+b при a:shortint, b:word?
Какой тип будет иметь результат выражения a+b при a:word, b:integer?
Какой из вариантов расстановки скобок в выражении
a + b or c shl a * c - a mod b > a
не меняет порядок выполнения операций?
Какие из вариантов расстановки скобок в выражении
a * b + not c > a mod c * a shl b xor a
не меняют порядок выполнения операций?
Тип данных integer является
Типы данных double и real являются:
Какие значения будет принимать переменная z, в зависимости от значений переменной а?
z:= 0;
if a>10
then if a>100
then if a>1000
then z:= 1
else z:= -1
else z:= 10;
Какие циклы будут работать «бесконечно»?
Сколько операций сложения будет произведено при выполнении этого цикла, если k = 10?
for i:= k to k+10 do a:= a+2
К каким типам данных может относиться переменная-переключатель, служащая для выбора одной из ветвей оператора case?
Какие значения будет принимать переменная z, в зависимости от значений переменной а?
z:= -1;
if a<100
then if a<10
then if a<1
then z:=0
else z:= 10
else z:= 100;
Сколько операций умножения будет произведено при выполнении этого цикла, если k = 10?
for i:= 2*k to 5*k do a:= a*2
Какие значения будет принимать переменная z, в зависимости от значений переменной а?
z:= -10;
if a>0
then if a>100
then if a>200
then z:=0
else z:= 20
else z:=100;
Какие циклы будут работать «бесконечно»?
К каким типам данных может относиться переменная-переключатель, служащая для выбора одной из ветвей оператора case?
Какие описания массивов являются правильными с точки зрения компилятора языка Pascal?
Какой метод сортировки реализует этот фрагмент программы?
for i:= 1 to n-1 do
begin x:= a[i+1];
l:= 1;
r:= i;
while l<=r do
begin
s:= (l+r)div 2;
if a[s]<x then l:= s+1
else r:= s-1;
end;
for j:= i downto 0 do a[j]:= a[j+1];
a[l]:= x;
end;
Какой метод сортировки реализует этот фрагмент программы?
for i:= 2 to n do
begin min:= a[i-1];
for j:= i to n do
if a[j]<= min
then begin min:= a[j];
k:=j
end;
x:= a[i-1];
a[i-1]:= a[k];
a[k]:= x;
end;
Какой метод сортировки реализует этот фрагмент программы?
for i:= 2 to N do
begin x:= a[i]
for j:= i-1 downto 1 do
if a[j]>x then a[j+1]:= a[j]
else break
a[j+1]:= x;
end;
Метод быстрой сортировки является:
Метод сортировки Шелла является:
Метод сортировки простыми вставками с барьером является:
Какую операцию реализует приведенный ниже программный отрывок?
for i:= 1 to N do set_res[i]:= (set1[i] or set2[i])and not set2[i]
Какую операцию реализует приведенный ниже программный отрывок?
for i:= 1 to N do set_res[i]:= set1[i] and set2[i]
Какой стандартной функции или процедуре обработки строк эквивалентен следующий программный отрывок?
{s: string; i,k,t: byte}
res:= '';
t:= byte(s[0]);
if k+i > t+1 then k:= t-i;
if i <= t
then for j:= i to i+k do res:= res + s[j];
Какую операцию реализует приведенный ниже программный отрывок?
for i:= 1 to N do set_res[i]:= set1[i] or set2[i]
Какой стандартной функции или процедуре обработки строк эквивалентен следующий программный отрывок?
{s1,s2: string; i,j,t1,t2: byte}
i:=0;
res:= '';
t1:= byte(s1[0]);
t2:= byte(s2[0]);
if i > t2 then i:= t2+1;
for j:= 1 to i-1 do res:= res + s2[j];
for j:= 1 to t1 do res:= res + s1[j];
for j:= i to t2 do res:= res + s2[j];
Какие из приведенных ниже описаний констант являются правильными с точки зрения Pascal-компилятора?
Какой стандартной функции или процедуре обработки строк эквивалентен следующий программный отрывок?
{s: string; i,k,t: byte}
res:= '';
t:= length(s);
if i > t then i:= t+1;
for j:= 1 to i-1 do res:= res + s[j];
for j:= i+k-1 to t do res:= res + s[j];
Какие из приведенных ниже описаний констант являются правильными с точки зрения Pascal-компилятора?
Какие из приведенных ниже последовательностей строк и символов упорядочены по возрастанию?
1. Чтобы иметь возможность добавлять информацию в конец текстового файла, его нужно открыть при помощи команды
В текстовом файле f указатель находится в самом конце предпоследней строки, а последняя строка — пустая. Какие из перечисленных ниже функций вернут TRUE в этой ситуации?
Чтобы иметь возможность считывать информацию из текстового файла, его нужно открыть при помощи команды
Какие значения будут храниться в переменных s и k после считывания из текстового файла f строки ‘Петров Петр Петрович 1956′ при помощи команды
readln(f,s,k); {s: string[22], k:shortint =0}
Чтобы иметь возможность записывать информацию в текстовый файл, его нужно открыть при помощи команд
Какие значения будут храниться в переменных s и k после считывания из текстового файла f строки ‘Олегов Олег Олегович 1962′ при помощи команды
readln(f,s,k); {s: string[22], k:byte =0}
Какие значения будут храниться в переменных s и k после считывания из текстового файла f строки ‘Иванов Иван Иванович 1945′ при помощи команды
readln(f,s,k); {s: string[22], k:byte =0}
В текстовом файле f указатель находится в начале последней строки, состоящей только из пробельных символов. Какие из перечисленных ниже функций вернут TRUE в этой ситуации?
Переменные каких типов можно выводить в текстовый файл при помощи команд write() или writeln()
Какая последовательность символов будет содержаться в файле f: file of char после выполнения следующего отрывка программы:
rewrite(f);
for c:= '0' to '9' do write(f,c); {c: char}
seek(f,5);
read(f,c);
write(f,c);
seek(f,3);
truncate(f);
seek(f,9);
write(f,c);
Сколько полей содержится в записи man?
type data = record day: 1..31;
month: 1..12;
year: 1900.. 2100;
end;
man = record name: string[20];
date_birth: data;
case citizen: boolean of
true: (birth_place: string[20]);
false: (country: string[20];
date_came: data);
end;
Чтобы иметь возможность записывать информацию в бинарный файл, его нужно открыть при помощи команды
Какая последовательность символов будет содержаться в файле f: file of char после выполнения следующего отрывка программы:
rewrite(f);
for c:= 'а' to 'р' do write(f,c); {c: char}
seek(f,10);
read(f,c);
truncate(f);
seek(f,15);
write(f,c);
Сколько полей содержится в записи employee?
type data = record day: 1..31;
month: 1..12;
year: 1900.. 2100;
end;
employee = record name: string[20];
date_entering: data;
case trade_union: boolean of
true: (date_enter: data;
leader: boolean);
false: (manager: boolean);
end;
Сколько полей содержится в записи person?
type data = record day: 1..31;
month: 1..12;
year: 1900.. 2100;
end;
person = record name: string[20];
date_birth: data;
case family_status: char of
'm': (wedding_date: data;
spouse_name: string[20]);
's': (church_celibate: boolean);
'd': (date_divorce: data;);
'w': (date_of_spouse_death: data);
end;
Чтобы иметь возможность считывать информацию из бинарного файла, его нужно открыть при помощи команды
Какая последовательность символов будет содержаться в файле f: file of char после выполнения следующего отрывка программы:
rewrite(f);
for c:= 'a' to 'p' do write(f,c); {c: char}
seek(f,10);
read(f,c);
write(f,c);
seek(f,15);
truncate(f);
write(f,c);
Какое значение будет храниться в поле a записи r1 после выполнения следующего блока?
var a: longint;
r1: record a: word;
...
end;
r2: record a: integer;
...
end;
begin
a:= 0;
with r1 do
begin
a:= 1000;
with r2 do
begin a:= 1000;
r1.a:= -a;
end;
r2.a:= -100;
end;
a:= 100;
end.
С типизированными файлами могут работать файловые переменные, описанные следующим образом:
После завершения работы подпрограммы значение переданной в нее переменной-аргумента не может измениться, если соответствующий параметр был:
Какое из объявлений нетипизированного параметра является правильным?
Какие вызовы процедуры
procedure p(x:real; const c: byte; var d: integer);
являются неправильными с точки зрения компилятора языка Pascal?
Какое значение получит переменная a после выполнения такой программы?
var a: byte;
proc p1(var t: byte);
begin t:= t*2 end;
proc p2(var k: byte);
var a: byte;
begin a:= 1;
k:= 5;
p1(k);
end;
begin
a:= 10;
p2(a);
end.
Какие вызовы процедуры
procedure p(var a: byte; const b: char; x: real);
являются неправильными с точки зрения компилятора языка Pascal?
После завершения работы подпрограммы значение переданной в нее переменной-аргумента может измениться, если соответствующий параметр был:
Динамическая структура данных, у которой в каждый момент времени доступны первый и последний элементы, причем и добавлять, и удалять элементы можно как на конце структуры, так и в ее начале, называется:
Имеется набор натуральных чисел, быть может, с повторениями. Необходимо разделить его на два поднабора так, чтобы разность сумм весов была минимальной. Эта задача решается рекурсивным методом полного перебора с отсечением (см. ниже). На вход были поданы числа 45 48 32 12 12 15 46 2 2 3 15. При какой глубине стека контекстов произойдет завершение работы программы (обращение к завершающей процедуре out())?
{массив а хранит веса всех предметов, в порядке их ввода,
half - "большая" половина суммы всех весов,
dif - отклонение текущей найденной суммы от half}
procedure rec(k: byte; sum: longint; var dif: longint);
var i: byte;
begin if sum+a[k]<=half
then for i:= k+1 to n do rec(i,sum+a[k],dif)
else if half-sum<dif
then begin
dif:= half-sum;
if dif<2 then out(dif){печать и завершение}
end
end;
Описанные ниже подпрограммы
function C: boolean; forward; function D: boolean; forward; procedure A; begin x:= c(x); y:= d(y); end; function B: boolean; begin a; end; function C; begin z:= b(z); end; function D; begin z:= b(z); end;
Динамическая структура данных, у которой в каждый момент времени доступны первый и последний элементы, причем добавлять новые элементы можно только в конец структуры, а удалять — только из ее начала, называется:
Имеется набор натуральных чисел, быть может, с повторениями. Необходимо разделить его на два поднабора так, чтобы разность сумм весов была минимальной. Эта задача решается рекурсивным методом полного перебора с отсечением (см. ниже). На вход были поданы числа 36 72 45 2 38 96 15 2 2. При какой глубине стека контекстов произойдет завершение работы программы (обращение к завершающей процедуре out())?
{массив а хранит веса всех предметов, в порядке их ввода,
half - "большая" половина суммы всех весов,
dif - отклонение текущей найденной суммы от half}
procedure rec(k: byte; sum: longint; var dif: longint);
var i: byte;
begin if sum+a[k]<=half
then for i:= k+1 to n do rec(i,sum+a[k],dif)
else if half-sum<dif
then begin
dif:= half-sum;
if dif<2 then out(dif){печать и завершение}
end
end;
Динамическая структура данных, у которой в каждый момент времени доступен только последний элемент, причем добавлять и удалять элементы можно только на конце структуры, называется:
Описанные ниже подпрограммы
function C: boolean; forward; function D: boolean; forward; procedure A; begin x:= c(x); y:= d(y); end; function B: boolean; begin z:= d(z); end; function C; begin z:= b(z); end; function D; begin z:= b(z); end;
Описанные ниже подпрограммы
function C: boolean; forward; function D: boolean; forward; procedure A; begin x:= c(x); y:= d(y); end; function B: boolean; begin x:= c(x); end; function C; begin z:= c(z); end; function D; begin z:= d(z); end;
Имеется набор натуральных чисел, быть может, с повторениями. Необходимо разделить его на два поднабора так, чтобы разность сумм весов была минимальной. Эта задача решается рекурсивным методом полного перебора с отсечением (см. ниже). На вход были поданы числа 18 32 5 5 6 2 78 4 56 5 2. При какой глубине стека контекстов произойдет завершение работы программы (обращение к завершающей процедуре out())?
{массив а хранит веса всех предметов, в порядке их ввода,
half - "большая" половина суммы всех весов,
dif - отклонение текущей найденной суммы от half}
procedure rec(k: byte; sum: longint; var dif: longint);
var i: byte;
begin if sum+a[k]<=half
then for i:= k+1 to n do rec(i,sum+a[k],dif)
else if half-sum<dif
then begin
dif:= half-sum;
if dif<2 then out(dif){печать и завершение}
end
end;
Какие из приведенных ниже подпрограмм вычисляют функцию двойного факториала (n!!), определяемую следующим образом:
0!! =1 1!! = 1 n!! = n*(n-2)!!, для любого натурального n.
Какое значение будет храниться в переменной а:integer после выполнения следующего программного отрывка?
{b: string; p: ^word}
b:= ‘ААББВВГГДД’;
p:= addr(b[7]);
a:= p^;
Какой оператор нужно вставить вместо [???], чтобы приведенный ниже отрывок программы правильно создавал двусвязный линейный список, получая значения из непустого текстового файла f?
{type ssylka = ^spisok;
spisok = record znach: integer;
next,prev: ssylka
end;
var head,p: ssylka;
}
new(head);
read(f,head^.znach);
head^.prev:= nil;
p:= head;
while not eof(f) do
begin
new(p^.next);
read(f,p^.next^.znach);
[???];
end;
p^.next:= nil;
p:= tail;
Какой оператор нужно вставить вместо [???], чтобы приведенный ниже отрывок программы правильно менял местами третий и четвертый элементы двусвязного линейного списка, заданного указателем на голову head?
{type ssylka = ^spisok;
spisok = record znach: array[1..1000]of integer;
next,prev: ssylka
end;
var head,p: ssylka;
}
p:= head^.next^.next;
p^.prev^.next:= p^.next;
p^.next:= p^.next^.next;
p^.prev^.next^.next:= p;
p^.next^.prev^.prev:= p^.prev;
[???];
p^.prev:= p^.prev^.next;
Какое значение будет храниться в переменной а:integer после выполнения следующего программного отрывка?
{b: string; p: ^integer}
b:= ‘БББ’;
p:= addr(b[1]);
a:= p^;
Какое значение будет храниться в переменной а:shortint после выполнения следующего программного отрывка?
{b: char; p: ^shortint}
b:= ‘Б’;
p:= addr(b);
a:= p^;
Для освобождения памяти в процессе работы программы предназначены процедуры
На сколько компонент связности распадается граф, содержащий семь вершин, если он задан таким списком ребер?
a b a c b c c h f d
На сколько компонент связности распадается граф, содержащий семь вершин, если он задан таким списком ребер?
a g a d b c c h f b f c
Сколько листьев содержится в полном бинарном дереве высоты 2?
В дереве 15 вершин. Сколько в нем ребер?
Сколько нетерминальных вершин содержится в полном бинарном дереве высоты 3?
В дереве 10 ребер. Сколько в нем вершин?
Какие вершины взвешенного графа, заданного этой матрицей смежности, принадлежат к 10-периферии относительно вершины a?
a b c d f
a 0 3 10 0 0
b 3 0 5 0 0
c 10 5 0 2 4
d 0 0 2 0 2
f 0 0 4 2 0
Сколько терминальных вершин содержится в полном бинарном дереве высоты 3?
В несвязном графе, каждая компонента связности которого является деревом, содержится 15 вершин и 10 ребер. Сколько в нем компонент связности?
Какие вершины взвешенного графа, заданного этой матрицей смежности, принадлежат к 10-периферии относительно вершины a?
a b c d f
a 0 5 0 7 0
b 5 0 8 4 0
c 0 8 0 6 0
d 7 4 6 0 3
f 0 0 0 3 0
Какие вершины орграфа, заданного этим списком смежности, принадлежат ко второму уровню относительно вершины a?
a: d f g b: d d: c f g: h h: f
Какие вершины взвешенного графа, заданного этой матрицей смежности, принадлежат к 10-периферии относительно вершины c?
a b c d f a 0 12 5 12 3 b 12 0 15 0 7 c 5 15 0 10 20 d 12 0 10 0 2 f 3 7 20 2 0
Какую высоту будет иметь дерево синтаксического анализа для выражения
(a+b)*(c*d-k)-((m+n)/s*(t+y)*(z-x))
Какой алгоритм реализует приведенная ниже программа?
const nnn=10000;
type s1 = ^s2;
s2 = record n,k,v: integer;
next: s1;
end;
var f: text;
head,p,q: s1;
x,i,kr,vr,nxt,kol_ver: integer;
a: array[1..nnn] of integer;
begin
assign(f,'in');
reset(f);
readln(f,kol_ver);
new(head);
with head^ do readln(f,n,k,v);
head^.next:= nil;
while not eof(f) do
begin
new(q);
with q^ do readln(f,n,k,v);
q^.next:= nil;
if q^.v <= head^.v
then begin q^.next:= head;
head:= q;
continue
end;
p:= head;
while p^.next<>nil do
begin
if q^.v > p^.next^.v
then p:= p^.next
else begin
q^.next:= p^.next;
p^.next:= q;
break;
end;
end;
if p^.next = nil then p^.next:= q;
end;
close(f);
p:=head;
while p<>nil do begin
write(p^.v,' '); p:=p^.next;
end;
writeln('*');
for i:= 1 to kol_ver do a[i]:= 0;
kr:= 0;
vr:= 0;
nxt:= 0;
p:= head;
while (p^.next <> nil)and(kr<kol_ver)do
with p^ do
begin
if a[n]=0
then if a[k]=0
then begin inc(kr);
inc(vr,v);
inc(nxt);
a[n]:= nxt;
a[k]:= nxt;
end
else begin a[n]:= a[k];
inc(vr,v);
end
else if a[k]=0
then begin a[k]:= a[n];
inc(vr,v);
end
else if a[n]<>a[k]
then begin x:= a[k];
for i:= 1 to kol_ver do
if a[i]=x then a[i]:=a[n];
inc(vr,v)
end;
p:= next
end;
writeln(vr)
end.
Какой алгоритм реализует приведенная ниже программа?
const nnn = 10000;
type uk = ^ukk;
ukk = record v: integer;
next: uk;
end;
var head: array[1..nnn] of uk;
a: array[1..nnn] of integer;
ii,i,j,k,n: integer;
q,p: uk;
f: text;
procedure dob(ii,jj: integer); {добавление ребра}
var pp,qq: uk;
begin
new(qq);
qq^.v:=jj;
qq^.next:=nil;
if head[ii]=nil
then head[ii]:=qq {вставка первого}
else begin {вставка остальных}
pp:=head[ii];
while pp^.next<>nil do pp:=pp^.next;
pp^.next:=qq;
end;
end;
begin
{------- считывание графа ------------}
...
readln(f,n); {кол-во вершин в графе}
while not eof(f) do
begin
read(f,i,j);
if i<>j then begin
dob(j,i);
dob(i,j);
end;
end;
{--------- инициация массива ---------}
for i:=1 to n do begin
head[i]:=nil;
a[i]:=0;
end;
{------- основная часть -------------}
k:=0;
i:=1;
repeat
k:=k+1;
a[i]:=k;
p:=head[i];
while p<>nil do
begin
j:=p^.v;
a[j]:=k;
if (head[j]<>nil) and (i<>j)
then begin
q:=p;
while q^.next<>nil do q:=q^.next;
q^.next:=head[j];
head[j]:=nil;
end;
p:=p^.next;
end;
i:=i+1;
while (head[i]=nil) and (i<=n) do i:=i+1;
until i=n+1;
for i:=1 to n do
if a[i]=0 then k:=k+1;
writeln(k); {выдача результата}
end.
В какой последовательности распечатает вершины графа, заданного этим списком смежности, процедура обхода в ширину? (Обход начинается с вершины a, производится в алфавитном порядке.)
a: b d b: d f f: c d g d: h g h: g
Какую высоту будет иметь дерево синтаксического анализа для выражения
(a-b)*(c+(x-y)/d)+(k*m-(n/s+t))
Постройте дерево бинарного поиска (дерево сортировки) для входной последовательности чисел 7 2 5 1 8 3 6 4 9 13 11 10 12, а затем распечатайте вершины этого дерева в порядке прямого обхода. Какая последовательность чисел получится?
Для того, чтобы скомпилировать все без исключения модули программы, нужно воспользоваться командой:
Какой раздел модуля содержит операторы, которые будут выполнены перед стартом основной программы?
Для того, чтобы скомпилировать только те модули программы, которые оказались затронуты внесенными изменениями, нужно воспользоваться командой:
Какой раздел модуля содержит объявления всех констант, переменных, типов данных и подпрограмм, которыми могут пользоваться остальные модули программы?
Для того, чтобы скомпилировать только текст одного модуля, нужно воспользоваться командой:
Какой раздел модуля содержит описания тех подпрограмм, которые были объявлены как доступные другим модулям?
Какие переменные может объявить секция внешних связей модуля А?
unit A; unit C; unit F; interface interface interface uses C,D; uses D,F; var f; var a; var c; implementation implementation implementation uses A; uses F; uses B; var ff; var aa; var cc; end; end; end; unit B; unit D; interface interface uses C; var d; var b; implementation implementation uses B; uses D; var dd; var bb; end; end;
Какое из приведенных ниже сообщений о неправильном вводе лучше всего подходит для организации дружественного интерфейса?
Меню – это:
Приглашение – это:
Какой цвет текста получится на экране, если использовать
brown * lightcyan + blue
Какое из приведенных ниже приглашений к вводу лучше всего подходит для организации дружественного интерфейса?
Какое из приведенных ниже подтверждений прерывания работы программы лучше всего подходит для организации дружественного интерфейса?
Заставка – это:
Какой цвет текста получится на экране, если использовать
lightmagenta * blue - brown
Какой цвет текста получится на экране, если использовать
lightgreen * brown + magenta
Какие имена переменных являются наиболее предпочтительными с точки зрения надежного программирования?
Какие имена переменных являются наиболее предпочтительными с точки зрения надежного программирования?
Какие из приведенных ниже отрывков программ хорошо структурированы?
1)
while not eof(f) do
begin inc(n);
read(f,a[n]);
inc(obsh_ves,a[n]);
end;
close(f);
min:= MaxLongInt;
2)
while head<>nil do begin
with head^.e^ do
if from^.dist+len < toward^.dist
then begin
toward^.dist:= from^.dist + len;
enqueue(toward,queue,head);
end;
next_head:= head ^.next;
dispose(head);
head:= next_head
end;
3)
while left<=right do
begin
sred:= (left+right)div 2;
if a[sred]<x then left:= sred+1
else begin right:= sred-1;
inc(k);
end;
end;
for j:= i-1 downto left do a[j+1]:= a[j];
4)
while p<>nil do begin
j:=p^.v;
a[j]:=k;
if (head[j]<>nil) and (i<>j) then begin
q:=p;
while q^.next<>nil do q:=q^.next;
q^.next:=head[j];
head[j]:=nil;
end;
p:=p^.next;
end;
Процесс выполнения программы на специально подобранных входных данных и сравнения полученных результатов с эталонными называется
Процесс поиска и исправления синтаксических и логических ошибок в программе называется
Какие имена переменных являются наиболее предпочтительными с точки зрения надежного программирования?
Процесс изменения текста программы с целью повышения ее эффективности называется
Полный тестовый набор для переменной вещественного типа, значение которой по условиям решаемой задачи лежит в диапазоне [0..100], может включать тесты со следующими значениями этой переменной:
Какое значение будет храниться в поле a записи r1 после выполнения следующего блока?
var a: integer;
r1: record a: byte;
...
end;
r2: record a: shortint;
...
end;
begin
a:= 0;
with r1 do
begin
r2.a:= -10;
with r2 do
begin a:= 100;
r1.a:= -a;
end
end;
a:= 100;
end.
Какое значение получит переменная a после выполнения такой программы?
var a: byte;
proc p1(var k: byte);
proc p2(t: byte);
begin t:= t*2 end;
var a: byte;
begin a:= 1;
k:= 5;
p2(k);
end;
begin
a:= 10;
p1(a);
end.
Двусвязный линейный список задан указателем на голову head и указателем на хвост tail. Какой оператор необходимо вставить вместо [???], чтобы приведенный ниже отрывок программы правильно удалял из этого списка все элементы со значением 0?
{type ssylka = ^spisok;
spisok = record znach: integer;
next,prev: ssylka
end;
var head,p,q: ssylka;
}
while (head<>nil)and(head^.znach =0)do
begin p:= head;
head:= head^.next;
dispose(p);
end;
if head<>nil
then begin head^.prev:= nil;
p:= head;
while p^.next <> nil do
if p^.next^.znach = 0
then begin q:= p^.next;
p^.next:= q^.next;
if p <> tail then [???];
dispose(q);
end
else p:= p^.next;
end
else tail:= nil;
В какой последовательности распечатает вершины графа, заданного этим списком смежности, процедура прямого обхода? (Обход начинается с вершины a, производится в алфавитном порядке.)
a: b d b: d f f: c d g d: h g h: g
Постройте дерево бинарного поиска (дерево сортировки) для входной последовательности чисел 7 2 5 1 8 3 6 4 9 13 11 10 12, а затем распечатайте вершины этого дерева в порядке обхода в ширину. Какая последовательность чисел получится?
Какой алгоритм реализует приведенная ниже программа?
type vertices = ^vertex;
edges = ^edge;
vertex = record id,dist: integer;
incidence: edges;
next: vertices;
end;
edge = record from,toward: vertices;
len: integer;
next: edges;
end;
ptr_edges = ^ptr_edge;
ptr_edge = record e: edges;
next: ptr_edges;
end;
var i,j,len,source_id: integer;
g,source: vertices;
queue,head,next_head: ptr_edges;
f: text;
function new_vertex(i: integer; g: vertices): vertices;
var v: vertices;
begin
new(v);
v^.id:= i;
v^.dist:= maxint;
v^.incidence:= nil;
v^.next:= g;
new_vertex:= v
end;
function find_vertex(i: integer; g: vertices): vertices;
var v: vertices;
begin
v:= g;
while (v<>nil)and(v^.id<>i) do v:= v^.next;
find_vertex:= v
end;
function find_edge(j: integer; n: edges): edges;
var e: edges;
begin
e:= n;
while (e<>nil)and(e^.toward^.id<>j) do e:= e^.next;
find_edge:= e
end;
procedure new_edge(i,j,len: integer; var g: vertices);
var vi,vj: vertices;
eij: edges;
begin
vi:= find_vertex(i,g);
if vi = nil
then begin g:= new_vertex(i,g);
vi:= g
end;
vj:= find_vertex(j,g);
if vj = nil
then begin g:= new_vertex(j,g);
vj:= g
end;
eij:= find_edge(j,vi^.incidence);
if eij = nil
then begin new(eij);
eij^.from:= vi;
eij^.toward:= vj;
eij^.len:= len;
eij^.next:= vi^.incidence;
vi^.incidence:= eij
end
end;
procedure enqueue(v: vertices; var q,h: ptr_edges);
var e: edges;
pe: ptr_edges;
begin
e:= v^.incidence;
while e<>nil do
begin
new(pe);
pe^.e:= e;
pe^.next:= nil;
if q = nil
then h:= pe
else q^.next:= pe;
q:= pe;
e:= e^.next
end
end;
procedure print_vertices(g: vertices);
var v: vertices;
begin
v:= g;
while v<>nil do
begin
writeln(source_id,' -> ',v^.id,' : ',v^.dist);
v:= v^.next
end
end;
procedure dispose_edges(n: edges);
var e,e_next: edges;
begin
e:= n;
while e<>nil do
begin
e_next:= e^.next;
dispose(e);
e:= e_next
end
end;
procedure dispose_vertices(g: vertices);
var v,v_next: vertices;
begin
v:= g;
while v<>nil do
begin
v_next:= v^.next;
dispose_edges(v^.incidence);
dispose(v);
v:= v_next;
end;
end;
begin
assign(f,'in');
reset(f);
readln(f,source_id); {в первой строке записана начальная вершина}
g:= nil;
while not eof(f) do
begin
readln(f,i,j,len); {граф задан списком ребер: от, до, длина}
new_edge(i,j,len,g);
new_edge(j,i,len,g);
end;
source:= find_vertex(source_id,g);
source^.dist:= 0;
queue:= nil;
head:= nil;
enqueue(source,queue,head);
while head<>nil do
begin
with head^.e^ do
if from^.dist+len < toward^.dist
then begin
toward^.dist:= from^.dist + len;
enqueue(toward,queue,head);
end;
next_head:= head ^.next;
dispose(head);
head:= next_head
end;
print_vertices(g);
dispose_vertices(g);
end.
Какое значение будет храниться в поле a записи r2 после выполнения следующего блока?
var a: integer;
r1: record a: longint;
...
end;
r2: record a: byte;
...
end;
begin
a:= 0;
with r2 do
begin
a:= 10;
with r1 do
begin a:= -r2.a;
r2.a:= 100;
end;
a:= r1.a;
end;
a:= -100;
end.
Чтобы иметь возможность одновременно считывать информацию из текстового файла и записывать ее туда, файл нужно открыть при помощи команды
Постройте дерево бинарного поиска (дерево сортировки) для входной последовательности чисел 7 2 5 1 8 3 6 4 9 13 11 10 12, а затем распечатайте вершины этого дерева в порядке обратного обхода. Какая последовательность чисел получится
В качестве аргумента при вызове подпрограммы возможно использовать арифметическое выражение, если соответствующий параметр был
Какое из объявлений открытого параметра-строки является правильным?
Какое из объявлений открытого параметра-массива является правильным?
Какое значение получит переменная a после выполнения такой программы?
var a: byte;
proc p1(k: byte);
proc p2(var t: byte);
begin t:= t*2 end;
var a: byte;
begin a:= 1;
k:= 5;
p2(a);
end;
begin
a:= 10;
p1(a);
end.
Какую высоту будет иметь дерево синтаксического анализа для выражения
x*(a+b*c–g)+((m-n)*t*d/(s-y))*z
Переменные каких типов можно выводить в текстовый файл при помощи команд write() или writeln()
С текстовыми файлами могут работать файловые переменные, описанные следующим образом:
В какой последовательности распечатает вершины графа, заданного этим списком смежности, процедура обратного обхода? (Обход начинается с вершины a, производится в алфавитном порядке.)
a: b d b: d f f: c d g d: h g h: g

