Buscar

Arquitetura e Organização de Computadores

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 58 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 58 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 58 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Aula de Hoje
I
C
C
-
A
u
l
a
 
0
2
 
–
P
r
o
f
.
 
P
i
t
e
r
i
¾ Arquitetura básica de um computador (Subsistemas principais);
¾ Formas de representação de algoritmos;
¾ Descrição Narrativa (exemplos);
¾ Fluxogramas;
¾ Pseudocódigos; ...
¾ Início do desenvolvimento de algoritmos;
¾ Representação por fluxogramas;
¾ Simbologia básica;
¾ Exemplos, exercícios.
¾ Introduzir/revisar os conceitos de:
¾ Variáveis e constantes;
¾ Operadores aritméticos; 
¾ Expressões aritméticas; 
Conceitos Básicos
I
C
C
-
A
u
l
a
 
0
2
 
–
P
r
o
f
.
 
P
i
t
e
r
i
Organização de um Computador
O objetivo aqui é descrever as principais unidades funcionais de um computador 
baseado na “arquitetura de von-Newmann”, objetivando entender o seu princípio 
de funcionamento, mesmo sem conhecer nada de eletrônica digital. O 
importante aqui é a força e o poder das idéias, da concepção, realçar a 
capacidade de abstração.
Essa arquitetura foi proposta pelo um matemático húngaro John Von-Newman, 
na década de 40 do século passado e ainda continua a ser dominante no 
mercado, embora máquinas com outros modelos de arquitetura já estejam 
disponíveis.
O modelo de Von-Newman é bem simples e se baseia na existência de quatro 
subsistemas, a saber:
¾ Unidade Central de Processamento (UCP/CPU);
¾ Unidade de Memória Primária (Principal);
¾ Unidades periféricas de Entrada e de Saída;
Conceitos Básicos
I
C
C
-
A
u
l
a
 
0
2
 
–
P
r
o
f
.
 
P
i
t
e
r
i
Organização de um Computador
(arquitetura de Von-Newman)
Representação diagramática simplificada da “arquitetura de Von-Newman”.
Dispositivos 
de Entrada
Dispositivos 
de Saída
UCP
Memória
Conceitos Básicos
I
C
C
-
A
u
l
a
 
0
2
 
–
P
r
o
f
.
 
P
i
t
e
r
i
Dispositivos de Entrada: Transferem/capturam dados (números, caracteres, 
sons, imagens, etc) do mundo exterior para a memória principal. Exemplos: 
teclado, mouse, joysticks, disquetes, pendrives, scanners, microfones, etc. 
Servem também para que possamos introduzir as instruções associadas aos 
nossos programas.
UCP
Memória
Dispositivos 
de Entrada
Dispositivos 
de Saída
Organização de um Computador
(arquitetura de Von-Newman)
Conceitos Básicos
I
C
C
-
A
u
l
a
 
0
2
 
–
P
r
o
f
.
 
P
i
t
e
r
i
Dispositivos de Saída: Transferem dados da memória principal para o mundo 
exterior, ou seja, apresentam os resultados do processamento (cálculos, textos, 
imagens, etc). Eventualmente, armazenam (arquivam) os dados para posterior 
processamento. Exemplos: monitor, impressora, disquetes, pendrives, plotters, 
etc. 
UCP
Memória
Dispositivos 
de Entrada
Dispositivos 
de Saída
Organização de um Computador
(arquitetura de Von-Newman)
Conceitos Básicos
I
C
C
-
A
u
l
a
 
0
2
 
–
P
r
o
f
.
 
P
i
t
e
r
i
Como pode ser observado, o único propósito dos Dispositivos de Entrada e 
de Saída (E/S) é estabelecer uma “comunicação” entre a memória principal e 
o mundo exterior. 
Observem que alguns dispositivos possuem uma única função de entrada 
(teclado, mouse), outros, uma única função de saída (monitor, impressora), 
enquanto alguns, uma função dupla de entrada e saída, como por exemplo, os 
dispositivos externos de armazenamento: disquetes, cds, Dvds, pendrives, Hds, 
etc.
Organização de um Computador
(arquitetura de Von-Newman)
Conceitos Básicos
I
C
C
-
A
u
l
a
 
0
2
 
–
P
r
o
f
.
 
P
i
t
e
r
i
UCP: Responsável pelas alterações (transformações) que ocorrem sobre os 
dados, como resultado do processamento das instruções. É a unidade mais 
importante e considerada o “cérebro” do computador.
UCP
MemóriaDispositivos 
de Entrada
Dispositivos 
de Saída
Organização de um Computador
(arquitetura de Von-Newman)
Conceitos Básicos
I
C
C
-
A
u
l
a
 
0
2
 
–
P
r
o
f
.
 
P
i
t
e
r
i
UCP: A Unidade Central de Processamento possui duas importantes 
componentes:
Organização de um Computador
(arquitetura de Von-Newman)
ULA: (Unidade Lógica e Aritmética) que realiza, por exemplo :
UC: (Unidade de Controle) que possui entre suas funções, por exemplo:
¾ operações lógicas (comparações) e aritméticas (cálculos) sobre os dados;
¾ computa o sinal (positivo ou negativo) dos valores numéricos (inteiros, reais);
¾ arredonda os valores numéricos (reais);
¾ controlar os dados armazenados na memória;
¾ interpretar e controlar/gerenciar as instruções internas aos programas;
¾ ativar a ULA;
¾ controlar as operações de entrada e saída;
Conceitos Básicos
I
C
C
-
A
u
l
a
 
0
2
 
–
P
r
o
f
.
 
P
i
t
e
r
i
Memória primária (RAM): Possui dois propósitos bem definidos:
UCP
MemóriaDispositivos 
de Entrada
Dispositivos 
de Saída
Æ armazenar os dados (entrada, intermediários) que serão manipulados pelo 
programa/algoritmo;
Æ armazenar a seqüência de instruções (programas/algoritmos) que por sua 
vez, são capazes de provocar alterações sobre os dados já armazenados;
Organização de um Computador
(arquitetura de Von-Newman)
Residindo na memória, um programa pode determinar quais são as instruções necessárias 
que o computador realize uma tarefa, sem que haja alterações em seu hardware;
ULA
MemóriaDispositivos 
de Entrada
Dispositivos 
de Saída
UC
Fluxo de dados (“caminhos” pelos quais os dados se deslocam);
Fluxo de comandos: Comandos que instruem outras partes do computador;
Organização de um Computador
Fluxo de dados e Fluxo de comandos (da CPU )
Conceitos Básicos
I
C
C
-
A
u
l
a
 
0
2
 
–
P
r
o
f
.
 
P
i
t
e
r
i
Organização de um Computador
(arquitetura de Von-Newman)
Algumas observações que serão úteis:
Æ Todos os dados manipulados pelo computador passam pela memória 
primária, que é um elemento intermediário entre os dispositivos físicos de E/S
e a UCP;
Æ Uma única operação é realizada por vez. Milhões delas por segundo, mas 
uma de cada vez (arquitetura seqüencial / único processador);
Æ Toda UCP também possui alguns registradores para armazenamento 
temporário de dados;
Nosso objetivo aqui é apenas ilustrar as componentes básicas. Obviamente que 
há muitas outras questões que não estamos preocupados nesse momento. As 
disciplinas de Arquitetura de Computadores e de Microprocessadores, irão 
estudar detalhadamente aspectos relevantes sobre arquiteturas convencionais 
e não convencionais.
Æ Toda posição de memória possui um endereço único que a identifica;
Conceitos Básicos
I
C
C
-
A
u
l
a
 
0
2
 
–
P
r
o
f
.
 
P
i
t
e
r
i
Organização de um Computador
(arquitetura de Von-Newman)
A essência do modelo conceitual da “máquina de von-Newmann” é que dados e 
instruções devam ser introduzidos no sistema computacional para serem 
processados “a posteriori”, gerando as informações associadas a resolução do 
problema.
dados
instruções
Informações processamento
Modelo conceitual (abstração) da “Máquina de von-Newmann”
Conceitos Básicos
I
C
C
-
A
u
l
a
 
0
2
 
–
P
r
o
f
.
 
P
i
t
e
r
i
Observações Finais
As quatro unidades referenciadas constituem a essência do modelo conceitual 
da “máquina de von-Newmann” proposto na década de 40 do século XX e é a 
base da quase totalidade dos computadores digitais de hoje; 
O propósito em apresentar os subsistemas (estrutura básica) é facilitar o 
conceito de programação. A idéia é que após ter os dados e as instruções em 
sua memória, o computador possa executar as instruções (algoritmo) e 
encontrar a solução do problema. Para um outro conjunto de dados de entrada 
(uma nova instância do problema), basta executar as mesmas instruções.
Se necessitarmos resolver um problema diferente, podemos escrever um outro 
conjunto de instruções em sua memória, introduzir novos dados e usar a 
mesma máquina para resolver o problema. Observe que o ato de programar é
completamente independente do hardware (parte física do equipamento).
Conceitos Básicos
I
C
C
-
A
u
la
 
0
2
 
–
P
r
o
f
.
 
P
i
t
e
r
i
Existem vários tipos de mecanismos (máquinas/artefatos) para armazenar e 
multiplicar dois números inteiros, como por exemplo: calculadora, ábaco 
(chinês, russo, japonês, ...).
Podemos obter ainda vários algoritmos relativamente simples para se 
multiplicar dois números inteiros. Assim, uma máquina (autômato) capaz de 
executar esse algoritmo, em princípio, não tem nada de especial.
Uma máquina (autômato) verdadeiramente especial, deveria ser capaz de 
executar qualquer algoritmo.
Uma das principais características de um Computador é a sua capacidade 
de executar qualquer algoritmo. Observe que num computador, tantos os 
dados como as instruções que operam sobre os dados “residem” em sua 
memória. Daí o poder da proposta de von-Newmann. Hoje pode parecer 
banal, mas imagine a revolução dessa idéia por volta de 1940.
Observações Finais
Conceitos Básicos
I
C
C
-
A
u
l
a
 
0
2
 
–
P
r
o
f
.
 
P
i
t
e
r
i
Do ponto de vista formal, vimos que algoritmos nada mais são do que:
Será que seria possível classificar todos os tipos de instruções existentes num 
algoritmo? Ou ainda:
Será que existe um grupo mínimo de instruções com os quais podemos 
escrever/codificar qualquer algoritmo? 
Dados de 
Entrada
Dados de 
Saída 
Algoritmos
“uma seqüência de instruções finita, 
escritas numa dada ordem lógica, que 
resolve um problema específico”.
Classes de Linguagens de Programação
Linguagens de Programação
¾ Imperativas/procedurais ( Fortran, 
Algol, Pascal, C, C++, Cobol, Clipper, Pl1, Mumps, 
Ada, Modula , JAVA, ...)
¾ Funcionais (Haskel, Lisp, ...)
¾ Lógicas (Prolog, ...)
OBSERVAÇÂO:Æ
¾ É claro que em função da existências de centenas de linguagens 
imperativas, algumas delas possuem propósitos específicos bem definidos;
¾ Além disso, em função do próprio desenvolvimento da Ciência da 
Computação, algumas delas incorporam determinadas características mais 
modernas de programação (por exemplo: POO, POA), que por sua vez 
suportam metodologias de desenvolvimento de projetos mais adequadas as 
aplicações de nosso tempo;
¾ Todas linguagens imperativas fazem uso de três classes de Estruturas 
de Controle (atribuição, seleção e repetição).
I
C
C
-
A
u
l
a
 
