MC102
Algoritmos e Programação de Computadores
Lista III - Exercícios para Fixação



Segundo Semestre de 2002
Norton Trevisan Roman




Exercício 1: Escreva um programa que determine quanto tempo leva para um corpo cair de determinada altura a partir do repouso. Use a função Sqrt para obter a raiz.



Exercício 2: Qual é a saída do seguinte código? (assuma que soma e cont são integer).

  soma := 33;
  cont := 1;
  WHILE cont < 12 DO BEGIN
    soma := soma + cont;
    cont := cont + 2
  END;
  writeln('Os números são: ',cont,' e ',soma)
        



Exercício 3: Qual a saída do seguinte código? (assuma todas as variáveis são integer).

  num := 0;
  WHILE num <= 5 DO BEGIN
    num := num + 1;
    write(num)
  END;
        
  num := 17;
  exp := 0;
  pot := 1;
  WHILE pot < num DO BEGIN
    exp := exp + 1;
    pot := pot * 2
  END;
  writeln('2 na potência ', exp:1,' excede ', num:2);
        
  num := 1;
  WHILE num <> 10 DO BEGIN
    writeln(num);
    num := num*2
  END;
  writeln(num);
        



Exercício 4: Qual a saída do seguinte código? Assuma que chegou1 e chegou2 são booleanas. As outras variáveis são integer.

  dest1 := 15;
  dest2 := 27;
  local1 := 20;
  local2 := 20;
  chegou1 := false;
  chegou2 := false;

  WHILE (NOT chegou1) AND (NOT chegou2) DO
  BEGIN
    local1 := local1 - 1; {se move uma unidade por instante}
    local2 := local2 + 2; {se move 2 X mais rápido}
    chegou1 := (local1 <= dest1);
    chegou2 := (local2 >= dest2);
    writeln('Os viajantes estão em ',local1:2,' e ',local2:2)
  END;
  writeln('As posições finais dos viajantes são ',local1:2,' e ',local2:2)
        



Exercício 5: Eis uma confusão que as pessoas fazem. O que o segmente escreve?

  t := 1;
  WHILE t = 1 DO BEGIN
    write('Oba');
    t := 2;
    write('Abo')
  END;
        



Exercício 6: O que podemos concluir sobre um corpo de um WHILE que não altera nenhuma das variáveis mencionadas na condição?



Exercício 7: Se não houvesse um REPEAT, como você usaria WHILE para fazer a mesma coisa?



Exercício 8: Qual é a saída do seguinte programa? Assuma que a entrada é 2 e 3. Preste bem atenção no que faz e use um diagrama de execução para testar o programa.

  PROGRAM P;
  VAR a,b,x,y : integer;

    PROCEDURE Q(VAR q,a:integer; b,r : integer);
    VAR x,z : integer;
    BEGIN
      read(x);
      z := -x;
      x := x+1;
      q := 2*q + a;
      b := 1 + z - 2*x;
      writeln(q,a,b,r,x,z)
    END;

  BEGIN
    a := 1;
    b := 2;
    x := 7;
    y := 11;
    writeln(a,b,x,y);
    Q(a,b,x,y);
    writeln(a,b,x,y);
    Q(b,a,x-y,y);
    writeln(a,b,x,y)
  END.
        



Exercício 9: Qual a saída do seguinte programa?

  PROGRAM P;
  VAR x,y,z : integer;

    PROCEDURE Ordena(VAR prim,seg,ter: integer);
      PROCEDURE Troca(VAR n1,n2:integer);
      VAR aux : integer;
      BEGIN
        aux := n1;
	n1 := n2;
	n2 := aux
      END; {Troca}

   BEGIN
     IF prim > seg THEN Troca(prim,seg);

     IF seg > ter THEN BEGIN
       Troca(seg,ter);
       IF prim > seg THEN Troca(prim,seg)
     END
   END; {Ordena}

 BEGIN
   x := 90;
   y := 25;
   z := 50;
   Ordena(x,y,z);
   writeln(x,y,z);
   x := 6;
   y := 2;
   z := 1;
   Ordena(x,y,z);
   writeln(x,y,z)
 END.
        



Exercício 10: Qual seria a saída do programa acima se "ter" fosse um parâmetro por valor em vez de por referência?





Página da disciplina