Ответы на курс: Программирование на языке 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