MAC 115 – Introdução à Computação Instituto de Física – Segundo Semestre de 2002 - Noturno

Prova 1 – 1/10/2002 – Gabarito

\underline{Questão 1} (valor: 4.0)

Simule a execução do programa abaixo destacando a sua saída (o que vai sair na tela). Dados de entrada (a serem lidos):

4
/*************************************************************
Programa a ser simulado
*************************************************************/
#include <stdio.h>
int main()
{
int i, j, n, N, a, b, t;
scanf("%d", &n);
/********** parte a **********/
a = 0;
b = 1;
printf("%d %d", a, b);
for (i = 2; i <= n; i++) {
  t = b;
  b = a + b;
  a = t;
  printf(" %d", b);
}
printf("\n");
/********** parte b **********/
for (i = 0; i <= n; i++) {
  N = 1;
  printf(" %2d", N);
  for (j = 1; j <= i; j++) {
    N = N * (i - j + 1) / j;
    printf(" %2d", N);
  }
  printf("\n");
}
return 0;
}
/*************************************************************/
A saída do programa será:
0 1 1 2 3
1
1  1
1  2  1
1  3  3  1
1  4  6  4  1
Além dessa saída, voc^e deve ter colocado os valores sucessivos

das variáveis (algo como segue):
i ... 0 1 2 3 4 5
j ... 1 1 2 1 2 3 1 2 3 4 1 2 3 4 5
n ... 4
N ... 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1
a ... 0 1 1 2
b ... 1 1 2 3
t ... 1 1 2

\underline{Questão 2} (valor: 4.0)

Chamemos um número n (n ≥ 1000) de interessante se, ao criarmos o número m transferindo os 3 últimos dígitos de n para o começo de n (na mesma ordem), temos que m = 6n. Por exemplo, o número n = 142857 é interessante, pois m = 857142 = 6n. Escreva um programa em C que determina todos os números interessantes n com 6 dígitos.

Observações. Você pode achar relevantes as seguintes observações.

(a) Um número n tem 6 dígitos se e só se 100000 ≤ n ≤ 999999.

(b) 857142 = 857 × 10^{3} + 142.

/************************************************************/
#include <stdio.h>
int main()
{
  int n, m;
  for (n = 100000; n < 1000000; n++) {
    m = (n % 1000) * 1000 + n / 1000;
    if (m == 6 * n)
      printf("%d\n", n);
  }
  return 0;
}
/************************************************************/

\underline{Questão 3} (valor: 4.0)

Seja

f(x) = \frac{1}{2}(arctan x) log(1 + x^{2}).

Para todo x com |x| < 1, temos

f(x) = ∑_{r≥1}(−1)^{r−1}H_{2r} \frac{x^{2r+1}}{2r + 1},  (1)

onde

H_{2r} = 1 + \frac{1}{2} + \frac{1}{3} + … + \frac{1}{2r} .

Portanto, a série do lado direito de (1) é

\frac{1}{2}x^{3} − \frac{5}{12}x^{5} + \frac{7}{20}x^{7} − \frac{761}{2520}x^{9} + \frac{671}{2520}x^{11} − \frac{6617}{27720}x^{13} + …

(a) (Aquecimento) Escreva um programa em C que recebe como entrada um inteiro positivo n e imprime os primeiros n números na seqüência

H_{2}, H_{4}, …, H_{2r}, …

/************************************************************/
#include <stdio.h>
int main()
{
int n, k = 1;
double H = 0.0;
scanf("%d", &n);
while (n-- > 0) {
  H += 1.0 / k + 1.0 / (k + 1);
  k += 2;
  printf("%g ", H);
}
printf("\n");
return 0;
}
/************************************************************/

(b) Escreva um programa em C que recebe como entrada um número real x com |x| < 1 e um inteiro positivo n e imprime uma aproximação para f(x) calculando a soma das primeiras n parcelas da série em (1).

/************************************************************/
#include <stdio.h>
int main()
{
int n, k = 3, f = 1;
double x, H = 1.5, p, s;
scanf("%lf", &x);
scanf("%d", &n);
p = x * x * x;
s = p / 2;
n--;
while (n-- > 0) {
  H += 1.0 / k + 1.0 / (k + 1);
  k += 2;
  p *= x * x;
  f *= -1;
  s += f * H * p / k;
}
printf("%g\n", s);
return 0;
}
/************************************************************/