MC102

Algoritmos e Programação de Computadores

Terceira Lista de Exercícios

Os exercícios dessa lista cobrem as aulas até o dia 27/03.
  1. Faça um programa que leia 2 matrizes 10 x 10 do teclado (X e Y) e depois apresente a seguinte lista de opções para o usuário: (A) Somar as duas matrizes (Z = X + Y); (B) Subtrair as duas matrizes (Z = X - Y); (C) Multiplicar as duas matrizes (Z = X * Y); (D) Criar uma matriz com os maiores elementos de cada matriz (Z[i,j] = MAX(X[i,j], Y[i,]); (E) Criar uma matriz com os menores elementos de cada matriz (Z[i,j] = MIN(X[i,j], Y[i,j]). (F) Encerrar o programa. Após apresentar a lista de opções, leia um caracter do teclado, execute a opção selecionada e mostre a matriz resultante. Repita até que o usuário escolha a letra F. Sugestão: Utilize procedimentos para quebrar seu programa em partes.
  2. Você já jogou "Campo minado"? Faça um programa que leia uma matriz 20 x 20 de caracteres do teclado. Cada caracter pode ser: * (asterisco) representa uma bomba na coordenada lida; - (traço) representa um local sem bomba. Crie uma matriz de inteiros 20 x 20 que contenha para cada posição [i,j] o número de bombas na vizinhança. Imprima essa matriz na tela. Cada posição tem no máximo 8 vizinhos (as diagonais contam). Veja o exemplo para uma matriz 5 x 5:
  3. Entrada:
    *
    -
    -
    -
    -
    -
    -
    -
    -
    -
    *
    *
    *
    *
    *
    -
    -
    -
    -
    *
    * - - - *
    Saída:
    0
    1
    0
    0
    0
    3
    4
    3
    3
    2
    1
    2
    2
    3
    2
    3
    4
    3
    5
    3
    0
    1
    0
    2
    1

  4. Quantos números o programa abaixo imprimirá na tela?
    Program Pares;
    Var contador : Integer;

    Function NumeroPar(numero : Integer) : Boolean;
    Begin
    NumeroPar := (numero mod 2) = 0;
    End;

    Begin
    For contador := 1 To 100 Do
    If (NumeroPar(contador)) Then
    WriteLn(contador);
    End.
  5. O que o programa abaixo imprimirá na tela?
    Program Linhas;
    Var contador : Integer;

    Procedure ImprimeLinha(linha : Integer);
    Var contador : Integer;
    Begin
    For contador := 1 To linha Do
    Write(contador);
    WriteLn;
    End;

    Begin
    For contador := 1 To 10 Do
    ImprimeLinha(contador);
    End.
  6. O que o programa abaixo faz? Quantas vezes o procedimento AcertaPosicao será executado? Quantas vezes o procedimento Troca será executado?
    Program Numeros;
    Const LIMITE = 5;
    Var contador : Integer;
    numeros : Array[1..LIMITE] Of Integer;

    Procedure Troca(x, y : Integer);
    Var temporario : Integer;
    Begin
    temporario := numeros[x];
    numeros[x] := numeros[y];
    numeros[y] := temporario;
    End;

    Procedure AcertaPosicao(posicao : Integer);
    Var indice : Integer;
    Begin
    For indice := posicao + 1 To LIMITE Do
    If (numeros[indice] < numeros[posicao]) Then
    Troca(posicao, indice);
    End;

    Procedure LeNumeros;
    Var indice : Integer;
    Begin
    WriteLn('Digite ', LIMITE, ' numeros: ');
    For indice := 1 To LIMITE Do
    ReadLn(numeros[indice]);
    End;

    Procedure MostraNumeros;
    Var indice : Integer;
    Begin
    Write('O resultado e: ');
    For indice := 1 To LIMITE Do
    Write(numeros[indice]:6);
    WriteLn;
    End;

    Begin
    LeNumeros;
    For contador := 1 To 4 Do
    AcertaPosicao(contador);
    MostraNumeros;
    End.
  7. A função Media, que calcula a média dos elementos do vetor, e Contagem, que conta quantos números do vetor estão acima de um determinado valor, estão incompletos no programa abaixo. Faça uma implementação para eles.
    Program Estatistica;
    Const LIMITE = 100;
    Var contador : Integer;
    numeros : Array[1..LIMITE] Of Integer;

    Function Media : Integer;
    { Coloque aqui seu código }

    Function Contagem(numero : Integer) : Integer;
    { Coloque aqui seu código }

    Procedure LeNumeros;
    Var indice : Integer;
    Begin
    WriteLn('Digite ', LIMITE, ' numeros: ');
    For indice := 1 To LIMITE Do
    ReadLn(numeros[indice]);
    End;

    Begin
    LeNumeros;
    WriteLn('A media dos numeros digitados e: ', Media);
    WriteLn('Existem ', Contagem(Media), ' numeros acima da media.');
    End.
  8. Faça um programa que leia uma matriz 10 x 10 do teclado e depois imprima na tela a posição e o valor do menor número da matriz. Dica: Você realmente precisa de uma matriz para implementar esse programa?
  9. Faça um programa que leia uma matriz 10 x 10 do teclado e depois imprima na tela a média dos elementos de cada linha e também a média da matriz inteira. Imprima também ao final do seu programa a quantidade de números acima da média da matriz. Dica: Use procedimentos e funções para simplificar seu programa. Aproveite procedimentos e funções que já fez anteriormente. Existe alguma semelhança desse programa com o número 6?
  10. Faça um programa que leia uma matriz 15 x 15 do teclado e ordene os elementos de cada linha da matriz. Imprima a matriz resultante. Dica: Você consegue aproveitar algum procedimento ou função que já fez?
  11. Faça um programa similar ao exercício número 8, só que conte também quantos números primos foram digitados na matriz. Dica: Crie a função Primo que recebe um número como parâmetro e retorna um Boolean indicando se o número é primo ou não.