Conceitos Básicos

O objetivo dessa unidade é apresentar conceitos básicos de computação para que o aluno possa adquirir um base para o aprendizado de Algoritmos e Estruturas de Dados.

Organização e Funcionamento de um Computador

Um computador é uma coleção de componentes interligados com o objetivo de efetuar(processar) operações aritméticas e lógicas de grandes quantidades de dados. É dividido em duas partes: o hardware e o software.

O hardware é o equipamento propriamente dito, ou seja, todos os componentes da sua estrutura física.

O software é constituído pelos programas que permitem realizar atividades específicas com objetivo de atender às necessidades dos usuários. Ele compreende programas fornecidos pelos fabricantes do computador e programas desenvolvidos pelo usuário.

http://producao.virtual.ufpb.br/books/camyle/introducao-a-computacao-livro/livro/livro.chunked/images/organizacao-computador/ucp.png

Arquitetura de um Computador

Para compreender o funcionamento de um computador, vamos analisar a seguinte figura que corresponde a sua arquitetura básica.

arquitetura geral
http://producao.virtual.ufpb.br/books/camyle/introducao-a-computacao-livro/livro/livro.chunked/images/organizacao-computador/arquitetura_computador.png
Unidade Central de Processamento(UCP):

A Unidade Central de Processamento é composta por duas partes principais: a unidade lógica e aritmética (ULA), formada por circuitos que manipulam os dados através de operações matemáticas (soma, subtração, divisão,...) e lógicas (operadores and, or, not,...). E a unidade de controle, cujos circuitos são responsáveis por coordenar as operações da UCP.

Para o armazenamento e a comunicação entre estas duas unidades a UCP contém circuitos de armazenamento chamados de registradores, que se assemelham às células de armazenamento da memória principal. Alguns registradores funcionam como posições intermediárias de armazenamento para os dados manipulados pela UCP. Nestes registradores são armazenados os dados de entrada para a ULA, além de proporcionam um local de armazenamento para o resultado das operações.

arquitetura geral
http://producao.virtual.ufpb.br/books/camyle/introducao-a-computacao-livro/livro/livro.chunked/images/organizacao-computador/ucp.png
Memória Principal:

É a memória de trabalho, nela são carregados todos os programas e dados usados pela CPU no momento. Todo seu conteúdo será perdido uma vez que o computador seja desligado (memória volátil). Exemplo: memória RAM (Random Access Memory).

Dispositivos de Entrada e Saída(E/S):

Os dispositivos de entrada são responsáveis pela entrada de dados no computador e os dispositivos de saída retornam os dados processados. Exemplos: Teclado, mouse, microfone (entrada),monitor, impressora, caixas de som (saída).

Barramento

O barramento é responsável por fazer a transmissão de dados entre a UCP, os dispositivos de E/S, memória principal e memória secundária.

Memória Secundária:

Possui maior capacidade de armazenamento, são mais lentas do que a memória principal, porém são não-voláteis, permitindo guardar dados permanentemente. Para que um dado armazenado na memória secundária seja utilizado ele precisa passar primeiro pela memória principal. Exemplos: Discos rígidos (HD - Hard Disk), CDs, DVDs, Ped-Drives etc.

Unidades de medidas computacionais

Provavelmente você já deve ter ouvido falar que os computadores trabalham internamente apenas com 0 e 1 (zero e um). Tudo o que você assiste, escuta ou cria no computador, é processado internamente através de sequências de zeros e uns. O computador ao ler estas sequências, consegue interpretá-las e, em seguida, apresentar as informações contidas nelas.

Um bit ou dígito binário (binary digit), é a menor unidade de dado que os computadores utilizam para trabalhar, ou também podemos dizer que é a menor unidade de informação que pode ser armazenada ou transmitida. O bit pode assumir apenas dois valores, 0 ou 1.

Porém, o endereçamento de memória que um computador utiliza é tratado no nível de byte em vez de lidar com bits. Byte é uma sequência de oito bits. as informações armazenadas na memória do computador terão suas estruturas baseadas em bytes, seja um texto, uma imagem, uma música ou um vídeo, mediremos seu tamanho pela quantidade de bytes utilizada em seu armazenamento.

Devido à grande capacidade de armazenamento dos computadores, criaram-se medidas computacionais que representam de forma mais clara essa capacidade:

Diferença entre dado e informação

É muito comum ouvirmos falar sobre dados e informações. Mas qual seria a real diferença entre eles?

O dado é a matéria prima da informação, não possui significado relevante e por si só não transmite nenhuma mensagem que possibilite o entendimento sobre determinada situação. Como por exemplo:

Já a informação é o resultado do processamento dos dados. Ou seja, os dados foram analisados, interpretados e organizados de forma a transmitir significado e compreensão dentro de determinado contexto. Como exemplo, podemos organizar os dados acima:

