Cursos de Informática Grátis www.megainforcursos.com

10 de agosto de 2012

Repetiçoes (Aula 4)


Repetiçõeses
(Aula 4)
Uma das grandes vantagens da programa��o � que podemos agrupar c�lculos repetidos e informar ao computador atrav�s da linguagem de programa��o que trechos deve repetir, quantas vezes ou em que condi��es. Para entender melhor vamos resolver o seguinte problema.
Problema
Calcular e mostrar o quadrado de todos os n�mero inteiros de 1 at� 100
Solu��o
O problema de calcular o quadrado de um n�mero j� vimos na segunda aula. Seja N o n�mero e Q o seu quadrado, portanto Q=N*N.
Como seria a seq��ncia de procedimentos para calcular o quadrado dos primeiros 100 n�meros inteiros? Uma solu��o simples seria trocar o valor de N em todo momento, como mostra o algoritmo 1. Em vez de atribuir o valor de N em todo momento tamb�m podemos calcular somando 1 a seu valor anterior, como mostra o algoritmo 2.
Algoritmo 1
1. Atribuir  N = 1
     2. Calcular  Q = N*N
     3. Mostrar  Q 
	
     4. Atribuir  N = 2
     5. Calcular  Q = N*N
     6. Mostrar  Q 
	
     7. Atribuir  N = 3
     8. Calcular  Q = N*N
     9. Mostrar  Q 
	
    10. Atribuir  N = 4
    11. Calcular  Q = N*N
    12. Mostrar  Q 
	
    ..............
    
---> 
  
Algoritmo 2
1. Atribuir  N=1
     2. Calcular  Q=N*N
     3. Mostrar  Q 
	
     4. Adicionar 1 a N
     5. Calcular  Q=N*N
     6. Mostrar  Q 
	
     7. Adicionar 1 a N
     8. Calcular  Q=N*N
     9. Mostrar  Q 
	
    10. Adicionar 1 a N
    11. Calcular  Q=N*N
    12. Mostrar  Q   
	
    ..............
	
Olhando os dois algoritmos vemos que o programa seria muito longo para calcular o quadrado dos 100 n�meros. Existe uma forma mais curta de dizer ao computador para resolver este problema? Olhando o algorimo 2 percebemos que a partir da linha 4 os comandos se repetem a cada tr�s linhas. Portanto pedimos ao computador simplesmente para repetir o seguinte trecho:
Adicionar 1 a N
        Calcular  Q=N*N
        Mostrar  Q 
Como resultado temos o algortimo 3 mostrado abaixo. Por�m existe um problema, precisamos indicar ao computador quantas vezes deve repetir o trecho. Uma forma de fazer isso � colocando uma condi��o. Neste caso a condi��o seria: repetir o trecho enquanto N for menor ou igual a 100 como est� escrito no algoritmo 4.
Algoritmo 3
1. Atribuir  N = 1
   2. Calcular  Q = N*N
   3. Mostrar  Q 
   4. Repetir o seguinte trecho
   5.    Adicionar 1 a N
   6.    Calcular  Q = N*N
   7.    Mostrar  Q 
	
---> 
  
Algoritmo 4
1. Atribuir  N=1
    2. Calcular  Q=N*N
    3. Mostrar  Q 
    4. Repetir enquando N <= 100
    5.    Adicionar 1 a N
    6.    Calcular  Q=N*N
    7.    Mostrar  Q 	
	
Observando o algoritmo 4 notamos que ainda tem linhas repetidas. Ser� poss�vel fazer ainda mais curto este algoritmo? Em algumas situa��es � poss�vel reduzir ao m�ximo o n�mero de linhas do algoritmo ou programa. Para isso vamos precisar um pouco de nossa criatividade e muitas vezes mais da experi�ncia. Voc� mesmo perceber� isso quando fizermos mais exerc�cios. Voltando ao nosso algoritmo, podemos fazer uma pequena altera��o no valor de N e eliminar as linhas 2 e 3. Se Inicializamos o N com zero, o quadrado de 1 poder� ser calculado dentro do bloco de repiti��o e teremos um algoritmo reduzido.
Algoritmo
1. Atribuir  N=0
         2. Repetir enquando N <= 100
         3.     Adicionar 1 a N
         4.     Calcular  Q=N*N
         5.     Mostrar  Q 	  
No Pascal utilizamos Comando WHILE...DO para indicar ao computador que vamos repetir um trecho do programa enquanto uma condi��o for satisfeita. Vejamos como fica o algoritmo na linguagem Pascal.
Programa
Program quadrados;
     Var   N,Q: Integer;
     Begin
         N:=0;
         While(N <=100) do 
         Begin
             N:=N+1;
             Q:=N*N;
             Writeln('o quadrado de ', N, 'eh', Q);
         End;
     End.
	
Observando o programa vemos que al�m do While...Do aparecem outras duas palavras reservadas da linguagem que j� conhecemos: o Begin...End. Neste caso, estas palavras s�o utilizadas para informar ao computador onde come�a e acaba o trecho do programa que precisa ser repetido. O formato geral do comando WHILE � o seguinte:
WHILE condi��o DO 
BEGIN
   blocos de comandos
END;
Entrada de dados
At� agora vimos uma forma de entrada de dados usando apenas atribu��o. Nesta aula vamos aprender uma outra forma de entrada de dados bastante utilizada. � muito trabalhoso ter que ir ao programa e mudar os valores dos dados cada vez que desejamos fazer c�lculos com novos dados. Por exemplo, no programa da m�dia temos que alterar os valores de N1, N2 e N3 se quisermos calcular a m�dia das notas de outro aluno. Ficaria mais f�cil se pud�ssemos informar isso durante a execu��o do programa. Cada vez que o programa precisar dos dados n�s fornecer�amos atrav�s do teclado. Para fazer isso em Pascal existe o comando chamadoReadln.
Este comando l� os dados do teclado quando n�s digitamos as letras e os n�meros. Por exemplo, se desejamos que o computador leia o valor de N1 do teclado, n�s escrevemos a seguinte linha:
Readln(N1);
Neste caso, o computador vai esperar que n�s digitemos o n�mero e apertemos a tecla ENTER para ler o n�mero.
Como seria o programa da m�dia que l� as notas do teclado?
Para saber a resposta vamos alterar o programa da m�dia da aula anterior.
Programa
Program resultado;
     Var N1,N2,N3 : Real;
             S, M : Real;
     Begin
         Readln(N1);
         Readln(N2);
         Readln(N3);
         S:=N1+N2+N3;
         M:=S/3;
         If(M >= 5) Then
             Writeln('aprovado')
         Else
             Writeln('reprovado');
     End.
Para treinar o que foi aprendido nesta aula vamos resolver um outro problema
Problema
A Bolsa de Valores de S�o Paulo tem um �ndice que mede o quanto a maioria das a��es vale, levando em conta a import�ncia relativa de cada empresa na bolsa. Esse �ndice e atualizado todos os dias.
O �ndice pode mudar devagar (1,5% ao dia, por exemplo) ou muito r�pido (3% ao dia seria muito r�pido). Voc� quer saber se o �ndice costuma "cair r�pido" mais do que "subir r�pido".
Fa�a um algoritmo que leia os percentuais de cada dia, e apenas para os dias em que o �ndice variou mais de 1%, conte ou "mais uma subida" ou "mais uma queda". O algoritmo termina quando o usu�rio entrar "-100".
Ao final da execu��o, o algoritmo deve mostrar o n�mero de subidas e quedas bruscas.
Resposta:
Vamos supor que V seja o valor percentual das subidas ou quedas. Este valor vamos informar ao computador cada dia. Depois de v�rios dias, quando desejamos saber quantas quedas e subidas acima de 1% teve a bolsa, digitamos -100. Portanto o -100 � a condi��o para finalizar o c�lculo. Tamb�m precisamos guardar o n�mero de subidas e quedas, para tanto vamos utilizar as vari�veis Subidas e Quedas. O algoritmo seria o seguinte.
Algoritmo
Subidas=0
       Quedas=0
       Leia V
       Enquanto V n�o for -100
           Se V maior 1 ent�o
               Adicione 1 a Subidas
           Se V menor que -1 
               Adicione 1 a Quedas
           Leia V
       FimEnquanto
