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ú

Mensajes - doitunkboo

#1
Genial, me lo apunto para la próxima.  ;-)
#2
Gracias tio, mira para empezar estaba desarrollando mal el ejercicio, no lo terminaba de entender hasta que me he dado cuenta que no hay que comprobar si el número introducido por el usuario es primo o no, simplemente ese número marca el límite de la comprobación en la búsqueda del primo mayor, y reconozco que me ha costado  :xD

Ya lo he resuelto, el código quedaría mas o menos así, también he añadido la llamada a esPrimo() desde la función primoMayor() porque no estaba utilizando la función tal y como se pide en el ejercicio.


#include <stdio.h>
#include <math.h>

int esPrimo(int num) {
    int i;
    for (i=2; i<=sqrt(num); i++) {
        if (num%i == 0) {
            return 0;
        }
    }
    return 1;
}

int primoMayor(int num){
    int n, mayor;

    for (n=2;n<=num;n++){
        if (esPrimo(n))
            mayor=n;
    }
    return mayor;
}

int main() {
    int num, x, mayor;

    do {
    printf("Introduce un número superior a 1: ");
    scanf("%d", &num);
    } while (num<0);

    x=num;
    mayor=primoMayor(x);

    printf("El mayor primo comprendido entre 2 y %d es %d\n", num, mayor);
    return 0;
}


Saludos!
#3
Y como lo hago, con esto por ejemplo?
return mayor;

Me estoy dando cuenta que a la función primoMayor accede 2 veces y no se porqué  :-\
#4
Otro intento


#include <stdio.h>
#include <math.h>

int esPrimo(int num) {
   int i;
   for (i=2; i<=sqrt(num); i++) {
       if (num%i == 0) {
           return 0;
       }
   }
   return 1;
}

int primoMayor(int num){
   int n, mayor;

   for (n=2;n<=num;n++) // bucle para encontrar el número mayor
   {
       if (esPrimo(n))
           mayor=esPrimo(n);
   }
   return;
}

int main() {
   int num, n, i, mayor;

   do {
   printf("Introduce un número superior a 1: ");
   scanf("%d", &num);
   } while (num<0);

   i=num; // muevo el valor de num a i

   if (esPrimo(num)){
       primoMayor(i); // si el número introducido  es primo envío a la función primoMayor el valor
   }
   else {
   printf("El número %d no es primo.\n", num);
   return 0;
   }

   printf("El mayor primo comprendido entre 2 y %d es %d\n", num, primoMayor(num));
   return 0;
}


He hecho algunas modificaciones al código pero sigue sin funcionar correctamente, se que no hago bien alguno de los pasos, a ver si tu puedes ayudarme a entenderlo, gracias.
#5
El problema es que debo resolver el ejercicio sin tocar esa función (esPrimo), por eso no logro hacerlo funcionar  :-(
#6
Hola, tengo que resolver un ejercicio en C, que consiste en escribir una función con el siguiente prototipo: int primoMayor(int num). La función recibe un número en la variable num y ha de devolver el mayor de los primos comprendido entre 2 y el valor de num. Esta función ha de valerse para esto de llamadas a la función esPrimo().

El programa principal debe solicitar un número mayor o igual a 2, que llame a la función primoMayor() y muestre el valor que devuelva por pantalla.

Este sería un ejemplo del programa:

Introduce un número superior a 1: 7
El mayor primo comprendido entre 2 y 7 es 7.

Esto es lo que llevo por el momento, no tengo claro como hacer el bucle que determine que número de todos los primos es el mayor, a ver si podéis ayudarme, gracias.


#include <stdio.h>
#include <math.h>

int esPrimo(int num) {
   int i;
   for (i=2; i<=sqrt(num); i++) {
       if (num%i == 0) {
           return 0;
       }
   }
   return 1;
}

int primoMayor(int num){
   int n, mayor;
   mayor=0;
   for (n=2;n<=num;n++)
   {
       if (esPrimo(n)>mayor)
           mayor=esPrimo(n);
   }

}

int main() {
   int num, n, i, mayor;

   do {
   printf("Introduce un número superior a 1: ");
   scanf("%d", &num);
   } while (num<0);

   primoMayor(num);

   if (primoMayor(num)){
       for(n=2;n<=num;n++){
           if (esPrimo(n))
               mayor=primoMayor(num);
       }
   }
   else
   printf("El número %d no es primo.\n", num);
   return 0;

   printf("El mayor primo comprendido entre 2 y %d es %d", num, mayor);
   return 0;
}
#7
Ya resolví el problema  :xD

Este es el código:

#include <stdio.h>

int main(){

   FILE *archivo = NULL;
   char fichero[80];
   char nombre[15];
   char inicial[5];
   int i, dato1, dato2;

   printf ("Teclea el nombre del archivo: ");
   scanf ("%s", fichero);
   archivo = fopen (fichero, "r");
   if (!archivo){
       printf ("Error: no se pudo abrir el fichero: %s\n", fichero);
       return 1;
   }
   printf("Teclea una inicial: ");
   scanf("%s", inicial);


   for (i=0; fscanf(archivo, "%s %d %d", nombre, &dato1, &dato2) == 3;){
       printf("%s %d %d\n", nombre, dato1, dato2);
       if (nombre[0]==inicial[0]){
           i++;
       }
   }
   printf("Hay %d nombres que empiezan por la inicial %c \n", i, inicial[0]);
   fclose (archivo);

   return 0;
}
#8
Hola MCKSys, gracias por tú sugerencia, efectivamente era eso y ya lo he podido solucionar.

PD: Si no te importa te añado a los agradecimientos en el tuto que he hecho.

Saludos
#9
Gracias MCKSys voy a probarlo y os cuento...

Un saludo
#10
Hola karmany, lo único que te puedo asegurar es que si lo parcheo cargado en Ollydbg el programa no se cierra, pero en cuanto lo modificas y guardas los cambios ya no funciona bien, por eso deduzco que tiene alguna especie de chequeo, ya sea de crc o cualquier otro.

Que me sugieres? Esta hecho en Delphi y es el último escollo que me queda, ya que lo tengo bien en teoría bien parcheado.

Un saludo