Jump to content
Fórum Script Brasil
  • 0

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


Lucas Celestino

Question

É 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 to comment
Share on other sites

3 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.1k
    • Total Posts
      652k
×
×
  • Create New...