Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - ciquee

#1
Buenas a todos!

Que lio tengo con un ejercicio, y es que ya llevo dos días bloqueado y nada, a ver si me podéis guiar hacia La Luz... jajaja

Necesito hacer un programa que muestre los 10 primeros números perfectos tomando como referencia los números de Mersenne.

Yo no soy muy bueno en mates y he tenido que buscar a Mersenne y he averiguado que "una potencia de 2 elevada a un número primo, menos uno, da como resultado otro número primo".

Este es el enunciado de mi problema:
Realiza un programa que nos diga los 10 primeros números perfectos utilizando para ello los números primos de Mersenne.
- Utiliza una función 'EsPrimo' que determine si un número es o no primo (NO debe contar los divisores, sino determinar si el número es o no primo)
- Cómo vamos a utilizar potencias enteras de 2 con resultados elevados, diseña, para ayudarte, una función 'Potencia' que eleve una base entera a una potencia entera y devuelva un 'unsigned long long' (¡no utilices la función 'pow'!).

Ya he hecho la función "EsPrimo" y la función "Potencia" y debería hacer una también para determinar cuando el numero es perfecto, pero investigando he descubierto que según Euclides: "Siempre que (2^n)-1 sea primo, la fórmula (2^n)–1 * (2^(n – 1)) genera un nº perfecto. Con lo cual bastará con multiplicar los 10 primeros números de Mersenne por 2^(n-1). Vale, pero ahora no tengo ni idea de como sacar los números de Mersenne para pasarlos por un bucle y hacerlos perfectos y después pasarlos por la función "Potencia"... y es que nunca he hecho un problema sin que el usuario tenga que introducir algún dato.

Os pongo mí código, pero como no tengo nada claro, solo ideas sueltas, la función main no hay por donde cogerla:


#include <iostream>
#include <math.h>

using namespace std;

bool EsPrimo(unsigned long long);
unsigned long long Potencia (unsigned long long);

int main(void) {
unsigned long long primo = 0, mersenne = 0, mersenne_perf = 0;

for (int i = 1; i >= 2210; i++)
if (EsPrimo(i) == 0)

Mersenne = (pow (2,n)-1);

/*for (int i = 1; i < pot; i++){
res = res * 2;
cout<<
}
*/

// Para hacerlos perfectos supongo que es así: pow (2, n-1) * Mersenne;


cout << "Estos son los 10 primeros números perfectos de los números primos de Mersenne" << m_perf << endl;


return 0;
}


bool EsPrimo (unsigned long long num) {

if (num != 2 && num % 2 == 0){
return 0;
}

else if (num != 3 && num % 3 == 0) {
return 0;
}

else if (num != 5 && num % 5 == 0) {
return 0;
}

else {
return 1;
}
}


unsigned long long Potencia (unsigned int pot){
unsigned long long res = 2;

for (int i = 1; i < pot; i++){
res = res * 2;
}

return res;
}


Por favor, que alguien me ayude!! O me diga si tengo que dejarme esto de la programación, porque menudo follón tengo en la cabeza con este ejercicio.

Siento que me haya quedado tan larga la entrada!!
Gracias de antemano!!
#2
Buenas, tengo una duda, estoy empezando a trabajar con varias funciones y no me aclaro para utilizar una desde otra, me explico: tengo que hacer un programa que me diga si un numero tecleado es perfecto, abundante o defectivo. Luego en otro ejercicio me piden que, utilizando esa misma función sin modificarla, haga un programa para saber los números abundantes que hay entre dos numero que se introducen por teclado. Mi código es este:


#include <iostream>
using namespace std;

int Perfecto (int, int, int );
int suma_div, i;

int main (void) {
int valor1, valor2, abund;

cout << "Este programa determina la suma de los numeros abundantes comprendidos entre dos enteros determinados" << endl;

cout << "Escribe un numero: ";
cin >> valor1;

cout << "Escribe otro numero: ";
cin >> valor2;

for (int x = valor1 +1; x < valor2; x++) {
x = Perfecto(x, suma_div, i);
if (x == ??????){
abund++;
}
}

cout << "La suma de los numeros abundantes entre " << valor1 << " y " << valor2 << " es " << abund;

return 0;
}


int Perfecto() {

int num, sum_div = 0, i;

cout<<"\nEscribe un número (Escribe el 0 para salir): ";
cin >> num;

while (num != 0){

for (i = 1; i <= (num / 2); i++) {
if (num%i == 0) {
sum_div = sum_div + i;
}
}

if (sum_div > num){
cout<<"El número introducido es abundante";
}

else if (sum_div == num) {
cout<<"El número introducido es perfecto";
}

else {
cout<<"El número introducido es defectivo";
}

cout << "\n\nEscribe un número (Escribe el 0 para salir): ";
cin >> num;
}

return 0;
}


Creo que el problema lo tengo en el bucle for de la función principal, y es que no sé a que igualar la x para saber cuantos de los números resultantes son abundantes, ya que en la función Perfecto no está declarado como variable ¿Me podéis ayudar por favor?

