elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Necesito ayuda con un problema de C++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Necesito ayuda con un problema de C++  (Leído 2,568 veces)
zotutex

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Necesito ayuda con un problema de C++
« en: 7 Septiembre 2013, 21:54 pm »

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:

Código:
Numero: 446
-Mayor: 6
-Mediano:
-Menor: 4, 4

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

Código:
// 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


En línea

Stakewinner00


Desconectado Desconectado

Mensajes: 1.426



Ver Perfil WWW
Re: Necesito ayuda con un problema de C++
« Respuesta #1 en: 9 Septiembre 2013, 21:07 pm »

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


En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Necesito ayuda con un problema de C++
« Respuesta #2 en: 10 Septiembre 2013, 12:00 pm »

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
  1.    if (num1 > num2 && num1 > num3){
  2.             mayor=num1;
  3.             if(num2 > num3){
  4.                     mediano=num2;
  5.                     menor=num3;
  6.                     }else {
  7.                           mediano=num3;
  8.                           menor=num2;
  9.                           }

Código
  1.    if (num1 > num2 && num1 > num3){
  2.             mayor=num1;
  3.             if(num2 > num3){
  4.                     mediano=num2;
  5.                     menor=num3;
  6.             }else {
  7.                     mediano=num3;
  8.                     menor=num2;
  9.             }

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
  1. #include <algorithm>
  2. #include <iostream>
  3. #include <vector>
  4.  
  5. bool ordenarnumeros(int i, int j)
  6. {
  7.  return (i>j);
  8. }
  9.  
  10. int main()
  11. {
  12.  vector< int > numeros;
  13.  int num;
  14.  
  15.  cout << "Introduce el primer numero: " << endl;
  16.  cin >> num;
  17.  numeros.push_back( num );
  18.  
  19.  cout << "Introduce el segundo numero: " << endl;
  20.  cin >> num;
  21.  numeros.push_back( num );
  22.  
  23.  cout << "Introduce el tercer numero: " << endl;
  24.  cin >> num;
  25.  numeros.push_back( num );
  26.  
  27.  sort( numeros.begin( ), numeros.end( ), ordenarnumeros );
  28.  
  29.   cout << "Los numeros que ha introducido ordenados de mayor a menos son: \n\n"
  30.      << "- Mayor: " << numeros[ 0 ]<< "\n" << "- Mediano: " << numeros[1] << "\n- Menor: " << numeros[2] << endl;
  31. }

Si prefieres no usar vectores, hay otras opciones:

Código
  1. OrdenarNumeros( int& mayor, int& menor )
  2. {
  3.  if ( menor > mayor )
  4.  {
  5.    int temp = menor;
  6.    menor = mayor;
  7.    mayor = temp;
  8.  }
  9. }
  10.  
  11. int main( )
  12. {
  13.  // ...
  14.  
  15.  int mayor = num1;
  16.  int mediano = num2;
  17.  int menor = num3;
  18.  
  19.  OrdenarNumeros( mayor, mediano );
  20.  OrdenarNumeros( mediano, menor );
  21.  OrdenarNumeros( mayor, mediano ); // Este se pone para cuando num3 es el mayor
  22.  
  23.   cout << "Los numeros que ha introducido ordenados de mayor a menos son: \n\n"
  24.      << "- Mayor: " << numeros[ 0 ]<< "\n" << "- Mediano: " << numeros[1] << "\n- Menor: " << numeros[2] << endl;
  25. }
En línea

Almapa

Desconectado Desconectado

Mensajes: 111


Ver Perfil
Re: Necesito ayuda con un problema de C++
« Respuesta #3 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!
En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Necesito ayuda con un problema de C++
« Respuesta #4 en: 10 Septiembre 2013, 16:39 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

Código
  1. OrdenarNumeros( int& mayor, int& menor )
  2. {
  3.  if ( menor > mayor )
  4.  {
  5.    int temp = menor;
  6.    menor = mayor;
  7.    mayor = temp;
  8.  }
  9. }
  10.  
  11. int main( )
  12. {
  13.  // ...
  14.  
  15.  int mayor = num1;
  16.  int mediano = num2;
  17.  int menor = num3;
  18.  
  19.  OrdenarNumeros( mayor, mediano );
  20.  OrdenarNumeros( mediano, menor );
  21.  OrdenarNumeros( mayor, mediano ); // Este se pone para cuando num3 es el mayor
  22.  
  23.   cout << "Los numeros que ha introducido ordenados de mayor a menos son: " << endl;
  24.  
  25.  if ( mayor == mediano )
  26.  {
  27.    if ( mediano == menor )
  28.    {
  29.      cout << "- Mayor: " << endl;
  30.      cout << "- Mediano: " << mayor << "," << mediano << "," << menor << endl;
  31.      cout << "- Menor: " << endl;
  32.    }
  33.    else
  34.    {
  35.      cout << "- Mayor: " << mayor << "," << mediano << endl;
  36.      cout << "- Mediano: " << endl;
  37.      cout << "- Menor: " << menor << endl;
  38.    }
  39.  }
  40.  else
  41.  {
  42.    if ( mediano == menor )
  43.    {
  44.      cout << "- Mayor: " << mayor  << endl;
  45.      cout << "- Mediano: " << endl;
  46.      cout << "- Menor: " << mediano << "," << menor << endl;
  47.    }
  48.    else
  49.    {
  50.      cout << "- Mayor: " << mayor  << endl;
  51.      cout << "- Mediano: " << mediano << endl;
  52.      cout << "- Menor: " << menor << endl;
  53.    }
  54.  }
  55. }

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

zotutex

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Necesito ayuda con un problema de C++
« Respuesta #5 en: 12 Septiembre 2013, 23:03 pm »

Muchas Gracias a todos :D
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
necesito ayuda sobre problema de grabacion de cds
Software
macias3 1 1,615 Último mensaje 22 Noviembre 2003, 00:17 am
por 4rm4ndo
NECESITO AYUDA,PROBLEMA AL GRABAR
Software
ULISESMAC 0 1,697 Último mensaje 24 Agosto 2005, 11:45 am
por ULISESMAC
Necesito un problema
Programación C/C++
cridve 3 1,927 Último mensaje 8 Mayo 2019, 15:19 pm
por MAFUS
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines