Programação Progressiva
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Programação Progressiva

Fórum para dúvidas dos sites: Programação Progressiva, Java Progressivo, C Progressivo


Você não está conectado. Conecte-se ou registre-se

SOLUÇÕES - Questões usando o laço WHILE - Resolvido

2 participantes

Ir para baixo  Mensagem [Página 1 de 1]

miroko



Boas a todos,

Comecei a fazer o curso recentemente, e devido a algumas dúvidas vim aos forums em busca de utilizadores com as mesmas duvidas que eu.

Mas reparei que infelizmente não há muita actividade no forum e a informação referente a resolução de exercícios está muitos dispersa.

Não por culpa dos administradores, mas porque quem posta normalmente abre um tópico novo.

Por isso decidi colocar aqui de forma a que todos possam consultar as soluções dos exercícios

"Questões usando o laço While"

Atenção:

Como o Administrados diz no início do curso, há várias soluções para qualquer problema, o código aqui descrito foi o meu jeito de resolver esses exercícios.Aconselho a tentar resolver do vosso jeito e usem as soluções para tirar duvidas.

Se alguém tiver alguma dúvida é só postar

Não se esqueçam, eu comecei o curso recentemente, por isso não tenho muita experiência, se tiver alguma dica de como eu optimizar os meus códigos e só falar que eu agradeço.

PS: eu faço copy/paste do meu código directo do editor, dependendo do tipo de browser que está usando, por vezes pode parecer confuso, por isso em caso de dúvida aconselho a fazer copy do meu código exactamente como está e em seguida paste no vosso editor, que assim vai aparecer exactamente como aparece na minha tela.


- exercício 0 - Programa em Java dos patinhos da Xuxa

Código:

package whileexecontarpatinhos;

import java.util.Scanner;

public class Whileexecontarpatinhos {

  
    public static void main(String[] args) {
      
        
Scanner entrada = new Scanner (System.in);
        
int patos_iniciais;
      


System.out.println("Vou cantar uma canção, mas preciso de ajuda!");
        
System.out.println("Preciso que escolha um numero de 1 a 20!");
        
patos_iniciais = entrada.nextInt();
        
int patos_var = patos_iniciais;
        
            

             if ((patos_iniciais >=1) && (patos_iniciais <=20)) {
                
            
              
                      while (patos_var != 1)  {
                    
                    

                        System.out.println(patos_var + "  patinhos foram passear");
                    
                        System.out.println("Além das montanhas");
                    
                        System.out.println("Para brincar");
                    
                        System.out.println("A mamãe gritou: Quá, quá, quá, quá Mas só  " + (patos_var-1) + " patinhos");
                    
                        System.out.println("voltaram de lá.");
                    
                    
                
                        patos_var--;
                    }
                
                  

                                if (patos_var == 1)  {                      
                      

                                        System.out.println( + patos_var + " patinho foi passear");
                      
                                        System.out.println("Além das montanhas");
                      
                                        System.out.println("Para brincar");
                      
                                        System.out.println("A mamãe gritou: Quá, quá, quá, quá Mas nenhum patinho");
                      
                                        System.out.println("voltou de lá.");
                      
                      

                                        patos_var--;
                                }
                        
                        

                                            if (patos_var == 0) {
                            
                                                    System.out.println("A mamãe patinha foi procurar");
                            
                                                    System.out.println("Além das montanhas");
                            
                                                    System.out.println("Na beira do mar");
                            
                                                    System.out.println("A mamãe gritou: Quá, quá, quá, quá");
                            
                                                    System.out.println("E os " + patos_iniciais + " patinhos voltaram de lá.");
                            
                            
                                            }
                
                
            } else {
                    

                    System.out.println("Desculpe mas tem de ser um numero entre 1 a 20!");
                    
                    System.out.println("Terminando programa...tente de novo!!!");
              
            }
      
    }
    
}


exercício 1 - Programa em Java que mostra os números ímpares

Código:

package whileparimparate100;


public class Whileparimparate100 {

  
    public static void main(String[] args) {
    
     int count=0;
      
        
        System.out.println("Calculando todos os nº impares de 1 a 100....");
        System.out.println(".............................................");
      
        
        
           while (count <= 100) {
              
                 if (count %2 !=0) {
                   System.out.println(count);

                 }
                 count++;
           }
    }
    
}


exercício 2 - Programa em Java que mostra os números pares

Código:

package whilepar1a100;


public class Whilepar1a100 {

  
    public static void main(String[] args) {
    
        
        int count=0;
      
        
        System.out.println("Calculando todos os nº pares de 1 a 100....");
        System.out.println(".............................................");
      
        
        
           while (count <= 100) {
              
                 if (count %2 ==0) {
                   System.out.println(count);

                 }
                 count++;
           }
    }
    
}


exercício 3 -Programa em Java que mostra os números pares e ímpares

Código:

package whileparimparaomesmotempo;


 import java.util.Scanner;

public class Whileparimparaomesmotempo {

  
    public static void main(String[] args) {
      
       Scanner entrada = new Scanner (System.in);
        int operacao;
        int num;
        int countimp=1;
        int countpar=1;
        
         System.out.println("para saber todos os numeros pares e impares ate ao");
         System.out.println("numero que digitou!!!");
         System.out.println();
         System.out.println("Escolha uma opção: 0 = saber pares e impares || 1 = saber impares || 2 = saber pares");
           operacao = entrada.nextInt();
        
           if (( operacao >=0) && (operacao <=2)) {
              
          
         System.out.println("Digite um numero por favor....");
          num = entrada.nextInt();
          
                  if (operacao == 0) {
          System.out.println("imprimindo impares de 0 a " + num);
                          while (countimp <= num) {
                  
              
                                if (countimp % 2 != 0) {
                                System.out.println("Ímpar: " + countimp);
                                }
            
                            countimp++;
                          }
        
                                System.out.println("imprimindo pares de 0 a " + num);
                                     while (countpar <= num) {
                    
                                            if (countpar % 2 == 0) {
                                                 System.out.println("Par: " + countpar);
                                            }
                
                                        countpar++;
                                     }
          
          
                  }
                    
                    if (operacao == 1) {
                        System.out.println("imprimindo impares de 0 a " + num);
                          while (countimp <= num) {
                  
              
                                if (countimp % 2 != 0) {
                                System.out.println("Ímpar: " + countimp);
                                }
            
                            countimp++;
                          }
                    }
                    
                    
                      if (operacao ==2) {
                            System.out.println("imprimindo pares de 0 a " + num);
                                     while (countpar <= num) {
                    
                                            if (countpar % 2 == 0) {
                                                 System.out.println("Par: " + countpar);
                                            }
                
                                        countpar++;
                                     }
                      }
          
          
           } else {
               System.out.println("Desculpe, mas so pode escolher 0, 1 ou 2 como opção. Terminando programa. Tente de novo");
           }
                
      
    }
    
}

exercico 4 - Programa em Java que calcula a média das notas de uma turma

Código:

package whilemediadaturma10entradas;



import java.util.Scanner;

public class Whilemediadaturma10entradas {

  
    public static void main(String[] args) {
        
       Scanner entrada = new Scanner(System.in);
      
       float media;
       float totalfinal=0;
       int alunos;
       int count=1;
       float nota;
      
      
       System.out.println("Vamos saber a média da sua turma!");
       System.out.println("Insira o numero total de alunos da sua turma...");
        
       alunos = entrada.nextInt();
      
      
            while  (count <= alunos)  {
                System.out.println("Insira a nota do aluno " + count);
                nota = entrada.nextFloat();
                
                totalfinal = (totalfinal + nota);
                
                count++;
                
            }
                media = (totalfinal / alunos);
                System.out.printf("\nMédia da turma = soma de todas as notas : alunos -->  %.2f : %d = %.2f\n", totalfinal, alunos, media);
                
                System.out.printf("\nA média da turma é: %.2f\n", media);
        
    }
    
}

exercício 5 - Achando o maior número

Código:

package whilequalomaiorde10entradas;


import java.util.Scanner;

public class Whilequalomaiorde10entradas {

  
    public static void main(String[] args) {
      
    Scanner entrada = new Scanner (System.in);
    
    
    int count=2;
    int prox;
    int maior;
    int comparar;
    
    System.out.println("Vamos descubrir qual o maior numero de uma lista ");
    System.out.println("Quantos numeros quer comparar?");
        comparar = entrada.nextInt();
        
    System.out.println("Insira o primeiro numero");
        maior = entrada.nextInt();
        
        while (count <= comparar) {
               System.out.println("insira o " + count + " numero");
        prox = entrada.nextInt();
        
               if (prox > maior) {
                   maior = prox;
              
              
               }
         count++;
        }
            System.out.println("o maior numero digitado foi " + maior );
        
    }
    
}

exercício 6 - Achando os dois maiores números

Código:

package while2maioresdeumalista;


import java.util.Scanner;


public class While2maioresdeumalista {

  
    public static void main(String[] args) {
        
        
        Scanner entrada = new Scanner (System.in);
    
    
    int count=2;
    int prox;
    int maior;
    int comparar;
    int maior2=0;
    
    System.out.println("Vamos descubrir qual o maior numero de uma lista ");
    System.out.println("Quantos numeros quer comparar?");
        comparar = entrada.nextInt();
        
    System.out.println("Insira o primeiro numero");
        maior = entrada.nextInt();
        
        while (count <= comparar) {
               System.out.println("insira o " + count + " numero");
        prox = entrada.nextInt();
        
               if (prox > maior) {
                   maior2 = maior;
                   maior = prox;
              
               } else {
                   if (prox > maior2) {
                       maior2= prox;
                   }
               }
              
         count++;
        }
        
             System.out.println("o maior numero digitado foi " + maior );
             System.out.println("o 2º maior numero digitado foi " + maior2 );
        
    }
    
}