O programa correspondente ao algoritmo � o seguinte:
Programa
Program bolsa;
  Var V: real;
      Subidas, Quedas: integer; 
  Begin
     Subidas := 0;
     Quedas := 0;
     While (V <> -100) do
     Begin
        Readln (v);
        If (V > 1) Then
           Subidas := Subidas + 1;
        If (V < -1) Then
           Quedas := Quedas + 1;
     End;
     writeln ('Dias em que o indice subiu: ', subidas);
     writeln ('Dias em que o indice caiu: ', quedas);
  end.
Exerc�cios
  1. Voc� n�o ficou contente com o algoritmo para analisar o �ndice da bolsa de valores. Agora voc� quer saber tamb�m quanto, na m�dia, foi o percentual das mudan�as repentinas no �ndice. Modifique o programa anterior para que ele mostre o seguinte:
    �ndice subiu muito : NNN vezes (em m�dia NN% a cada subida brusca)
    �ndice caiu muito : NNN vezes (em m�dia NN% a cada queda brusca)
  2. n�meros primos: se dice que um n�mero � primo se este � divisivel apenas por 1 e ele mesmo, por exemplo, 17 � um n�mero primo, enquanto o 15 n�o � primo, ja que � divisivel por 3 e 5. Os n�meros primos tem sido bastante usados na criptografia, por exemplo, para a transmiss�o mais segura de informa��es secretas. Imagina, por exemplo que desejamos transmitir pela internet uma mensagem contendo senha de acesso � conta do um banco, se enviamos sem codificar, existe a posibilidade de alguem interceptar a nossa mensagem e ficar sabendo nossa senha. Os n�meros primos s�o usados justamente para codificar uma mensagem e transmitir pela internet sem que outros possam desifrar o conteudo da mensagem. A vantagem de usar os n�meros primos se deve ao fato que � dif�cil saber se um n�mero grande (mais de 100 d�gitos) � primo ou n�o. Fa�a um algoritmo que tenha como entrada um n�mero N, e mostre os n�meros primos at� esse n�mero.
  3. Fa�a agora um algoritmo que, dados n�meros de zero at� um m�ximo, mostre a soma de todos os n�o-primos, subtra�da da soma dos primos.
  4. O fatorial de um n�mero N � o produto de todos os n�meros de 1 at� N. Por exemplo, o fatorial de 4 � 4x3x2x1 = 20. O computador sabe fazer as opera��es b�sicas, porem n�o sabe como calcular o fatorial de um n�mero. Fa�a um programa para o computador calcular o fatorial de N=10.
  5. Na aula anteior j� vimos como determinar se um n�mero � divisivel por outro. Fa�a um programa para calcular a soma de todos os n�meros inteiros menores que 100 e que n�o sejam divis�veis por 3.
As solu��es voce encontra aqui.
Algumas considera��es
  • Os comandos IF e While podem ter mais de uma condi��o, unidos por OR ou AND. Por exemplo:
    WHILE (N >0 AND N <100 ......="......" begin="begin" do="do" end="end" pre="pre">Isso significa que o bloco dentro do While sera repetido enquando o N for maior que 0 E menor que 100.
  • Em um mesmo comando Readln podemos ler mais de um dado, por exemplo a leitura de dados no programa da media pode ser escrito ainda como:
    Readln(N1,N2,N3);
      
  • como calcular o resto de uma divis�o? No pascal existe um operador chamado mod, que calcula o resto de uma divis�o. Por exemplo:
    10 mod 3 � igual a 1

    O operador mod � util para saber se um n�mero � divisivel por outro. Por exemplo para saber se 50 � divisivel por 4, calculamos o 50 mod 4. Como o resultado e igual a 2, conclu�mos que 50 n�o � divisivel por 4. Para um n�mero ser divis�vel por outro, o resto da divis�o deve ser igual a zero

0 comentários:

Postar um comentário

 
Design by Wordpress Theme | Bloggerized by Free Blogger Templates | coupon codes