0
2
 
–
P
r
o
f
.
 
P
i
t
e
r
i
História das Linguagens de Programação
I
C
C
-
A
u
l
a
 
0
2
 
–
P
r
o
f
.
 
P
i
t
e
r
i
Linguagens de Programação
Imperativas
(são orientadas por comandos)
¾ Comandos de Atribuição
¾ Comandos de Seleção
¾ Comandos de Repetição
IMPORTANTE:Æ Linguagens de Programação imperativas/procedurais
possuem três classes de Estruturas de Controle .
Linguagens de Programação
¾ Comandos de entrada e saída;
I
C
C
-
A
u
l
a
 
0
2
 
–
P
r
o
f
.
 
P
i
t
e
r
i
Representação de Algoritmos
algoritmos
¾Comandos de Atribuição
¾Comandos de Seleção
¾Comandos de Repetição
¾Comandos de entrada e saída
Estruturas de Controle : O objetivo é controlar o fluxo de execução, ou seja, a 
ordem em que as instruções serão executadas.
Estruturas de 
Controle
I
C
C
-
A
u
l
a
 
0
2
 
–
P
r
o
f
.
 
P
i
t
e
r
i
Aqui já dá para perceber o poder de expressão e de síntese do conceito de 
algoritmo. Algoritmos resolvem problemas, descrevem soluções para 
problemas complexos e com um número extremamente reduzido de comandos 
básicos.
Aurélio: Coerência, 
consistências das 
idéias, do raciocínio, 
do pensamento.
Programação
Lógica de Programação
Lógica de
Ato ou exercício de programar; 
escrever programas numa dada 
linguagem; implementar/codificar 
algoritmos usando uma linguagem 
de programação.
Lógica de programação: Usar a lógica (organização das idéias) para 
encontrar a melhor solução possível que irá resolver o problema em estudo 
de forma algorítmica.
As noções de Lógica de programação são completamente independentes 
de qualquer Linguagem de Programação. 
I
C
C
-
A
u
l
a
 
0
2
 
–
P
r
o
f
.
 
P
i
t
e
r
i
Constantes e Variáveis
Para resolver problemas de forma algorítmica, devemos ser capazes de 
representar as diferentes quantidades (dados) associadas ao problema. 
Estas quantidades serão representadas pelo algoritmo na forma de uma 
constante literal (3.14, 5, 3, 234, 3.123x103) ou de uma variável. Também é
possível representar um dado na forma de uma constante simbólica.
Constante: É isso mesmo que você está pensando, ou seja, algo que não se 
altera (permanece constante). No futuro, veremos que uma constante pode ser 
de diferentes tipos de dados: um caractere, um inteiro, um real uma string 
(cadeia de caracteres), etc. Mas no momento, para facilitar nossa vida, vamos 
pensar somente em constantes numéricas (valores inteiros ou reais). 
No contexto da programação, constantes são dados (valores) que não se 
alteram durante a execução de um programa/algoritmo.
Os dados representados num algoritmo/programa estão na forma de
constantes ou de variáveis.
I
C
C
-
A
u
l
a
 
0
2
 
–
P
r
o
f
.
 
P
i
t
e
r
i
Constantes e Variáveis
Variáveis: Sabemos que o computador possui uma memória 
interna/principal/primária (RAM) com uma certa capacidade (número total de 
posições que podem ser usadas. Toda posição de memória possui um 
endereço único). Nesse momento, para facilitar o seu aprendizado, vamos 
fazer a seguinte analogia: cada posição da memória primária pode ser vista 
como uma pequena caixa, capaz de armazenar (guardar) um determinado tipo 
de dado/conteúdo em seu interior.
Assim, a qualquer momento, se necessitarmos de um determinado dado 
associado a uma variável, basta ir até a “caixa” que o contém e recuperar o 
seu conteúdo.
Uma outra questão importante a saber nesse momento é que cada variável 
tem a capacidade de armazenar um único valor de cada vez.
Variável: é algo que varia (muda ao longo do tempo). Assim, durante a 
execução de um algoritmo, o valor (conteúdo) de uma variável por mudar 
tantas vezes quantas forem necessárias, mas só é possível ter acesso ao 
conteúdo atual, jamais aos anteriores.
I
C
C
-
A
u
l
a
 
0
2
 
–
P
r
o
f
.
 
P
i
t
e
r
i
Constantes e Variáveis
O conceito de variável é fundamental em Linguagens de Programação. Em função 
disto, vamos enumerar algumas características associadas a variáveis que estaremos 
explorando ao longo de nossa disciplina.
¾ Toda variável possui um nome. Este nome deve ser único e é você quem o escolhe. 
Além disso, é importante que esse nome lembre o propósito do conteúdo que ela 
armazena (significância). Para já, vamos compor os nomes de nossas variáveis 
somente com letras (maiúsculas e minúsculas) e dígitos (0..9). Além disso, o primeiro 
caractere deve ser sempre uma letra. Há outras regras que vamos explorar quando 
começarmos a aprender a Linguagem C. Esta característica será explorada já nos 
fluxogramas que iremos desenvolver na aula de hoje.
¾Toda variável possui um tipo de dado (inteiro, real, caractere, lógico, ..) associado a 
ela; Linguagens de programação que exigem a especificação de tipos de dados 
associados as variáveis, são referenciadas como sendo fortemente tipadas. Algumas 
Linguagens não exigem essa condição; 
¾ Uma variável pode ser simples ou estruturada, estática ou dinâmica, local ou global 
(escopo);
¾ Na Linguagem C, toda variável também possui uma Classe de Armazenamento 
associado a ela;
I
C
C
-
A
u
l
a
 
0
2
 
–
P
r
o
f
.
 
P
i
t
e
r
i
Constantes e Variáveis
Nesse momento, vamos pensar em variáveis como sendo “caixas” que são capazes de 
armazenar/guardar dados em seu interior. Quando desejarmos 
acessar/verificar/manipular o dado associado a uma variável, basta fazer uma referência 
a ela, a partir de seu nome.
I
C
C
-
A
u
l
a
 
0
2
 
–
P
r
o
f
.
 
P
i
t
e
r
i
a1 valor res soma resto primo
10 91.23 -11 0.0065 210 123
Como já foi dito, para facilitar ainda mais nossa vida, nesses primeirosmomentos, 
vamos manipular somente dados do tipo numérico (real, inteiro).
Abaixo podemos observar a metáfora que estamos usando. 
Instante 1:
a1 valor res soma resto primo
10 91.00 -16 0.0065 210 89
Instante 2:
Quais são os dados associados a cada uma das variáveis em ambos os instantes? 
A partir do instante 2, é possível recuperar valores anteriores associados a variáveis 
que sofreram modificações?
Constantes e Variáveis - Exemplo
I
C
C
-
A
u
l
a
 
0
2
 
–
P
r
o
f
.
 
P
i
t
e
r
i
Problema: Qual o volume e a área da superfície de uma esfera de raio 3.2345?
3 24 e 4
3
r rπ π
Sabemos que essas relações são dadas respectivamente pelas fórmulas: 
4 / 3 * * * *r r rπ
4 * * *r rπ
Pergunta: Se tivéssemos que calcular ambas as fórmulas 1000 vezes, para 
diferentes valores do raio, quem se altera (modifica) e quem permanece 
constante em cada um dos cálculos?
Uma outra maneira de escrever essas fórmulas, seria: 
Algumas formas de se 
representar um algoritmo
( descrever )
Representação de Algoritmos 
¾ Descrição narrativa;
¾ Fluxogramas (Diagrama de Fluxos);
¾ Pseudocódigos
¾ Programas.
¾ Diagramas de Chapin;
I
C
C
-
A
u
l
a
 
0
2
 
–
P
r
o
f
.
 
P
i
t
e
r
i
Na seqüência, vamos descrever brevemente cada uma delas. Além disso, vamos 
fornecer exemplos de algoritmo representados por cada uma das formas acima para que 
vocês possam observar o conjunto de símbolos utilizados e a estrutura geral da forma de 
representação.
Representação de Algoritmos
¾Descrição Narrativa:Æ
¾Fluxogramas:Æ
Descreve a seqüência de passos (instruções) que 
compõem o algoritmo usando símbolos de uma 
linguagem natural já conhecida (ex: português). 
Podemos utilizar todos os símbolos (palavras) da língua. 
Símbolos usados estão muito distante de um programa
(objetivo final). É a forma mais antiga para se representar 
um algoritmo (observe o exemplo com mais de dois mil 
anos que vamos ilustrar). Semelhante a uma “receita”.
Utiliza diferentes símbolos gráficos com uma semântica 
(significado) específico. Em outras palavras, o algoritmo é
representado através de uma “imagem geométrica”, ou 
seja, uma representação diagramática (visual). Bastante 
intuitivo, sem muitos detalhes e ainda muito distante de 
um programa (objetivo final). A grande vantagem dessa 
forma é a visualização do Fluxo de Execução (ordem em 
que as instruções são executadas). Ideal numa fase inicial 
do aprendizado para sistematizar/organizar o pensamento 
algorítmico.
Maiores níveis 
de detalhamento
.
.
I
C
C
-
A
u
l
a
 
0
2
 
–
P
r
o
f
.
 
P
i
t
e
r
i
Representação de Algoritmos
¾Pseúdocódigo :Æ Também referenciado como Portugol ou Português 
Estruturado. Também utiliza uma linguagem natural (ex: 
português). Porém, com um conjunto muito reduzido de 
símbolos (palavras), que são mais específicos e 
facilmente mapeados (transcritos) para os respectivos 
símbolos de uma dada linguagem de programação. A 
estrutura de um pseudocódigo é semelhante ao de um 
programa escrito, por exemplo, em Pascal ou C. Nessa 
forma de representação já é possível explorar vários 
aspectos (estruturas de controle, endentação, 
comentários ) que serão utilizados quando da escrita de 
um programa.
¾Outras :Æ . . .
Maiores níveis de detalhamento
Diagrama de Chapin ( Também é bem geométrico -
não vamos ver)
I
C
C
-
A
u
l
a
 
0
2
 
–
P
r
o
f
.
 
P
i
t
e
r
i
Exemplo de um Algoritmo usando Descrição Narrativa
Problema: Encontrar todos os números primos no intervalo fechado [2,n].
Um número inteiro positivo p é primo se, seus únicos divisores (positivos) 
são 1 e ele mesmo (divisores próprios).
Algoritmo: Crivo de Erastóstenes (mais de 2000 anos)
Passo 1: Coloque todos os números no crivo;
Passo 2: Retire o menor número p do crivo, ele é primo;
Passo 3: Retire todos os múltiplos do número p do crivo;
Passo 4: Se o crivo for diferente do vazio, volte ao passo 2 e 
repita os passos 3 e 4; senão, terminar.
I
C
C
-
A
u
l
a
 
0
2
 
–
P
r
o
f
.
 
P
i
t
e
r
i
Crivo: Aqui estamos usando esse termo como sinônimo de recipiente, conjunto, algo que pode 
conter;
Exemplo de um Algoritmo usando Descrição Narrativa
Ao final (término) do algoritmo, teremos obtido a solução do 
problema, ou seja, vamos encontrar todos os primos?
Representar um algoritmo usando Descrição Narrativa, te lembra 
alguma coisa?
I
C
C
-
A
u
l
a
 
0
2
 
–
P
r
o
f
.
 
P
i
t
e
r
i
Te lembra uma receita?
Se uma receita “pode ser vista” como um algoritmo. Quais seriam os dados 
de Entrada? Qual seria(m) o(s) dado(s) de saída?
p
i
F
V
( p%i ) = 0
V
F
i Å 1
q Å 0
q Å q +1
( i <=p )i Å i +1 “Quantidade = ”, q
INICIO
FIM
I
C
C
-
A
u
l
a
 
0
2
 
–
P
r
o
f
.
 
P
i
t
e
r
i
Exemplo de um 
Algoritmo representado 
por meio de um 
Fluxograma
Exemplo de um Algoritmo representado por Pseudocódigo
I
C
C
-
A
u
l
a
 
0
2
 
–
P
r
o
f
.
 
P
i
t
e
r
i
inicio
inteiro n, alg;
impressao (“Introduza um valor inteiro”); 
leitura (n); // n≥ 0
se ( n < 10)
entao alg Å1; 
inicio
fim
alg Å alg + 1;
n Å QUOC(n,10);
fim
impressao(“Número de algarismo de ”, cn , “é igual a”, alg); 
alg Å 0 ; cn Å n;
senao enquanto (n ≠ 0) faça
Exemplo de um programa em C ( algoritmo codificado )
I
C
C
-
A
u
l
a
 
0
2
 
–
P
r
o
f
.
 
P
i
t
e
r
i
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define LIM 30000
int i, cont = 0, primo = 1, p, exp1;
int main(void) {
printf(" 2 \n");
for (p=3; p <= LIM; p=p+2) {
primo = 1;
exp1 = (int) sqrt(p)+1;
for (i = 3; i <= exp1; i = i+2)
if ( p%i == 0) { primo = 0; break;}
if ( primo ) { 
cont++; 
if ( cont%5 == 0) printf("%5d \n", p);
else printf("%5d ", p);
} // if
} // for
printf("\n\n Existem < %d > Números Primos em [2,%d] \n\n\n", cont, LIM);
system("pause"); // Mantendo a Janela de Resultados
return(0);
}
I
C
C
-
A
u
l
a
 
0
2
 
–
P
r
o
f
.
 
P
i
t
e
r
i
Dados de 
Entrada
Dados de 
Saída 
Algoritmos
Dispositivos 
Físicos de 
Entrada
Dispositivos 
Físicos de 
Saída
Computador
(programas)
Conceitos Básicos (Associações)
Chegou a hora de nos concentrarmos no desenvolvimento de algoritmos. De 
certo modo, já vimos que: 
Metodologia para Resolver Problemas
I
C
C
-
A
u
l
a
 
0
2
 
–
P
r
o
f
.
 
P
i
t
e
r
i
Considerando que estamos interessados em resolver diferentes tipos de 
problemas de uma forma algorítmica, é importante planejar, sistematizar, 
organizar uma abordagem que seja a mais geral possível e que conduza ao 
sucesso de nossa iniciativa. 
Programar não é uma atividade muito complicada, mas exige muitos esforços 
para o iniciante. Assim, é importante se concentrar no projeto de uma solução, 
antes de sair escrevendo códigos. É preciso sistematizar as idéias, organizar o 
pensamento. 
Um grande equívoco no aprendizado de “programação” é achar que basta 
conhecer uma Linguagem de Programação. Conhecer uma linguagem é uma 
condição necessária, mas não é suficiente. É preciso mais. Além disso, vamos 
verificar que o aprendizado de uma linguagem em si, não é complicado. Há
muitas regras, mas com o tempo, aprendemos a dominá-las. O difícil é pensar 
numa solução algorítmica. 
Vamos adotar uma abordagem sistematizada para atacar problemas em geral, 
independente da área do conhecimento. 
Metodologia para Resolver Problemas
I
C
C
-
A
u
l
a
 
0
2
 
–
P
r
o
f
.
 
P
i
t
e
r
i
A resolução de problemas é uma parte crucial em vários cursos, incluindo os de 
Engenharias e de Ciência da Computação. Livros e mais livros foram escritos 
sobre o assunto. Vou destacar dois.
How to Solve It
George Polya
Pinguin Science, 1990 (última edição)
(Há pelo mais um livro do autor sobre o tema e 
uma tradução para o português de Portugal)
How to Solve It by Computer
R. G. Dromey
Prentice-Hall, 1982
Metodologia para ResolverProblemas
I
C
C
-
A
u
l
a
 
0
2
 
–
P
r
o
f
.
 
P
i
t
e
r
i
A metodologia que vamos seguir têm cinco passos. 
Passo 1: Analisar o problema detalhadamente;
Logo, dado um problema (para o qual buscamos uma solução algorítmica), 
devemos: 
Passo 2: Projetar (“desenhar”) uma solução algorítmica para o problema;
Vamos descrever em maiores detalhes cada um dos passos nas próximas aulas 
de modo a organizar nosso pensamento algorítmico. 
Passo 3: Codificar a solução encontrada numa linguagem de programação 
( numa representação de algoritmo conhecida ) e documentar;
Passo 4: Testar o programa (algoritmo);
Passo 5: Validar o programa (algoritmo);
Fluxogramas - Simbologia Usada
No Brasil todos nós conhecemos a ABNT (Associação Brasileira de Normas 
Técnicas) que é responsável pela elaboração de diferentes normas técnicas. 
I
C
C
-
A
u
l
a
 
0
2
 
–
P
r
o
f
.
 
P
i
t
e
r
i
Na Europa existe o ISO (International Standard Organization) e nos EUA, o 
ANSI (American National Standard Institute). Pois bem, existe uma norma 
ANSI só para determinar o padrão dos símbolos (respectivos significados) a 
serem usados num fluxograma (Diagrama de Blocos). 
Como iremos usar muito pouco a representação por fluxogramas (Diagrama de 
Blocos) (3 ou 4 aulas) e ver um conjunto reduzido deles, não estou muito 
preocupado com isso. Entretanto, muita atenção quando for ler outros livros. 
Poderá ocorrer pequenas divergências, nada que você não consiga entender 
facilmente. Se tiver dúvidas, consulte o professor.
Fluxogramas 
Significado
FIMINICIO
Indicam um procedimento (ação) de 
terminação de um algoritmo. Todo 
algoritmo deve possuir um início e um 
fim.
Símbolos
I
C
C
-
A
u
l
a
 
0
2
 
–
P
r
o
f
.
 
P
i
t
e
r
i
Abaixo você pode observar um outro símbolo usado para referenciar o INICIO e 
o FIM de um algoritmo.
INICIO FIM
Simbologia associada a Fluxogramas 
SignificadoSímbolo de leitura
I
C
C
-
A
u
l
a
 
0
2
 
–
P
r
o
f
.
 
P
i
t
e
r
i
Um outro símbolo muito usado para indicar a leitura de dados é dado abaixo. 
Muitas vezes esse símbolo também é usado para indicar a saída de dados.
Portanto, quando encontrar a representação de um algoritmo numa outra 
simbologia, ATENÇÃO!!!
Indica um procedimento (ação) 
externo de Leitura/Entrada dos 
dados. Associado a um Comando 
de Entrada de dados.
Significado:
Exemplos :
Faz/realiza a leitura de um valor dado pelo usuário 
e atribui esse valor a variável de nome x;
Observe que a relação de variáveis é separada por vírgula (elemento separador).
Forma Geral : Relação de 
Variáveis
x
a, b, c, d
n1, n2
Realiza a leitura de valores fornecidos pelo usuário a partir de um dispositivo 
físico de entrada e associa/transfere esses valores as respectivas variáveis no 
interior do símbolo de leitura. Obviamente que os dados serão usados pelo 
algoritmo para encontrar a solução de um problema específico.
I
C
C
-
A
u
l
a
 
0
2
 
–
P
r
o
f
.
 
P
i
t
e
r
i
Simbologia associada a Fluxogramas 
Significado :
Faz/realiza a leitura de dois valores e associa o 
primeiro a variável n1, e, o segundo, a variável n2;
Faz/realiza a leitura de quatro valores e os 
associa, respectivamente, as variáveis a, b, c, d.
Simbologia associada a Fluxogramas 
Significado
Indica um procedimento (ação) 
externo de Impressão/Saída dos 
dados. Associado a um Comando 
de Saída de dados.
I
C
C
-
A
u
l
a
 
0
2
 
–
P
r
o
f
.
 
P
i
t
e
r
i
Todo algoritmo resolve um problema específico. Logo, após encontrar a 
solução, devemos ser capazes de mostrar a solução obtida. O símbolo acima 
tem exatamente esse propósito. Se “comunicar” com o mundo exterior.
Símbolo de Saída
Como já vimos, muitas vezes o símbolo abaixo também é usado para indicar a saída de 
dados.
Significado:
Exemplos de uso:
imprime num dispositivo de saída (a ser determinado) 
os valores associados as variáveis a, b, c, d, 
respectivamente.
a, b, c, d
“textos”, variávelForma Geral :
Simbologia associada a Fluxogramas (Mais alguns detalhes)
I
C
C
-
A
u
l
a
 
0
2
 
–
P
r
o
f
.
 
P
i
t
e
r
i
Realiza a saída/impressão de uma mensagem ou de valores associados a 
resolução do problema. Em outras palavras, transfere os valores associados 
as variáveis para os dispositivos de saída.
Observe que ao nos referirmos aos nomes relativos as variáveis (fazer referência a 
variável), objetivamos na verdade, acessar/manipular o conteúdo associado a elas.
“A = ”, a
Simbologia associada a Fluxogramas (Mais alguns detalhes)
Observação: Todo o conteúdo entre aspas é impresso exatamente desta forma no 
dispositivo de saída (sem as aspas). Lembre-se que a “vírgula” é um elemento 
separador e não será impressa. 
I
C
C
-
A
u
l
a
 
0
2
 
–
P
r
o
f
.
 
P
i
t
e
r
i
Exemplos de uso:
imprime integralmente o texto entre aspas no dispositivo 
de saída (sem as aspas).
“O número é
PAR”
imprime integralmente o texto entre aspas no dispositivo 
de saída (sem as aspas), em seguida o valor associado a 
variável a.
Exercício: Qual seria o conteúdo da caixa de saída se você desejasse imprimir o valor da 
variável vol num dispositivo de saída, de modo que aparecesse exatamente a seguinte 
mensagem.
O volume obtido para o cilindro é igual a : 123.34567
Simbologia associada a Fluxogramas
Significado
Indica um procedimento (ação) interna de 
alteração sobre os dados. Associa/atribui um 
valor ou o resultado de uma expressão a uma 
variável. Associado a um Comando de 
Atribuição:
I
C
C
-
A
u
l
a
 
0
2
 
–
P
r
o
f
.
 
P
i
t
e
r
i
Símbolo
Forma Geral : variávelÅ expressão
Significado: Atribuir/transferir o conteúdo da expressão do lado direito para a variável 
que está no lado esquerdo. Aqui, expressão pode ser uma constante, uma variável, 
uma expressão aritmética ou ainda uma expressão boleana (valor boleano). Observe 
que o lado direito é executado primeiro, em seguida, o resultado é transferido para a 
variável, que está do lado esquerdo.
Observações: 
(a) O lado direito é sempre executado primeiro, em seguida, o resultado é transferido 
para a variável, que está do lado esquerdo;
(b) Aqui o símbolo ‘Å’ indica transferir, atribuir. Alguns livros, adotam outros símbolos 
com o mesmo significado. Atenção!!!
aÅ b + c + d
i1Å1
somaÅ 0
atribui (transfere) a variável i o valor 3iÅ 3
Computa o resultado da expressão b + c + d
(lado direito), e, em seguida, atribui (transfere) 
o valor obtido a variável a
Simbologia associada a Fluxogramas (Mais alguns detalhes )
I
C
C
-
A
u
l
a
 
0
2
 
–
P
r
o
f
.
 
P
i
t
e
r
i
Exemplos de uso: Significado da ação:
Realiza duas ações de atribuição 
(transferência) de valores. A variável i1 recebe 
o valor 1, enquanto a variável soma recebe o 
valor 0.
Observe que ao nos referirmos aos nomes relativos as variáveis (fazer referência a 
variável), objetivamos na verdade, acessar/manipular o conteúdo associado a elas. Logo, 
na expressão b + c + d, estão sendo usado os valores associados a cada uma dessas 
variáveis. O símbolo Å tem o propósito de separar a variável da expressão, indicando 
quem está sendo atribuído. 
Simbologia associada a Fluxogramas
Significado
Indica um procedimento (ação) de decisão. 
Está associado aos Comandos de Seleção e de 
Repetição.
Símbolo
I
C
C
-
A
u
l
a
 
0
2
 
–
P
r
o
f
.
 
P
i
t
e
r
i
Vamos entrar em maiores detalhes sobre esse símbolo nas próximas aulas, quando 
explorarmos os comandos de Seleção e de Repetição.
Simbologia associada a Fluxogramas
SignificadoSímbolos
(segmentos orientados)
I
C
C
-
A
u
l
a
 
0
2
 
–
P
r
o
f
.
 
P
i
t
e
r
i
Indicam as ligações entre os símbolos já
definidos, estabelecendo os possíveis fluxos 
de execução do algoritmo.
Indica a continuidade de um fluxograma ou 
conexões entre os segmentos.
Exemplos de um 
possíveluso:
Simbologia associada a Fluxogramas – Convenções Usadas
I
C
C
-
A
u
l
a
 
0
2
 
–
P
r
o
f
.
 
P
i
t
e
r
i
¾ Os tamanhos de cada um dos símbolos geométricos pode variar, mas 
procure manter a uniformidade entre a altura e a largura, de modo que outras 
pessoas possam “entender”;
Convenções Usadas
¾ Como você viu, cada símbolo possui um propósito bem definido 
(significado), mas existem instruções que são escritas em seu interior. Nesses 
primeiros momentos, não estamos “muito” preocupados com formalismos e 
rigores sintáticos. Assim, essas instruções poderão estar indicadas através de 
expressões, ou ainda, de códigos mnemônicos do tipo: RAIZ2(a), POT(a,b), 
SENO(a*b). Se desejar obter a raiz quadrada de algo, também pode usar o 
símbolo matemático que você conhece, por exemplo:
¾ A direção do fluxo de um algoritmo representado por fluxogramas é feito de 
“cima para baixo” e da “direita para a esquerda”. Assim, procure orientar o 
diagrama nesse sentido, colocando o símbolo de início mais acima e a 
esquerda e, o símbolo de final, mais abaixo e a direita.
* 4* *b b a c−
Outros Símbolos :Æ Fluxogramas (Mais detalhes)
Expressões Aritméticas
Envolvem constantes, variáveis, funções (pré-definidas ou não), operadores 
aritméticos e sempre produzem um valor (resultado) numérico.
EXEMPLO: 
a Å 2*SENO(3.1415) – 13+(b/c)*c + RAIZ_2(2.34)
I
C
C
-
A
u
l
a
 
0
2
 
–
P
r
o
f
.
 
