Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Leer un número entero de dos dígitos y determinar si es primo y además si es negativo

Estas en el tema de Leer un número entero de dos dígitos y determinar si es primo y además si es negativo en el foro de C/C++ en Foros del Web. Hola, soy nuevo en C++ y estoy haciendo este ejercicio. Leer un número entero de dos dígitos y determinar si es primo y además si ...
  #1 (permalink)  
Antiguo 09/09/2015, 15:33
RGT
Usuario no validado
 
Fecha de Ingreso: noviembre-2008
Mensajes: 505
Antigüedad: 15 años, 4 meses
Puntos: 5
Pregunta Leer un número entero de dos dígitos y determinar si es primo y además si es negativo

Hola, soy nuevo en C++ y estoy haciendo este ejercicio.

Leer un número entero de dos dígitos y determinar si es primo y además si es negativo.

El problema es que me da error al momento de arrancarlo y no se por qué ya que es mi primer programa en C++.

Espero puedan ayudarme.

Código:
#include <iostream>

using namespace std;

/*
Tema: P2 - Algoritmos Decisiones

2. Leer un número entero de dos dígitos y determinar si es primo y además si es negativo.
*/

int main()
{
    //Declaración de variables
    int liNumero, liContador, liContadora = 0;

    //Entrada de datos
    cout << "Ingrese un n\243mero entero de dos d\241gitos: " << endl;
    cin >> liNumero;

    //Procesamiento
    if (liNumero < 10 || liNumero > 99)
        cout << "\n\tError!, el n\243mero debe tener dos d\241gitos." << endl;

    else
    {
        for(liContador = 1; liContador <= liNumero; liContador++)
            {
                if (liNumero % liContador == 0)
                liContadora++; //Variable contadora
            }

        //Si tiene dos divisores
        if (liContadora == 2)
            {
                cout << "El n\243mero es primo." << endl;

                //Determinamos si es negativo
                if (liNumero < 0)
                    cout << "El n\243mero es negativo." << endl;
            }

        //Si no tiene dos divisores
        else if
            {
                cout << "El n\243mero no es primo." << endl;

                //Determinamos si es negativo
                if (liNumero < 0)
                    cout << "El n\243mero es negativo." << endl;
            }
    }

    return 0;
}
Tambien cuando ingreso -11, me muestra error y no se por qué si es 11 primo y deberia mostrarme: es negativo.
Qué tengo mal en los IF?..

Última edición por RGT; 09/09/2015 a las 15:41
  #2 (permalink)  
Antiguo 10/09/2015, 00:19
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 5 meses
Puntos: 204
Respuesta: Leer un número entero de dos dígitos y determinar si es primo y además si

Hasta donde me alcanzan los conocimientos de matemáticas, -11 no entra dentro del rango 10<=x<=99.

También tienes que tener en cuenta que los números negativos no pueden ser primos.

Con esto en mente intenta reconstruir tu programa, que lo tienes prácticamente hecho.

un saludo.
  #3 (permalink)  
Antiguo 10/09/2015, 07:15
RGT
Usuario no validado
 
Fecha de Ingreso: noviembre-2008
Mensajes: 505
Antigüedad: 15 años, 4 meses
Puntos: 5
Respuesta: Leer un número entero de dos dígitos y determinar si es primo y además si

Cita:
Iniciado por eferion Ver Mensaje
Hasta donde me alcanzan los conocimientos de matemáticas, -11 no entra dentro del rango 10<=x<=99.

También tienes que tener en cuenta que los números negativos no pueden ser primos.

Con esto en mente intenta reconstruir tu programa, que lo tienes prácticamente hecho.

un saludo.
Hola, entiendo gracias hermano.

En resumen, si entran un numero < 0 es negativo automaticamente pero, que debo cambiar en la condicion para que el usuario entre solamente un numero de dos digitos y permita tambien los negativos?.
  #4 (permalink)  
Antiguo 10/09/2015, 07:19
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 5 meses
Puntos: 204
Respuesta: Leer un número entero de dos dígitos y determinar si es primo y además si

Cita:
Iniciado por RGT Ver Mensaje
que debo cambiar en la condicion para que el usuario entre solamente un numero de dos digitos y permita tambien los negativos?.
Tienes que hacer necesariamente dos comprobaciones, luego tendrías que usar un esquema tal que:

Código C:
Ver original
  1. if()
  2.   //...
  3. else if()
  4.   // ...
  5. else
  6.   //...
  #5 (permalink)  
Antiguo 10/09/2015, 08:06
RGT
Usuario no validado
 
Fecha de Ingreso: noviembre-2008
Mensajes: 505
Antigüedad: 15 años, 4 meses
Puntos: 5
Pregunta Respuesta: Leer un número entero de dos dígitos y determinar si es primo y además si

Cita:
Iniciado por eferion Ver Mensaje
Tienes que hacer necesariamente dos comprobaciones, luego tendrías que usar un esquema tal que:

Código C:
Ver original
  1. if()
  2.   //...
  3. else if()
  4.   // ...
  5. else
  6.   //...
Hola, estoy haciendo las comprobaciones para que el numero digitado tenga dos digitos.

Código:
cout << "Ingrese un n\243mero entero de dos d\241gitos: " << endl;
    cin >> liNumero;

    if (liNumero >= 0 && liNumero < 10 || liNumero > 99)
        cout << "\n\tError!, el n\243mero debe tener dos d\241gitos.\n" << endl;
    
    if (liNumero < 0 && liNumero < -10 || liNumero < -99)
        cout << "\n\tError!, el n\243mero debe tener dos d\241gitos.\n" << endl;
El primer IF funciona bien pero, el segundo IF no me funciona, no manejo mucho los negativos, podrian ayudarme?.
  #6 (permalink)  
Antiguo 10/09/2015, 09:04
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 5 meses
Puntos: 204
Respuesta: Leer un número entero de dos dígitos y determinar si es primo y además si

Lo primero antes de nada es que no estás siguiendo la estructura que te he propuesto.

Clase básica de condicionales

El siguiente if ejecutará codigo si condicion es cierta.
Código C:
Ver original
  1. if( condicion )
  2. {
  3.    codigo
  4. }

Se entiende que la condición de un if es cierta SIEMPRE que ésta no valga 0, es decir:

Código C:
Ver original
  1. int var = 12;
  2.  
  3. // var no vale 0
  4. // --> se ejecuta codigo
  5. if( var )
  6.   codigo;
  7.  
  8. // es una asignación, no una comparación y, después de eso var = 23 != 0
  9. // --> se ejecuta codigo
  10. if( var = 23 )
  11.   codigo;
  12.  
  13. // -345 != 0
  14. // --> se ejecuta codigo
  15. if( -345 )
  16.   codigo;
  17.  
  18. int* ptr = 0;
  19.  
  20. // este if consulta la posición de memoria apuntada por el puntero... que vale 0
  21. // --> NO se ejecuta codigo
  22. if( ptr )
  23.   codigo;
  24.  
  25. var = 0;
  26. ptr = &var;
  27.  
  28. // se vuelve a consutlar la posicion de memoria apuntada, ya no vale 0
  29. // --> se ejecuta codigo
  30. if( ptr )
  31.   codigo;
  32.  
  33. // se consulta el valor almacenado en la posicion apuntada.
  34. // actualmente var=0, luego *ptr=0
  35. // --> NO se ejecuta codigo
  36. if( *ptr )
  37.   codigo;

por otro lado tenemos la estructura if-else:

Código C:
Ver original
  1. if( condicion )
  2.   codigo1;
  3. else
  4.   codigo2;

Esta estructura funciona así: si se cumple la condición se ejecuta codigo1, en caso contrario se ejecuta codigo2. Esto quiere decir que NUNCA se podrán ejecutar codigo1 y codigo2 a la vez.

Esta estructura se puede agrupar en varias secuencias if-else:

Código C:
Ver original
  1. if( condicion1 )
  2.   codigo1;
  3. else if( condicion2 )
  4.   codigo2;
  5. else if( condicion3 )
  6.   codigo3;
  7. else
  8.   codigo4;

Si se cumple la primera condición, se ejecutará codigo1, en caso contrario se comprueba la segunda condición, si se cumple se ejecuta codigo2, en caso contrario...

Un pequeño inciso llegados a este punto, el último else no es obligatorio ponerlo, todo depende de si necesitas o no realizar alguna acción en el caso de que no se cumpla ninguna condición.

Clase acelerada de números negativos

Un número cualquiera es negativo sí y solo sí es inferior a 0.

Ejemplo:
Código C:
Ver original
  1. int n;
  2. if( n < 0 )
  3.   // El numero es negativo
  4. else
  5.   // El numero es 0 o positivo

otra forma:
Código C:
Ver original
  1. int n;
  2. if( n >= 0)
  3.   // El numero 0 o positivo
  4. else
  5.   // El numero es negativo

otra más:
Código C:
Ver original
  1. int n;
  2. if( i < 0 )
  3.   // El numero es negativo
  4. else if( i > 0 )
  5.   // El numero es positivo
  6. else
  7.   // El numero es 0

y no sigo que si no el mensaje queda demasiado guarro.

Un saludo.

Etiquetas: determinar, entero, int, negativo, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:29.