Ir ao conteúdo

Posts recomendados

Postado
int main() {
  int x, i = 1;

  x = 755;

  while(x){
    i *= x % 10;
    x /= 10;
  }

  printf("%d\n", i);

  return 0;
}

eu quero entender porque mesmo colocando apenas 1 letra ou numero no while o loop não é infinito

sei que o while significa enquanto, mas nesse caso vai ser enquanto o que?

 

  • Curtir 1
Postado

@Jorge Curvelo Você ta dividindo x por 10 dentro do loop. Enquanto x não atingir 0, o loop permanece:

#include <stdio.h>

int main() {
  int x, i = 1;

  x = 755;

  while(x){
    i *= x % 10;
    x /= 10;
    printf("Divisão por 10...\n");
    printf("Valor de x: %d\n", x);
    printf("Valor de i: %d\n", i);
  }

  printf("Valor final de i: %d\n", i);

  return 0;
}

image.png.aa874b0c65671cf29ba3b68251a2c962.png

  • Curtir 2
Postado

@Jorge Curvelo    ali no while é como se estivesse usando o tipo bool de boolean ,  e se o valor de x for igual a zero ele seria o false ou falso , e se for diferente de zero ele seria true, verdadeiro .  então ali , enquanto o valor de x for verdadeiro , que é o mesmo que diferente de zero , o loop while continuar a dar voltas .

  • Curtir 1
Postado
18 minutos atrás, vangodp disse:

O único que while(if, for, etc) quer saber é se um valor é verdadeiro ou falso. Na programação 0 é considerado falso, e qualquer outro valor é verdadeiro... incluído números negativos. se ver algo como while( 0 == 0 ) vai dar como resultado true, porque zero é igual a zero, isso gera um true(resultado diferente de zero). Como já lhe explicou Lucca, por enquanto x não valer 0 isso continuará rodando.

0 é falso na programação em C apenas. Em outras linguagens os valores para verdadeiro ou falso é true e false.

  • Curtir 3
Postado
40 minutos atrás, Jorge Curvelo disse:

entender porque mesmo colocando apenas 1 letra ou numero no while

 

Não é uma boa maneira de expressar o que acontece nesse comando.

 

Não é de uma letra que está falando: é de uma variável que tem um nome que é uma letra, 'x' no caso. Podia ter dezenas de letras e ia dar na mesma.

 

E se fosse um número? Pois é: também podia ser qualquer número.

 

Linguagens de programação são coisas super formais e são regidas por uma gramática descrita por uma notação própria. Não vou chatear ninguém aqui sequer tentando explicar isso, mas no caso do while vou reproduzir um pedaço da gramática

<iteration-statement> ::= while ( <expression> ) <statement>
                        | do <statement> while ( <expression> ) ;
                        | for ( {<expression>}? ; {<expression>}? ; {<expression>}? ) <statement>

no formato clássico conhecido como Backus-Naur form para os comandos for e while em C

 

E você pode ver que dentro dos parenteses se espera uma expressão. Uma expressão é qualquer coisa que permita obter um resultado numérico. E nessa linguagem 0 é falso. Só zero.

 

Assim você tem sua resposta: você pode ter qualquer coisa lá que se possa avaliar para um número. Uma condição lógica é avaliada em C para um número também: 0 se falso. E assim se fecha o círculo.

 

while(x) funciona desde que x exista, seja uma variável ou uma constante. E é o mesmo que escrever while(x != 0). 

  • Curtir 2
Postado
1 hora atrás, Jorge Curvelo disse:

mas se o x fosse menor do que zero e não passasse pelo zero ele seria false

 

não faz sentido. Que seria "passasse pelo zero" ?  Na hora de rodar o while() a expressão é avaliada. Seja o que for. ZERO é falso. Só zero.

  • Curtir 2
Postado
6 minutos atrás, arfneto disse:

não faz sentido. Que seria "passasse pelo zero" ?  Na hora de rodar o while() a expressão é avaliada. Seja o que for. ZERO é falso. Só zero.

pelo que entendir o programa vai sempre dividindo um valor uma hora vai dividir tanto que vai ficar negativo

  • Curtir 1
Postado

@Jorge Curvelo

21 minutos atrás, Jorge Curvelo disse:

pelo que entendir o programa vai sempre dividindo um valor uma hora vai dividir tanto que vai ficar negativo

Não.

Se você tem um loop que divide um número por 10 até que o mesmo atinja 0, não tem como esse número atingir valor negativo.

Calcule o limite de x tendendo ao infinito de qualquer número / x, o resultado é 0.

image.png.22f317660fa20ea4df6fef8e572e2128.png

Ou seja, nem que esse tal número seja um zilhão, o loop vai persistir até que o número atinja 0.

  • Curtir 1
Postado
1 hora atrás, Jorge Curvelo disse:

pelo que entendir o programa vai sempre dividindo um valor uma hora vai dividir tanto que vai ficar negativo

 

Hum... Essa não é uma dúvida de C ou C++ ou C#. Seria para o forum de matemática e ensino fundamental:

 

dividir um número positivo por outro jamais vai mudar o sinal...

  • Curtir 2

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...