Necesito ayuda con un problema de C++

Iniciado por zotutex, 7 Septiembre 2013, 21:54 PM

0 Miembros y 1 Visitante están viendo este tema.

zotutex

Hola!
Antes de nada quiero decir que soy nuevo en el foro, asique si pongo algo mal pido disculpas.
Bueno pues tengo la siguiente duda, el código que os pongo a continuación te pide 3 números  y luego los ordena de mayor a menor, hasta aquí sin problema, mi duda viene con lo siguiente: si al programa le metes 3 cifras iguales deja de funcionar. Me gustaría que me ayudaran a modificar el código para que si esto ocurre las cifras iguales se pongan en la misma categoria, es decir:

Numero: 446
-Mayor: 6
-Mediano:
-Menor: 4, 4


Me gustaría que quedara como en el ejemplo de arriba.

// Que pida 3 números y los muestre en pantalla de mayor a menor en líneas distintas.


#include <iostream>

using namespace std;

int main() {

    int num1, num2, num3, menor, mayor, mediano;
   
    cout << "Introduce el primer numero: " << endl;
    cin >> num1;
   
    cout << "Introduce el segundo numero: " << endl;
    cin >> num2;
   
    cout << "Introduce el tercer numero: " << endl;
    cin >> num3;
   
    if (num1 > num2 && num1 > num3){
             mayor=num1;
             if(num2 > num3){
                     mediano=num2;
                     menor=num3;
                     }else {
                           mediano=num3;
                           menor=num2;
                           }
    }else {
      if(num2 > num1 && num2 > num3){
              mayor=num2;
              if (num1 > num3){
                       mediano=num1;
                       menor=num3;
                       }else {
                             mediano=num3;
                             menor=num1;
                             }
             
              }else {
                    if(num3 > num1 && num3 >num2){
                            mayor=num3;
                            if(num1 > num2){
                                    mediano=num1;
                                    menor=num2;
                                    }else{
                                          mediano=num2;
                                          menor=num1;
                                          }
                            }else {
                                  cout << "No tengo ni p**a idea de como se hace. xD" << endl;
                                  system("pause");
                                  return 0;
                                  }
                    }
              }
                   
      cout << "Los numeros que ha introducido ordenados de mayor a menos son: \n\n"
      << "- Mayor: " << mayor << "\n" << "- Mediano: " << mediano << "\n- Menor: " << menor << endl;
               
    system("pause");
    return 0;
   
}


Muchas gracias de antemano, estoy aprendiendo a programar (bueno, he empezado esta semana xD) y de momento lo llevo bien, si necesitan algo decírmelo.

Un saludo

Stakewinner00

si quieres mostrar
Citar-Menor: 4, 4
o usas char, o usas string o lo haces de otra forma. Los int no sirven para almacenar caracteres ASCII como la coma ",".

eferion

Consejo de presentación: No tiene sentido que tabules el código que se encuentre tras un cierre de llave.

Si no lo haces corres el riesgo de que el código se desparrame ante una secuencia de if-elseif-elseif grande.

Código (cpp) [Seleccionar]

    if (num1 > num2 && num1 > num3){
             mayor=num1;
             if(num2 > num3){
                     mediano=num2;
                     menor=num3;
                     }else {
                           mediano=num3;
                           menor=num2;
                           }


Código (cpp) [Seleccionar]

    if (num1 > num2 && num1 > num3){
             mayor=num1;
             if(num2 > num3){
                     mediano=num2;
                     menor=num3;
             }else {
                     mediano=num3;
                     menor=num2;
             }


Y hablando ahora de tu código, veo que es bastante lioso, deberías abstraer un poco más.

Una opción puede ser usar vectores y aprovechar los algoritmos que te proporciona la librería estándar:

Código (cpp) [Seleccionar]

#include <algorithm>
#include <iostream>
#include <vector>

bool ordenarnumeros(int i, int j)
{
  return (i>j);
}

int main()
{
  vector< int > numeros;
  int num;

  cout << "Introduce el primer numero: " << endl;
  cin >> num;
  numeros.push_back( num );

  cout << "Introduce el segundo numero: " << endl;
  cin >> num;
  numeros.push_back( num );
   
  cout << "Introduce el tercer numero: " << endl;
  cin >> num;
  numeros.push_back( num );

  sort( numeros.begin( ), numeros.end( ), ordenarnumeros );

   cout << "Los numeros que ha introducido ordenados de mayor a menos son: \n\n"
      << "- Mayor: " << numeros[ 0 ]<< "\n" << "- Mediano: " << numeros[1] << "\n- Menor: " << numeros[2] << endl;
}


Si prefieres no usar vectores, hay otras opciones:

Código (cpp) [Seleccionar]

OrdenarNumeros( int& mayor, int& menor )
{
  if ( menor > mayor )
  {
    int temp = menor;
    menor = mayor;
    mayor = temp;
  }
}

int main( )
{
  // ...

  int mayor = num1;
  int mediano = num2;
  int menor = num3;

  OrdenarNumeros( mayor, mediano );
  OrdenarNumeros( mediano, menor );
  OrdenarNumeros( mayor, mediano ); // Este se pone para cuando num3 es el mayor

   cout << "Los numeros que ha introducido ordenados de mayor a menos son: \n\n"
      << "- Mayor: " << numeros[ 0 ]<< "\n" << "- Mediano: " << numeros[1] << "\n- Menor: " << numeros[2] << endl;
}

Almapa

El código de eferion está muy bien solo le faltaría detectar si dos de los números introducidos son iguales y meterlos en un string dentro de la variables mayor o menor según el caso.

PD: Creo que si este tema lo hubieses puesto en Programación C/C++ te habría ayudado más gente o al menos con mayor rapidez.

Un saludo!

eferion

Cita de: Almapa en 10 Septiembre 2013, 16:32 PM
El código de eferion está muy bien solo le faltaría detectar si dos de los números introducidos son iguales y meterlos en un string dentro de la variables mayor o menor según el caso.

PD: Creo que si este tema lo hubieses puesto en Programación C/C++ te habría ayudado más gente o al menos con mayor rapidez.

Un saludo!

Tampoco implica muchos cambios


OrdenarNumeros( int& mayor, int& menor )
{
  if ( menor > mayor )
  {
    int temp = menor;
    menor = mayor;
    mayor = temp;
  }
}

int main( )
{
  // ...

  int mayor = num1;
  int mediano = num2;
  int menor = num3;

  OrdenarNumeros( mayor, mediano );
  OrdenarNumeros( mediano, menor );
  OrdenarNumeros( mayor, mediano ); // Este se pone para cuando num3 es el mayor

   cout << "Los numeros que ha introducido ordenados de mayor a menos son: " << endl;

  if ( mayor == mediano )
  {
    if ( mediano == menor )
    {
      cout << "- Mayor: " << endl;
      cout << "- Mediano: " << mayor << "," << mediano << "," << menor << endl;
      cout << "- Menor: " << endl;
    }
    else
    {
      cout << "- Mayor: " << mayor << "," << mediano << endl;
      cout << "- Mediano: " << endl;
      cout << "- Menor: " << menor << endl;
    }
  }
  else
  {
    if ( mediano == menor )
    {
      cout << "- Mayor: " << mayor  << endl;
      cout << "- Mediano: " << endl;
      cout << "- Menor: " << mediano << "," << menor << endl;
    }
    else
    {
      cout << "- Mayor: " << mayor  << endl;
      cout << "- Mediano: " << mediano << endl;
      cout << "- Menor: " << menor << endl;
    }
  }
}


Se podría optimizar usando vectores, pero no se si merece la pena.

zotutex