База ответов ИНТУИТ

Программирование на языке Pascal

<<- Назад к вопросам

Описанные ниже подпрограммы
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;

(Отметьте один правильный вариант ответа.)

Варианты ответа
реализуют косвенную рекурсию
реализуют прямую рекурсию(Верный ответ)
не рекурсивны
Похожие вопросы
Описанные ниже подпрограммы
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;
Описанные ниже подпрограммы
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;
Какие переменные будут существовать во время выполнения подпрограммы p2?
program prog;var a: byte;procedure p1; var a: byte; begin  ... end;procedure p2; function f: boolean;  var a: byte;  begin   ...  end; var a: byte; begin  ... end;
Какие переменные будут существовать во время выполнения подпрограммы f?
program prog;var a: byte;procedure p1; var a: byte; begin  ... end;procedure p2; function f: boolean;  var a: byte;  begin   ...  end; var a: byte; begin  ... end;
Какие переменные будут существовать во время выполнения подпрограммы p1?
program prog;var a: byte;procedure p1; function f: boolean;  var a: byte;  begin   ...  end; var a: byte; begin  ... end;procedure p2;var a: byte; begin  ... end;
Какой алгоритм реализует приведенная ниже программа?
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:= vend;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:= vend;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:= eend;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        endend;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  endend;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  endend;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  endend;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.
Какие вызовы функции
function f(const a:byte; var s:real; t:boolean):real;
являются неправильными с точки зрения компилятора языка Pascal?
Какой алгоритм реализует приведенная ниже программа?
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.
Какие из приведенных ниже отрывков программ хорошо структурированы?
1)	procedure step(v,k: byte; r: longint);var j: byte;begin if r < min then   if k = N-1      then min:= r     else for j:= 1 to N do            if (sm[v,j]<>0)and(mark[j]=0)              then begin                    mark[j]:= 1;                    step(j,k+1,r+sm[v,j]);                    mark[j]:= 0                    end;end;2)	for i:= 1 to N-1 dobeginfor x:= 1 to N doif (sm[last,x]<>0)and(not done[x])then dist[x]:= min(dist[x],dist[last]+sm[last,x]);min_dist:= MaxLongInt;for x:= 1 to N doif (not done[x])and(min>dist[x])then begin min_dist:= dist[x];last:= x; end;done[last]:= true;end;3)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;4)	procedure infix(var p: ukaz);begin read(c);  case c of  '('            : begin new(p); infix(p^.left) end;  '+','-',*','/' : begin p^.symbol:= c;                          infix(p^.right)                    end;  ')'            : {ничего не делаем};  else             begin p^.symbol:= c;                          p^.right:= nil;                          p^.left:= nil;                    end; end;end;
Какой алгоритм реализует приведенная ниже программа?
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 beginwrite(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.