Dev - C++ - Algo falla en el algoritmo

 
Vista:
sin imagen de perfil
Val: 2
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Algo falla en el algoritmo

Publicado por KENFOR (1 intervención) el 06/09/2020 14:40:27
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
/*Este programa debería imprimir si el numero ingresado es primo o encontrar el numero primo mas cercano al numero ingresado, pero no funciona con lo segundo*/
 
#include <iostream>
using namespace std;
 
using namespace std;
 
int main(int argc, char** argv) {
	int dni;
	int cont1=0;
	cout<<"Ingreso los ultimos seis digitos de su DNI: ";
	cin>>dni;
 
	for(int i=1;i<=dni;i++){
		if(dni%i==0){
			cont1++;
		}
	}
 
	if(cont1==2)
	{
		cout<<"\n\nEl numero ingresado es primo.";
		cout<<"\n\nHay "<<cont1<<" divisores";
	}
 
	else
	{
    cont1=0;
		do{
			dni++;
			for(int i=1;i<=dni;i++){
				if(dni%i==0){
					cont1++;
				}
			}
      cout<<"\n\n-Hay "<<cont1<<" divisores";
		}while(cont1>2);
 
		cout<<"\nEl numero primo mas cercano es: "<<dni--;
	}
 
	return 0;
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Rodrigo
Val: 1.755
Plata
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Algo falla en el algoritmo

Publicado por Rodrigo (539 intervenciones) el 06/09/2020 16:09:49
cont1 deberia volver a 0 al interior del ultimo do-while
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Algo falla en el algoritmo

Publicado por Nacho (181 intervenciones) el 06/09/2020 16:20:04
Podría ser número ingresado más cercano por arriba o por abajo. Esto busca sólo el más cercano por arriba. Buscarlo también por abajo te queda para ti.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
bool EsPrimo(int n, int& divisores)
{
     for (int i = 1; i <= n; i++) {
        if (n % i == 0) {
            divisores++;
        }
    }
    return divisores == 2;
}
 
 
int main(int argc, char** argv) {
    int dni;
    int cont1 = 0;
    cout << "Ingreso los ultimos seis digitos de su DNI: ";
    cin >> dni;
 
    if (EsPrimo(dni, cont1))
    {
        cout << "\n\nEl numero ingresado es primo.";
        return 0;
    }
   else cout << "\n\nHay " << cont1 << " divisores";
    cont1 = 0;
     {
        do
        {
            if (cont1 > 0) cout << "\n\nen " << dni << " Hay " << cont1 << " divisores";
            cont1 = 0;
            dni++;
        } while (!EsPrimo(dni, cont1));
        cout << "\n\n\El numero " << dni << " es primo";
    }
    return 0;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rodrigo
Val: 1.755
Plata
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Algo falla en el algoritmo

Publicado por Rodrigo (539 intervenciones) el 06/09/2020 16:26:57
Esta solucion tiene el mismo problema del programa original, pruebalo ingresando el numero 14, por ejemplo.
Hay que poner cont1 al interior del ciclo do-while.

Otra manera de resolverlo en este caso es no pasar cont1 a la funcion. Definirla, inicializarla y usarla en la funcion misma.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Algo falla en el algoritmo

Publicado por Nacho (181 intervenciones) el 06/09/2020 16:28:13
Ahora está bien.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar