Ir para conteúdo
Fórum Script Brasil
  • 0

3n + 1 C - Dúvida; Comando While.


Lucas Celestino

Pergunta

É possível eu colocar um if em uma while ?

Por exemplo; Eu quero criar um programa que não para de fazer operações em um número a determinadas condições. Exemplo: No problema, é imperioso notar mais duas condições; se e somente se o número N for par, deve-se o dividir por 2 até que ele chegue a 1, caso a resultante for impar, o número deve ser multiplicado por 3 e posteriormente somado +1, resultando em um número par que deve ser divido por 2 tal qual já explicado a condição.

Estava pensando em fazer da seguinte forma: Uso um laço de repetição FOR com uma variavel de input A,B.

for(a; a <= b; a++) { printf("%d", a);

//Posteriormente eu testaria se o número fosse par ou impar e colocaria os resultados em duas váriaveis auxiliadoras//

If (a % 2 == 0) aux1 = a ; if (a % 2 !=) aux2 = a;

Agora está o problema do meu codigo, eu preciso fazer um programa que continue a fazer as operações até que o resultado chegue a 1, dada as condições de dividir por 2 caso par e multiplicar por 3 + 1 caso impar. Estava pensando em fazer um while pra isso mas sempre meu resultado acaba criando uma enorme quantidade de numeros aleatórios.

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0


/* O numero par é determinado quando na primeira divisão por 2 o resto é zero, multiplos de 2 é que pode 
ser dividido por 2 sucessivamente com resto sempre 0. Ou seja, seu enunciado ficou meio confuso e talvez o codigo 
a seguir ajude a esclarecer a questao*/

#include<stdio.h>

int main (void)

{

    //definindo variáveis

    int a, b, c = 0;

    //entrada numero a verificar se é par ou impar

    printf("Digite um numero:");

    scanf("%d", &b);
    
    //verificaçao se o numero é multiplo de 2
    
    for(a = 0; b > 1; a++)
        {

            c = c + b % 2;

            b = b / 2;

            // mostra variaveis, c, b e a acada passagem pelo loop fot
            
            printf("\nc = %d, b = %d, a = %d", c, b, a);
        }


    //reconstituicao do numero digitado multiplicando-se por 2
    for( a; a > 0; a--)
        {
            b = b * 2;
        }
        
    //mostra o numero reconstituido multiplo de 2
    if(c == 0) printf("\nB = %d", b);
    
        else printf("\nO numero digitado não é multiplo de 2");
            
         
    

    return 0;

}

Link para o comentário
Compartilhar em outros sites

  • 0

Obrigado pela resposta mano, ficou muito confuso meu enunciado.
Na real em termos simples: Eu tenho 2 numeros A, B, preciso criar uma lista for de A até B.
Todos os numeros de A até B precisam ser decompostos até chegar em 1 dada determinada regra:
Se for par -> dividir por 2
Se for impar -> Multiplicar por 3 e somar mais 1 ( Voltando a ser um número par e voltando a ir na condição primeira )
Esse são os dois problemas do meu código!!
 

#include <stdio.h>
int main() {
int a,b,aux,aux2;
scanf("%d", &a);
scanf("%d", &b);
 
for(a = a;a <= b; a = a+1){
printf("\n%d ", a);
if (a % 2 == 0) {
aux = a / 2;
printf("%d", aux);
}
else {
aux = 3 * a + 1;
printf("%d", aux);
}
}
}
 
 
Ele para no primeiro número...
Pensei me por um comando While pra parar somente quando o resultado for  1, mas estou com problemas de ambiguidade, porque no número 2 o programa para...
Muita tristeza, raiva e também alegria...
Link para o comentário
Compartilhar em outros sites

  • 0

Todos os números no intervalo [A — B] [quando ímpar] são convertidos em par e decomposto por 2. O primeiro laço itera sobre o intervalo, o segundo laço [interno do primeiro] itera sobre a decomposição, ou seja, 2 a 2. Sendo necessário dividir até o quociente 1.

#include <stdio.h>
int
main() {
  int a,b,aux,aux2;
  scanf(" %d", &a);
  scanf(" %d", &b);

  for(;    a <= b;    a= a + 1){
    aux= a; printf("\n%d ", aux);
    if (aux%2) { // Caso a tenha valor ímpar, converte-se par
      aux= 3 * aux + 1;
      printf("%d", aux);
    }
    //Aqui vem a laço para decomposição do valor na variável aux
  }
}

 

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...