Jump to content

Dúvida no ciclo for


RafaelOliveira
 Share

Recommended Posts

Sim, embora no caso em concreto que apresentas, e na eventualidade de i não ser mexido dentro do ciclo, a segunda condição nunca seja verdadeira.

"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Link to comment
Share on other sites

Atenção que o que tens aí não são duas condições de paragem: é uma. Uma expressão lógica que se lê como 'se a o conteúdo da variável i fôr igual ao valor representado pelo simbolo MAX (que pode ser outra variável ou, muito provavelmente, um valor constante) OU se o conteúdo da variável i fôr igual a -1 o resultado será verdadeiro. Caso nenhuma das condições anteriores seja verdadeira o resultado será falso'.

Ou seja o || é um operador lógico, não é nada de especifico aos ciclos for. Sendo uma expressão lógica podes ter múltiplos ||, &&, ==,... nessa expressão. O ciclo pàra quando a condição fôr falsa, podendo isso ser determinado sem ter de calcular toda a expressão (uma expressão '...; 0 && i++;... normalmente (chama-se a isto 'short-circuit evaluation') não provoca o incremento da variável i, porque o 0 (zero) determina que o resultado será sempre falso e as expressões são calculadas da esquerda para a direita.

Link to comment
Share on other sites

Boas, alguém me pode dizer se isto é possível?

Ex.

for (int i=0;i=MAX || i=-1;i++){
...
}

Podemos ter 2 casos de paragem no ciclo for separadas por ||(ou)??

Cumps

Sim. Já agora, nesse caso em concreto, o ciclo nunca para.

"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Link to comment
Share on other sites

Sim. Já agora, nesse caso em concreto, o ciclo nunca para.

A mim parece-me que isso não compila, devido ao facto de tentar fazer um assign sobre um OR. 😉

O ou lógico (||) tem precedência sobre o assign (=), logo a tradução daria qualquer coisa como:

i = 1 = -1

ou

i = 0 = -1

EDIT: Só para tornar mais claro, o compilador irá interpretar assim:

i = (MAX || i) = -1

“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Link to comment
Share on other sites

A comparacao, em C, é feita com ==. O exemplo acima tem duas atribuicoes na parte do ciclo for que normalmente tem comparacoes.

😉

"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.