P
i
t
e
r
i
Na construção de expressões aritméticas podemos usar todos os operadores 
aritméticos conhecidos. Se você precisar usar uma função como raiz quadrada, 
seno ou cosseno, sinta-se a vontade para usar livremente símbolos que você já
conhece, como por exemplo Não há razão para nos preocuparmos (nesse 
momento) em como o computador será capaz de obter os valores destas 
funções. No momento oportuno, daremos o formalismo necessário a estas 
questões. 
2.x +
Observe a expressão aritmética acima e determine quem é quem (variáveis, 
constantes, operadores e funções primitivas.
Outros Símbolos (operadores aritméticos) :Æ Fluxogramas (Mais detalhes)
Potenciação^
Além dos mais comuns (mais dois)
Resto da divisão inteira de a por ba % b
Quociente da divisão inteira. Parte 
inteira da divisão de a por b.
Quoc(a,b)
DescriçãoOperadores
Adição+
Subtração-
Multiplicação*
Divisão/
Operadores Aritméticos
I
C
C
-
A
u
l
a
 
0
2
 
–
P
r
o
f
.
 
P
i
t
e
r
i
Observe que estes símbolos estão sendo definidos no contexto da representação de 
algoritmos por fluxogramas.
Problema: Calcular o volume e a área da superfície de uma esfera, dado 
respectivamente pelas relações: 
Dados de Entrada do problema: raio 
Outras quantidades que o algoritmo precisa representar:
Volume da Esfera (VolEsf )
Área da superfície da esfera (AreaSup)
Observação: Nesse primeiro momento não se preocupe em “economizar” em relação ao 
número de variáveis que o seu algoritmo terá que manipular. Utilize todas as variáveis que 
você achar necessário para resolver seu problema. Com o tempo e de acordo com sua 
maturidade em relação ao exercício e ao ato de programar, naturalmente você irá usar o 
mínimo possível delas, já que elas ocupam um recurso precioso e escasso na maioria dos 
computadores, que é a memória. Como foi dito, esta não é a hora de se preocupar com 
esta questão. Portanto, use e abuse do uso de variáveis em seus primeiros algoritmos.
3 24 e 4
3
r rπ π
I
C
C
-
A
u
l
a
 
0
2
 
–
P
r
o
f
.
 
P
i
t
e
r
i
A constante PI é conhecida. 
Uma regra simples é que qualquer quantidade manipulada pelo seu algoritmo deve 
estar representada por uma variável ou por uma constante (literal ou simbólica).
INICIO raio
FIM
AreaSupÅ 4* 3.1415*raio*raio
VolEsfÅ (AreaSup *raio)/3
“Área da superfície da esfera
igual a”, AreaSup
“Volume da esfera igual 
a”, VolEsfI
C
C
-
A
u
l
a
 
0
2
 
–
P
r
o
f
.
 
P
i
t
e
r
i
Leitura do valor do raio. Vamos 
admitir que esse valor seja 
positivo.
Encontrando o valor da área da 
superfície da esfera que depende 
do raio.
Encontrando o valor do volume da 
esfera que depende do valor 
associado a variável AreaSup.
“Imprimindo” o resultado do valor 
associado a área da superfície. 
“Imprimindo” o resultado do valor 
associado ao volume da esfera. 
Problema: Calcular o valor da função .
Dados de Entrada: valor x (vamos admitir positivo)
Dados gerados pelo algoritmo: valor da função no ponto x (fx)
x
“Valor da função f(x) = ”, fx
fxÅ x*x -5*RAIZ_2(x)+8
INICIO
FIM
2( ) 5 8f x x x= − +
I
C
C
-
A
u
l
a
 
0
2
 
–
P
r
o
f
.
 
P
i
t
e
r
i
Problema: Transforme uma temperatura dada em graus Fahrenheit para graus 
Celsius, sabendo que:
Dados de Entrada: temperatura em graus Fahrenheit (F)
Dados Gerados pelo algoritmo: temperatura em graus Celsius (C)
F
CÅ(F-32)*5/9
“Temperatura em 
Graus Celsius:”, C
INICIO
FIM
I
C
C
-
A
u
l
a
 
0
2
 
–
P
r
o
f
.
 
P
i
t
e
r
i
( 32)*5 / 9C F= −
Exercícios:
Æ Simule (execute cada uma das instruções) cada um dos algoritmos, pelo menos 
três vezes, para diferentes valores de entrada (nas condições do enunciado); 
I
C
C
-
A
u
l
a
 
0
2
 
–
P
r
o
f
.
 
P
i
t
e
r
i
Observação: Cada conjunto de valores de entrada é o que denominamos de 
“instância do problema”. Um algoritmo correto, funciona para qualquer uma de suas 
instâncias.
Æ Tente reescrever os algoritmos ( alterando a ordem das instruções) e mantendo 
a sua correção. Algumas instruções podem inclusive ser escritas de outra forma ou 
decomposta em mais de uma; 
Æ Tenha claro o significado de cada um dos símbolos e das instruções que eles 
representam (aspectos semânticos); 
Considerações Finais:
Observem que embora simples, estes algoritmos permitem verificar alguns 
dos símbolos utilizados por um fluxograma e a semântica (significado) associada a 
eles. Uma outra questão importante é que a natureza geométrica de um fluxograma 
permite de forma clara a visualização do fluxo de execução (ordem em que as 
instruções são executadas pelo algoritmo), facilitando a sua compreensão. 
Nas próximas aulas, estaremos introduzindo outras estruturas de controle 
(seleção e repetição). Consequentemente a complexidade dos problemas que 
iremos resolver de forma algorítmica será bem maior. Logo, é fundamental que os 
conceitos aqui introduzidos sejam de domínio absoluto. Não deixem as dúvidas 
se acumularem!!! Não se iluda com a simplicidade dos exemplos dados na 
aula de hoje.
Na próxima aula estarei passando a todos uma lista com 
aproximadamente 60 exercícios relativos a manipulação de variáveis simples. Esta 
lista será usada durante todo o primeiro semestre e parte do seguindo e servirá
como apoio para que possamos adquirir competências mínimas na “arte de 
programar”.
Boas leituras!!!!!
I
C
C
-
A
u
l
a
 
0
2
 
–
P
r
o
f
.
 
P
i
t
e
r
i
PS: Embora eu tenha corrigido inúmeros erros é provável que ainda haja muitos 
por aí. Por favor, reportem os erros para que eu possa corrigi-los.
Comuniquem aos colegas que receberam as notas, já que alguns e.mails podem 
ter voltados, por diferentes razões. Aos poucos vamos corrigindo estes pequenos 
problemas.
Próxima aula: Continuação da representação de algoritmos por meio de 
fluxogramas.
Æ Estrutura de controle de seleção;
Æ Resolução de exercícios usando esta estrutura.
I
C
C
-
A
u
l
a
 
0
2
 
–
P
r
o
f
.
 
P
i
t
e
r
i

Continue navegando