Programação de Computadores I
Algoritmos e Estruturas de Dados
Prof. Marcos Quinet
Universidade Federal Fluminense – UFF
Pólo Universitário de Rio das Ostras - PURO
Introdução aos Algoritmos
Define-se
como sistema computacional
um conjunto de elementos básicos de
hardware, funcionando cooperativamente,
para realizar alguma tarefa solicitada pelo
usuário
Contudo, para ser capaz de realizar estas
tarefas é necessário um conjunto de
instruções que digam como os recursos
computacionais,
representados
pelo
hardware, podem ser usados para resolver as
instruções do usuário
2
Introdução aos Algoritmos
Torna-se necessário o uso de uma linguagem de
programação para desenvolver conjuntos de
instruções
que
utilizem
os
recursos
computacionais disponíveis para realizar as
tarefas
Um conjunto de instruções segundo um conjunto
de regras claras e pré-estabelecidas é chamado
de algoritmo
Um algoritmo consiste em um texto composto por
comandos (instruções), que devem ser
executados sequencialmente
3
Introdução aos Algoritmos
Este texto é uma representação concreta do
algoritmo e tem um caráter evidentemente
estático e atemporal.
O texto não nos interessa em si, mas sim os
resultados de sua execução, um evento dinâmico
que evolui no tempo até produzir os resultados
desejados
O primeiro passo no entendimento de algoritmos
é a visualização das ações executadas a partir
da interpretação destas estruturas estáticas
4
Introdução aos Algoritmos
Um algoritmo é composto de estruturas básicas
de controle que seguem uma sequência natural
de ações, como as determinadas por um
raciocínio lógico para a resolução de um
problema
As estruturas básicas de controle disponíveis
para algoritmos são similares aos processos
naturais de ações do nosso dia-a-dia; são elas:
◦ Sequências simples;
◦ Alternativas;
◦ Repetição.
5
Introdução aos Algoritmos
Uma ação é um evento que corre num período de
tempo
finito,
estabelecendo
um
efeito
intencionado e bem definido, por exemplo:
◦ Ligar a televisão;
◦ Cozinhar um peixe para o jantar;
◦ Limpar os pratos.
O que nos interessa em uma ação é o efeito que
ela produz e que possa ser realizada em um
período de tempo finito.
6
Introdução aos Algoritmos
É necessário considerar o estado do conjunto de
propriedades dos objetos que são relevantes para
a resolução do problema, por exemplo, se os
peixes já estão limpos ou não, se há sabão para
lavar os pratos, etc.
O algoritmo realizará um processo sequencial de
ações para resolver um problema. Por exemplo,
considere as ações envolvidas na atividade de
uma dona-de-casa descascar batatas para o
jantar. Um algoritmo poderia ser descrito da
seguinte forma:
7
Introdução aos Algoritmos
◦
◦
◦
◦
Traga a cesta com batatas do porão;
Traga a panela do armário;
Descasque as batatas;
Devolva a cesta ao porão;
Um algoritmo pode ser descrito como um padrão
de comportamento, expresso em termos de um
repertório bem definido e finito de ações
primitivas, das quais sabemos que podem ser
executadas por um sistema computacional
8
Introdução aos Algoritmos
Utilizamos o “;” (ponto-e-vírgula) como símbolo
de sequenciamento, que serve para indicar o
final de uma instrução em uma linha de texto
Instruções simples são aquelas executadas
sempre que o fluxo de execução do algoritmo
atinge a linha em que a instrução está localizada
Além de instruções simples, algoritmos podem
conter instruções que são realizadas somente
quando alguma condição é ou não atingida.
Estas instruções são chamadas de desvios
condicionais
9
Introdução aos Algoritmos
Além destas, algumas estruturas nos permitem
executar um mesmo bloco de comandos repetidas
vezes, alterando (ou não) um ou mais dados. Estas
são chamadas de estruturas de repetição
Basicamente, a programação estruturada consiste
numa metodologia de projeto de programas, com os
seguintes objetivos:
◦
◦
◦
◦
Facilitar a escrita de programas;
Facilitar a leitura (entendimento) de programas;
Permitir a verificação prévia da corretude de programas;
Facilitar a manutenção e modificação de programas.
10
Algoritmos - resumo
Finitude: Um algoritmo deve sempre terminar após um número
finito de passos.
Definição: Cada passo de um algoritmo deve ser precisamente
definido. As ações devem ser definidas rigorosamente e sem
ambiguidades.
Entradas: Um algoritmo deve ter zero ou mais entradas, isto é,
informações que são lhe são fornecidas antes do algoritmo
iniciar.
Saídas: Um algoritmo deve ter uma ou mais saídas, isto é,
resultados que tem uma relação específica com as entradas.
Efetividade: Um algoritmo deve ser efetivo. Isto significa que
todas as operações devem ser suficientemente básicas de modo
que possam ser em princípio executadas com precisão em um
tempo finito por um humano usando papel e lápis.
11
Representação de Algoritmos
Linguagem Natural
Os algoritmos são expressos diretamente em
linguagem natural, como nos exemplos anteriores.
Fluxograma Convencional
É uma representação gráfica, que emprega formas
geométricas padronizadas para indicar as diversas
ações e decisões que devem ser executadas para
resolver o problema.
Pseudo-linguagem
Emprega uma linguagem intermediária entre a
linguagem natural e uma linguagem de programação
para descrever os algoritmos.
12
Exemplo de linguagem natural
Algoritmo de domingo:
◦
◦
◦
◦
◦
◦
◦
Acordar;
Tomar o café;
Se estiver sol vou à praia senão leio o jornal;
Almoçar;
Ir ao cinema;
Fazer uma refeição;
Ir dormir;
Final do domingo.
13
Exemplo de fluxograma
14
Exercício
Escreva, em linguagem natural, um algoritmo
para calcular as raízes de uma equação de
segundo grau, na forma Ax2 + Bx + C = 0
Para casa: desenhe um fluxograma para a
resolução do mesmo problema
15
Resposta
Algoritmo para cálculo de uma equação do segundo
grau:
◦ Obter os coeficientes a, b e c;
◦ Se o coeficiente a for igual a zero informar que esta não é
uma equação do segundo grau e terminar o algoritmo;
◦ Caso contrário continue e faça:
Calcular delta=b2-4ac ;
Se o valor de delta for negativo informar que a equação
não tem raizes reais e terminar o algoritmo.
Caso contrário continue e faça:
Calcular a raiz quadrada de delta e guardar o resultado como
raiz;
Calcular x1=(-b + raiz)/(2a);
Calcular x2=(-b - raiz)/(2a);
Fornecer como resultado x1 e x2;
Fim do algoritmo para cálculo de uma equação do
segundo grau.
16
Programação Estruturada
A grande dificuldade no desenvolvimento de
grandes sistemas de software é na enorme
complexidade que estes sistemas podem
possuir; quanto maior o número de tarefas que
ele deve desempenhar, maiores as chances de
erros serem cometidos em seu desenvolvimento
Djikstra foi um dos criadores dos princípios da
programação estruturada, que prega os
conceitos básicos para evitar estes problemas,
reduzindo a complexidade através de três níveis:
17
Programação Estruturada
Desenvolvimento
de
programas
em
diferentes fases por refinamento sucessivo
(desenvolvimento top-down)
Por exemplo, se estamos desenvolvendo o
algoritmo para descascar batatas, uma das
operações é:
Traga a cesta com batatas do porão;
Só que na verdade, esta operação envolve
vários outros passos, como “abrir a porta do
porão”, “acender a luz”, “descer as escadas”,
“pegar a cesta” e outras, mas que serão
detalhadas no refinamento sucessivo da
instrução
18
Programação Estruturada
Decomposição do programa total em módulos
funcionais, organizados, de preferência, em
um sistema hierárquico
◦ É a divisão de tarefas de um programa em subtarefas, cada uma implementando as instruções de
uma funcionalidade específica
Uso dentro de cada módulo de um número
muito limitado de estruturas básicas de fluxo
de controle
◦ Desenvolver cada módulo segundo o conceito de
“KIS – keep it simple (mantenha isto simples)”
19
Programação Estruturada
Vantagens do uso da programação estruturada:
◦ Confiabilidade;
◦ Manutenibilidade;
◦ Flexibilidade.
A programação estruturada ainda contempla a
importância da documentação de sistemas e o
fluxo de controle em algoritmos (nunca usar
GOTO!)
20
Portugol - Introdução
O Portugol é uma pseudo-linguagem de
programação,
criada a partir de uma
combinação do português com o Algol e o Pascal
Seu objetivo é permitir que com um conjunto
básico de comandos seja possível ao projetista
pensar na lógica das instruções para resolver o
problema, e não em sua implementação final,
mas que não seja muito distante desta
21
Construção de algoritmos
legíveis
Procure incorporar comentários no algoritmo,
pelo menos para descrever o significado das
variáveis utilizadas. Comentários em Portugol
podem ocorrer em qualquer parte do algoritmo,
colocados entre { } ou precedidos por //
Escolha nomes de variáveis que sejam
significativos, isto é, que traduzam o tipo de
informação a ser armazenada na variável
Procure identar todos os comandos de acordo
com o nível a que pertençam, isto é, destaque a
estrutura na qual estão contidos
22
Tipos de dados
Os algoritmos irão manipular dados, que
normalmente são fornecidos pelos usuários, e
irá gerar resultados, que por sua vez devem ser
retornados aos usuários.
Existem três tipos básicos de dados que a
linguagem de programação irá manipular:
◦ Dados numéricos;
◦ Dados alfa-numéricos;
◦ Dados logicos;
23
Dados numéricos
Os dados numéricos que os algoritmos podem manipular são de dois
tipos:
◦ Dados inteiros
◦ Dados reais
O conjunto dos dados inteiros pode ser definido como Z={...,-3,2,0,1,2,...}.
O conjunto dos números reais inclui o conjunto dos números inteiros,
dos números fracionários e dos números irracionais.
O conjunto dos números fracionários pode ser formalmente definido
como Q={p/q | p,q pertencem a Z}.
O conjunto dos números irracionais engloba aqueles que não podem
ser representados por uma fração, por exemplo o número
PI=3.141515...
Os números irracionais são armazenados até um certo número de
casas decimais que o computador consegue representar a partir daí as
casas decimais são descartadas.
24
Dados alfaalfa-numéticos
Dados alfa-numéricos servem para tratamento
de textos e normalmente são compostos por
uma seqüência de caracteres contendo letras,
algarismos e caracteres de pontuação. Nos
algoritmos são normalmente representados por
uma seqüência de caracteres entre aspas, por
exemplo:
◦ "Linguagem de programação"
◦ "Qual é o seu nome?"
◦ "12345"
25
Dados lógicos
Este tipo de dados é intensamente aplicado durante
o processo de tomada de decisões que o
computador frequentemente é obrigado a fazer. Em
muitos textos este tipo de dados também é chamado
de dados booleanos, devido a George Boole,
matemático que deu ao nome à álgebra (álgebra
booleana) que manipula este tipo de dados.
Os dados deste tipo somente podem assumir dois
valores: verdadeiro e falso. Computadores tomam
decisões, durante o processamento de um
algoritmo, baseados nestes dois valores.
26
Dados lógicos
Por exemplo, considere a decisão abaixo: Se
raiz >= 0 imprima "Existe raiz" caso contrário
imprima "Não existe raiz real."
Nesta instrução aparece a expressão raiz >= 0,
que procura descobrir se o valor de raiz é maior
que 0. Esta expressão somente pode ter como
resultado os valores: verdadeiro ou falso. Nos
nossos algoritmos estes valores serão
representados por verdadeiro e falso. Mais
adiante ficará claro como este tipo de dados
será empregado nos algoritmos.
27
Variáveis
Uma variável pode ser vista como um local onde
se pode colocar qualquer valor do conjunto de
valores possíveis de um dos tipos básicos
listados a seguir. O nome da variável é um
identificador para aquela informação
A criação de uma variável corresponde a
alocação de um espaço na memória principal do
sistema
computacional,
reservado
para
armazenar um dado, de acordo com o tipo da
variável criada
28
Variáveis
Devemos criar somente variáveis que serão de
fato utilizadas, e do tipo adequado, para não
usar memória de forma desnecessária
Tipos de variáveis do portugol:
◦ Inteiro: qualquer número inteiro, negativo, nulo ou
positivo. Ex.: -5, 0, 235
◦ Real: qualquer número real, negativo, nulo ou
positivo. Ex.: -5,7, 0, 60, 43,7
◦ Caracter: qualquer conjunto de caracteres
alfanuméricos. Ex.: “XYZ”, “João”, “Informática”
◦ Lógico: conjunto de valores “verdadeiro” ou “falso”
em proposições lógicas
29
Variáveis
Uma variável, para existir, deve ser declarada
Ao ser declarada, um espaço na memória é
reservado para esta variável, e podemos utilizá-la
para armazenar dados
A declaração da variável é feita no começo de
um algoritmo, especificando seu nome e tipo
Exs.:
inteiro: X1;
real: A, B;
caracter: FRASE, NOME;
lógico: TEM;
30
Expressões aritméticas
Expressões aritméticas são aquelas que apresentam
como resultado um valor numérico que pode ser um
número inteiro ou real, dependendo dos operandos e
operadores.
As expressões que podem ser utilizadas dependem
da linguagem de programação utilizada, apesar de
todas reconhecerem as operações elementares:
Operador
Descrição
+
Soma
-
Subtração
*
Multiplicação
/
Divisão
31
Expressões lógicas
Expressões lógicas são aquelas cujo resultado
pode somente assumir os valores verdadeiro
ou falso. As operações básicas são:
Operador
Descrição
ou
‘Ou’ lógico
e
‘E’ lógico
não
‘Não’ lógico
32
Expressões lógicas
Estes operadores e seus dados também
possuem uma espécie de tabuada que mostra
os resultados de operações básicas. A Tabela
a seguir mostra os resultados da aplicação
destes operadores à duas variáveis lógicas.
A
B
A ou B
Ae B
não A
falso
falso
falso
falso
verdadeiro
falso
verdadeiro
verdadeiro
falso
verdadeiro
verdadeiro
falso
verdadeiro
falso
falso
verdadeiro
verdadeiro
verdadeiro
verdadeiro
falso
33
Operadores relacionais
Frequentemente são utilizados em operações
lógicas; o resultado de sua aplicação será
verdadeiro ou falso
Operador
Descrição
>
maior que
<
menor que
>=
maior ou igual a
<=
menor ou igual a
==
igual a
!= (ou <>)
diferente de
34
Comandos básicos
Comandos de atribuição: para atribuir um
valor a uma variável, é utilizado o símbolo de
atribuição “←”.
Exs.: X1 ← 5;
A ← 3,7;
B ← - 76,1;
NOME ← João da Silva;
TEM ← falso;
35
Comandos básicos - resumo
Operadores aritméticos: são as quatro
operações básicas :soma (+), subtração(-) ,
multiplicação (*) e divisão( / ), símbolos de raiz
quadrada e exponenciação e nomes de funções
matemáticas comuns, por exemplo:
◦
◦
◦
◦
◦
sen(x), cos(x), tg(x), arxtg(x), etc
int (x): a parte inteira de x
raizq (x): a raiz quadrada de x
(x) mod (y): o resto da divisão de x por y
(x) div (y): o quociente da divisão inteira de x por y
36
Comandos básicos - resumo
Operadores lógicos: para relações lógicas,
temos o ‘e’ (∧), ‘ou’ (∨) e ‘não’ (¬)
Operadores relacionais: são os conectivos
relacionais <, =, >, ≤, ≥ , ≠
Ordem de prioridade de operações:
1. Parênteses e funções
2. Expressões aritméticas
3. Comparações (<, =, >, ≤, ≥ , ≠)
4. ‘não’, ‘e’, ‘ou’ (nesta ordem)
37
Observações
Uma maneira comum de exibir valores
numéricos reais com muitas casas decimais é
utilizando a letra ‘E’, que indica a potência de 10
que deve multiplicar o número que a precede
◦ Ex. – 315.21E–3 = – 315,21 x 10-3 = – 0,31521
Toda linguagem de programação possui um
conjunto de palavras reservadas, que são
identificadores que só podem ser utilizados com
um sentido pré-estabelecido pela linguagem,
logo, não podem ser utilizadas como nomes de
variáveis
38
Estruturas de um algortimo
Blocos de comandos: um bloco pode ser
definido como um conjunto de comandos com
uma função bem definida. Ele também serve
para definir os limites onde as variáveis
declaradas em seu interior são conhecidas.
Um bloco apresenta a seguinte estrutura:
algoritmo “exemplo”
<declarações de variáveis>
início
<comandos>
fimalgoritmo
39
Estruturas de um algortimo
Sequência simples: é um conjunto de
comandos, separados por ponto e vírgula (;),
que serão executados numa seqüência linear,
de cima para baixo.
comando 1;
comando 2;
comando 3;
...
40
Estruturas de um algortimo
Exemplo:
algoritmo “calcula_valores”
var
faltas: inteiro
nota1, nota2, media: real
nome_do_aluno: caracter
passou: logico
início
faltas ← 5;
nome_do_aluno ← “João da Silva”
media ← (nota1 + nota2)/2
passou ← verdadeiro
fimalgoritmo
41
Estruturas de um algoritmo
Condicional: quando a ação a ser executada
depender de uma inspeção ou teste, cujos
resultados possíveis são verdadeiro ou falso,
teremos uma alternativa simples ou composta
se < condição >
entao
comando 1;
comando 2;
...
fim se;
42
Estruturas de um algoritmo
Por exemplo, considere novas instruções para
a dona-de-casa descascando batatas:
Se o número de batatas é insuficiente então
descasque mais uma batata;
Esta instrução é do tipo condicional, ou seja, a
ação “descasque mais uma batata;” só será
realizada se a condição “se o número de
batatas é insuficiente ” for verdadeira, caso
contrário, nada é feito nesta linha e o fluxo de
execução do algoritmo irá para a próxima linha
de instrução do programa
43
Estruturas de um algoritmo
Exemplo:
algoritmo “aprova_aluno”
var
nota1, nota2, media: real
passou: logico
início
media ← (nota1 + nota2)/2
se (media ≥ 6) entao
passou ← verdadeiro
fimse
fimalgoritmo
44
Estruturas de um algoritmo
Ainda sobre o desvio condicional, caso existam duas
possibilidades para uma condição e uma delas é
falsa, e isto imediatamente faz da outra verdadeira,
é usada a cláusula de senão para a execução de
uma instrução relacionada a outra possibilidade
Exemplo:
se ainda existem mais batatas na cesta então
descasque mais uma batata;
senão
busque mais batatas no porão;
fim-se;
As condições
combinadas
possibilidades
de ‘se’ e ‘senão’ podem ser
para
contemplar
múltiplas
45
Estruturas de um algoritmo
Condicional composta:
se < condição >
entao
comando 1
...
senao
comando 2
...
fimse;
46
Exemplo
algoritmo “teste”
var
A, B: inteiro
início
A←1
B←2
se A > B entao
A←5
senao
A ← 10
fimse
fimalgoritmo
47
Exercícios
1.
2.
3.
Escreva um algoritmo que compare o valor de
duas variáveis inteiras, x e y, e armazene em
uma variável inteira z o maior dentre os dois
valores
Escreva um algoritmo que, dado os valores dos
catetos a e b de um triângulo retângulo, calcule
o valor de sua hipotenusa, c (a, b e c são
variáveis inteiras)
Escreva um algoritmo que a partir de um
número inteiro armazenado na variável x,
verifique se trata-se de um número par ou
ímpar, armazenando o resultado nas variáveis
lógicas ‘par’ ou ‘ímpar’
48
Respostas – exercício 1
algoritmo “verifica_maior”
var
x, y, z: inteiro
início
se (x > y) entao
z←x
senao
z←y
fimse
fimalgoritmo
49
Respostas – exercício 2
algoritmo “pitagoras”
var
a, b: inteiro
c: real
início
a ← a*a
b ← b*b
c ← a+b
c ← raizq (c)
fimalgoritmo
50
Respostas – exercício 3
algoritmo “par_ou_impar”
var
x: inteiro
par, impar: logico
início
se ( (x mod 2) = 0) entao
par ← verdadeiro
impar ← falso
senao
par ← falso
impar ← verdadeiro
fimse
fimalgoritmo
51
Estruturas de um algoritmo
No caso de um número limitado e bem-definido de
opções, onde somente uma pode ser verdadeira,
podemos usar a estrutura ‘caso’, que seleciona
uma dentre várias opções
escolha <variável>
caso “opção 1”
comandos...
caso “opção 2”
comandos...
...
outrocaso
comandos...
fimescolha
52
Estruturas de um algoritmo
O que fazer quando uma mesma instrução
deve ser repetida várias vezes? É possível
repetir o mesmo comando muitas vezes, mas
não é uma forma elegante de se resolver o
problema
Traga a cesta com batatas do porão;
Traga a panela do armário;
Descasque uma batata;
Descasque uma batata;
...
Descasque uma batata;
53
Estruturas de um algoritmo
Em algoritmos temos instruções de
repetição, que executam uma mesma
instrução (ou conjunto de instruções) diversas
vezes, até que uma condição seja atendida.
Por exemplo:
enquanto o número de batatas não for suficiente
descasque uma batata;
fimenquanto;
54
Exemplo
Algoritmo “numeros”
var
A, B, I, C: inteiro
inicio
A← 1
B← 1
C← 1
enquanto I < 18 faça
C←A+B
B←C
A←B +1
I← I+1
fimenquanto
fimalgoritmo
55
Estruturas de um algoritmo
O uso do ‘enquanto’ para repetição é apenas
uma das opções disponíveis. Temos ainda os
comandos ‘repita’ e ‘para ...
faça’,
exemplificados a seguir:
repita
comando 1;
comando 2;
...
até < condição >
56
Estruturas de um algoritmo
Observe que a alteração da condição que controla a
repetição dos comandos deve ser alterada pelas
instruções do programa e/ou seus respectivos
resultados, para que em algum momento da
execução a condição não seja mais atendida e o
programa deixe aquela estrutura de repetição
Estruturas de repetição que são executadas
infinitamente são chamadas de laço (ou ‘loop’) e
constituem um erro de programação, pois se repetem
indefinidamente,
consumindo
recursos
computacionais e não obtendo uma solução para o
problema
57
Estruturas de um algoritmo
Há ainda a estrutura de para ... faça, que obedece a
sintaxe a seguir:
para <variável de controle> de <valor inicial> até <valor
final> (passo n) faça
comando 1;
comando 2;
fimpara;
A variável de controle é apenas uma variável
comum, que a toda interação é atualizada e testada
para verificar se seu valor ainda está entre o
intervalo definido por <valor inicial> e <valor final>
58
Estruturas de um algoritmo
A definição do ‘passo’ é opcional, caso seja
realmente usado o incremento padrão de ‘+1’ a cada
iteração. Caso o valor do incremento seja qualquer
outro número, positivo ou negativo, diferente de 1, é
necessário explicitá-lo
para i de 1 até 99 passo 2 faça
escreval (“Número ímpar:”, i)
fimpara
No uso do para ... faça, o incremento da variável de
controle é feito automaticamente, cabendo ao
programador apenas definir o passo, se necessário
59
Estruturas de um algoritmo
OBS: em algumas linguagens de programação,
está disponível a cláusula ‘step’ seguida de um
número para a definição do passo, mas não no
Pascal.
Nele estão disponíveis as cláusulas to e downto,
que fazem, respectivamente, o incremento por
+1 e -1
60
Entrada e saída de dados
Até então, todos os valores calculados permanecem em variáveis,
na memória principal. Para fornecer os dados ao ambiente
exterior ao algoritmo, será necessário imprimí-lo, o que representa
uma saída na tela, impressora ou até mesmo na forma de áudio.
Do mesmo modo, para escrevermos algoritmos mais gerais, será
necessário obter dados do ambiente externo para o algortimo a
partir de cartões.
Usaremos os comandos leia ( ) e escreva ( ) (ou ainda, imprima
( ), ambas válidas no portugol) para realizar, respectivamente, a
entrada e saída de dados
Geralmente é utilizado o escreval ( ), que tem a mesma função de
mostrar mensagens na tela, mas, ao final, adiciona uma quebra de
linha
61
Entrada e saída de dados
Os comandos de entrada e saída de dados
podem combinar uma mensagem de texto préestabelecida com o valor de uma variável, por
exemplo:
nota ← 8
escreva (“A nota final do aluno e”, nota)
Mostrará na tela a mensagem “A nota final do
aluno e 8”, que combina um texto fixo com o
valor que a variável “nota” armazena naquele
instante
62
Entrada e saída de dados
De forma análoga, o comando leia permite obter
a partir do teclado um dado de entrada digitado
pelo usuário, por exemplo:
escreval (“Digite o nome do aluno:”)
leia (nome_aluno)
Os comandos acima exibirão a mensagem
“Digite o nome do aluno:” e em seguida ficará
aguardando até que o usuário digite o dado
solicitado e aperte a tecla enter; o dado digitado
será armazenado na variável “nome_aluno”
63
Exemplo
Algoritmo “soma_valores”
var
valor, soma: inteiro
inicio
soma ← 0
leia (valor)
enquanto valor ≠ -1 faça
soma ← soma + valor
leia (valor)
fimenquanto
escreva (“o valor da soma e igual a” , soma)
fimalgoritmo
64
Entrada e saída de dados
A entrada de múltiplos dados pode ser feita em
um mesmo comando, sendo apenas
necessário obedecer a ordem dos parâmetros
A separação entre os dados será identificada
pelo ‘enter’, por exemplo:
escreva ("Digite o nome do aluno e sua nota")
leia (nome_aluno, nota_aluno)
65
Entrada e saída de dados
É possível configurar a quantidade de espaços
no qual se deseja escrever um valor. Por
exemplo, o comando “escreva (x:5)” escreve o
valor da variável x em cinco espaços, alinhandoo à direita
A mesma forma pode ser usada para configurar
o número de casas decimais exibidas para
valores reais. Por exemplo, “escreva (y:6:2)”
imprime o valor da variável y, com a parte inteira
em 6 espaços, e duas casas decimais
66
Análise de um algoritmo
Um algoritmo pode ser analisado sob vários
aspectos, dentre os quais são considerados os
mais relevantes:
◦
◦
◦
◦
◦
◦
Atinge os objetivos propostos;
Está correto;
Possui boa documentação;
Possui módulos funcionais corretos
O código está inteligível;
Possui bom desempenho.
67
Observações
Muitos exercícios utilizam os seguintes termos:
◦ Entrada padrão: quer dizer que os dados de
entrada serão fornecidos através de digitação, via
teclado
◦ Saída padrão: significa que os resultados
produzidos pelo algoritmo devem ser exibidos na
tela do computador
◦ Flag: trata-se de um valor (ou texto) que, ao ser
gerado, indica o término de uma tarefa, por
exemplo, a entrada de dados. É uma condição de
parada
68
Observações finais
Use sempre que possível expressões
aritméticas pré-definidas pela linguagem de
programação, algumas das mais comuns são:
A div B: quociente da divisão de A por B
A mod B: resto da divisão de A por B
sqrt (A): raiz quadrada de A
round (A): arrendonda o valor real de A
trunc (A): trunca o valor real de A
69
Exercícios
1.
Dado um conjunto de valores inteiros e
positivos, perfurados em cartões, determine o
valor da soma destes elementos. Um cartão
perfurado com o valor -1 (flag) indica o fim dos
dados, e não deve ser considerado.
2.
Dado um conjunto de valores inteiros e
positivos, perfurados em cartões, determine
qual o menor valor do conjunto. Um cartão
perfurado com o valor -1 (flag) indica o fim dos
dados, e não deve ser considerado.
70
Exercícios
3.
Achar o menor e o maior número de uma série
de números positivos fornecidos por cartões
(existe pelo menos 1 cartão). Um cartão
perfurado com o valor -1 (flag) indica o fim dos
dados, e não deve ser considerado.
4.
Dado um conjunto de valores inteiros e
positivos, perfurados em cartões, determine a
média destes valores. Um cartão perfurado
com o valor -1 (flag) indica o fim dos dados, e
não deve ser considerado.
71
Exercícios
Uma certa firma fez uma pesquisa de mercado
para saber se as pessoas gostaram ou não de
um novo produto lançado. Para isto, perguntou o
sexo do entrevistado e sua resposta (sim ou
não). Para uma amostra de 2000 pessoas,
escreva um algoritmo que calcule e escreva:
5.
◦
◦
◦
◦
O número de pessoas que responderam sim;
O número de pessoas que responderam não;
A porcentagem de mulheres que responderam sim;
A porcentagem de homens que responderam não.
72
Exercícios
6.
7.
Escreva um algoritmo que calcule e escreva o
número de grãos de arroz que podem ser
colocados em um tabuleiro de xadrez,
colocando 1 no primeiro quadrado e nos
quadrados seguintes o dobro do quadrado
anterior
Escreva um algoritmo que calcule o valor do
somatório:
1
2
3
50
2 2
2
2
S=
+ + + ... +
50 49 48
1
73
Exercícios
8.
Escreva um algoritmo que calcule o fatorial de um
número inteiro.
9.
Uma
pesquisa
para
determinar
algumas
características físicas da população de uma cidade
coletou os seguintes dados:
◦
◦
◦
◦
Sexo (masculino, feminino);
Cor dos olhos (azuis, verdes, castanhos, pretos);
Cor dos cabelos (louros, castanhos, pretos, ruivos);
Idade, em anos;
Para cada habitante, foi digitada uma linha com estes
dados e a última linha, que indica o fim da entrada de
dados, conterá o valor de idade igual a -1. Escreva
um algoritmo que determine:
74
Exercícios
A maior idade dos habitantes;
A porcentagem de cada cor de olhos;
A porcentagem de indivíduos do sexo feminino
cuja idade está entre 18 e 35 anos, inclusive, e
que tenham olhos verdes e cabelos louros.
10.
Escreva um algoritmo que, para um
determinado número inteiro de dias informado,
calcule a quantidade de horas, minutos e
segundos correspondentes.
75
Exercícios
11.
Escreva um algoritmo que leia a altura das moças
inscritas em um concurso de beleza. O flag de
término de dados será uma altura igual a zero.
Calcule as duas maiores alturas e quantas moças as
possuem.
12.
Um determinado material radioativo perde metade
de sua massa a cada 50 segundos. Dada a massa
inicial, em gramas, escreva um algoritmo que
determine o tempo necessário para que esta massa
se torne menor do que 0,5 grama. Escreva a massa
inicial, a massa final, e o tempo, calculado em horas,
minutos e segundos.
76