Alguem me tira uma duvida sobre || e && [RESOLVIDO]

1. Alguem me tira uma duvida sobre || e && [RESOLVIDO]

Jeffersson
blow5

(usa Ubuntu)

Enviado em 18/09/2014 - 18:03h

esse algoritmo meu so funfa assim:
#include<stdio.h>
#include<locale.h>
main()
{
float n1,n2,n3,media;
setlocale(LC_ALL,"portuguese");
printf("Quais as tres numeros?\n");
scanf("%f%f%f",&n1,&n2,&n3);
media=(n1+n2+n3)/3;
if(media>=8.1||10<=media){
printf("Conceito A:%.1f\n",media);
}
else if(media>=7.1||8.0<=media){
printf("Conceito B:%.1f\n",media);
}
else if(media>=5.1||7<=media){
printf("Conceito C:%.1f\n",media);
}
else if(media>=0.0||5<=media){
printf("Conceito D: %.1f\n",media);
}
}
Esse algoritmo ai so funfa do jeito q eu quero quando utilizo o || ao invez do &&.
Mas tipo,o certo n seria eu utilizar o " && " ao invez do " || " ?
caso eu esteja errado me digam o pq,caso eu esteja certo me digam o pq de n aceitar.
Ainda sou iniciante :)
Atenciosamente.


  


2. MELHOR RESPOSTA

Luis R. C. Silva
luisrcs

(usa Linux Mint)

Enviado em 18/09/2014 - 18:21h

Tomemos este trecho: if(media>=8.1||10<=media){

Se a média for maior ou igual a 8.1 ou 10 for menor ou igual a média, então...

Só por aí já sabe que tem erro. Como a média pode ser maior que 10? Acho que você não fez todos os testes.

Se colocares if(media >= 8.1 || media <= 10){

Se a média for maior que 8.1 ou menor que 10, esse if vai executar, ou seja, executa de qualquer forma.

Deveria ser if(media >= 8.1 && media <= 10){

Aí sim vai prender o valor entre 8.1 e 10 (qualquer entre os dois valores).

Seu algoritmo está errado.

3. Re: Alguem me tira uma duvida sobre || e && [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 18/09/2014 - 18:37h

Na verdade, você não precisará nem de || nem de &&, se simplesmente fizer os testes -- uma comparação a cada if -- na ordem correta.

Tome cuidado com uma coisa: entre 7.0 e 7.1 (por exemplo), existem infinitos números reais. Ainda que o computador limite essa infinitude, são cerca de 10 elevados a 14 valores possíveis que você deixa de cobrir. O vizinho de um número <=7.0 é um número >7.0. Sempre assim: menor que ou igual a x de um lado e maior que x do outro, ou menor que x de um lado e maior que ou igual a x do outro.


4. Re: Alguem me tira uma duvida sobre || e && [RESOLVIDO]

Luis R. C. Silva
luisrcs

(usa Linux Mint)

Enviado em 18/09/2014 - 19:31h

Acho que você está equivocado. Se é um intervalo de valores, tem sim que usar o && para limitar o teste. Caso contrário irá executar mais de um teste.

Outra opção é usar o switch.


5. Re: Alguem me tira uma duvida sobre || e && [RESOLVIDO]

Jeffersson
blow5

(usa Ubuntu)

Enviado em 18/09/2014 - 23:24h

luisrcs escreveu:

Tomamos este trecho: if(media>=8.1||10<=media){

Se a média for maior ou igual a 8.1 ou 10 for menor ou igual a média, então...

Só por aí já sabe que tem erro. Como a média pode ser maior que 10? Acho que você não fez todos os testes.

Se colocares if(media >= 8.1 || media <= 10){

Se a média for maior que 8.1 ou menor que 10, esse if vai executar, ou seja, executa de qualquer forma.

Deveria ser if(media >= 8.1 && media <= 10){

Aí sim vai prender o valor entre 8.1 e 10 (qualquer entre os dois valores).

Seu algoritmo está errado.


Realmente! falta de atenção minha, muito obrigado :)




6. Re: Alguem me tira uma duvida sobre || e && [RESOLVIDO]

Luis R. C. Silva
luisrcs

(usa Linux Mint)

Enviado em 19/09/2014 - 06:44h

Disponha.


7. Re: Alguem me tira uma duvida sobre || e && [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 19/09/2014 - 14:56h

Insisto que && não precisa ser usado no problema em questão, que pode ser resolvido mais eficientemente e satisfatoriamente do seguinte modo.

if(media>9.0){
/* Conceito A */
}
else if(media>=7.5){
/* Conceito B. */
}
else if(media>=5.0){
/* Conceito C */
}
else if(media>=3.5){
/* Conceito D */
}
else{
/* Conceito E */
}







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts