Sistemas Computacionais, Algoritmos, Programas e Sistemas

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