TrabalhosGratuitos.com - Trabalhos, Monografias, Artigos, Exames, Resumos de livros, Dissertações
Pesquisar

Resolvendo vários problemas usando algoritmos

Seminário: Resolvendo vários problemas usando algoritmos. Pesquise 860.000+ trabalhos acadêmicos

Por:   •  25/11/2014  •  Seminário  •  2.476 Palavras (10 Páginas)  •  467 Visualizações

Página 1 de 10

ESTRUTURAS DE REPETIÇÃO

1.1 - Preliminares

Existem situações em que processar um valor uma única vez não satisfaz o problema, temos que trabalhar com a mesma informação várias vezes, no mesmo algoritmo.

O que vamos retratar nesta aula diz respeito as estruturas de repetição ENQUANTO, REPITA e PARA FAÇA as quais nos permitem executar um trecho de algoritmo quantas vezes se fizer necessário, manipulando assim a quantidade de informação necessária.

Para exemplificar-mos, suponha o seguinte algoritmo: Um clube tem a anotado a quantidade de latas de cerveja vendidas no último carnaval. Sabendo que cada lata foi vendida a 1.40, faça um algoritmo para saber o total arrecadado, no último carnaval com latas de cerveja.

Algoritmo Clube

Variáveis

Qtidade_lata : Inteira

Valor_total : Real

Inicio

Leia Qtidade_lata

Valor_total := Qtidade_lata*1.40

Escreva Valor_total

Fim

Ao observar-mos este algoritmo, conforme o enunciado ele está perfeito. Porém, se alterarmos o enunciado e pedirmos o valor arrecadado com latas de cerveja vendidas nos 3 últimos carnavais teríamos:

Algoritmo Clube

Variáveis

Qtidade_lata1, Qtidade_lata2, Qtidade_lata3 : Inteira

Valor_total : Real

Inicio

Leia Qtidade_lata1

Leia Qtidade_lata2

Leia Qtidade_lata3

Valor_total := Qtidade_lata*1.40

Escreva Valor_total

Fim

Imagine que fosse pedido o valor arrecadado com a venda de latas de cerveja dos 30 últimos carnavais! Teríamos que ter 30 instruções de leitura!? Assim, para que não tenhamos que passar este trabalho, vamos inserir neste capítulo as estruturas de repetição. Aliás, em programação, sempre que você estiver passando trabalho, "mão de obra ", pare e pense ou pesquise, com certeza existe uma maneira mais fácil de fazer.

1.2 - Enquanto Faça

Com o que estudamos até aqui, poderemos resolver vários problemas através de algoritmos, no entanto, existem situações impossíveis ou, causariam no mínimo, o dobro de trabalho para se resolver. Para que se torne mais claro vamos exemplificar.

ExeRes5.1 Fazer um algoritmo que leia o saldo bancário de um cliente e imprima CONTA ESTOURADA se o saldo for negativo e CONTA NORMAL se o saldo for positivo.

Algoritmo ExeRes5.1

VAR

saldo : Número

INÍCIO

Leia saldo

SE saldo < 0 ENTÃO

escreva 'CONTA ESTOURADA'

SEMÃO

escreva 'CONTA NORMAL'

FIM SE

FIM.

Este algoritmo resolveu o problema, no entanto, suponha o problema colocando 100, 1000, ou 10000 clientes, assim, teríamos que repetir este algoritmo (bloco de comandos) quantas vezes fosse o número de clientes. Para isto, existe um comando que repete quantas vezes for necessário um bloco de comandos dentro do seu algoritmo, sem que haja a necessidade de repetir várias vezes o mesmo bloco de comandos, esse comando é o ENQUANTO FAÇA.

Forma Geral do ENQUANTO FAÇA

ENQUANTO condição FAÇA

comando1

comando2

comando3

.

.

.

comandoN

FIM ENQUANTO

Assim como a estrutura de seleção SE tinha uma condição, aqui também temos uma condição.

A estrutura de seleção ENQUANTO FAÇA funciona da seguinte forma: É testada a condição, e desta só pode resultar dois valores possíveis: VERDADE ou FALSO. Se a condição for VERDADE o bloco de comando que está dentro do ENQUANTO é executado. Quando encontrado o FIM ENQUANTO ele retorna para o ENQUANTO e testa novamente a condição. Se a condição for VERDADE ele executa novamente o bloco de comando que está dentro do ENQUANTO, até encontrar o FIM ENQUANTO. Retorna novamente para testar a condição. Se a condição for VERDADE o processo se repete. Se a condição for FALSO ele executará a próxima instrução depois do FIM ENQUANTO.

Já podemos concluir que, se entrarmos no ENQUANTO, temos que tornar FALSO a condição.

No ExeRes5.1, tínhamos um bloco de comando que precisava ser executado N vezes dependendo do número de clientes. Vamos supor o bloco de comando:

Leia saldo

SE saldo < 0 ENTÃO

escreva 'CONTA ESTOURADA'

SENÃO

escreva 'CONTA NORMAL'

FIM SE

Suponha que o banco possua apenas três clientes. Significa temos que ler 3 saldos e verificar se eles são positivos ou negativos, e emitir a mensagem correspondente. Para este algoritmo podemos usar a estrutura de repetição ENQUANTO FAÇA.

Temos 4 maneiras de usar o ENQUANTO FAÇA que são:

Ø Usando um Contador

Ø Usando um FLAG

Ø Lendo o número de vezes a ser executado

Ø Usando um Tipo Lógico

1.2.1 Usando um Contador

O problema anterior pode ser resolvido, quando criamos uma nova variável que conte quantas vezes o bloco de comando foi executado, e esta variável também fará parte de nossa condição.

Assim, se queremos executar o bloco 3 vezes, vamos contar cada execução do bloco e paramos quando esta variável contadora chegar a 3. Veja o ExeRes5.2

Algoritmo ExeRes5.2

VAR

saldo : Número

contador : Número

INÍCIO

contador:= 0

ENQUANTO contador < 3 FAÇA

Leia saldo

SE saldo < 0 ENTÃO

escreva 'CONTA ESTOURADA'

SENÃO

escreva 'CONTA NORMAL'

FIM SE

contador:= contador + 1

FIM ENQUANTO

FIM.

ExeRes5.3 O que mudaria no caso de existir 66 contas ?

Algoritmo ExeRes5.3

VAR

saldo : Número

contador : Número

INÍCIO

contador:= 0

ENQUANTO contador < 66 FAÇA

Leia saldo

SE saldo < 0 ENTÃO

escreva 'CONTA ESTOURADA'

SENÃO

escreva 'CONTA NORMAL'

FIM SE

contador := contador + 1

FIM ENQUANTO

FIM.

Note que a única mudança ocorreu na condição do ENQUANTO foi que passou de 3 para 66.

O que mudaria no caso de existir 500 contas ?

Só teríamos que mudar na condição do ENQUANTO de 66 para 500

O que mudaria no caso de existir 1000 contas ?

Só teríamos que mudar na condição do ENQUANTO de 500 para 1000

O que mudaria no caso de existir 5000000 contas ?

Só teríamos que mudar na condição do ENQUANTO de 1000 para 5000000

No ExeRes5.4 vamos criar um algoritmo que leia o salário dos empregados da Empresa Pica-Pau e calcular a média salarial desta empresa. Para efeito didático suponhamos que esta empresa possua apenas 3 empregados.

Algoritmo ExeRes5.4

VAR

soma_dos_salarios,salario,media : Número

contador : Número

INÍCIO

soma_dos_salarios:= 0

contador:= 0

ENQUANTO contador < 3 FAÇA

leia salario

soma_dos_salarios:= soma_dos_salarios + salario

FIM ENQUANTO

media:= soma_dos_salarios/3

escreva 'média dos salários = ',media

FIM.

Entenda o teste de mesa! Suponha que os salários lidos sejam:

1000,3000,2000

soma_dos_salarios contador salario media

0 0 1000 2000

1000 1 3000

4000 2 2000

6000 3

Note que a estrutura do algoritmo continua a mesma:

Algoritmo ExeRes5.2

VAR

contador : Número

INÍCIO

contador:= 0

ENQUANTO contador < 3 FAÇA

bloco de comando a ser executado

contador:= contador + 1

FIM ENQUANTO

FIM.

A única novidade que surgiu é uma variável que acumulou todos os salários a variável SOMA_DOS_SALÁRIOS. Como se faz para calcular a média das 3 notas de uma determinada matéria.

Primeiro se soma as três notas e só depois é que dividimos por 3, que é a quantidade de notas. Assim:

(nota1 + nota2 + nota3)/3

O raciocínio usado é o mesmo para o algoritmo acima. Primeiro se acumulou todos os salários e só depois é que se achou a média dos salários. Tome muito cuidado pois o cálculo da média jamais seria dentro do enquanto, pois primeiro se acumula os salários e depois de sair do laço do enquanto é que se calcula a média.

1.2.2 Usando FLAG

Uma outra maneira de usar o ENQUANTO FAÇA seria usar um FLAG ou BANDEIRA. O que tínhamos antes era um contador que fazia com que a condição se tornasse FALSO. Agora nós vamos aprender um outro artifício que também torna falso o ENQUANTO FAÇA.

Veja os seguintes conceitos:

FLAG é uma informação igual a que se está lendo, no entanto, não será processada, apenas terá como objetivo tornar a condição do ENQUANTO FAÇA, FALSO.

Em outras palavras, FLAG será uma informação a ser lida que tornará a condição do ENQUANTO FAÇA FALSO.

O FLAG deve ser um valor ABSURDO e que seja do mesmo tipo dos dados a serem lidos.

Vamos resolver o exercício anterior usando FLAG.

ExeRes5.5 Suponha que os salários a serem lidos são: CR$ 1000,00, 3000,00, 2000,00. Assim, temos que ler, além dos dados que serão processados, um dado absurdo que terá como função parar de executar o ENQUANTO, i.é, sair do laço e prosseguir o fluxo do programa (próxima linha após o enquanto).

Qual o melhor FLAG neste caso? Se você respondeu um número negativo, está certo, pois é absurdo alguém ganhar menos alguma coisa. Vamos usar como FLAG o -1.

Algoritmo ExeRes5.5

VAR

soma_dos_salarios,salario,media : Número

INÍCIO

soma_dos_salarios:= 0

Leia salario

ENQUANTO salario <> -1 FAÇA

soma_dos_salarios:= soma_dos_salarios + salario

Leia salario

FIM ENQUANTO

media:= soma_dos_salarios/3

escreva 'média dos salários = ',media

FIM.

O teste de mesa ficaria:

soma_dos_salários

salário media

0 1000 2000

1000 3000

4000 2000

6000 -1

O que fizemos foi trocar um contador por um comando de leitura, a condição se tornará FALSO quando o dado de entrada for -1.

Alerta: Note que quando usamos um contador já sabemos o número fixo de dados que será digitado. Aqui não importa o número de dados a serem digitados, o algoritmo chega ao fim quando for digitado o FLAG -1.

Concluímos que este método é mais flexível que o anterior, pois, no outro devemos saber previamente o número de dados de entrada, enquanto que este não importa.

O algoritmo acima funciona se a quantidade de entradas for nenhuma?

O algoritmo acima funciona se a quantidade de entradas for 6?

O algoritmo acima funciona se a quantidade de entradas for 666?

O algoritmo acima funciona se a quantidade de entradas for 10000?

Funciona sem ter que alterar uma só vírgula, pois o que tornará a condição do ENQUANTO, FALSO será o valor -1. O algoritmo se tornou muito mais flexível.

Algumas perguntas que devem ainda ser respondidas. Por exemplo:

Se estamos lendo várias idades, qual seria o melhor FLAG ?

Se você respondeu um número negativo, muito bem, no entanto, poderia ser um número maior que 200 pois será difícil alguém viver mais que 200.

Se estamos lendo uma lista de nomes de pessoas, qual o melhor FLAG? Se você respondeu 'fim', 'flag', 'xxx' ou ‘sair’ você acertou, é isso aí, deve ser qualquer conjunto de caractere que não venha a ser o nome de uma pessoa, que seja um absurdo e que seja do mesmo tipo.

O FLAG acima poderia ser 16 por exemplo? Não, pois você está lendo um tipo caractere, que é o nome de uma pessoa, e está querendo ler numa variável caractere, tipo número, isso causaria um erro de tipos incompatíveis.

O inverso também não é possível, se estamos lendo uma série de números e querermos usar como FLAG 'fim', isto causaria um erro.

1.2.3 Lendo o Números de Vezes a ser Executado

Uma outra maneira de se resolver o algoritmo anterior é ler a quantidade de dados que o usuário irá digitar. Muitas das vezes em que vai se entrar com os dados, já se sabe de antemão a quantidade. Assim, esta informação pode também ser um dado que o usuário do seu algoritmo pode nos fornecer.

Este método é uma variação do primeiro, pois usa também um contador, a vantagem está em tornar o algoritmo mais flexível. No primeiro método, o usuário entraria com um número de dados já previamente estabelecido, neste o usuário vai informar a quantidade de dados que ele digitará. Veja a resolução do ExeRes5.6

Algoritmo ExeRes5.6

VAR

soma_dos_salarios,salario,media : Número

contador : Número

INÍCIO

soma_dos_salarios:= 0

contador:= 0

Leia N

ENQUANTO contador < N FAÇA

leia salario

soma_dos_salarios:= soma_dos_salarios + salario

FIM ENQUANTO

media:= soma_dos_salarios/3

escreva 'média dos salários = ',media

FIM.

Ocorrem duas mudanças do primeiro para este. Foi colocado um comando de leitura, o qual, o usuário digitará o número de dados que será digitado. Assim, se o usuário tiver 6 dados a serem digitados ele digitará 6 e o laço acontecerá 6 vezes.

Se o usuário tiver 1000 dados a serem digitados ele digitará 1000 e o laço acontecerá 1000 vezes, e assim por diante. A segunda mudança ocorreu na condição do ENQUANTO, que antes era 3 passou agora para aquele valor que o usuário digitar (N). Então, a condição se tornará FALSO quando o contador chegar a N.

