MC102MN

Introdução a Algoritmos e programação de computadores

Aula I apresentação e introdução

Modelo básico de computação e programação

Um computador pode ser abstraído como duas caixas pretas razoavelmente simples: um processador, e uma memória. Cada passo de execução pode ser resumido assim:

  1. O processador pega uma instrução do endereço de memória M (um valor interno do processador)
  2. O processador decodifica essa instrução
  3. O processador executa essa instrução (possivelmente mandando comandos para a memória)
  4. dependendo da instrução, o processador calcula um novo valor para M
  5. O processador reinicia o ciclo

A memória pode executar duas operações: retornar o valor que está em um endereço M e guardar um valor no endereço M. O processador, no entanto, pode executar mais operações, como somar dois números, subtrair dois números, comparar dois números, ou mudar o valor de M dependendo de algum número armazenado em algum lugar.

Essa arquitetura permite que tanto o processador quanto a memória sejam razoavelmente simples, precisando realizar poucas operações para o bom funcionamento de um computador. Computadores de verdade são mais complexos que isso (as principais diferenças são em dispositivos de entrada/saída e execução simultânea de vários programas).

É bom notar que o que permite que esse modelo de computação possa, em princípio, computar qualquer resultado, é a interação entre um processador simples (com capacidade de decisão) e uma memória mutável. Por isso, em programação, falaremos de expressões como

x = x + 1
que, nesse contexto, devem ser interpretadas como "guarde no valor de memória representado pela variável x o resultado do cálculo da expressão "x+1", onde "x" representa o valor atual no lugar de memória representado pela variável x.

Ao longo do curso, aprenderemos vários tipos diferentes de comandos, e sempre será interessante voltar para esse modelo simples (ou extensões dele) para entender como eles funcionam. Alguns exemplos são:

  • comandos iterativos (que executam o mesmo código várias vezes)
  • comandos condicionais (que escolhem que código executar)
  • comandos que manipulam indiretamente a memória (representando algumas posições específicas com nomes únicos)
  • comandos que manipulam explicitamente a memória (guardando e fazendo operações com valores que representam endereços na memória)
  • comandos que manipulam arquivos em disco
  • comandos que criam um ambiente virtual com uma memória virtualmente separada, para executar o mesmo código várias vezes em pontos diferentes do programa
  • comandos que lidam simultaneamente com vários valores guardados na memória
  • comandos que convertem entre palavras, sequências de caracteres, letras e números (que são todos representados como bits e bytes na memória)
  • comandos que criam lugares virtuais na memória para armazenarem vários valores como se fossem um
  • comandos que explicitamente constroem estruturas complicadas na memória, cheias de referências para outras partes da memória

Algoritmo

Um computador, então, precisa executar uma sequência de operações para fazer o que ele faz. Qualquer sequência de operações bem-definida e finita que resolve um problema é chamada de "algoritmo" para aquele problema. Por exemplo, um algoritmo pra você ordenar uma lista de números é você, enquanto tiver um par adjacente de números fora de ordem, trocá-los. Um exemplo de uma sequência de passos que não é um algoritmo é dizer que um chatbot é feito de três módulos: um que lê o que é dito pra ele, outro que elabora mentalmente as respostas e outro que escreve essas respostas de volta. Isso não é um algoritmo por ser mal-definido.

Ao longo desse curso, voltaremos à idéia de algoritmo ocasionalmente, mas por agora sugiro que vocês pensem em "sequências de passos que podem resolver problemas/fazer contas".

Author: Alexandre Tachard Passos <alexandre.tp@gmail.com>

Date: 2010-08-03 08:10:01 BRT

HTML generated by org-mode 6.21b in emacs 23