Ir ao conteúdo
  • Cadastre-se

Dúvida em relação a loops no c++


Visitante

Posts recomendados

é o exercício 5 dessa lista

http://www.iceb.ufop.br/decom/prof/guarda/BCC701/ListaExerc2_Modulo2_2014-1.pdf

Olha o jeito q eu fiz:

#include <iostream>
#include <math.h>
using namespace std;

int main()
{
    float u;
    for (int x=2;x<=30;x+=2){
        for (int y=3;y<=24;y+=3){
            switch ((x+y)%2 ||(x*y)){
        case 0:
            u = 1/(x*y)+sin(x+y);
            break;
        case 1:
            u = sqrt(y*y-4*x);
            break;
        default:
            u = pow(x+y, (1/3));
            break;
            }
            cout<<u<<"\t";
    }
    cout<<"\n"<<endl;
    }
    return 0;
}
 

Link para o comentário
Compartilhar em outros sites

Olá novamente, jovem.

 

Esse teu switch aqui:

switch ( (x+y) % 2 || (x*y) ) { ... }

 

Como você colocou um OR alí no meio, ele só vai retornar ou 0 (false) ou 1 (true). Nada além disso.

Então a condição default nunca vai ser chamada.

 

Acho melhor você fazer esse aí com IF/ELSE mesmo.

Link para o comentário
Compartilhar em outros sites

Olá, eu usei o else if e olha o que deu:

Mas os valores estão todos ***** do mesmo jeito!

#include <iostream>
#include <math.h>
using namespace std;

int main()
{
    float u;
    for (int x=2;x<=30;x+=2){
        for (int y=3;y<=24;y+=3){
                if ((x+y)%2 == 0){
                    u = 1/(x*y)+sin(x+y);
                }
                else if ((x*y)%2==1){
                    u = sqrt(y*y-4*x);
                }
                else{
                    u= pow(x+y, (1/3));
                }
                cout<<u<<"\t";
            }
        cout<<"\n"<<endl;
    }
    return 0;
    }
 

Link para o comentário
Compartilhar em outros sites

Aqui compilou normal.

Só tem uma coisa que eu esqueci de falar, que é o seguinte... quando você tá misturando valores inteiros com valores fracionados, as vezes o compilador não sabe que tipo usar, e acaba dando erro no teu programa.

 

Por exemplo, se você tiver a expressão:

float x = 1 / 2;

 

x deveria ser 0.5, certo?

Mas se você testar esse código aí, vai ver que x vai ser igual a 0.

 

O motivo disso é que o compilador interpreta aquele '1' e '2' como sendo do tipo INT.

E como a divisão de INTs só pode resultar em outro INT, daí o resultado fica 0.

 

O correto seria colocar um cast antes da expressão pra dizer pro compilador qual o tipo de resultado, assim:

float x = (float) 1 / 2;

 

Mas existe outro truque que você pode usar pra não precisar ficar usando casts toda hora.

É só escrever seus valores como se eles fossem números fracionados. Assim:

float x = 1.0 / 2.0;

 

Quando o compilador ver aquela expressão agora, ele vai saber que '1.0' é do tipo float, assim como '2.0', e o resultado da divisão dos dois vai resultar num float também.

 

Voltando agora pro seu código:

u = 1/(x*y)+sin(x+y);

 

Na primeira parte dessa expressão, você tá dividindo '1', que é um int, por 'x*y', que também são ints. Então é bem provável que o compilador não esteja pegando o resultado fracionado dessa expressão. Tente mudar o '1' pra '1.0' ou use um cast nele, ou mude x e y pra float.

 

Mesma coisa nessa outra expressão:

u= pow(x+y, (1/3));
Link para o comentário
Compartilhar em outros sites

Como assim cara, mostra no código aonde eu coloco esses casts, da uma olhada no meu código d novo

 

#include <iostream>
#include <math.h>
using namespace std;

int main()
{
    float u;
    for (int x=2;x<=30;x+=2){
        for (int y=3;y<=24;y+=3){
                if ((x+y)%2 == 0){
                    float x, y;
                    u = 1.0/(x*y)+sin(x+y);
                }
                else if ((x*y)%2==1){
                    u = sqrt(y*y-4*x);
                }
                else{
                    u= pow((x+y), (1/3));
                }
                cout<<u<<"\t";
            }
        cout<<"\n"<<endl;
    }
    return 0;
    }
 

Link para o comentário
Compartilhar em outros sites

#include <iostream>#include <cmath>using namespace std;int main(){    float u;    float fx, fy;        for (int x = 2; x <= 30; x += 2) {        for (int y = 3; y <= 24; y += 3) {                        fx = (float) x;            fy = (float) y;                        if ((x+y) % 2 == 0) {                u = (1.0f / (fx*fy)) + sin(fx+fy);            } else {                if ((x*y) % 2 == 1) {                    u = sqrt((fy*fy) - (4.0f * fx));                } else {                    u = pow((fx+fy), (1.0f / 3.0f));                }            }                        cout << u << endl;        }        cout << endl;    }    return 0;}
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

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...