Condição Ternária C++

tds

Power Member
Boas pessoal!

Tudo em cima?
Espero que sim ;)

Gostaria de saber se o seguinte programa dá para ser escrito com a condição ternária ao invés de if's.
Já tentei fazer, mas dava-me sempre dois erros =z

Utilizo o Visual Studio C++ 6.

Aqui vai o código:

Código:
#include<iostream.h>
void main (void){
int x,y,z;
cin >> x >> y >> z;
cout << "___ \n" ;
if(x<z)
      if (y<z)
           if(x<y)
                cout << x << "<" << y << "<" << z << "\n";
           else
                cout << y << "<" << x << "<" << z << "\n";
      else
           cout << x << "<" << z << "<" << y << "\n";
else
      if(z<y)
           if (y<x)
                cout << z << "<" << x << "<" << y << "\n";
           else 
                cout << z << "<" << y << "<" << x << "\n";
      else 
          cout << y << "<" << z << "<" << x << "\n";
return;
}

o programa ordena 3 numeros inseridos de forma crescente.


Obrigado pelo vosso tempo.


Tiago dos Santos ;)
 
Última edição pelo moderador:
Tive que corrigir o teu programa primeiro:

Código:
#include <iostream>

int main (void) {
    int x,y,z;
    std::cin >> x >> y >> z;
    std::cout << "___ \n" ;
    if(x<z)
        if (y<z)
            if(x<y)
                std::cout << x << "<" << y << "<" << z << "\n";
            else
                std::cout << y << "<" << x << "<" << z << "\n";
        else
                   std::cout << x << "<" << z << "<" << y << "\n";
    else
        if(z<y)
            if (y<x)
                std::cout << z << "<" << y << "<" << x << "\n";
            else
                std::cout << z << "<" << x << "<" << y << "\n";
        else
            std::cout << y << "<" << z << "<" << x << "\n";
    return 0;
}
Na parte do (y < x), tens dois casos trocados. E nada de usar "void main()" ou "void main(void)": http://faq.cprogramming.com/cgi-bin/smartfaq.cgi?answer=1044841143&id=1043284376

Agora, escrito com a condição ternária (ou, melhor dizendo, condições ternárias aninhadas):

Código:
#include <iostream>

int main (void) {
    int x,y,z;
    std::cin >> x >> y >> z;
    std::cout << "___ \n" ;
    (x<z?
        (y<z?
            (x<y?
                (std::cout << x << "<" << y << "<" << z << "\n"):(std::cout << y << "<" << x << "<" << z << "\n")
            )
                :(std::cout << x << "<" << z << "<" << y << "\n")
        )
    :
        (z<y?
            (y<x?
                (std::cout << z << "<" << y << "<" << x << "\n"):(std::cout << z << "<" << x << "<" << y << "\n")
            )
                :(std::cout << y << "<" << z << "<" << x << "\n")
        )
    );
    return 0;
}
Tentei manter a mesma estrutura do código com os if's. Agora imagina se escreveres tudo na mesma linha, como geralmente se escrevem condições com operadores ternários...

Moral da história: usar if's sempre que possível ;)
 
LOOOL xD

Obrigado! xD

Sempre que possivel usarei os belos if's xD

"my teacher said it's OK" --> isto foi o que aconteceu!! :P

Vou mostrar ao meu prof o faq, a ver se ele muda a maneira de ensino ;)

Mais uma vez, muito obrigado ;)

já agora - aquele std está alí porque na chamada da biblioteca não está o *.h, certo?
std::cin >> x >> y >> z;
 
já agora - aquele std está alí porque na chamada da biblioteca não está o *.h, certo? std::cin >> x >> y >> z;

Nop. Eu tive que escrever std::cin e std::cout porque a seguinte linha não está presente:

Código:
using namespace std;
Que, na realidade, nunca se deve importar um namespace todo. O mais correcto a fazer é:

Código:
using std::cin;
using std::cout;
Quanto ao <iostream> VS <iostream.h>, tanto quanto sei, o <iostream.h> está "deprecated" (i.e. já não se usa). Todas as bibliotecas do C++ devem ser importadas sem o uso do ".h".

Link sobre namespaces: http://faq.cprogramming.com/cgi-bin/smartfaq.cgi?answer=1046398336&id=1043284351

Também queria ver se colocava um link sobre a questão de não se usar o ".h" com bibliotecas do C++, mas não me parece que esteja na FAQ do cprogramming.com. Lembro-me, no entanto, de o pessoal nos fóruns do cprogramming.com dizer isso, e acredita que eles são bastante rigorosos :)
 
Muito Obrigado miguel ;)

Estou a ver que por aqui se aprende mesmo muito :D

Isto está me a dar jeito, já que estou a pensar em ir às Olimpiadas da Informática este ano e não estou a imaginar aprender isto pelo meu professor xD


Muito obrigado ;) pesquisarei sobre o <iostream.h> vs <iostream> então ;)

Agradecido,
Tiago dos Santos
 
Posso-te explicar porque motivo se deixou de usar .h no C++, mas não garanto que percebas: não é algo simples ou evidente.

Em C++ deixou-se de se importar os .h por causa dos templates.

Uma função template deve ser declarada no mesmo ficheiro que o seu protótipo para o compilador poder fazer a linkagem correctamente.
No entanto, por hábito (bons hábitos), é comum declarares nos .h as classes/protótipos e nos .cpp definires as funções.
Assim, o ficheiro "iostream" não é mais do que um ficheiro que contém as linhas #include "iostream.h" e #include "iostream.cpp", ficando assim tanto o protótipo como a definição da função no mesmo ficheiro, e deixando de haver problemas com os templates.

Em C isto obviamente não acontecia por não existirem templates..


---------------------


Quanto às ONI, acho que deves participar. Tu e toda a gente, a partir do momento em que saibam ler. Aprende-se MUITO nas ONI, e não se deve participar com o objectivo de ganhar, mas sim de aprender mais.
Este género de pormenores são completamente irrelevantes. Tu não vais fazer os teus próprios headers num concurso. (e muito raramente usar templates)
Se queres treinar para as ONI, aprende algoritmia e lógica como deve ser. Resolve problemas dos anos anteriores, ou segue uma página de treino como por exemplo http://train.usaco.org (apesar de esta poder ser um bocado avançada de mais para o nível onde estás agora)
Podes também resolver problemas no spoj.pl , por exemplo.

Eu participei nas ONI 3 anos, e agora nos concursos universitários, e acho que é algo que todos deviam fazer.
 
Hm... Percebi mais ou menos.
Sou iniciante em C++ (12º ano Curso Tecnológico de Informatica :P WE ARE NOT DEAD YET :p), inda me faz um pouco de confusão algumas particularidades desta linguagem xD
Obrigado pela explicação ;)

Fiquei, inda assim, com algumas duvidas.
Função template o que é? Qual o exemplo de uma?


_ _ _ _ _ _ _ _

Em relação às ONI, espero ir para lá aprender muito, e sair de lá com mais conhecimentos.
Vou na desportiva, mas acima de tudo quero aprender e divertir-me (gosto de programação porque me obriga a pensar xD).

Obrigado pelas dicas ;) já tenho mais uns passatempos agora xD
A ver se me dou bem com isto ;)
 
Back
Topo