exercício 7 - Quadrado de asteriscos

Decidi comentar este código, pois demorei muito até encontrar a lógica necessária. Confesso que até agora foi o exercício que mais dificuldades me criou. Imagino que os colegas que se estão a iniciar se vão deparar com as mesmas barreiras lógicas que eu. Por isso esqueci um pouco os conselhos do prof em não comentar demasiado, e comento quase cada linha de código para que possam perceber como cheguei a essa lógica.

Do jeito que fiz é possível desenhar tanto quadrados como rectângulos. Para isso basta adicionar outra entrada para o utilizador e atribuir esse valor a outra variável "larg"
e usar esta variável para comparar dentro do segundo laço while, ficava while (countlarg <= larg ).

Se não conseguirem mandem uma PM que envio o código para fazer também rectângulos

Código:

package whilequadradocheio;

import java.util.Scanner;

public class Whilequadradocheio {

  
    public static void main(String[] args) {
    
        Scanner entrada = new Scanner (System.in);
        int lado;
        int countalt=1; // contador criado para o primeiro laço while (principal)
                        // este  contador vai controlar o numero de linhas prenchidas com "*"
        
        int countlarg=1; // contador criado para o segundo laço while (secundário)
                         // este contador vai controlar o numero de "*" imprimidos na linha
        
        System.out.println("Vamos desenhar um quadrado");
        System.out.println("insira quantos espaços terá o lado do quadrado...");
        lado = entrada.nextInt();
        
        
        System.out.println();  // quebra de linha estetica
        
            while ( countalt <= lado) {   // vai imprimir a altura do quadrado com quebra de linha
                                         //  conforme o SOUT no fim deste laço while
                
                
                while (countlarg <= lado) { // vai imprimir a largura do quadrado com o nº de "*"
                   System.out.print("*");   // correspondente
                   countlarg++;            
                }                            // ++++++criando uma entrada para o utilizador com um valor
                                           // largura e adicionando essa variavel, poderiamos imprimir
                                            // tanto quadrado como rectangulos++++++++
             System.out.print("\n");
             countalt++;
             countlarg=1;    // precisamos de meter o segundo contador do inicio para quando voltar
            }                // a executar o laço secundario
             System.out.print("\n"); // quebra de linha estetica
        
    }
    
}

exercício 8 -  Quadrado de asteriscos e espaços em branco

neste exercício resolvi usar a sugestão que dei no exercício anterior, e fiz o código para funcionar também com rectângulos. De reparar que usei o código do exercício anterior e acrescentei um if - else com uma regra para imprimir em branco a partir do 2º espaço até ao penúltimo tanto para a altura como para a largura.

o código está comentado nas alterações.

Código:

package whilequadradooco;


import java.util.Scanner;


public class Whilequadradooco {

   public static void main(String[] args) {
    Scanner entrada = new Scanner (System.in);
       int alt, larg;  // em vez de termos 1 so variavel para lado, temos 2 variaveis,
                       // 1 para a altura e outra para largura, assim tambem podemos fazer rectangulos
       int countalt=1;
       int countlarg=1;
       
       System.out.println("Vamos desenhar um quadrado ou rectangulo");
       System.out.println("insira quantos espaços terá a altura...");  // entradas dos valores
       alt = entrada.nextInt();                                        // altura e largura
       System.out.println("insira quantos espaços terá a largura..."); //
       larg = entrada.nextInt();                                       //
       
       System.out.println();  
       
        while ( countalt <= alt) {  
               
               
           while (countlarg <= larg) {
            if ((countlarg >= 2 && countlarg <= (larg - 1))// em relação ao codido do quadrado cheio
            && (countalt >= 2 && countalt <= (alt - 1))){  // a unica coisa que muda é a introdução
            System.out.print(" ");                         // do if else que vai criar uma regra para
            }else{                                         // imprimir em branco a partir do 2º espaço
                                                           // até ao penuntimo tanto para a altura como
             System.out.print("*");                        // para a largura, caso nao esteja entre o 2ª
            }                                              // e o penultimo (sera o primeiro e ultimo)
            countlarg++;                                   // imprime o esterisco
           }                            
                                           
            System.out.print("\n");
            countalt++;
            countlarg=1;    
        }                
            System.out.print("\n");
   }
}


Aqui termino os exercícios com while, e dou seguimento à minha aprendizagem. Assim que iniciar os próximos exercícios que serão os do laço "for" faço novo tópico com as soluções.

