Buscar

Resolução de Problemas Algoritmos

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 11 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 11 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 11 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

Capítulo 5Capítulo 5 
Algoritmos e a Resolução de Problemas 
5.0 Índice 
Capítulo 5Capítulo 5 1 
5.0 Índice 1 
5.1 Introdução 2 
5.2 Algoritmos: Conceito e Exemplificação 2 
5.2.1 Conceito de Algoritmo 2 
5.2.2 Exemplos de Algoritmos 2 
5.3 Português Estruturado 3 
5.4 Estruturas Clássicas de Controle 3 
5.4.1 A seqüência 4 
5.4.2 Teste de condição — Se-Então e Se-Então-Senão 4 
5.4.3 A repetição — Repita-Até e Enquanto-Faça 5 
5.5 Pseudo-Código 6 
5.5.1 Estruturas de dados 6 
5.5.2 Variáveis 6 
5.5.3 Constantes 7 
5.5.4 Operações e Expressões 7 
5.5.5 Operações aritméticos 8 
5.5.6 Operadores relacionais 8 
5.5.7 Operadores lógicos 8 
5.5.8 Prioridades e parênteses 8 
5.5.9 Entrada e saída 9 
5.6 Os Fluxogramas 9 
5.7 Exercícios 10 
 
22 Capítulo 5:Capítulo 5: Algoritmos e a Resolução de Problemas Prof. Roberto Willrich 
 
5.1 Introdução 
A construção de um programa computacional é motivada geralmente a partir de uma 
necessidade de solução de um problema particular: a geração automática de 
documentos, o controle de um equipamento eletrodoméstico, a transmissão de 
informações em longas distâncias, a agilização de cálculos científicos, e outras 
motivações mais. A solução dos nossos problemas através de um sistema 
computacional só é obtida no momento em que é definido um conjunto coerente de 
instruções de um programa que permita estabelecer que ações deverão ser executadas 
e em que ordem. 
Embora definida inicialmente como uma “arte”, a tarefa de programação dos 
computadores não é simples e, à medida que a complexidade dos problemas foi 
aumentando, constatou-se que a construção de um programa deveria ser, na realidade, 
resultado de um trabalho de engenharia, como o são tantos outros produtos. 
Da mesma forma como, no caso de um edifício ou o motor de um automóvel, não se 
passa diretamente da idéia à construção, o desenvolvimento de um programa deverá ser 
caracterizado pela execução de uma fase (a mais exaustiva possível) de reflexão onde o 
objetivo é analisar o problema a resolver e encontrar uma solução (se possível, a 
melhor) que possa ser realizada por um sistema computacional. O resultado deste 
trabalho de reflexão pode ser, então, registrado na forma de um algoritmo, a partir do 
qual o programa será finalmente construído. 
Um algoritmo pode ser definido, de maneira simplificada, como uma descrição formal do 
processo de obtenção de uma solução computacional. O objetivo deste capítulo será a 
definição precisa de algoritmo, sua exemplificação e como eles podem ser utilizados 
quando da construção de um programa. 
5.2 Algoritmos: Conceito e Exemplificação 
5.2.1 Conceito de Algoritmo 
Desde o início da Computação, diversos autores preocuparam-se em apresentar uma 
definição adequada para o termo algoritmo. Neste curso, será adotada a definição dada 
por Kronsjö, onde um algoritmo é “um procedimento consistindo de um conjunto finito de 
regras não ambíguas que especificam uma seqüência finita de operações necessárias à 
solução de um problema ou para especificar uma classe de problemas”. 
Da mesma forma que, na nossa rotina diária nós podemos encontrar infinitas maneiras 
de “contar uma mesma história” ou explicar a alguém como executar determinada tarefa, 
vamos encontrar diversas formas de especificar um mesmo problema através de um 
algoritmo... o objetivo na construção dos algoritmos é evitar qualquer ambigüidade que 
possa surgir na definição de um problema e que pode resultar em erros (muitas vezes 
catastróficos) uma vez que a solução venha a ser executada pelo computador. 
5.2.2 Exemplos de Algoritmos 
Exemplos básicos de algoritmos seriam as receitas de cozinha, ou as instruções de 
montagem de um aparelho. Por exemplo, vejamos qual seria o algoritmo usado para 
trocar um pneu furado: 
1. Pegar o macaco e o estepe no porta-malas do carro. 
2. Levantar o carro usando o macaco. 
3. Retirar o pneu furado. 
4. Colocar o estepe em seu lugar. 
5. Abaixar o carro. 
6. Guardar o macaco e o pneu furado. 
33 Capítulo 5:Capítulo 5: Algoritmos e a Resolução de Problemas Prof. Roberto Willrich 
Esse passos devem ser detalhados até que o algoritmo represente completamente a 
situação que desejamos modelar, eliminando todas as dúvidas, imprecisões e 
ambigüidades. Por exemplo, a etapa 2 poderia ser refinada em: 
2. Levantar o carro usando o macaco. 
2.1. Colocar o macaco sob o carro, próximo ao pneu a trocar. 
2.2. Girar a manivela do macaco até que o pneu se eleve do chão. 
Para ser convertido em um programa de computador, um algoritmo deve ser descrito de 
forma clara e estruturada. Esse tipo de descrição ajuda inclusive na compreensão do 
algoritmo e na correção de eventuais erros. As duas formas de descrição de algoritmos 
mais simples e difundidas são: português estruturado, pseudo-códigos e fluxogramas, 
que veremos a seguir. 
5.3 Português Estruturado 
Como foi mostrado nos exemplos já apresentados, a linguagem natural é a forma mais 
imediata de representação de algoritmos. Um cuidado que deve ser tomado quando da 
adoção da linguagem natural como forma de representação de algoritmos é o uso de um 
alfabeto de símbolos (palavras) relativamente limitado, de modo a facilitar, numa etapa 
posterior, a tradução deste para uma linguagem de programação. 
No entanto, o uso da linguagem natural pode provocar alguns problemas de 
interpretação do funcionamento do algoritmo se este tiver um grau de complexidade 
relativamente elevado. O grande número de linhas utilizado para descrever a solução de 
um problema, se apresentado de forma linear, pode representar um grande obstáculo ao 
entendimento do problema. 
Vamos ilustrar isto observando um exemplo de algoritmo que explica a uma pessoa 
como marcar um horário para uma consulta a um professor da UFSC. 
Início 
 Procurar o número da UFSC no catálogo telefônico 
 Se o número da UFSC não for encontrado 
 então escreva uma carta 
 senão, enquanto não conseguir falar com a UFSC repita 
 Tire o fone do gancho 
 Disque o número da UFSC 
 Enquanto o número da UFSC estiver ocupado repita 
 Recoloque o fone no gancho 
 Tire o fone do gancho 
 Disque o número da UFSC 
 Se alguém atende Então 
 pergunte se é da UFSC 
 Se é da UFSC Então 
 marque a entrevista com o professor 
 Senão 
 desculpe-se pelo engano 
