Dicas para Escrever Bons Algoritmos
Problema 2: Faça um algoritmo para ler uma quantidade indefinida
de bois (código do boi e peso do boi), parando quando for digitado o código zero. Depois, calcule e imprima o código e o peso do boi mais gordo da fazenda. Considere, para simplificar, que não há dois pesos iguais. Neste problema temos: ENTRADA: o código e o peso do boi
PROCESSAMENTO: calcular qual o boi mais gordo SAÍDA: o código e o peso do boi mais gordo
O que mais podemos saber da leitura? Vamos precisar usar estrutura de repetição. Porém, não pode ser um laço para/faça, porque vamos ler um número indefinido de bois. Mas, nós temos uma condição de parada (código do boi igual a zero). Dessa forma, podemos usar ou um laço enquanto/faça ou um laço repita/até. Vamos escolher esse último, porque o algoritmo teria de executar ao menos uma vez.
======================================================
Algoritmo pesado
// e uma variável para guardar o que vai ser calculado codGordo, pesoGordo.
Var codBoi, codigoGordo: inteiro
peso, pesoGordo: real
inicio
// antes de entrar no laço, temos de dar um valor inicial (inicializar) as variáveis // que vamos usar para os cálculos. Como não temos ainda o código do boi mais gordo // inicializamos o código do mais gordo com zero. E, como queremos descobrir o peso // do boi mais gordo, começamos o peso com zero também. Para que qualquer que seja //o peso do primeiro boi lido, ele já possa substituir esse valor zero, como você verá abaixo.
codigoGordo <- 0 pesoGordo <- 0 repita
// assim que entramos no repita, vamos ler os valores de entrada escreval(“******************************************”)
escreva (“Digite o código do boi: ”) leia(codBoi)
// só continuo o algoritmo se o código lido for diferente de zero. Isso evita que o // primeiro código digitado seja zero e você tenha que executar o algoritmo todo, // antes de sair do laço – porque o teste do laço só é no final.
se (codBoi <> 0) entao
escreva (“Digite o peso do boi: ”) leia(peso)
// agora vamos usar uma estrutura condicional para tomar a decisão se esse boi // que acabou de ser lido é mais gordo do que o que já temos armazenado na // variável pesoGordo
se (peso > pesoGordo) entao
// se o peso do boi que foi lido for maior do que o peso que estava // armazenado, você deve substituir o valor armazenado, pelos valores // que acabaram de ser lidos.
pesoGordo <- peso codigoGordo <- codBoi
fimse
fimse
// esse algoritmo continua até que a condição de parada (codBoi =0) seja satisfeita até (codBoi = 0)
// quando sai do laço, deve imprimir o resultado
escreval(“O boi mais gordo é o de código: “, codigoGordo, “ que pesa ”, pesoGordo)
Desafio
O que mudaria se que eu quisesse saber qual era o boi mais magro???
Conheça Mais
O assunto dessa unidade é linguagem algorítmica e qualquer livro de algoritmos ou de lógica de programação terá esse assunto (na verdade um ou mais capítulos sobre o assunto). Sugiro, então, a leitura dos capítulos 2 e 3 do livro-texto da disciplina: FORBELLONE, André Luiz. Lógica de Programação. Makron Books, 3ª. Edição, 2005.
Outro livro que pode ser consultado é o: FARRER, Harry; BECKER, C. G.; FARIA, E.C.; MATOS, H.F.; SANTOS, M.A.; MAIA, M.L. Algoritmos Estruturados. Editora LTC, 3ª. Edição, 1999.
Outra fonte de pesquisa pode ser a internet. Você pode consultar por “Linguagem Algorítmica” que virão várias dicas de apostilas, tutoriais, apresentações e sites. Além da própria página do VisuAlg: http://www.apoioinformatica.inf.br/visualg/linguagem.htm
Atividade de Estudo
Construa algoritmos em linguagem algorítmica para resolver os problemas abaixo.
Usando só estrutura sequencial
1) Leia o nome e o salário de um funcionário e exiba com
resultado o nome do mesmo com o salário reajustado em 12%. 2) Leia 2 notas, calcule e exiba a média ponderada dessas notas.
Considere que a nota1 tem peso 6 e a nota2 tem peso 4. 3) Faça um algoritmo que receba um valor em dólar e transforme
dólar = R$ 1.70.
4) Leia uma distância em km entre dois pontos e o preço da gasolina em reais. Depois, exiba quantos litros de gasolina o carro irá consumir e quanto será o gasto em reais, sabendo que o carro em questão consegue percorrer 12 km com um litro de gasolina.
5) Leia as variáveis inteiras n1 e n2 e troque o valor destas variáveis. Isto é, n1 deve ficar com o valor de n2 e n2 deve ficar com o valor de n1. Exiba os valores antes e depois da troca.
Usando só estrutura de decisão
6) Leia um número inteiro e mostre uma mensagem indicando se este número é par ou ímpar (pra calcular se é par ou ímpar, use a função MOD).
7) Leia 3 notas, calcule a média aritmética dessas e, de acordo com o resultado, escreva como saída o valor da média e a mensagem apropriada: Reprovado (média < 4), Em Prova Final (média >= 4 e < 7) e Aprovado (média >= 7).
8) Leia a idade de um nadador e exiba sua categoria segundo as regras: Junior (5 até 7 anos); Infantil (8 até 12 anos); Pré (13 até 18) e Avançada ( Idade > 18)
9) Desenvolva um algoritmo que funcione como uma calculadora, com as quatro operações básicas: adição, subtração,
multiplicação e divisão. Para isso, deve ser pedido ao usuário o primeiro número, o sinal da operação e o segundo número. Dê uma mensagem se o sinal digitado não for um dos quatro presentes na calculadora e lembre que não existe número divisível por zero.
10) Leia três números inteiros e mostre-os em ordem crescente. 11) Leia um número inteiro entre 20 e 39 e escreva seu valor
por extenso. Exiba uma mensagem apropriada se o número estiver fora desse intervalo.
Usando estrutura de repetição (e talvez, outras estruturas)
12) Leia o nome e a idade de várias pessoas até que uma idade igual a ZERO seja digitada. E, ao final, informe o nome da pessoa mais velha e o nome da pessoa mais nova, entre todos os nomes lidos. Para simplificar, considere que não existem idades iguais.
13) Escreva um algoritmo para calcular e imprimir a soma dos números inteiros e pares de 1 a 50.
14) Um órgão de pesquisa deseja efetuar um mapeamento das condições econômicas das pessoas de uma determinada região e efetuou uma pesquisa perguntando Nome, idade, sexo, se trabalha, e quantos salários mínimos recebem por mês. Elaborar um algoritmo para determinar:
• A quantidade de pesquisas realizadas por sexo (quantos homens e quantas mulheres foram entrevistados)
• A quantidade pessoas menores de 18 anos que trabalham • A renda média dos homens
• A renda média das mulheres
• Nome e Renda da pessoa que trabalha e que tem a menor renda
• Quantidade de pessoas que não trabalham • A média de idade dos entrevistados
Considere:
Nome = “FIM” indica que já foram lidos todos as pesquisas ou seja, é a condição de parada do algoritmo.
Sexo vai ser informado como “M” ou “F”; Idade deverá estar entre 00 e 100 anos
Se trabalha deverá receber um valor lógico, ou seja, V ou F (verdadeiro ou falso)
15) Escreva um programa que apresente a série de Fibonacci até o décimo quinto termo. A série de Fibonacci é formada pela seqüência: 1, 1, 2, 3, 5, 8, 13, 21,34, ... etc. Consegue ver a lógica de criação da mesma? Pense um pouquinho, não é tão
difícil assim!
16) Faça um algoritmo para calcular e escrever a soma da seguinte série:
Soma = (X25 / 1) – (X24 /2) + (X23 /3) – (X22 /4) +. . . + (X /25) 17) Uma empresa de compras através da Internet decidiu realizar
uma pesquisa entre os seus clientes para determinar o perfil dos mesmos. Considerando uma amostra de 200 clientes, faça um algoritmo que leia o nome, a idade de seus clientes e se eles têm acesso à Internet e forneça como resultado:
• A média de idade dos clientes; • A quantidade de mulheres;
• Quantas pessoas têm acesso a Internet.
• O nome e a idade do homem mais velho que tem acesso a Internet
• O nome e a idade da mulher mais nova.
Resumo
A linguagem algorítmica é uma das formas de representação de algoritmos mais utilizadas. Porém, ela não é padronizada. Logo, adotamos na nossa disciplina a linguagem algorítmica utilizada dentro da ferramenta VisuAlg, que usaremos depois para executar nossos algoritmos.
Para começar a construir o algoritmo em linguagem algorítmica precisamos sempre identificar as três fases de um programa: entrada,
em variáveis. As variáveis podem ser de quatro tipos diferentes: inteiro (para valores numéricos sem parte decimal), real (para valores numéricos com parte decimal), caracter (para letras, números e símbolos) e lógico (que só pode assumir valor verdadeiro ou falso). Nós podemos colocar valors diretamente nas variáveis pelo comando de atribuição ou podemos fazer a leitura dos dados usando o comando Leia(nomevariável). Esse comando pega valores do teclado, leitores de código de barras, etc e armazena nos espaços da memória do computador, nomeados pelas variáveis.
É na fase de processamento que são realizados os cálculos dos algoritmos. Por isso, nessa parte você vai fazer uso de operadores e expressões. Os operadores podem ser do tipo aritmético (+, -, *, /, \, MOD, ^), relacional (<, >, <=, >=, <>, =), lógico (não, e, ou), de atribuição (<-) e de caracter (+ significando concatenação de valores).
A parte de processamento pode fazer uso de:
• estruturas seqüenciais - onde um comando vem atrás do outro e eles são executados, sequencialmente, seguindo a ordem de aparição.
• estruturas de decisão ou condicionais, que podem ser de quatro tipos: condicionais simples (se-então), condicionais compostas (se-então-senão), condicionais aninhadas (quando colocamos estruturas condicionais, dentro de estruturas
condicionais) e de decisão múltipla (escolha)
• estruturas de repetição – que podem ser de dois tipos, condicionais ou contada. As condicionais podem realizar o teste no início (enquanto/faça) ou no final (repita/até). Elas costumam ser usadas quando não se sabe quantas vezes será preciso repetir um determinado bloco de comandos. A estrutura de repetição contada é usada quando se sabe o número de repetições e é representada pelo comando para/faça.
Qualquer uma das estruturas podem ser utilizadas juntas, colaborando para a resolução do problema.
Já na fase de SAÍDA, geralmente, se imprimem valores ou mensagens na tela. Para imprimir variáveis, textos ou as duas coisas na tela, se usa o comando escreva(“texto”, variável).
dados. Eles servem para agrupar dados do mesmo tipo ou de tipos diferentes em conjuntos. E isso vai lhe dar muito mais “poder de fogo” na construção dos algoritmos.
Vice-Reitor: Prof. Reginaldo Barros
Pró-Reitor de Administração: Prof. Francisco Fernando Ramos Carvalho Pró-Reitor de Extensão: Prof. Paulo Donizeti Siepierski
Pró-Reitor de Pesquisa e Pós-Graduação: Prof. Fernando José Freire Pró-Reitor de Planejamento: Prof. Rinaldo Luiz Caraciolo Ferreira Pró-Reitora de Ensino de Graduação: Profª. Maria José de Sena Coordenação de Ensino a Distância: Profª Marizete Silva Santos Produção Gráfica e Editorial
Capa e Editoração: Allyson Vila Nova e Rafael Lira Revisão Ortográfica: Ivanda Martins
Ilustrações: Allyson Vila Nova