Ayuda ejercicios "sencillos" C++

fumAx

Me mandaron unos cuantos ejercicios en la facultad y hay algunos que soy capaz de acabarlos, a ver si alguien me puede echar un cable:

Mostrar por pantalla, cuidando la presentación, todos los números primos positivos hasta
un valor entero, n, que se leerá por teclado.

Yo se programar para meter un núymero y que diga si es primo o no, pero no se hacer que me muestre todos los nuemeros primos hasta n, aunque supongo que será un bucle for o algo asimilar.

Mostrar por pantalla, cuidando la presentación, todos los números perfectos hasta un valor
entero constante n=10000

Aquí estoy en lo mismo, no se hacer para que me muestre todos los numeros hasta n, solo se hacer que me diga si un numero es perfecto o no.

Mostrar por pantalla el valor máximo y la posición del mismo dentro de un vector de
números reales. El valor máximo se calculará mediante una función. Los elementos del vector
se generarán aleatoriamente usando la función rand().

dagavi

Tienes algún problema de algoritmia o algo por el estilo. En todo el post no voy a escribir nada de C++, puesto que esto no es un problema de C++ si no de no saber plantear el algoritmo.

Si sabes decir si un número es primo y te dicen que muestres todos los que hay hasta N puedes hacer algo tan simple como ir desde ¿0, 1? hasta N i si el número en el que estás es primo pues lo muestras.

Esto es una versión warra, pero tendría que ser lo primero que se te ocurriera. Una solución óptima (diría) es utilizar la criba de Eratostenes.

Exactamente lo mismo con el segundo pero con números perfectos.

El tercero tampoco tiene ningún misterio. Si a ti te ponen una fila con 100 números delante y te dicen que saques el máximo, ¿que haces?
Pues miras el primero, lo recuerdas (es lo máximo que has leído) y a partir de ahí vas mirando los siguientes y miras si es mayor que el número que recordabas como máximo.

Si lo que te piden es decir también en que posición está pues simplemente guárdate la posición de donde has encontrado el elemento máximo y es lo que retornarás, así si viene otra persona y te dice: ¿donde está el máximo? le dices "es el 34º", y el puede ir y ver el valor.

1
NeB1

entonces sabes hacer

if(perfecto)
cout >> "Perfecto:" >> numero;

pero no sabes hacer

for ( i = 0; i < n; i++ )
{
if(perfecto(i))
cout >> "Perfecto:" >> i;
}

tienes un pequeño problema con las estructuras iterativas, no?

5star

ESto es para el primero, la presentacion te lo curras tu:

#include <stdio.h> //Libreria de printf
#include <conio.h> //Libreria para getch();
#include <math.h>

main()

 {     

   int i, veces, a, valor=2,limite,contador=0;
   
   printf("Indica el valor \n" );
   scanf("%i",&limite);
   
       while(contador<limite){                                   
                           
           for(a=2,i=valor; a<=i; a++)
           {
                    if(i%a==0 && i==a)
                    {
                           printf("\n Numero primo -> %i \n",a);
                           contador++;
                        
                    
                    } else if(i%a==0 && i!=a){
                           
                        break;
                    }
           }  
             
           valor++;                                                                                     
                                                                                  
       }
                 
 getch(); 

}
La 2 y 3 pregunta no entiendo... :wtf:
PD: la primera vez que te puse la respuesta estba mal, ahora croe que esta bien

Ulmo

Por dios, no me seais catetos y para los numeros primos hacer for (i = 3; i <n ; i = i +2), q veros comprobar si todos los números pares son primos me hace sangrar los ojos.

BLZKZ

#5 no se que quieres conseguir con ese for :/ porque eso no saca primos precisamente, hasta donde yo se falla la primera vez en 9, y luego en 15.

El método es la criba de Eratostenes, aunque usar la forma de fermat tampoco está mal

Edit: ok creo que a lo que se refiere #5 es a que solo comprobeis los impares xD

dagavi

#5 Puestos a ponernos tiquismiquis es para suspenderte por llegar hasta N cuando puedes parar mucho antes :D

BLZKZ

#7 ??? parar antes del numero hasta el que quieres calcular los primos?, qué harias , una búsqueda desde atras del ultimo primo? xD

Thanat0s

#8 Parece que nunca has hecho este ejercicio, pero basta con ir hasta (n/2)+1, todos los números que haya por encima de ese número serán múltiplos de los n/2 anteriores.

Y creo que se podría ajustar más si ibas hasta la raíz cuadrada de n, pero de esto ya no estoy muy seguro.

dagavi

#8 Vale, hay un pequeño problema de a que bucle nos referimos, que al leer el mensaje de #5 es culpa mía xD

Yo lo había relacionado con que el bucle que estaba poniendo era el que mira si un número es primo, no el que hace la iteración para mirar desde 1 hasta N.

Si, diría que el "primero" (de 1 hasta N) si tiene que llegar a N (si pongo 7 al 7 tiene que llegar xD), supongo que #9 ha entendido lo mismo que yo ya que, efectivamente, el bucle parar mirar si un número es primo se puede parar al llegar a raíz.

BLZKZ

#10 yo lo habia entendido de la otra forma (de la primera que has dicho xD) en fin, asco de tener sueño que pienso las cosas de manera dificil :P

Usuarios habituales

  • BLZKZ
  • dagavi
  • Thanat0s
  • Ulmo
  • 5star
  • NeB1
  • fumAx