Aula 5
------------------------------------
Processando sequêcias de dados
Exercícios:
sequêcias de dados,
teorema fundamental da Aritmética,
divisores...
------------------------------------
(Até agora...) o que pode ser uma instrução?
--------------------------------------------
- atribuição
- return <expressão>;
.........................................................
- if(...) <inst> \ condicionais
- if(...) <inst> else <inst> /
.........................................................
- while(<exp. cond>) <inst> \
- do <inst> while(<exp. cond>) | de ciclo
- for(...;...;...) <inst> /
.........................................................
- ; (instrução nula)
- {<inst> <inst> ... <inst>}
(instrução composta: 0 ou mais instruções)
------------------------
*Também já aprendemos (em exemplos):
- a definição de macros simples (#define) e o seu interesse...
- variáveis locais e globais...
-------------------------------------------------------------------
Programas com sequências de dados:
2 métodos:
----------
- Dado n e n inteiros... blá blá blá
Ex: 6 10 11 5 4 3 8
- ------------------
6 inteiros
- Dada uma sequência de n inteiros terminada com 0
10 11 22 6 8 9 0
Vai-se guardando informação para responder à pergunta.
Exercício 1:
- Dado n e n inteiros... determinar a média dos valores.
Média = soma / n, esta conta tem de ser efectuada em
"floating point". (tipo "float", cast...)
-----------------------------------------------------------
Exercício 2:
- Dado n e n inteiros... determinar o máximo e quantas vezes
ocorre esse máximo.
Ex: 5 8 10 20 10 20 30
O máximo é 30 e ocorre 1 vez(es)
- Comece por indicar as variáveis que vai usar e o seu
significado...
-----------------------------------------------------------
Exercício 3:
- Dado n>=2 escrever n como produto de primos ("Teorema
Fundamental da Aritmética")
Exemplos: n resultado
------------------------
4 2^2
36 2^2 x 3^2
6 2 x 3
721 2 x 3 x 11^2
Nota sobre o formato: quando o expoente é 1 não é impresso "^.."
Método: determine quantas vezes n é divisível por 2; seja v esse
número.
se v=0 não escreva nada,
se v=1 escreva 2,
se v>1 escreva 2^v
determine quantas vezes n é divisível por 3; seja v esse
...
determine quantas vezes n é divisível por 4; seja v esse
...
... até ser n=1 ...
Exemplo: n m v
------------------
40 2 1
20 2 2
10 2 3
5 2 -- --> 2^3
5 3 --
5 4 --
5 5 1
5 5 -- --> 5
sobre o sinal de multiplicação "x"
-----------------------------------------------------------
Exercício 4:
a) Determinar de entre os inteiros entre 1 e 10000 o que
tem (ou um dos que tem...) mais divisores e quantos são.
Usar a função
int ndiv(int n) --> número de divisores de n
Estratégia I: contar os inteiros 1..n que são divisores
Estratégia I: contar os inteiros d tais que d*d<=n...
que são divisores e ...
-----------------------------------------------------------------
b) Determinar de entre os inteiros entre 1 e 10000
todos os que têm o máximo número de divisores
(Ex. entre 1 e 10 há os iteiros 6,8,10 com 4 divisores)
Usar a função
i) Calcular o máximo número de divisores (entre 1 e 10000)
ii) Imprimir todos os inteiros (entre 1 e 10000) com esse
número de divisores
Estrutura do programa principal existindo um "#define MAX 10000"):
//-- calcular o máximo num. de divisores dos ints 1..MAX
md = maxdivs(1,MAX);
printf(... md ...);
//-- imprime ints entre 1 e MAX com md divisores
escreve_nums(MAX,md);
PC/PI - página reservada - versão 2005.02.08