Instituto de Computação - UNICAMP

MC111 - Introdução ao Processamento de Dados

Prova 2 - Versão A

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(j, '+') ;
          escreve_n_char(j, '-');
          writeln;
       end;
    end; 
    
    begin
       desenho(5);
    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(j, '+') ;
    	 escreve_n_char(j, '-');
    	 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(l-i+1, '-') ;      
          escreve_n_char(i, '+') ;
          escreve_n_char(l-i+1, '-');
          writeln;
       end;
    end; 
    
  4. (2 pontos) Escreva uma função que retorna o número de divisores de um número n, excluindo o número 1 e excluindo 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;
    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) = 0 then
    	 write(i, ' ');
    end;
    

Islene Calciolari Garcia