Fim 
 
O exemplo apresentado é ainda relativamente curto para ilustrar a dificuldade de 
compreensão que a apresentação neste formato pode representar. Mas, por outro lado, 
poderemos notar que utilizando as facilidades de indentação (tabulação) presente nos 
editores de texto, podemos tornar o português estruturado mais fácil de ser 
compreendido. 
5.4 Estruturas Clássicas de Controle 
Analisando o exemplo de algoritmo apresentado anteriormente, é possível distinguir 
alguns aspectos de representação que serão úteis para qualquer tipo de problema a ser 
solucionado de modo computacional. Algumas combinações clássicas de ações podem 
44 Capítulo 5:Capítulo 5: Algoritmos e a Resolução de Problemas Prof. Roberto Willrich 
ser definidas como um padrão de representação de partes do comportamento de um 
programa que implemente uma dada solução, constituindo-se como verdadeiras “peças” 
ou “blocos de construção” para os algoritmos. Algumas destas estruturas serão 
introduzidas a seguir. 
5.4.1 A seqüência 
É a forma mais evidente de apresentar as ações a realizar para solucionar um dado 
problema. A representação das seqüências de ações, no caso da representação por 
texto é feita relacionando-se uma ação por linha, o que permite impor uma ordem lógica 
para a execução das ções. Considerando a seqüência abaixo, do exemplo apresentado 
na seção 2, deve ficar claro para quem vai executar que a ação “Disque o número da 
UFSC” não poderá ser realizada se a ação “Tire o fone dogancho” não tiver sido 
executada. Da mesma forma “Tire o fone do gancho” só poderá ser realizada após 
“Recoloque o fone no gancho”. 
Recoloque o fone no gancho 
Tire o fone do gancho 
Disque o número da UFSC 
 
