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 constituema 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
l
a
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 únicoe é 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 primeiros momentos,
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 Resolver Problemas
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ível uso:
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 valorassociado 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