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