Em alguns casos, por questões de economia de espaço, é possível relacionar mais de 
uma ação por linha. Neste caso, para delimitá-las, utiliza-se o símbolo “;” (ponto e 
vírgula), como é mostrado a seguir: 
Recoloque o fone no gancho; Tire o fone do gancho 
Disque o número da UFSC 
5.4.2 Teste de condição — Se-Então e Se-Então-Senão 
Extraindo outra parte do algoritmo apresentado, vai ser possível conhecer uma outra 
estrutura bastante utilizada na construção de programas de computador — os Testes de 
Condição. 
SE alguém atende ENTÃO 
 pergunte se é da UFSC 
 
Na sua forma geral, pode-se escrever esta estrutura como: 
SE condição Então 
 ação 
 
A condição vai corresponder a uma situação que deve ser verificada como verdadeira 
para que a ação associada seja realizada. Caso contrário (a condição é falsa), nada 
deve acontecer. 
Por outro lado, pode ser interessante que, quando se verifica a condição como falsa, 
uma outra ação tem de ser efetuada. Para isto, utiliza-se a seguinte estrutura: 
SE condição ENTÃO 
 ação 1 
SENÃO 
 ação 2 
 
Neste caso, ação 1 deve ser realizada quando a condição é verdadeira; se for falsa, a 
ação 2 será executada. O exemplo, extraído do algoritmo apresentado em 2 deixa claro 
o uso desta estrutura. 
 
SE é da UFSC ENTÃO 
 marque a entrevista com o professor 
SENÃO 
 desculpe-se pelo engano 
55 Capítulo 5:Capítulo 5: Algoritmos e a Resolução de Problemas Prof. Roberto Willrich 
5.4.3 A repetição — Repita-Até e Enquanto-Faça 
Outro mecanismo importante na representação de comportamento de programas 
corresponde à repetição de ações. Em lugar de escrever múltiplas vezes uma mesma 
seqüência de ações, pode-se escrevê-la uma única vez com o auxílio das estruturas de 
repetição, nas quais as condições funcionam como o elemento que determina a 
continuidade ou a interrupção da execução da seqüência de ações especificada. 
Duas estruturas de repetição são utilizadas freqüentemente para a especificação de 
situações repetitivas. A primeira, Repita-Até, permite estabelecer a execução repetitiva 
da seqüência especificada até que a condição associada seja verificada. A forma geral 
desta estrutura fica: 
 
 REPITA 
 ação 1 
 ação 2 
 ... 
 ação n 
 ATÉ condição 
 
Isto significa que a seqüência ação 1; ação 2;...; ação n, será realizada uma vez, sendo 
em seguida verificada a condição associada à cláusula ATÉ. Se a condição for falsa, o 
processo se repete, reiniciando pela ação 1. Se a condição for verdadeira, a repetição é 
cancelada. Por exemplo, se quisermos que um número seja multiplicado por ele mesmo 
6 vezes, é possível utilizar a estrutura Repita-Até (Repeat-Until) da seguinte forma: 
 
 REPITA 
 multiplica número por ele mesmo; 
 incrementa a contagem de uma unidade; 
 ATÉ contagem seja igual a 6 
 
Outra forma de representar a repetição de ações é associar uma condição não após a 
última ação da seqüência, mas antes da primeira ação. Corresponde à estrutura Faça-
Enquanto (Do-While), a qual estabelece que a seqüência de ações especificada deve 
ser repetida enquanto a condição associada for verdadeira. Se, antes de iniciar uma 
nova execução da seqüência, for verificada que a condição é falsa, então a repetição é 
cancelada. A forma geral de representação desta estrutura é: 
 ENQUANTO condição FAÇA 
 ação 1 
 ação 2 
 ... 
 ação n 
 FIM 
 
Para o exemplo da multiplicação introduzido anteriormente, esta estrutura poderia ser 
utilizada da seguinte forma: 
 ENQUANTO contagem é diferente de 6 FAÇA 
 multiplique número por ele mesmo 
 incrementa a contagem de uma unidade 
 FIM 
 
