Instituto de Computação - UNICAMP

MC111 - Introdução ao Processamento de Dados

Prova 2 - Versão D

Islene Calciolari Garcia

Primeiro semestre de 2002

  1. (2 pontos) Analise o programa abaixo e escreva a sua saída no espaço indicado.
    program adivinha_desenho;
    
    procedure escreve_n_char(n : integer; c: char);
    var
       i : integer;
    begin
       for i:=1 to n do
          write(c);
    end;
    
    
    procedure desenho(l : integer);
    var
       j : integer;
    begin
       for j:=1 to l do
       begin
          escreve_n_char(l-j+1, '@') ;
          escreve_n_char(l-j+1, '-');
          writeln;
       end;
    end; 
    
    begin
       desenho(4);
    end. 
    
    Resposta:
    @@@@----
    @@@---
    @@--
    @-
    
  2. Reescreva o procedimento desenho utilizando o comando repeat.

    Resposta:

    procedure desenho(l : integer);
    var
       j : integer;
    begin
       if (l > 0) then
       begin
          j := 1;
          repeat
    	 escreve_n_char(l-j+1, '@') ;
    	 escreve_n_char(l-j+1, '-');
    	 writeln;
    	 j := j+1;	 
          until j > l;
       end;
    end;
    
  3. (2 pontos) Utilizando o procedimento escreve_n_char escreva um procedimento que produza um desenho de l linhas de acordo com o seguinte modelo para 5 linhas:
    -+++++-
    --++++--
    ---+++---
    ----++----
    -----+-----
    
    Resposta:
    procedure desenho(l : integer);
    var
       i : integer;
    begin
       for i:=1 to l do
       begin
          escreve_n_char(i, '-') ;      
          escreve_n_char(l-i+1, '+') ;
          escreve_n_char(i, '-');
          writeln;
       end;
    end; 
    
  4. (2 pontos) Escreva uma função que retorna o número de divisores de um número n, incluindo o número 1 e incluindo o próprio número n.
    function conta_div(n: integer): integer;
    var
      i,c: integer;
    begin
       c := 0;
       for i := 2 to n div 2 do
         if n mod i = 0 then
            c := c + 1;
       conta_div := c + 2;
    end;
    
  5. (2 pontos) Utilizando a função conta_div descrita no item anterior, escreva um procedimento que imprime os números primos de 2 a x.
    procedure primos(x : integer);
    var 
       i : integer;
    begin
       for i:= 2 to x do
          if conta_div(i) = 2 then
    	 write(i, ' ');
    end;
    

Islene Calciolari Garcia