Abraço

2SOLUÇÕES - Questões usando o laço WHILE  - Resolvido Empty Exercício 8 Ter Ago 12, 2014 11:48 pm

Robotinic



Eu resolvi desta forma.
Código:

int lado,alt;
int contadorA=0,contadorB=0;

Scanner entrada = new Scanner(System.in);

System.out.println("Digite o tamanho do quadrado: ");

System.out.print("Lado: ");
lado = entrada.nextInt();

System.out.print("Ok, agora altura: ");
      alt = entrada.nextInt();
      
while(lado>contadorA){
      System.out.print("*");contadorA++;}
    
while(alt>contadorB){contadorA=2;
      System.out.println();
      System.out.print("*");
      
while(lado>contadorA){
      System.out.print(" ");contadorA++;}
      System.out.print("*");
      contadorB++;}
      contadorA=0;
      
System.out.println();
      while(lado>contadorA){
      System.out.print("*");contadorA++;}
      
}}

miroko



Ola robotinic,

Pelo que percebi você resolveu criando um while para a primeira linha aparecer cheia,
outro while para imprimir as linhas vazias e por fim outro while para imprimir a ultima linha cheia.

Eu no inicio também estava indo nessa direção mas num dos meus testes surgiu a ideia de usar o if else.

No entanto penso que existe um pequeno bug com seu código, eu testei ele no meu tablet (uso a APP aide ) , e seu código adiciona mais 2 linhas na altura . se escolhermos 7 de altura ele vai imprimir 9 linhas. Não tenho a certeza que seja bug código ou da APP já que por vezes ela se comporta de um modo estranho.

De qualquer maneira amanha já testo no NetBeans e logo vejo qual dos 2 códigos fica mais leve.

4SOLUÇÕES - Questões usando o laço WHILE  - Resolvido Empty Correção do bug Qua Ago 13, 2014 4:39 pm

Robotinic



Bug já consertado, devido a primeira e ultima linha do quadrado acabava somando mais dois. Então alt-=2;
Eu achei bom fazer desta forma que é de fácil leitura, e deu certo você conseguiu ler;
um loop para primeira linha  
um loop dentro                
do outro para o corpo        
um loop para ultima linha    
 
Código:
 
int lado,alt;
int contador=0,contadorb=0;

Scanner entrada = new Scanner(System.in);
System.out.println("Digite o tamanho do quadrado: ");
System.out.print("Lado: ");
lado = entrada.nextInt();

System.out.print("Ok, agora altura: ");
      alt = entrada.nextInt();
alt-=2; //Correção do bug
while(lado>contador){
      System.out.print("*");contador++;}

 while(alt>contadorb){contador=2;
      System.out.println();
      System.out.print("*");

while(lado>contador){
      System.out.print(" ");contador++;}
      System.out.print("*");
      contadorb++;}
      contador=0;

System.out.println();
      while(lado>contador){
      System.out.print("*");contador++;}


    }

}

5SOLUÇÕES - Questões usando o laço WHILE  - Resolvido Empty Exercício 7: Qua Ago 13, 2014 5:01 pm

Robotinic



Novamente um loop dentro do outro,
loop 1 para imprimir altura
loop2 para linhas lado.

Código:

int alt,lado ;
int contador=0,contadorb=0;
     Scanner entrada = new Scanner(System.in);
System.out.println("Digite o tamanho do quadrado: ");
System.out.print("Lado: ");
lado = entrada.nextInt();
System.out.print("Ok, agora altura: ");
alt = entrada.nextInt();


      while(alt>contadorb){
      while(lado>contador){
      System.out.print("*");contador++;}
      System.out.println();
      contadorb++;contador=0;}
}}

miroko



Boas robotinic,

Seu código ficou bem compactado dessa vez.

Eu estou agora nos exercícios for, pelo que percebi o for vem optimizar loop do while,  já que com um único for podemos fazer 2 loops.

Assim que tiver tempo vou fazer os exercícios for e posto, para podermos comparar a sua eficiência em relação ao while, já que os exercícios são os mesmos.

Abraço

Robotinic



Bem por enquanto não vi muita vantagem no for, ele deixa declarar variaveis dentro do seu argumento
for( int contador = 10, caixas = 0; caixas<= contador;caixas++){
codigo...}
Na pratica ele fara a mesma coisa que o while.

int contador = 10,caixas = 0;
while(caixas<=contador){codigo...
caixas++ }

No final o resultado é o mesmo. Mas quanto ao usar dois loops no mesmo for é complicado, acaba deixando o codigo ilegivel, esta é minha opinião até agora.

Conteúdo patrocinado



Ir para o topo  Mensagem [Página 1 de 1]

Permissões neste sub-fórum
Não podes responder a tópicos