sexta-feira, 31 de maio de 2013

Estruturas de repetição (1)


       Olá! Boa noite! Hoje darei início aos posts abordando também as estruturas de repetição. Elas podem ser o For(para), While (Enquanto) e Do-While(Faça-Enquanto). Basicamente a diferença entre o For e as estruturas While, é que o primeiro é geralmente usado para problemas em que se sabe quantas iterações (repetições) serão realizadas, e que a realização dessas não depende de outra condição inicial. Já as estruturas While são usadas para quando se quer uma contagem indefinida, por exemplo procurar uma solução de equação ou problema de Programação Linear*. Ou seja, quando uma solução é encontrada o While pára automaticamente.

       As estruturas tem as seguintes "caras":
              
              For(Inicialização;Limite;Incremento){Comandos;}
          
              While(Condição){Comandos;}

              Do{Comandos;}While(Condiçao);

       Há ainda a diferença entre While e Do-While que é o seguinte: o While só executa se a condição for atendida. O Do-While executa pelo menos uma vez, ainda que sua condição não esteja satisfeita, e então, se for este o caso, pára. Ou seja:


Programa 2: While e Do-While em C

  1.               #include<stdio.h>
  2.               
  3.               int main(){

  4.                                int i=6;

  5.                                while(i==2){
  6.                                                    i=i*3;
  7.                                                    printf("\n\n%d\n\n",i);
  8.                                                   }//Este loop nunca irá rodar

  9.                                do{
  10.                                       i=i*5;
  11.                                       printf("\n\n%d\n\n",i);
  12.                                      }while(i==2); // Este loop será executado e trará resposta 30 na tela.
  13.                                
  14.                                system("pause");
  15.                                return 0;
  16.                               
  17.                               }

      Entretanto, pensei esse post para falar mais do For, na sequência lançar outros sobre While/Do-While e mais tarde mais aplicações dos três...
    O For, como já foi dito, tem a seguinte "cara": For(Inicialização;Limite;Incremento){Comandos;}. A inicialização, é de onde partirá a "contagem", o limite é até onde ela vai, e o incremento de qual valore ela vai ser acrescida ou decrescida a cada repetição. Imagine o seguinte, um algoritmo que diga para subir uma escada de 30 degraus, um a um. Logo, você parte do primeiro degrau ( 0 ), chega ao último degrau (29) e sobe de um em um (i++). Seria algo mais ou menos assim:

Programa 3: For básico em C
  1.               #include<stdio.h>
  2.               
  3.               int main(){

  4.                                int i=0;

  5.                                for(i=0;i<30;i++){//(Inicialização;Limite;Incremento)
  6.                                                              printf("\n\n%d\n\n",i);
  7.                                                             }//Este loop executa 30 passos, do 0 ao 29.

  8.                                
  9.                                system("pause");
  10.                                return 0;
  11.                               
  12.                               }
    Note que o a variável de repetição, i, na linguagem C tem que ser declarada antes da estrutura For. Também é bom notar que o limite imposto NUNCA é atingido. Por exemplo, se o limite é 30, os loops vão até i = 29! Parece óbvio, pois olhando o sinal, o limite é menor que 30. Entretanto essa é uma característica do For que pode trazer resultados errados ao seu programa, se você se esquecer dela. 
      Há também o For usado com decremento, ou seja diminuindo. Imagine agora, que você quer descer a mesma escada que acabou de subir, o programa fica quase igual, exceto pela linha 7:

      7.                                for(i=30;i>0;i--){//(Inicialização;Limite;Incremento)

    Nesse For, o i começa de fato em 30, decresce um a um, chega em 1 e pára. É o chamado For Backward (de trás pra frente). O anterior é o For Foward.
      Na maior parte das vezes, usa-se o for para contagens, para adicionar dados a algum problema, para realizar testes nos programas, etc... A seguir um exemplo simples:

Programa 4: Fatorial com For em C
  1.               #include<stdio.h>
  2.               
  3.               int main(){

  4.                                int i=0,s=1;

  5.                                for(i=1;i<11;i++){//(Inicialização;Limite;Incremento)
  6.                                                            s*=i; // A cada repetição, s é multiplicada por i.
  7.                                                             }//Este loop executa 10 passos, do 1 ao 10.

  8.                                printf("\n\n%d\n\n",i);//Saída 3628800

  9.                                
  10.                                system("pause");
  11.                                return 0;
  12.                               
  13.                               }
Observações:

    Programação Linear é uma área da otimização, que utiliza uma função objetivo, e restrições lineares. Ou seja, problemas do tipo maximizar lucro de uma fábrica que possui "x" funcionários e precisa produzir "y".
    
    Os sinais "++","--" são alternativos para "i=i+1" e "i=i-1". Já " s*=i " é o mesmo que " s=s*i ". Isso funciona da mesma forma para " s+=i ", " s-=i "...

    A seguir alguns bons livros sobre C/C++:

      Introdução à programação. 500 Algoritmos resolvidos. Por Anita Lopes e Guto Garcia.
      Guia C++ para Iniciantes por Herbet Schildt.
      C Completo e Total por Herbert Schildt.

Proposta: Tente, usando o For, resolver o seguinte problema de Programação Linear.

    A Capitão Caverna S.A., localizada em Pedra Lascada, aluga 3 tipos de barcos para passeios marítimos: jangadas, super-canoas e arcas com cabine. A companhia fornece juntamente com o barco um capitão para navegá-lo e uma tripulação que varia de acordo com a embarcação: uma para jangadas, duas para super-canoas e três para arcas. 
    A companhia tem 4 jangadas, 8 super-canoas e 3 arcas; e em seu corpo de funcionários: 10 capitães e 18 tripulantes.
    O aluguel é por diárias e a Capitão Caverna lucra $50 por jangada, $70 por super-canoa e $100 por arca.

    Objetivo: Maximizar o lucro obedecendo as restrições impostas.
(Resposta 4 jangadas, 4 super-canoas, 2 arcas, lucro $ 680)
Solução: Programa 5 - Barcos Otimização


Bom fim de semana à todos!

Nenhum comentário:

Postar um comentário