Algoritmos

Pode-se dizer que um algoritmo é uma receita que mostra passo a passo os procedimentos necessários para se resolver determinada tarefa. Em termos mais técnicos, um algoritmo é uma sequência lógica, finita e definida de instruções que devem ser seguidas para resolver um problema ou executar uma tarefa.

Embora você não perceba, utilizamos de forma intuitiva e automática , diariamente, vários algoritmos quando executamos tarefas comuns, por exemplo:

Você pode estar pensando: ” Mas eu realizo essa tarefa de maneira diferente”. Esse pensamento está correto, pois em determinadas situações um problema pode ser resolvido de diversas maneiras, ainda sim gerando a mesma solução. Ou seja, podem existir vários algoritmos para resolver um mesmo problema.

Tipos de algoritmos

Na computação, os algoritmos são utilizados para descrever as etapas que precisam ser efetuadas para que um programa execute as tarefas que lhe são designadas. Os tipos mais utilizados de algoritmos são:

Descrição narrativa

Consiste em utilizar uma linguagem natural (por exemplo, a língua portuguesa) para descrever os passos a serem realizados para resolver um problema.

Fluxograma

Consiste em analisar determinado problema e escrever utilizando símbolos gráficos predefinidos, os passos a serem realizados para a resolução deste problema.

Pseudocódigo ou Portugol

Depois da análise de certo problema, podemos escrever todos os passos para sua solução através de regras predefinidas.

Linguagem de programação

O computador não consegue aprender sozinho como executar suas tarefas, ele depende de nós para ensiná-lo. Para que isso aconteça, é necessário que ele entenda o que queremos que ele faça. Então, usamos as linguagens de programação para fazer essa comunicação.

Uma linguagem de programação é composta por uma sintaxe e semântica próprias (formadas por regras com letras, dígitos e símbolos dotados de significado) e um conjunto de normas restrito, tendo como objetivo fornecer instruções para o computador.

Linguagem de Baixo Nível

São linguagens totalmente dependentes da máquina, ou seja, que o programa feito com este tipo de linguagem não pode ser migrado ou utilizado em outras máquinas. Em contrapartida, por ser projetada com base no hardware, aproveita ao máximo as características do mesmo. Dentro deste grupo se encontram:

Linguagem de máquina: esta linguagem ordena à máquina as operações fundamentais para seu funcionamento. Consiste na combinação de 0's e 1's para formar as ordens entendíveis pelo hardware da máquina.

Assembly: é um derivado da linguagem de máquina e é formada por abreviaturas de letras e números chamados mnemotécnicos. Com o aparecimento desta linguagem se criaram os programas tradutores para poder passar os programas escritos em linguagem assembly para a linguagem máquina.

Linguagem de Alto Nível

São aquelas que se encontram mais próximas à linguagem natural. Elas buscam solucionar problemas mediante o uso de Estruturas de Dados. São linguagens que independem da arquitetura do computador. Sendo assim, à princípio, um programa escrito em uma linguagem de alto nível, pode ser migrado de uma máquina a outra sem nenhum tipo de problema. Exemplos: C/C++, PHP, Java, Python, Ruby.

Intepretadores e Compiladores

Os computadores só podem executar programas escritos em linguagem de máquina. Para que os programas em linguagem de alto nível possam ser utilizados, é necessário que os mesmos sejam traduzidos para versões equivalentes em linguagem de máquina antes de serem executados.

Existem dois tipos fundamentais de tradutores: interpretadores e compiladores.

O interpretador recebe a primeira instrução do programa fonte, e verifica se a escrita está correta, convertendo-a em linguagem de máquina e, então, ordenando ao computador que execute esta instrução. Depois, o processo é repetido para a segunda instrução, e assim sucessivamente, até que última instrução do programa fonte seja executada.

Quando uma instrução é executada, a antecessora é perdida, isto é, apenas uma instrução permanece na memória em cada instante. Caso o mesmo programa fonte seja executado uma segunda vez, novamente haverá uma nova tradução, comando por comando, pois os comandos em linguagem de máquina não ficam armazenados para futuras execuções.

O compilador traduz um programa escrito em uma linguagem de alto nível em um programa equivalente expresso em uma linguagem que é executável diretamente pela máquina. Estes dois programas são chamados, respectivamente, de programa fonte (ou código fonte) e programa objeto (ou código objeto).

O compilador analisa todas as instruções do código fonte à procura de erros, caso não encontre nenhum, ele faz a tradução em um novo arquivo (programa objeto) e então poderá executá-lo a partir da primeira instrução já transformada em linguagem de máquina. Caso este programa seja executado uma segunda vez, não haverá necessidade de uma nova tradução, uma vez que todos os comandos em linguagem binária já estão armazenados no programa objeto gerado na primeira execução.

Ir para próxima aula