Como poderá ser observado à medida que os conceitos de uma dada linguagem de 
programação forem estudados, estas estruturas apresentam grande utilidade na 
representação do comportamento dos programas. Atualmente, qualquer linguagem de 
programação (excetuando-se as linguagens de baixo nível) apresentam construções 
correspondentes a estas estruturas. A combinação coerente destas três classes de 
estrutura pode permitir representar a maior parte das soluções aos problemas práticos 
resolvidos através dos computadores, mesmo os mais complexos. 
66 Capítulo 5:Capítulo 5: Algoritmos e a Resolução de Problemas Prof. Roberto Willrich 
5.5 Pseudo-Código 
Outra forma de descrever um algoritmo é usando construções similares às usadas nas 
linguagens de programação reais, por isso chamadas pseudo-código. Essa abordagem 
facilita mais tarde a programação do algoritmo assim especificado. A descrição de um 
algoritmo em pseudo-código se baseia na combinação das estruturas clássicas de 
controle, na definição da estrutura dos dados utilizados, no uso de operações e 
expressões e operações de entrada e saída. Estes pontos serão vistos a seguir. 
5.5.1 Estruturas de dados 
A matéria prima tratada pelo computador é a informação. As informações que compõe o 
mundo real podem ser armazenadas na memória do computador sob a forma de 
estruturas de dados. 
Podemos classificar as informações tratadas por um computador como sendo compostas 
por elementos pertencendo a um dos quatro tipos básicos de dados descritos abaixo 
(também chamados tipos primitivos ou básicos): 
n Inteiro: um dado de tipo inteiro é uma informação numérica pertencente ao 
conjunto dos inteiros Z. Alguns exemplos: 37 pessoas estão inscritas nesta turma. 
Ontem foram assaltados 4 bancos em Florianópolis. 
n Real: um dado deste tipo é uma informação numérica pertencente ao conjunto dos 
reais R. Alguns exemplos: Meu saldo bancário é de R$ -217.43. A média da turma 
foi 2.17 na última prova. 
n Caractere : é uma informação composta por uma letra ou seqüência de letras, 
dígitos e símbolos (também chamada string). Por exemplo: imprimir o histórico 
escolar de José Antônio Neves Pontes, cuja identidade é 6/R-1.543.433-SSP/SC. 
n Lógico: informações deste tipo podem assumir somente um valor entre duas 
possibilidades: verdadeiro ou falso. Por exemplo: o aluno foi aprovado ou 
reprovado; a lâmpada está acesa ou apagada. 
Os tipos básicos de dados podem variar de linguagem para linguagem, mas geralmente 
são similares aos descritos acima. A maioria das linguagens permite definir novos tipos 
de dados, a partir de seus tipos pré-definidos. 
5.5.2 Variáveis 
O computador usa a memória para armazenar os dados que está tratando. Podemos 
fazer uma analogia simples entre a memória do computador e um grande armário cheio 
de gavetas. Cada gaveta possui um nome e guarda um dado de um tipo determinado. 
Essas gavetas são chamadas variáveis, e cada uma pode conter um valor cujo tipo é 
definido no início do programa. No exemplo abaixo, a gaveta chamada Aluno possui o 
valor Pedro Silva, e assim por diante. 
Aluno: Pedro Silva Idade: 18 
Peso: 76.0 Altura: 1.76 
Casado: sim Filhos: 2 
Os nomes das variáveis devem obedecer a regras precisas para sua definição. Na 
maioria das linguagens de programação convencionais não é possível nem desejável 
identificar uma variável com algo do tipo “último colocado no concurso vestibular". De 
modo geral, os nomes de variáveis podem conter letras e números, devem começar por 
uma letra e não podem conter símbolos especiais. São nomes válidos: Alpha, x17, 
NotaFinal, Media. São nomes inválidos: 52Pst, E(s), A:B, Nota-Final, X*, P%, Nota$, ... é 
muito importante que o nome usado para uma variável indique com clareza sua 
finalidade, para tornar o programa mais compreensível e portanto menos sujeito a erros 
de programação. 
Por exemplo, uma variável usada para armazenar o nome de um cliente em um 
programa deve ter um nome da forma NomeCliente, ou semelhante,e nunca somente N 
77 Capítulo 5:Capítulo 5: Algoritmos e a Resolução de Problemas Prof. Roberto Willrich 
ou NC. Imagine um programa com 1000 linhas ou mais no qual a maioria da variáveis se 
chama A, X, n, etc. 
No início de um programa de computador precisamos definir que variáveis iremos usar, e 
que tipo de dados podem ser armazenados nelas. Isso é efetuado através de uma 
declaração de variáveis. Vejamos um exemplo de declaração de variáveis em pseudo-
código: 
variáveis 
 Aluno : caractere; 
 idade,filhos : inteiro; 
 altura, peso : real; 
casado : lógico; 
Neste exemplo, declaramos as variáveis nome, que pode conter um valor de tipo 
caractere; as variáveis idade e filhos, que podem armazenar valores inteiros, as variáveis 
altura e peso, que podem conter valores de tipo real, e a variável casado, que pode 
armazenar um dado de tipo lógico (verdadeiro ou falso). 
Uma vez declaradas as variáveis, podemos usá-las em programas, para armazenar os 
valores que serão consultados e/ou manipulados durante a execução dos mesmos. Para 
utilizar o valor de uma variável basta indicar seu nome onde desejado. Para armazenar 
um valor em uma variável utilizamos um comando de atribuição, que nos permite 
fornecer um valor a uma variável, ou seja, “guardar uma informação em uma gaveta". O 
tipo desse valor deve ser compatível com o tipo declarado para a variável. O comando 
de atribuição tem a seguinte forma: 
variável := expressão do mesmo tipo da variável 
A expressão á direita do sinal :=" é resolvida primeiro, e seu valor é em seguida atribuído 
à variável da esquerda do sinal, que deve ser do mesmo tipo resultante da expressão. 
Vejamos um exemplo em pseudo-código: 
variáveis 
 Número : inteiro; 
 Soma, Média : real; 
 Aprovou : lógico; 
início 
 Soma := 246,34 
Número := 37 
Média := Soma / Número 
Aprovou := (Média > 5.0) 
fim 
5.5.3 Constantes 
Em um programa também podemos declarar informações constantes, que não devem 
mudar ao longo do programa. é o caso de constantes matemáticas, por exemplo, ou de 
informações como o nome do programador, a versão do programa, etc. As constantes 
podem ser declaradas em pseudo-código de forma semelhante ás variáveis, com a 
inclusão de seu valor: 
constantes 
 pi = 3.141592653589793264; 
 Versão = '1.3b' 
 Programador = 'Mickey Mouse' 
As constantes podem ser usadas da mesma forma que as variáveis, mas seu valor não 
pode ser modificado (ou seja, uma constante nunca pode aparecer no lado esquerdo de 
uma atribuição). 
5.5.4 Operações e Expressões 
As operações permitem alterar o valor de variáveis. As operações são especificadas 
através de expressões que permitem combinar variáveis, constantes e operadores, para 
88 Capítulo 5:Capítulo 5: Algoritmos e a Resolução de Problemas Prof. Roberto Willrich 
obter novos valores que podem ser usados nos algoritmos. Temos basicamente três 
tipos de operadores: aritméticos, relacionais e lógicos. 
5.5.5 Operações aritméticos 
Relacionam entre si valores ou expressões numéricas inteiras ou reais, dando como 
resultado valores numéricos (inteiros ou reais). Por exemplo, se x for uma variável de 
tipo numérico, então (x+3)/ (x2-3x+1) é uma expressão empregando operadores 
aritméticos e que resulta em um valor numérico. Os operadores numéricos mais usuais 
em informática, e sua representação em pseudo-código são: 
Tipos Exemplos Significado 
Soma b := c + d; b é igual a soma das variáveis c e d 
Subtração x := x - 1; O valor de x é decrementado de uma unidade 
produto m := n*2; A variável m é igual ao dobro da variável n 
divisão real m := n/2; A variável m é igual a metade da variável n 
potência v := n^2 A variável v é igual ao quadrado da variável n 
divisão inteira d := x DIV y A variável d é igual a divisão inteira de x por y 
resto da divisão r := x MOD y A variável r é igual ao resto da divisão inteira de x por y 
Além dos operadores aritméticos, a maioria das linguagens de programação oferece um 
vasto conjunto de funções matemáticas, necessárias para cálculos de maior 
complexidade. As funções mais usuais são: 
Sin(x) seno de x (em radianos) 
cos(x) cosseno de x 
tg(x) tangente de x 
arcsin(x) arco-seno de x 
arccos(x) arco-cosseno de x 
abs(x) valor absoluto de x 
int(x) parte inteira de x 
frac(x) parte fracionária de x 
random(x) valor aleatório inteiro entre 0 e x 
 
5.5.6 Operadores relacionais 
Estes operadores relacionam expressões numéricas entre si e dão como resultado 
valores lógicos. Os principais são: <, >, =, ¹, £, ³ .Por exemplo, a expressão x + 3 ³ 7 
resulta em verdade quando x ³ 4 e falso caso contrário. 
5.5.7 Operadores lógicos 
Relacionam entre si valores ou expressões lógicas, resultando em valores lógicos. Os 
mais usuais são: 
n NÃO: nega ou inverte o resultado de uma expressão. Por exemplo, se x³17 é 
verdade, então NÃO(x³17) é falso. 
n •E: resulta em verdade somente se ambas as expressões forem verdadeiras. Por 
exemplo, se (x>5)E(x<10) só é verdade se ambas as condições forem verdadeiras. 
n •OU: resulta em verdade se ao menos uma das expressões for verdadeira. Por 
exemplo, (x>5)OU(x<10) será verdade se qualquer uma das condições for 
verdadeira, ou ambas. 
5.5.8 Prioridades e parênteses 
As prioridades usadas na resolução de expressões lógicas, aritméticas e relacionais são 
geralmente aquelas observadas na matemática, ou seja, resolvem-se nesta ordem: 
potenciações, multiplicações e divisões, somas e subtrações, operadores relacionais e 
operadores lógicos. Veja a resolução da expressão: (3^2 - 5 > 0) E (5 / 2 = 3 - 4) tem 
valor falso. 
Em caso de dúvidas quanto às prioridades, use e abuse dos parênteses ! 
99 Capítulo 5:Capítulo 5: Algoritmos e a Resolução de Problemas Prof. Roberto Willrich 
5.5.9 Entrada e saída 
De nada vale um computador efetuar cálculos e operações complexas se ele não puder 
receber dados e emitir resultados. Para receber dados do mundo exterior, o computador 
usa um comando de leitura de dados, representado em pseudo-código por leia(variável 
1, variável 2, ...). Este comando espera que o usuário digite um valor para cada uma das 
variáveis mencionadas entre parênteses: por exemplo, se x1, x2 e x3 são três variáveis 
declaradas de tipo real, o comando leia (x1, x2, x3) vai esperar que o usuário digite três 
valores reais e irá armazenar esses valores respectivamente nas variáveis x1, x2 e x3. 
Outro exemplo: 
nome : caractere 
altura, peso : real 
idade : inteiro 
leia (nome, idade, peso, altura) ; 
Para emitir resultados, o computador usa um comando de saída representado em 
pseudo- código por escreva, que possui a seguinte sintaxe: escreva (expressão 1, 
expressão 2, ...). Esse comando permite apresentar na saída do computador 
(geralmente a tela ou a impressora), os resultados das expressões indicadas entre 
parênteses. Por exemplo, vejamos o que produziria a seqüência de comandos abaixo: 
variáveis 
 a,b: inteiro 
 início 
 leia (a,b) 
 se a > b então 
 escreva (a,' é maior que ', b) 
 senão 
 se b > a então 
 escreva (b,' é maior que ', a) 
 senão 
 escreva (a,' é igual a ', b) 
 fim 
 fim 
fim 
5.6 Os Fluxogramas 
Como foi apresentado anteriormente, o pseudo-código é uma maneira int eressante e 
bastante utilizada para representar o comportamento das soluções a implementar 
através de um computador. 
Entretanto, uma forma gráfica para a expressão do fluxo de execução de um programa 
pode apresentar algumas vantagens. O uso de símbolos especiais e a combinação 
destes símbolos para formar as estruturas mais clássicas de controle, como aquelas 
apresentadas anteriormente podem eliminar a ambigüidade eventualmente provocada 
pelo uso do texto escrito. 
Há muitos anos, o fluxograma tem aparecido como uma ferramenta interessante de 
representação do comportamento de programas, permitindoexpressar, além do fluxo 
lógico da execução e, as operações envolvidas no processamento dos dados e as 
entradas e saídas. Os fluxogramas são construídos a partir do uso de símbolos 
padronizados que expressam classes de operações comumente utilizadas nos 
programas. A figura 1 apresenta os símbolos mais comuns adotados na construção dos 
diagramas. 
O uso do fluxograma para a representação de programas pode ser ilustrado pela figura 
2, onde o objetivo é automatizar o cálculo da média obtida por um aluno numa dada 
disciplina e a definição de sua condição de aprovado ou reprovado. 
1010 Capítulo 5:Capítulo 5: Algoritmos e a Resolução de Problemas Prof. Roberto Willrich 
ProcessamentoProcessamento DecisãoDecisão EntradaEntrada
SaídaSaídaTerminadorTerminador
( início ou f im)( início ou f im)
 
 
Figura 1 - Símbolos mais utilizados na construção dos fluxogramas. 
 
Média := (Nota1+Nota2+Nota3+Nota4)/4Média := (Nota1+Nota2+Nota3+Nota4)/4
Média < 6,0Média < 6,0
Nota1, Nota2,Nota1, Nota2,
Nota3, Nota4Nota3, Nota4
'Reprovado com'Reprovado com
nota ' , Médianota ' , Média
InícioInício
'Aprovado com'Aprovado com
nota ' , Médianota ' , Média
FimFim
Nao Sim
 
 
Figura 2 - Fluxograma da solução para cálculo da média de uma disciplina. 
 
5.7 Exercícios 
Escreva os algoritmos solicitados em pseudo-código e/ou em fluxograma. 
1. Escreva um algoritmo para entrar com três números e imprimir o maior entre eles. 
2. Escreva um algoritmo para entrar com 8 números e imprimir a quantidade de 
números maiores que 4. 
3. Escreva um algoritmo para entrar com um número de 1 a 10 e imprimí-lo o número 
de vezes correspondente ao seu valor. 
4. Construir um algoritmo capaz de representar uma estrutura do tipo Repete-Até; 
5. Construir um algoritmo capaz de representar uma estrutura do tipo Faça-Enquanto; 
6. Construir um algoritmo que represente o critério de avaliação da disciplina INE 5201 
1111 Capítulo 5:Capítulo 5: Algoritmos e a Resolução de Problemas Prof. Roberto Willrich 
7. Uma empresa telefônica aplica a seguinte política de tarifamento aos seus 
assinantes: uma mensalidade de manutenção fixa (R$ 13,00 para assinantes 
domésticos; R$ 18,00 para assinantes comerciais), uma taxa de R$ 0,10 por pulso 
excedente (acima de 90 pulsos) e R$ 50,00 pela utilização do serviço de 
despertador. O programa a ser construído vai obter os dados a partir de um sistema 
de cartões perfurados, onde cada cartão corresponde a um assinante e fornece as 
seguintes informações: número do telefone, tipo do assinante (1, se for doméstico e 
2, se for comercial), número de pulsos registrados no mês, quantidade de utilização 
do serviço de despertador. Escreva um algoritmo em pseudo-código ou fluxograma 
que permita calcular o valor da conta telefônica de todos os usuários da empresa. O 
final da leitura da pilha de cartões pode ser definida por um último cartão, tipo de 
assinante seja igual a 0. 
8. Complemente o algoritmo da questão anterior, para que ele forneça também o valor 
da maior conta, o número total de vezes que todos os assinantes utilizaram o serviço 
de despertador e a arrecadação total da empresa no mês. 
9. Existem três candidatos a uma vaga para o governo do estado. Durante a eleição 
(turno único), os votos são registrados em urna eletrônica contendo o voto do eleitor, 
codificado pelo número do candidato (1, 2 ou 3). Escreva um algoritmo que leia os 
votos e determine as seguintes informações: 
n O número total de eleitores; 
n O número de votos que cada candidato obteve; 
n O número de votos nulos; 
n O número de votos brancos. 
10. A condição para que três segmentos de reta possam formar um triângulo é que o 
maior segmento seja inferior à soma dos comprimentos dos dois menores. Construa 
um fluxograma que represente a solução para este problema, supondo que os dados 
de entrada sejam os comprimentos dos três segmentos de reta. Em função destes 
comprimentos, o algoritmo deverá definir se os segmentos de reta podem compor 
um triângulo ou não. 
11. Escreva um algoritmo que permita a um usuário entrar com 3 números inteiros e os 
imprima em ordem crescente. 
12. Escreva um algoritmo que, dado os 3 lados de um triângulo, determine se ele é 
eqüilátero, isósceles ou escaleno (três lados diferentes).

Continue navegando