Introdução – Sistemas Computacionais, Algoritmos, Programas e Sistemas
Parte deste
material foi adaptado dos conteúdos originais dos Professores Fábio Tirelo,
Silvio Jamil e Theldo Cruz.
Material de Profa. Dulcinéia Oliveira da Penha
1. Sistemas Computacionais
Os sistemas computacionais são compostos por hardware e software. Do
ponto de vista de um programador, os componentes de um computador que
interessam são:
- Processador: Parte do computador responsável pela execução do programa.
- Dispositivos de entrada: equipamentos que o usuário pode utilizar para fornecer valores a um programa. Exemplo: teclado, mouse, scanner, microfone, etc.
- Dispositivos de saída: equipamentos que podem ser usados pelo programador para exibir resultados para o usuário. Exemplo: monitor de vídeo, impressora, etc.
- Memória: utilizada para armazenamento de dados e informações do programa.
O modelo de computador sequencial descrito pode von Neumann: Modelo de von Neumann
década de 50
programa armazenado na memória
base da arquitetura da maioria dos computadores
problemas são resolvidos por uma série de instruções, buscadas na memória, executadas uma após a outra pela CPU
Somente uma instrução pode ser executada por vez
Arquitetura básica, simplificada funcionalmente (com apenas um evento acontecendo por vez), simples para construir (com apenas um elemento de cada componente) e de baixo custo.
Um sistema computacional pode ser descrito por camadas ou níveis. Duas importantes descrições são apresentadas a seguir.
1) Tanenbaum: 6 camadas
2) Almasi: 4 níveis
-
Algoritmo: ou plano de ataque de alto-nível – do problema
-
Linguagem de alto-nível na qual o usuário escreve um programa para o computador
-
Sistema operacional que gerencia
os recursos do sistema
- Arquitetura física da máquina representada pelo seu conjunto de instruções
2) Algoritmos e programas
à Problema:
-
Pergunta de caráter geral a ser respondida
-
Instância de um problema
o
Fixação de determinados valores
para os dados de entrada
-
Descrição de um problema
o
Quais são os possíveis dados (entrada)?
o
Quais são os possíveis resultados (saída)?
o
Que condições devem ser
satisfeitas para que um particular resultado seja uma saída aceitável para uma
certa entrada
-
Exemplos:
1) Ordenar uma lista de 5
inteiros em ordem crescente
§ Entrada: lista de 5 inteiros
§ Saída: lista de 5 inteiros
§ Condições: Ordem crescente
2) Achar uma raíz complexa de um
polinômio com coeficientes reais de grau
arbitrário
§ Entrada: polinômios com coeficientes reais de grau arbitrário
§ Saída: números complexos
§ Condições: Se p[c] = 0.
3) Venda em um supermercado com
cartão de crédito
§ Entrada: códigos de barras dos produtos, número do cartão de
crédito, validade, número de parcelas
§ Saída: descrição dos produtos, preço dos produtos, total, venda aprovada/reprovada,
nota fiscal, comprovante do cartão de crédito, etc.
->Algoritmo
-
Origem: Matemático persa Abu
já’far Muhammad ibn-Musa
Al-Khowarizmi (Algorimus em
latim) (780-850 d.C).
-
Desenvolvimento dos primeiros
procedimentos formalizados, passo-a-passo,
para a realização de operações aritméticas.
-
Definições:
(1) Descrição de um padrão de
comportamento (o que fazer) expressa em termos de um conjunto finito e bem inteligível de ações primitivas (como fazer), as quais, supõe-se, a priori, sejam possíveis de executar. Executando a operação a
+ b percebemos um padrão de comportamento, mesmo que a operação seja realizada para
valores diferentes de a e b.
(2) Qualquer procedimento computacional bem
definido que toma algum valor ou conjunto de valores
como entrada e produz algum valor ou conjunto de valores como saída.
(3) Ferramenta para resolver um problema computacional bem especificado.
Neste caso, o enunciado do problema especifica em termos gerais o
relacionamento entre a entrada e a saída desejada. O algoritmo descreve um
procedimento computacional específico para se alcançar esse relacionamento da
entrada com a saída.
(4) Procedimento sem ambigüidades
para solucionar um problema.
(5) Seqüência de ações executáveis para a obtenção de uma solução para um determinado tipo de problema.
-
Os algoritmos fazem parte do
dia-a-dia das pessoas. Exemplos de algoritmos:
o
instruções para o uso de medicamentos,
o indicações de como montar um aparelho,
o como chegar à biblioteca?
o receita de culinária,
o
como encontrar o telefone de
alguém em BH?
o partitura.
-
Um algoritmo pode ser definido de diversas formas: em alto-nível, em uma
linguagem de programação, em assembly, em linguagem de máquina.
->Programa:
-
Algoritmo escrito em alguma
linguagem de programação.
->Linguagem de Programação:
-
conjunto de regras para a escrita de um algoritmo.
->Algoritmos como solução de problemas
Características:
- As entradas são objetos gerados externamente, vindo de um conjunto bem especificado.
- Fornece como resultados determinados objetos de um conjunto conhecido mantendo uma relação específica com a entrada.
-
Cada regra ou instrução
deve ser clara e precisamente definida sem nenhuma ambigüidade
- Cada regra ou instrução envolve a execução de uma ação efetiva e viável.
- O processo de resolução de um problema por computador começa por explicitar claramente os requisitos do problema para o qual é projetado um algoritmo, que finalmente é codificado em uma linguagem de programação apropriada.
- Etapas do desenvolvimento de algoritmos:
o
Análise dos requisitos do problema
o
Escolha e desenvolvimento de um modelo
o
Projeto do algoritmo
o
Verificação da corretude do algoritmo
o Análise de desempenho do algoritmo
-
Exemplos
1. Achar um número de telefone de uma determinada pessoa na cidade de BH.
2.
Idem ao anterior, mas o catálogo é
dividido em páginas que possuem informações sobre o primeiro e último nomes
contido na página.
3. Idem ao 1, mas o catálogo é indexado por endereço.
3) Compilação, interpretação e execução
à Programa fonte: programa
escrito em alguma linguagem de programação. Exemplo: Java, C++, entre outras.
à Programa
executável: programa escrito em linguagem de máquina.
à Tradutor:
compilador ou interpretador
- Diferença: quando o
executável vai ser produzido? Quando
a linguagem vai ser traduzida?
à Compilação: verifica se há
erros e, se não houver, traduz o programa fonte em programa executável.
Exemplo: programa em C++.
à Interpretação: executa diretamente o programa fonte. Exemplo:
Browser HTML.
à Tradução em Java: a
compilação em Java gera um arquivo de
extensão .class, que não é semelhante
a um programa executável, mas que é semelhante a um programa escrito em linguagem
de máquina. A execução é feita pela interpretação do arquivo.class pela JVM.
4) Desenvolvimento de Sistemas
à Sistemas: Conjunto de objetos, dotados
de propriedades características, capazes de se interagir, dentro de um
determinado contexto.
-
Objetos com propriedades e ações.
-
As ações mudam os estados do sistema.
o
Exemplo de sistema:
o
Objetos do sistema:
o
Propriedades dos objetos:
o
Ações dos objetos:
à Processo de
desenvolvimento/solução de problemas
-
Desenvolvimento de algoritmos
-
Desenvolvimento de programas
-
Desenvolvimento de sistemas de programação
->Desenvolvimento de Sistemas:
-
Análise de Requisitos: o que fazer?
-
Projeto do Sistema: como fazer?
-
Implementação: escrita do código.
-
Certificação: testes.
- Implantação: instalação na máquina do cliente.
- Manutenção: modificar o programa para correção de erros e evolução natural (ex: mudança de impostos).
->Desenvolvimento de programas:
-
Implementação: refinamento
e codificação.
-
Certificação: depuração,
verificação, testes.
-
Análise da eficiência do uso dos
recursos de espaço de memória e tempo.
-
Documentação.
à Características de “bons”
programas
o
Confiabilidade, manutenibilidade e eficiência
o
Recomendações de programas
legíveis e modificáveis
§ Especifique a entrada e saída dos módulos
§ Defina claramente a função das variáveis auxiliares
§ Tente fazer com o fluxo de controle
seja normalmente para frente
§ Use endentação para sub-rotinas
§ Documente bem o programa com comentários concisos e informativos
§ Use módulos quando apropriado
à Conceitos importantes
-
Tipo de dados
o
Define um conjunto de valores que uma variável pode armazenar
o
Define o conjunto de operações que pode ser executado com
essa variávell (ex.: inteiro, real, caractere).
o
Forma como a variável é armazenada
e interpretada.
-
Tipos de estruturas
o
Seqüencial / Condicional / Repetição
-
Tipos Básicos: (Página 56)
· tipo LÓGICO = BIT, { FALSO = 0, VERDADEIRO = 1 }.
· tipo BYTE = BIT (8), Valores compostos por (8) BITs: { 0000 0000, ... , 1111 1111 }.
· tipo CARACTERE = BYTE, Valores
correspondentes aos símbolos representados por bytes, segundo
um código, por exemplo ASCII:
{^@ = 0000 0000, ... ,
"0" = 0011 0000, ... , "9" = 0011 1001, ... ,
"A" = 0100 0001, ... ,
"Z" = 0101 1100, ... ,
"a" = 0110 0001, ... , "z" = 0111 1100, ... ,
DEL = 0111 1111 }
· tipo INTEIRO = BYTE (n) para n > 0. Exemplos:
BYTE (1) = 0000 1111 = 15 { -128, ... ,
+127 }
BYTE (2) = 0000 0000 0000 1111 = 15 {
-32768, ... , 32767 }
· tipo
REAL = BYTE (n) para n > 0. Segundo alguma descrição, de ponto fixo ou flutuante. Exemplos:
Ponto
fixo:
BYTE (1) = 1001.0100 = -1.25
Ponto flutuante:
BYTE (1) = 1 101 1010 = -1.25
Generalizando para notação científica (expoente): sem
expoente com expoente
100.0 1.0E+2 = (1.0 x 102)
-3251.6 -3.2516E3 = (-3.2516 x 103)
0.48 4.8E-1 = (4.8 x 10-1)
-0.328 -3.280E-1 = (-3.280 x 10-1)
Observações:
Utilizar
o ponto ( . ) ao invés da vírgula ( , ) decimal.
Em geral, n = 4 é o valor mais utilizado para os inteiros e os reais.
· tipo CARACTERES = BYTE (n) para n > 0. Exemplos:
BYTE
(1) = "" = e - vazio
BYTE (1) = "
" = b - espaço em branco BYTE (2) = "" = e - vazio
BYTE (2) = " " - espaços em branco BYTE (2) = "A" - uma letra maiúscula BYTE (2) = "Aa" - duas letras
Generalizando para
valores literais:
"" = e - constante literal vazia
" " = b - constante literal espaço
"0" - símbolo do número zero "JOÃO" - palavra
"Esta também
é uma constante" - sentença Observações:
-
É
necessário o uso de aspas em valores
literais.
- Os caracteres podem ter um tamanho
variável entre [0: 255].
- Em geral, n = 255 é o valor mais utilizado para as cadeias de caracteres.
-
Constantes: Representam valores
inalteráveis durante toda a execução
-
Variável: São representações
simbólicas de posições de memória do
computador, de tamanho determinado, onde valores podem ser armazenados, e
modificados, durante a execução de um algoritmo.
o
Uma variável é identificada por um nome
associado a um endereço.
o
O valor inicial de uma variável,
por definição, é indefinido, a menos que algum comando o especifique.
o Espaço da memória reservado para armazenar um
certo tipo de dado e tendo um nome
para referenciar o seu conteúdo.
o Este valor pode variar durante a
execução
o A variável de nome (X),
está localizada no endereço binário
1100, e tem o valor binário 0000 1010, ou seja, o conteúdo da memória naquela posição é X = 10.
o Determinação de
endereço e conteúdo a partir da variável:
o
Forma geral:
o
&<nome> (lê-se “endereço de“)
o
@<endereço de nome> (lê-se
“conteúdo do endereço”)
o
Exemplos:
o &X = 1100
o @(&X) = 0000 1010 (ou simplesmente, X = 10 )
- Identificadores
o Identificadores são nomes associados a conteúdos, descrições ou posições de memória, servem para representar constantes, variáveis, ou outras abstrações.
o Regras para formação de identificadores:
§ iniciar-se por uma letra;
§ ter um
tamanho definido e constante;
§ pode conter outras letras ou algarismos;
§ não deve
conter espaços em branco;
§ pode-se separar palavras utilizando-se o travessão ("_").
o Definição de tipos de variáveis
§ Seguindo
o exemplo da Matemática, todas variáveis (como também expressões e constantes) têm um tipo associado. O tipo da variável
caracteriza a classe
de valores
que poderá assumir, isto significa que cada variável pode
ter uma representação com tamanho diferente das demais.
§
Exemplo:
x + 5.2 = 7.4 (em R) _
x Î
R.
A
variável (x) deverá ser definida como real.
§
Forma
geral: <tipo> <lista de identificadores>
§ Exemplos: inteiro X real Y,Z
caractere Letra
caracteres
Nome_da_Rua, Endereço lógico PRIMEIRO, ÚLTIMO
-
Expressões
o
Expressões são descrições de transformações de valores de mesmo tipo, ou de tipos diferentes; servem para descrever
operações capazes de alterar conteúdos de um objeto.
o
Pode-se
ter expressões de qualquer um dos tipos básicos ou para conversões
entre estes.
§ aritméticas inteiras ou reais, lógicas, literais
->Noções
de Linguagens de Programação
-
Java
-
Características principais de Java
-
O que importa é a lógica de
solução, é o algoritmo
-
Hello World em Algoritmo
(Portugol) Pascal, C++, Java
- Ler nome do teclado e escrever na tela em Algoritmo (Portugol) Pascal, C++, Java
à Pilha: parte da memória usada tanto para sub-rotinas quanto para
tratamento de interrupções.
à Um dado é colocado no topo
da pilha (instrução push).
à O acesso à pilha é
restrito ao topo: somente o dado do topo da pilha pode ser retirado.
Comentários