Ah y otra duda, yo en muchos programas declaro la librería <conio.h> y pongo el getch() antes del return 0 para que el programa no se cierra, pero he leído en un hilo (no me acuerdo cual) que alguien ha dicho que no se utilice esa librería, entonces ¿como se hace para que el programa no se cierre al acabar?

Muchas gracias! Saludos!
#3
Buenas compañeros/as!

Necesito ayuda porque estoy bloqueado con el tema ficheros.
Tengo un archivo (notas.dat) con nombres de alumnos y notas, y necesito anonimizar el fichero, es decir, sustituir los nombres de los alumnos por "Alumno 1"... y guardar la información en otro nuevo fichero.

Yo sé abrir ficheros para leer y para escribir, pero no tengo ni idea de como identificar el nombre de los alumnos para sustituirlos.

Por otro lado también necesito trabajar con esas notas para calcular la mas alta, la mas baja y la media...

Para la realización de estos ejercicios NO puedo usar funciones o procedimientos auxiliares, ni la utilización de datos estructurados (cadenas, registros, vectores o matrices)

¿Me podéis guiar un poquito? Muchas gracias!
#4
Hola, necesito hacer un programa que sume las posiciones par (empezando por la derecha) de una cifra, por ejemplo de 54684738 sumaria 3+4+6+5=18, y no tengo ni idea de cómo hacerlo ya que no puedo utilizar cadenas, registros, vectores ni matrices. He conseguido hacerlo que sume las cifras pares, pero lo que necesito es que sume las cifras que ocupan las posiciones pares.

¿Alguna idea?
Se agradece mucho!
Saludos 
#5
Hola, buenas noches compañeros!!

Pues eso que pongo en el asunto, seguro que es muy fácil pero no me aclaro.
Tengo que hacer un programa que pida un número y diga si es perfecto, abundante o deficitario, y si se escribe el 0 salga del programa. Ya he hecho el programa pero no sé como hacer para que después de decir que tipo de número es vuelva a pedir de nuevo otro número, y así hasta que se escriba el 0.

¿Me podéis echar una mano? Por favor!

Gracias y saludos!
#6
Hola buenas a todos/as,

Estoy empezando en esto de la programación y haciendo un ejercicio me estoy volviendo loco, y seguro que no será tan difícil... La cuestión es que necesito hacer un programa que pida al usuario un carácter o numero, si es un numero de 1 a 7 diga el día de la semana asociado, y si es un carácter de la A a la G diga el numero que le corresponde, por ejemplo a la b o la B el 2...
Y el problema es que no se como guardar el valor tecleado ya que si es un numero es un int y si es un carácter debe ser un char.


#include <iostream>
using namespace std;

char caracter;

int main(void) {

cout<<"\nEscribe un carácter: "; cin>>caracter;

if (caracter >= 0 && caracter <= 7)
{
if (caracter == 1 ){
cout<<"El dia de la semana asociado al caracter "<<caracter<< " es el Lunes";
}

else if (caracter == 2 ){
cout<<"El dia de la semana asociado al caracter " <<caracter<< " es el Martes";
}

else if (caracter == 3 ){
cout<<"El dia de la semana asociado al caracter "<<caracter<< " es el Miercoles";
}

else if (caracter == 4 ){
cout<<"El dia de la semana asociado al caracter "<<caracter<< " es el Jueves";
}

else if (caracter == 5 ){
cout<<"El dia de la semana asociado al caracter "<<caracter<< " es el Viernes";
}

else if (caracter == 6 ){
cout<<"El dia de la semana asociado al caracter "<<caracter<< " es el Sábado";
}

else if (caracter == 7 ){
cout<<"El dia de la semana asociado al caracter "<<caracter<< " es el Domingo";
}
}

else if ((caracter >= 'a' && caracter <= 'g') || (caracter >= 'A' && caracter <= 'G'))
{
if (caracter =='a' || caracter == 'A') {
cout<<"El numero asociado al caracter "<<caracter<<" es el 1";
}

if (caracter =='b' || caracter == 'B') {
cout<<"El numero asociado al caracter "<<caracter<<" es el 2";
}

if (caracter =='c' || caracter == 'C') {
cout<<"El numero asociado al caracter "<<caracter<<" es el 3";
}

if (caracter =='d' || caracter == 'D') {
cout<<"El numero asociado al caracter "<<caracter<<" es el 4";
}

if (caracter =='e' || caracter == 'E') {
cout<<"El numero asociado al caracter "<<caracter<<" es el 5";
}

if (caracter =='f' || caracter == 'F') {
cout<<"El numero asociado al caracter "<<caracter<<" es el 6";
}

if (caracter =='g' || caracter == 'G') {
cout<<"El numero asociado al caracter "<<caracter<<" es el 7";
}
}

else {
cout<<"El carater introducido no es un valor alfanumerico aceptado";
}

return 0;
}



Si declaro un char me funciona con los caracteres y si declaro un int me funciona con los números, pero no se como hacer para que me funcione en ambos casos.

¿Alguna ayuda?

Muchas gracias!