Foros ZackYFileS

Foros ZackYFileS (http://foros.zackyfiles.com/index.php)
-   PROGRAMACIÓN Lenguajes: Visual Basic, C++, etc (http://foros.zackyfiles.com/forumdisplay.php?f=370)
-   -   Ejercicio C++, calcular los n primeros números primos (http://foros.zackyfiles.com/showthread.php?t=380287)

Snake12 08/12/2005 18:20

Ejercicio C++, calcular los n primeros números primos
 
Hola a todos, tengo que hacer de nuevo un ejercicio en c++ y esta vez me dice que calcule los n primeros números primos.

Por ahora tengo hecho esto, nada en verdad:

unsigned int num, i, p;

cout << "Introduzca la cantidad de numeros primos que quiere obtener: ";
cin >> num;
cout << '\n' << endl;

i=0;
while ( i <= num )
{
for ( p = 2; p + 1; p++ )
{


Defino i como un contador de los numeros primos que llevo, y parará cuando el contador sea igual al número de primos que he dicho que halle.
Entonces empiezo con un While y a continuación un for para que calcule los primos (vendría a continuación del for el cálculo de dichos números, que además no sé como expresarlo), este for lo que quiero es que me vaya dando números a partir del 2 para saber si son primos.

Estoy atrancado hasta no poder más, si alguien me pudiese ayudar, no hacérmelo, simplemente ayudar, orientarme, me sería de gran ayuda y me haría un gran favor.

Muchas gracias amigos!!!, ta luego!!!

Coke 08/12/2005 21:21

saludos snake...

prueba con esto...

Código PHP:

void main()
{
    
unsigned int numnpnum_columnas;      
    
cout << "Introduzca la cantidad de numeros primos que quiere obtener: ";
    
cin >> num;
    
cout << '\n' << endl;
    
num_columnas ;    
    
2;
    while(
<= num)
    {
        for (
2p!= 0p++);
        if (
== n
        { 
            
cout << <<", ";
            if(++
num_columnas 10 == 0)
                
cout << "\n" << endl;
        }
        
n++;
    }
    
cout << "\n" << endl;


Coke.

Efirenet 08/12/2005 22:25

Un pequeño detalle Coke: Con éste algoritmo lo que consigues son los números primos menores o iguales al número que introduces por teclado y no los n primeros números. De todas formas, corregirlo es muy sencillo poniendo un contador de los que llevas impresos por pantalla.

Un saludo

Snake12 08/12/2005 22:38

Ante todo muchas gracias Coke, pero como dice Efirenet, necesito generar los n primeros numeros primos. Efirenet, yo lo he intentado así, pero no consigo nada:

Cita:

int main()
{
// Zona de Declaración de Variables del Programa principal
unsigned int numero, contador, primo, divisor;

cout << "Introduzca la cantidad de numeros primos que quiere obtener: ";
cin >> numero;
cout << '\n' << endl;

contador = 0;
while ( contador <= numero )
{
primo = 2;
while ( primo <= 4294967295U )
{
for ( divisor = 2; primo % divisor != 0 ; divisor++ )

if ( divisor == primo )
{
cout << primo << endl;
}

primo++;
}

contador++;

}

cout << '\n' << endl;

system("Pause"); // Hacer una pausa
return 0; // Valor de retorno al S.O.
}
Y no sé cómo hacer lo de añadir un contador de los que llevo impresos por pantalla...

Si me echas una mano, te estaría muy agradecido. Gracias a los dos!!!, hasta leugo!!!

Coke 08/12/2005 22:52

perdon, creia que eran hasta el limite que tu ponias....

con esto se arregla.

Código PHP:

int main()
{
    
unsigned int numnpinum_columnas;
    
cout << "Introduzca la cantidad de numeros primos que quiere obtener: ";
    
cin >> num;
    
cout << '\n' << endl;
    
num_columnas ;
    
2;
    
1;
    while(
<= num)
    {
        for(
2!= 0p++);
        if(
== n)
        {
            
cout << <<", ";
            if(++
num_columnas 10 == 0)
                
cout << "\n" << endl;
            
i++;
        }
        
n++;
    }
    
cout << "\n" << endl;
    
system("pause");
    return 
0;


le he puesto para que salgan en columnas de 10.

Coke.

Snake12 08/12/2005 23:09

Muchísimas gracias Coke, ahora sólo tengo que comprenderlo...jajajaja, bueno me pongo a ello, y de nuevo muchas gracias.

Ta luego!!!

MaCr 01/03/2009 04:35

tenga en cuenta
 
recuerde que no todos los numeros impares son primos

macguiwer 11/05/2009 11:55

a ver que es un numero primo
cualquier numero que SOLO es DIVISIBLE POR SI MISMO Y LA UNIDAD
por ejemplo 15 es divisible por 3 y 5 por lo tanto no es primo.
la verdad que se flipo con el nivel que teneis hoy en dia en la universidad.
:confuso:
como para decirte que realices una Criba de Eratóstenes.
mira te voy a hacer un favor enorme
NO TE VOY A PONER NINGUN CODIGO
no sirve de nada que copies lo que otro a realizado ya que asi nunca aprenderas nada (bueno si aprenderas a copiar lo que otros hacen)
1 olvidate del C o cualquier lenguaje.
2 antes de progamar una sola linea tines que tener muy claro lo que quieres consegir y como hacerlo
3 el "seudocodigo" por llamalo de laguna manera alguno lo llama "organigrama" tiene que correr en tu cabeza o por lo menos en papel.
4 cuando ya tengas claro como saber si un numero es primo y parar al siguente entonces y solo entonces puedes empezar a escribir codigo en C.
saludos y de verdad no me odies lo hago por tu bien.:rolleyes:
coke:
tu codigo es casi corecto pero acaso el 1 no es primo?
jeje la definicion corecta de numero primo SOLO es DIVISIBLE POR SI MISMO Y LA UNIDAD.
por lo que 1 es divisible solo por si mismo y la unidad (casualmente son lo mismo).
aqui te vas a encontrar gente que te diga que si es primo y gente que te diga que no por que solo es divisible por el mismo o solo por la unidad.
no quieren reconocer la dualidad en este caso de unidad=numero.
para mi 1 es primo.
saludos.
PD lo de la criba es muy sencillo ya que calculas los primos para dividir en lugar de perder tiempo tontamente dividierdo paulatinamente por 2,3,4,5,6,7........ guardas los primos que has generado en una tabla le añades al princio de esa taba el 2.
y cuando tengas que provar u nuevo numero usas la tabla para dividir.
veras como los primos salen como churos.
cuando do era mas joven haciamos apuestas aver que ordenador era mas potente calculando primos y tambien provamos diferentes lengujes.
bueno yo no yo siempre use C o Asmabler.
y cuando metia la criba la pena quedaba fipados.
claro que nunca conte mi secreto.
hasta hoy.

Coke-OFF 11/05/2009 20:44

Cita:

cualquier numero que SOLO es DIVISIBLE POR SI MISMO Y LA UNIDAD
Cualquier numero natural que tiene solo dos divisores...el 1 solo tiene un divisor...no es ni primo ni compuesto.

tampoco lo son el -2, -3, -5...que segun tu definicion, tambien lo serian.

Coke.

BurgosJC 16/04/2010 21:45

Oigan raza quien me puede ayudar a realizar este codigo
Calcular la posición de la primera componente negativa de un vector pedido al usuario.

Les agradeceria mucho su ayuda!

Kratos 16/04/2010 21:59

[QUOTE=BurgosJC;4025597]Oigan raza quien me puede ayudar a realizar este codigo
Calcular la posición de la primera componente negativa de un vector pedido al usuario.

Les agradeceria mucho su ayuda![/QUOTE]


una vez q tengas el vector, haz un bucle de repeticion (te recomiendo que en este caso uses un bucle MIENTRAS, porque una vez halles la posicion de la primera componente negativa, ya has cumplido tu objetivo del problema) que vaya recorriendo el vector, cuando llegues a una posicion cuyo valor sea menor que 0, guardas ese indice con otra variable y te sales del bucle de alguna manera (piensa como).

al final, ya tienes esa posicion en esa variable al salir del bucle.

espero haberte servido de ayuda, te podria haber puesto el codigo pero te he dao una idea para que lo intentes tu mismo, si no sabes como hacerlo no tienes mas que ponerlo por aki.

saludos.

elcobo56 16/04/2010 22:01

Cita:

Iniciado por Kratossss (Mensaje 4025620)
una vez q tengas el vector, haz un bucle de repeticion (te recomiendo que en este caso uses un bucle MIENTRAS, porque una vez halles la posicion de la primera componente negativa, ya has cumplido tu objetivo del problema) que vaya recorriendo el vector, cuando llegues a una posicion cuyo valor sea menor que 0, guardas ese indice con otra variable y te sales del bucle de alguna manera (piensa como).

al final, ya tienes esa posicion en esa variable al salir del bucle.

espero haberte servido de ayuda, te podria haber puesto el codigo pero te he dao una idea para que lo intentes tu mismo, si no sabes como hacerlo no tienes mas que ponerlo por aki.

saludos.



:eek::eek::eek:

kolmo7 16/04/2010 22:31

Cita:

Iniciado por Kratossss
una vez q tengas el vector, haz un bucle de repeticion (te recomiendo que en este caso uses un bucle MIENTRAS, porque una vez halles la posicion de la primera componente negativa, ya has cumplido tu objetivo del problema) que vaya recorriendo el vector, cuando llegues a una posicion cuyo valor sea menor que 0, guardas ese indice con otra variable y te sales del bucle de alguna manera (piensa como).

al final, ya tienes esa posicion en esa variable al salir del bucle.

espero haberte servido de ayuda, te podria haber puesto el codigo pero te he dao una idea para que lo intentes tu mismo, si no sabes como hacerlo no tienes mas que ponerlo por aki.

saludos.

Y, si en lugar de esperar a tener el vector entero y luego emplear un bucle para buscar el primer negativo, también puedes ir comprobando los números que va introduciendo el usuario para rellenar el vector y "señalar" la posición donde se encuentre el primero menor que cero. Así aprovechas el bucle de introducción de datos :)

Kratos 16/04/2010 22:46

sisi claro, por supuesto, loque pasa es que yo he partido del supuesto en que me dan el vector ya concreto y que mi trabajo sea buscar la posicion, es lo que he entendido de lo que ha comentado burgosjc.

kolmo7 16/04/2010 22:48

Ya, Kratossss, estaba dando una segunda opción en caso de que pueda hacerlo mientras graba los datos. Si no, lo que comentas es lo correcto :)

Kratos 16/04/2010 22:51

jaja vale tio, claro se puede hacer de las 2 maneras, sino dicen nada la tuya es optima ;)
un saludo :)

Lukese 19/04/2010 22:32

2^32,582,657 – 1

"aunque es el número primo más grande que se conoce se ha quedado en 9,808,358 cifras ... "

h ttp://www.mersenne.org/freesoft/

Lo siento pero de ++ no entiendo ni papa

kolmo7 19/04/2010 23:34

[QUOTE=Lukese]2^32,582,657 – 1

"aunque es el número primo más grande que se conoce se ha quedado en 9,808,358 cifras ... "

h ttp://www.mersenne.org/freesoft/

Lo siento pero de ++ no entiendo ni papa[/QUOTE]

Ya hay primos más grandes... [url]http://es.wikipedia.org/wiki/N%C3%BAmero_primo_de_Mersenne[/url]

[spoiler]Y sin contar con el de Zumosol... :p

http://2.bp.blogspot.com/_ME4aYr-vf8...00/zumosol.jpg[/spoiler]

Lukese 20/04/2010 08:34

¡Qué lástima!. Volaron los 100.000$ :eek:

al-mo 08/06/2010 20:27

A ver que les parece mi idea.

Como la función debe devolver una posición válida en caso de cumplirse la condición exigida, es necesario que el vector de entrada tenga al menos 1 elemento.
Por tanto, la precondición sobre los datos de entrada podría ser {Q= n>0}

La signatura o perfil podría ser:

fun posneg ( v: vect [1..n] de ent) dev pos: nat;

En la postcondición debemos exigir a nuestra función que devuelva la primera posición del valor menor que cero.

R= Existe un alfa perteneciente desde [1..n] tal que si v[alfa]<0 ----> pos=alfa)

Este predicado podría darnos problemas si existe más de un valor que cumpla la condición requerida por lo que, a mi entender, se hace necesario un segundo conjuntante utilizando el cuantificador universal que nos garantice que [B]pos [/B]es la primera posición que cumple la condición:

AND Para todo alfa perteneciente desde {v[pos]+1.. n] tal que [B]pos[/B] no es igual a alfa.

En iterativo el código podría ser algo parecido a:

i:=1 (Inicialización de la variable de protección del bucle)
pos:=0;

Mientras i<=n hacer
Si v[i]< 0 ---> pos:=i; EXIT;
Si no i++;
Fmientras;
dev pos;


En recursiva la función podría ser algo parecido a :



fun iposneg ( v: vect [1..n] de ent , i:nat) dev pos:nat;

Caso trivial i=0 ----> pos:=0;

Caso no trivial i>0 ---> iposneg( v, i-1) OR (v[i]<0 ---> pos=i);

Fcaso;

Ffun;



Salúos.

Q.Aprender 14/08/2010 02:59

Con gabas de aprender
 
Cita:

Iniciado por macguiwer (Mensaje 3776529)
a ver que es un numero primo
cualquier numero que SOLO es DIVISIBLE POR SI MISMO Y LA UNIDAD
por ejemplo 15 es divisible por 3 y 5 por lo tanto no es primo.
la verdad que se flipo con el nivel que teneis hoy en dia en la universidad.


Buenas noches señor macguiwer, la verdad me parece muy bien su sabio consejo, asi como el de los demas del foro, pero la verdad le cuento a usted y a todos que... llegue aca porque tengo ganas, muchas ganas de aprender. Estoy estudiando analisis y programacion de computadores y la verdad tengo poca informacion el curso no avanza casi por que hay muhcos alumnos que no estudian, no se aplican y de verdad, quisiera que me regalaran material de estudio, desde los algoritmos. por ejemplo este problema de generar n numeros primos, no se como hacerlo no me da, cuando ejecuto lo que creo debe ser, el programa reacciona de formas que ni entiendo. solo he aprendido a trabajar declarando las librerias #include<iostream.h>,<stdlib.h>;<conio.h>;<stdio.h>;<math.h>; declaro la llave void main(), luego la llave { y la variable int, y no entiendo muchas cosas; total no se si tienen algunos manuales bastante practicos de los que pueda aprender o no se. Pero de veras me gustaria aprender lo que ustedes puedan. (Se que el conocimiento cuesta). Estuio el lenguaje c++, y ese ejercicio de los n primos no lo entiendo. Espero respuestas. y muchas gracias. Dios les bendiga a todos

kezuziyo 14/08/2010 17:27

[QUOTE=Q.Aprender;4096934]Buenas noches señor macguiwer, la verdad me parece muy bien su sabio consejo, asi como el de los demas del foro, pero la verdad le cuento a usted y a todos que... llegue aca porque tengo ganas, muchas ganas de aprender. Estoy estudiando analisis y programacion de computadores y la verdad tengo poca informacion el curso no avanza casi por que hay muhcos alumnos que no estudian, no se aplican y de verdad, quisiera que me regalaran material de estudio, desde los algoritmos. por ejemplo este problema de generar n numeros primos, no se como hacerlo no me da, cuando ejecuto lo que creo debe ser, el programa reacciona de formas que ni entiendo. solo he aprendido a trabajar declarando las librerias #include<iostream.h>,<stdlib.h>;<conio.h>;<stdio.h>;<math.h>; declaro la llave void main(), luego la llave { y la variable int, y no entiendo muchas cosas; total no se si tienen algunos manuales bastante practicos de los que pueda aprender o no se. Pero de veras me gustaria aprender lo que ustedes puedan. (Se que el conocimiento cuesta). Estuio el lenguaje c++, y ese ejercicio de los n primos no lo entiendo. Espero respuestas. y muchas gracias. Dios les bendiga a todos[/QUOTE]

La Web está llena de manuales y tutoriales de C++, que es lo primero que debes de aprender, una vez sabes programar ya podrás aplicarlo sobre otras cosas de las que tengas conocimientos, por ejemplo este ejercicio es de programación, pero también sobre los número primos que no tienen nada que ver con la programación, y si no sabes nada de números primos por mucho que sepas programar no sabrás hacer o entender el algoritmo.
Prueba a Googlear lo siguiente:
[URL="http://www.google.es/#hl=es&source=hp&q=aprender+c%2B%2B&aq=f&aqi=g5g-s1g4&aql=&oq=&gs_rfai=&fp=ef974d5f32c50956"]aprender C++[/URL]
[URL="http://www.google.es/#hl=es&source=hp&q=tutorial+c%2B%2B&btnG=Buscar+con+Google&aq=f&aqi=g10&aql=&oq=tutorial+c%2B%2B&gs_rfai=&fp=ef974d5f32c50956"]tutorial C++[/URL]
[URL="http://www.google.es/#hl=es&source=hp&q=manual+c%2B%2B&btnG=Buscar+con+Google&aq=f&aqi=g10&aql=&oq=manual+c%2B%2B&gs_rfai=&fp=ef974d5f32c50956"]manual C++[/URL]
[URL="http://www.google.es/#hl=es&source=hp&q=programar+c%2B%2B&aq=f&aqi=g10&aql=&oq=&gs_rfai=&fp=ef974d5f32c50956"]programar C++[/URL]

Aunque lo mejor es [URL="http://www.google.es/#hl=es&source=hp&q=aprender+a+programar&btnG=Buscar+con+Google&aq=f&aqi=&aql=&oq=aprender+a+programar&gs_rfai=&fp=ef974d5f32c50956"]aprender a programar[/URL] sin ligarlo a un lenguaje de programación específico, luego solo necesitas saber las reglas y conceptos de un lenguaje específico para poder programar. Un libro clásico es "[B]Algoritmos + Estructuras de datos = Programas[/B]" de [B]Niklaus Wirth[/B] (autor de lenguales como el Pascal), es muy viejo, en España creo que se editó en 1980, por lo que no existen los conceptos de programación orientada a objetos y trata de la programación lineal y no la dirigida por eventos, pero la base de la programación sigue siendo la misma, y si no se tiene esa base firmemente asentada es casi imposible entender los demas conceptos


La franja horaria es GMT +2. Ahora son las 13:03.

Powered por vBulletin™ Version 3.8.10
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.
Traducido por vBsoporte - vBulletin en español
ZackYFileS - Foros de Debate