Aula 6Aulas teóricas - notas...Aula 4Aula 5

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

Aula 6Aulas teóricas - notas...Aula 4Aula 5