Analise o teste de mesa. Suponha que quando for lido o valor de N o usuário digite 3, então, o laço acontecerá 3 vezes. Dentro do laço tem outro comando de leitura que vai ler os salários.

Obviamente, se o usuário digitou para o valor de N 3 ele terá que digitar 3 salários, pois ocorrerá o comando de leitura de salários 3 vezes.

Suponha que os salários lidos sejam: CR$ 1000,00, CR$ 3000,00, CR$ 2000,00

soma_dos_salários contador salário media N

0 1 1000 2000

1000 2 3000

4000 3 2000

6000

1.2.4 - Usando um Tipo Lógico

O uso do tipo lógico como teste da condição do ENQUANTO tem aplicações específicas, no entanto isso não impede que ele seja usado a qualquer momento, só depende de quem for usar.

Pense e responda: qual a resposta que SEMPRE vai resultar do teste de uma condição?

Muito bem: VERDADE ou FALSO

Agora responda: Existe um tipo que armazena somente VERDADE ou FALSO?

Sim, é o tipo Lógico! Então o que aconteceria se fosse declarado uma variável do tipo lógica e lhe fosse atribuída um valor verdadeiro e colocasse essa variável como condição ???

Melhor, veja o ExeRes5.7

Algoritmo ExeRes5.7

VAR

teste : lógica

INICIO

teste:= verdade

ENQUANTO teste FAÇA

escreva 'ETERNO'

FIM ENQUANTO

FIM.

O que acontecerá é que o algoritmo entrará em LOOP, i. é, ficará sempre dentro do ENQUANTO (laço) e não sairá mais.

Você já deve ter concluído que para sair do laço temos que tornar a variável teste FALSO, do contrário ele ficará escrevendo ETERNO eternamente.

Veja uma aplicação do ENQUANTO usando uma variável lógica. No capítulo passado fizemos um algoritmo que mostrava um menu na tela e pedia qual o tipo de operação a ser feita e então calculava.

No entanto, se quiséssemos fazer uma nova operação tínhamos que executar o algoritmo novamente. Usando o ENQUANTO vamos criar mais uma opção que fará a condição do enquanto se tornar falso. Execute o algoritmo ExeRes5.8

Algoritmo ExeRes5.8

VAR

a,b,resultado : Número

chave : lógica

escolha : caractere

INÍCIO

chave:= verdade

ENQUANTO chave FAÇA

escreva 'ESTE ALGORITMO CALCULA O RESULTADO DE'

escreva 'OPERAÇÕES MATEMÁTICAS SOBRE DOIS VALORES'

escreva 'Entre com o primeiro valor - '

leia a

escreva 'Entre com o segundo valor - '

leia b

escreva 'Escolha uma das seguintes opções '

escreva '+ Soma os dois valores'

escreva '- Subtraem o segundo valor do primeiro valor'

escreva '* Multiplica os dois valores'

escreva '/ Divide o primeiro valor pelo segundo valor'

escreva 'F Para finalizar o Algoritmo'

escreva 'Entre com a opção -'

leia escolha

CASO escolha DE

'+' : resultado:= a + b

escreva 'O resultado e ',resultado:10:2)

'-' : resultado:= a - b

escreva 'O resultado e ',resultado:10:2)

'*' : resultado:= a * b

escreva 'O resultado e ',resultado:10:2)

'/' : resultado:= a / b

escreva 'O resultado e ',resultado:10:2)

'F' : chave:= falso

SENÃO

escreva 'Sua opção foi indefinida'

FIM CASO

FimEnquanto

ESTE ALGORITMO CALCULA O RESULTADO DE

OPERAÇÕES MATEMÁTICAS SOBRE DOIS VALORES

Entre com o primeiro valor - ###

Entre com o segundo valor - ###

Escolha uma das seguintes opções

+ Soma os dois valores

- Subtraem o segundo valor do primeiro valor

* Multiplica os dois valores

/ Divide o primeiro valor pelo segundo valor

F Para finalizar

Entre com a opção

O resultado é @@@@@

FIM do ALGORITMO

# - valores lidos (Entrada)

@ - resultado obtido pelo algoritmo (Saída)

O que acontecerá é que ENQUANTO não for digitado a tecla F a variável lógica CHAVE nunca se tornará falso e conseqüentemente nunca sairá do algoritmo. Então quando o usuário quiser sair do algoritmo terá que digitar F para poder executar o comando chave:= falso.

VOLTAR PARA SUMÁRIO PRÓXIMO TÓPICO

...

Baixar como  txt (16.7 Kb)  
Continuar por mais 9 páginas »