Aula 9Aulas teóricas - notas...Aula 7Aula 8

Aula 8

                    ------------------------------
                    Exercícios diversos de revisão
                    ------------------------------


------------------------------------------------------------------
 Exercício 1
-----------
     - Imprimir os dígitos de um inteiro dado (base 10) por ordem
       inversa:
                  2458  =>  8542                        

       (o inteiro 0)
------------------------------------------------------------------
 Exercício 2
-----------
     - Imprimir os dígitos de um inteiro dado na base 16 por ordem
       Observações:
       a) Inclua uma função 
              int hexd(int n)
          que retorna o caracter correspondente ao dígito n da 
          base 16. É: n=0 -> '0', ..., n=10 -> 'a',...
       b) Inclua uma função 
              void imprime(n)
          que imprime n na base 16; primeiro chama-se a si mesma 
          com argumento n/16 e depois escreve o último dígito...



------------------------------------------------------------------
 Exercício 3
-----------
  Escreva um programa que um ficheiro no "formato DOS" para o
  "formato unix", isto é que converta todas as sequências (de 2
  caracteres) 
                ^M^J
  para o caracter ^J. 
  Notas: 
    - ^ significa "Ctrl"
    - ^J corresponde ao código 10 e ^M corresponde ao código 13.
    - Deve usar apenas as instruções de entrada/saída getchar() e 
      putchar()


------------------------------------------------------------------
 Exercício 4
------------
   Listar primos da forma 2^n-1 até o limite de 10^6
   Duas técnicas:
     Gerar os inteiros da forma 2^n-1 e testar os que são primos
     Gerar os primos e ver os que são da forma 2^n-1

   
------------------------------------------------------------------
 Exercício 5
------------
  - {m,n}, número de Stirling, é o número de maneiras de dividir
    (partição) um conjunto de m objectos em n sub-conjuntos
    não vazios.

    Ex {4,2}=7  (Porquê?!)
    Recorrência que define {m,n}: 
           {1,n} = 1 se n=1, 0 caso contrário.
           {m,n} = {m-1,n-1}+n{m-1,n}  (m=4,n=2: 1+2x3=7)
       
       (m)  0  1  2  3  4  5  ... (n)
            ---------------------
        1   0  1  0  0  0  0  ...
        2   0  1  1  0  0  0
        3   0  1  3  ...
        4   0  1  7  ...

    Escreva um programa que dados m,n (m>=1, n>=0) determine
    e escreva {m,n}.
    A função principal do seu programa deve ser
           main(){
             int m,n;
             scanf("%d",&m);
             scanf("%d",&n);
             printf("{%d,%d} = %d\n",m,n,st(m,n));
           }
    deve assim escrever a função st(m,n) que retorna {m,n}.


------------------------------------------------------------------
 Exercício 6  (possível exercício de computador
------------
     - Lido n>2 , escreve os primeiros n termos da sucessão
       definida por
          x(1) = 0
          x(2) = 2
          X(n) = X(n-1) + 2*X(n-2)
       Não deve usar variáveis indexadas. O formato de saída deve 
       ser "%d ".


------------------------------------------------------------------
 Exercício 7  (possível exercício de computador
------------
Escreva uma função
                       int nprimos(int a,int b)
que retorna o número de primos compreendidos entre os positivos a, b
(extremos incluídos).
Exemplo: se a=2, b=10 o valor retornado deve ser 4 pois há 4
primos entre 2 e 10: 2, 3, 5, 7.

Notas. Escreva apenas a função pedida. 
       Não inclua qualquer instrução de entrada ou de saída.
       Não deve usar variáveis indexadas.




------------------------------------------------------------------
 Exercício 8
------------
  Escreva um programa que leia um dia (d), mês (m) e ano 
  (a, a>=1900) e escreva o correspondente dia da semana.
  Ex:  
     dia? 5
     mes? 2
     ano? 1920
     dia 5 do mes 2 de 1920 e' 5 feira

  Sabe-se que o dia 1 de Janeiro de 1900 foi uma 2a feira.

  Possível estratégia:
    1) Conte quantos dias houve nos anos desde 1900 a a-1
    2) Some-lhe o número de dias dos meses desde 1 (Janeiro) a m-1.
    3) Some-lhe d. Seja s a soma.
    4) O resultado é (s+2)%7 "feira" (sendo 0-feira o Sábado e 
       1-feira o Domingo).
    5) Os anos bisextos são os que 
       i)  são múltiplos de 4
       ii) a não ser que sejam múltiplos de 100
       iii)a não ser que sejam múltiplos de 400.
       Assim, 2004 é bisexto (caso i)), 1900 não é (caso ii)) e
       2000 é (caso iii)).

  O seu programa deve incluir, entre outras, a função
                          int bisexto(int a)
  que retorna 1 se a é um ano bisexto e 0 caso contrário.


PC/PI - página reservada - versão 2005.02.08

Aula 9Aulas teóricas - notas...Aula 7Aula 8