Preview only show first 10 pages with watermark. For full document please download

Pcs2214- P1 Questao02

Segunda questao prova de 2011

   EMBED

  • Rating

  • Date

    December 2018
  • Size

    38.3KB
  • Views

    5,670
  • Categories


Share

Transcript

PCS - 2214 Fundamentos de Engenharia de Computação I 1a. Prova 04 de Abril de 2011 GABARITO Questão 2 (valor: 2,6 pontos) a) (valor: 1,4 pontos) Uma máquina de venda de refrigerantes devolve o troco de um pagamento em moedas de R$0,01, R$0,05 e R$0,10. Complete o seguinte algoritmo recursivo, que apresenta como saída uma lista das diferentes combinações de moedas que podem ser utilizadas para devolver um valor de troco de T centavos. M1, M5 e M10 são o número de moedas de R$0,01, R$0,05 e R$0,10 em uma determinada combinação. O procedimento imprimir escreve na saída o número de moedas da combinação. A chamada inicial do procedimento sempre tem a forma troco(T, 0, 0, 0). Assim, por exemplo, o procedimento troco quando executado como troco(11, 0, 0, 0) apresenta como saídas: (M1, (M1, (M1, (M1, M5, M5, M5, M5, M10) M10) M10) M10) = = = = ( 1, ( 1, ( 6, (11, 0, 2, 1, 0, 1) 0) 0) 0) Observação: no algoritmo a seguir, o operador && representa o operador lógico “E”. Entradas: T = valor do troco desejado M1 = número de moedas de 1 centavo M5 = número de moedas de 5 centavos M10 = número de moedas de 10 centavos troco(T, M1, M5, M10) { if ((T ≥ 10) && (M1 == 0) && (M5 == 0)) { troco(T-10, M1, M5, M10+1); } if ((T ≥ 5) && (M1 == 0)) { troco(T-5, M1, M5+1, M10); } if (T ≥ 1) { troco(T-1, M1+1, M5, M10); } if (T == 0) { imprimir(M1, M5, M10); } } b) (valor: 1,2 pontos) Em aplicações de simulação e jogos digitais, é comum a necessidade de se determinar todas as colisões que ocorrem em um conjunto de n objetos. O algoritmo a seguir representa uma forma simples de fazer isso. Considerando que o procedimento testar_colisão tem complexidade Θ(1), calcule a complexidade assintótica do algoritmo encontrar_colisoes, apresentando o cálculo efetuado. Entradas: n: número de objetos que podem colidir entre si encontrar_colisoes(n) { for j = 1 to n-1 for k = j+1 to n testar_colisao(j, k); } T1 = n-1 T2 = n-2 … Tn-1 = 1 Tn = 0 Assim, o número de repetições de testar_colisao será igual a T1 + T2 + … + Tn, que corresponde à soma da PA com n termos, termo inicial igual a zero e razão 1: T(n) = n(n-1)/2 = (n2 – n)/2. T(n) = (n2 – n)/2 ≤ n2 para n ≥ 1 portanto o algoritmo é O(n2). T(n) = (n2 – n)/2 ≥ n2/4 para n ≥ 2 portanto o algoritmo é Ω(n2). Consequentemente, o algoritmo é Θ(n2).