Descansando a Cabeça

Showing posts with label Programação. Show all posts
Showing posts with label Programação. Show all posts

Monday, September 12, 2011

Noções de Programação

1. Noções de programação

1.1 Construção de Algoritmos

Tipos de dados simples


Tipos de dados atômicos. Em Java temos 8 tipos:
short, int, float, double, long, char, byte e boolean.

short: 16 bits, sendo 1 bit para o sinal.
int: com 32 bits, sendo 1 bit para o sinal.
float: 32 bits, sendo 1 bit para o sinal, 8 bits do expoente e 23 bits da mantissa.
double: 64 bits, sendo 1 bit para o sinal, 11 bits do expoente e 52 bits da mantissa.
long: 64 bits, sendo 1 bit para o sinal.
char: 16 bits sem sinal, usado para representar unicode.
boolean: 8 bits, representa apenas true ou false.
byte: inteiro de 8 bits, pode assumir valores entre -128 e 127.

Tipos de dados estruturados
  • Vetores
  • Pilhas
  • Listas
  • Filas
  • Registros
  • Arquivos ( Sequência de registros )
Subprogramas:

São partes específicas que realizam algum procedimento no código.
Podem ser Funções ou Procedimentos.

Funções retornam valor.
Procedimentos não retornam.

Pode-se passar parâmetros por valor ou por referência.
Na declaração por valor os dados são duplicados e os dados originais não são modificados.
Na declaração por referência os dados originais podem ser modificados porque se passa a referência de memória deles.

Em Java a passagem de parâmetros se dá SEMPRE POR VALOR.

Acontece que quanto passamos uma variável de um atributo que aponta para um objeto passamos essa referência como valor.

Recursividade:
  • Toda função recursiva pode ser transformada em uma função iterativa, usando pilha.
  • Toda função iterativa pode ser descrita de forma recursiva sem uso da iteração.
  • Algoritmos recursivos tendem a utilizar mais o espaço de pilha (stack) que o espaço de memória ( Heap)
  • Uma função recursiva em cauda é assim chamada porque a última coisa que a função faz é chamar a si mesmo, como exemplo podemos ter o percurso de pós-ordem em árvores binárias.
  • Em geral, as chamadas recursivas são mais custosas que as iterativas.
  • O código recursivo é mais claro, o iterativo mais eficiente. Um bom compilador pode traduzir código recursivo em iterativo.
  • Na recursão em calda os valores do retorno da chamada não precisam ser armazenados na pilha.
Função A( ) {
instrução 1;
instrução 2;
A( ) ;
}
  • Recursões podem ser diretas ou indiretas
    • Diretas: a função chama ela mesma
    • Indiretas: a função A( ) chama B ( ) que chama A( ) novamente, como acontece no reconhecimento de expressões nas linguagens livre de contexto.
  • As recursões são aninhadas quando uma chamada recursiva inclui como parâmetro outra chamada recursiva. (Ou ainda, é um tipo de recursão em que a chamada refere-se a si própria mais de uma vez)

Programação Estruturada:
  • Estruturas de Sequência
  • Estruturas de Seleção
  • Estruturas de Repetição
Passagem de parâmetros:
  • Por valor
  • Por referência