MC102MN

Introdução a Algoritmos e programação de computadores

Lista para a prova 1

  1. Rode o teste de mesa do seguinte programa
    1  #include <stdio.h>
    2 
    3  int main(int argc, char *argv[]) {
    4    int a = 0, b = 1, tmp;
    5    while (b < 50 ) {
    6      tmp = a;
    7      a = a+b;
    8      b = a + b;
    9    }
    10   printf("O resultado é: %d\n", tmp);
    11   return 0;
    12 }
    

    Eu quero uma tabela no formato

    LinhaVariavel1Variavel2

    Resolução:

    abtmp
    01xx
    120
    351
    8133
    21348
    558921
  2. Declarar variáveis para um problema

    a) Você quer fazer um programa estatístico que calcula média e desvio padrão de vários números. Como você declararia as variáveis correspondes à média e ao desvio padrão?

    Resolução:

    double media, desvio;
    

    b) Você quer calcular o fatorial de um número e precisa de uma variável para guardar todos os números de 0 a esse número. Como você declararia essa variável? Como seria o laço dessa função? Por que?

    Resolução:

    int numero;
    for (numero = 1; numero < N; ++numero)
    

    c) Você quer fazer uma função para calcular a n-ésima potência de um número real. Como você declararia essa função, e por que escolheu cada um dos tipos?

    double potencia(double x, int n)
    Escolhi porque o número x é real mas n pode ser inteiro.
    

    d) Estamos fazendo um programa para calcular o ab. Nesse programa precisamos de uma variável para guardar valores intermediários (por exemplo, outros exponenciais, logaritmos, etc). Como você declararia essa variável temporária?

    double tmp;
    

    e) Queremos guardar em um vetor os gols feitos pelo meu time de futebol nesse campeonato, que vai ter ao todo 23 jogos. Cada elemento do vetor deve guardar os gols feitos pelo time em um jogo. Como você declararia esse vetor? Qual é o índice do seu primeiro e do seu último elemento?

    int gols[23]
    O primeiro é gols[0] e o último é gols[22]
    
  3. A sequinte função está errada? Se sim, quais são os erros que você consegue ver?
    1  void calcula_media_var(double valores[20]) {
    2    int sum_valores, sum_quadrados, i;
    3    for (i = 0; i <= 20; ++i) {
    4      sum_valores -= valores[i];
    5      sum_quadrados += sum_valores*sum_valores;
    6    }
    7    printf("A media é %lf\n", sum_valores/20);
    8    printf("A variância é %lf\n",  sum_quadrados/20 - 
    9                        sum_valores/20*sum_valores/20);
    10  }
    
    1. sum-valores e sum-quadrados deveriam ser double
    2. sum-valores e sum-quadrados deveriam ser inicializados
    3. o laço deve ser enquanto i menor que 20, e não i menor ou igual a 20
    4. na linha 4 deve ser += em vez de -=
    5. nas linhas 8 e 9 faltam parênteses, a 9 deveria ser
                            (sum_valores/20)*(sum_valores/20));
      
  4. Escreva uma função que, dado um vetor declarado como
    
    double valores[32];
    
    
    retorne o produto de todos os elementos em valores que estão entre zero e um (excluindo os iguais a zero).
    double prod(double valores[32]) {
     double p = 1;
     int i;
     for (i = 0; i < 32; ++i) {
       if ((0 < valores[i]) && (valores[i] < 1)) {
         p *= valores[i];
       }
     }
     return p;
    }
    

Footnotes:

1 FOOTNOTE DEFINITION NOT FOUND: 22

Author: Alexandre Tachard Passos <alexandre.tp@gmail.com>

Date: 2010-09-09 15:14:10 BRT

HTML generated by org-mode 6.21b in emacs 23