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 - jamatbar

#81
Buenas, tengo el siguiente programa, que hace lo siguiente;

Un programa que lea dos caracteres hexadecimales y dé como salida su valor en decimal, en el que se permiten el uso de minusculas y además, que si se introduce un caracter invalido te lo indicará con un mensaje de error, y por ultimo, que si escribes la sentencia qq el programa se termine.

El codigo del programa es el siguiente (ya hace todo lo que se pide);

#include <stdio.h>

int main ()
{
 // Declaramos las variables
 char car1;
 char car2;
 char valor1;
 char valor2;
 int valor;
 int flag; // Declaramos la variable de control
   
do { // Iniciamos el bucle do-while
   flag=0;
   printf("Introduzca un valor hexadecimal:\n");
   scanf("\n%c%c", &car1, &car2);
   
   if (car1 == 'q' && car2 == 'q') // Con esta sentencia hacemos que el programa finalice al escribir qq
       {
       printf("Presione enter para salir\n");
       while (getchar()!='\n');
       getchar ();
       return 0;
       }
   
   else
    {
       if('0'<=car1 && car1<='9')
       valor1=car1-'0';
       else if ('A'<=car1 && car1<='F')
       valor1=car1-'A'+10;
       else if ('a'<=car1 && car1<='f')
       valor1=car1-'a'+10;
       else
         {
         flag=1;
         printf("Valor erroneo\n\n");
         }
       
       if('0'<=car2 && car2<='9')
       valor2=car2-'0';
       else if ('A'<=car2 && car2<='F')
       valor2=car2-'A'+ 10;
       else if ('a'<=car2 && car2<='f')
       valor2=car2-'a'+10;
       else
         {
           flag=1;
           printf("Valor erroneo\n\n");
         }

       if (flag==0)
         {
           valor= 16*valor1 + valor2;
           printf("EL valor decimal de 0x%c%c es %d\n",car1,car2,valor);
         }
    }
   
}  
   while(1);
   
   return 0;
}


Y ahora me piden lo siguiente: Modificar el programa de tal forma que, además de la función main, exista una función que tome como parámetros dos caracteres hexadecimales y devuelva su valor decimal: Esto supone: declarar la nueva función, definir la nueva función y modificar la función main para que use la nueva funcion.

Pues bien, haciendo algunos cambios he llegado a esto:

#include <stdio.h>

int hexadecimal (char car1, char car2);
int main ()

{

 char car1;
 char car2;
 char valor1;
 char valor2;
 int valor;
 int flag;
   

   flag=0;
   printf("Introduzca un valor hexadecimal:\n");
   scanf("\n%c%c", &car1, &car2);
   
   valor=hexadecimal(car1,car2);
   
   int hexadecimal (char car1, char car2)
   
   {
   
   if (car1 == 'q' && car2 == 'q')
       {
       printf("Presione enter para salir\n");
       while (getchar()!='\n');
       getchar ();
       return 0;
       }
   
   else
    {
       if('0'<=car1 && car1<='9')
       valor1=car1-'0';
       else if ('A'<=car1 && car1<='F')
       valor1=car1-'A'+10;
       else if ('a'<=car1 && car1<='f')
       valor1=car1-'a'+10;
       else
         {
         flag=1;
         printf("Valor erroneo\n\n");
         }
       
       if('0'<=car2 && car2<='9')
       valor2=car2-'0';
       else if ('A'<=car2 && car2<='F')
       valor2=car2-'A'+ 10;
       else if ('a'<=car2 && car2<='f')
       valor2=car2-'a'+10;
       else
         {
           flag=1;
           printf("Valor erroneo\n\n");
         }

       if (flag==0)
         {
           valor= 16*valor1 + valor2;
           printf("EL valor decimal de 0x%c%c es %d\n",car1,car2,valor);
         }
    }
    }
   

   
   return 0;
}


Pero me da una serie de errores al compilar, ¿alguna ayuda o sugerencia?

Gracias de antemano y saludos!
#82
Mi código ha quedado así:

#include <stdio.h>
int main()
{
int valor;
int i;
int flag = 1;

printf("Introduzca un valor: ");
scanf(" %d", &valor);

for ( i = 2; i < valor && flag!=0; i++ )
if (0 == (valor % i))
{flag = 0;
}
if (flag == 1)
printf(" %d es primo\n", valor);
else
printf(" %d no es primo\n",valor);
return 0;
}


Pero ahora me piden que una vez comprobado que el dos no es divisor, probar sólo con los números impares.


EDITO poniendo lo que he intentado:

#include <stdio.h>
int main()
{
int valor;
int i;
int flag = 1;

printf("Introduzca un valor: ");
scanf(" %d", &valor);

for ( i = 2; i < valor && flag!=0; i+=2 )
if (0 == (valor % i))
{flag = 0;
}
if (flag == 1)
printf(" %d es primo\n", valor);
else
printf(" %d no es primo\n",valor);
return 0;
}


¿Con eso bastaría no?


Saludos
#83
Gracias a todos por vuestras ayudas, y hombre, no son exigencias, es que básicamente me lo piden con eso XD
#84
A ver, el programa me ha quedado así:

#include <stdio.h>

int main ()
{
  int valor;
  int i;
  int flag = 1;//variable de control
  printf("Introduzca un valor:");
  scanf ("%d", &valor);//lee el número
 
  for (i=2; i < valor ; i++ )
    if (0 == (valor % i ))
      {//bucle que se repite hasta que i es igual a valor
flag = 0;
      }
  if (flag == 1)
    printf ("%d es un número primo\n", valor);
  else // en funcion del valor de flag se imprime una u otra cosa
    printf ("%d no es primo \n", valor);
  return 0;
}


Ahora me piden que: Para mejorar la eficiencia del programa, el bucle debe finalizar una vez encontrado el primer divisor. Para ello deberá hacer uso de la variable de control usada en el apartado anterior.

No lo entiendo, ¿se supone que el programa ya termina cuando encuentra un divisor no?

Saludos
#85
Ya he conseguido hacerlo, muchas gracias a todos por vuestra ayuda.

Saludos!
#86
Perdon, me comí un par de líneas de código, ya lo he editado

Saludos
#87
Vale, leyendo más o menos lo que habeís puesto he hecho lo siguiente:

#include <stdio.h>
int main()
{

int valor;

int i;
int flag;

printf("Introduzca un valor: ");
scanf(" %d", &valor);

for ( i = 2; i < valor; i++ )
if (0 == (valor % i))
flag=0;
if (flag)
printf("%d es primo\n",valor);
flag=1;


return 0;
}


Si meto un número primo me dice que es primo (sólo con una sentencia),¿que puedo hacer para poner una función si el numero que meto es no primo?

Además, me he dado cuenta de que si meto un 1,2 o 3 el programa sale directamente, ¿por qué?
Saludos
#88
Cita de: $Edu$ en 12 Noviembre 2011, 15:02 PM
Ademas si usas el metodo de DickgumShoe y lo probarias con un numero muy grande tendrias que hacer miles de ifs mas xD para ahorrar esos ifs es que se usan los bucles DickgumShoe.

Y lo de la variable flag, le puedes llamar como quieras, solo sera una variable auxiliar pero veo que la declaras y le asignas valores pero nunca verificas el valor para hacer algo.. cosa que esta al pedo sino xD

EL problema es que no sé muy bien como usarla XD
#89
Gracias por la ayuda, aunque me piden que use una variable de control (flag), por eso no puedo ponerlo como tu lo tienes.

Saludos!
#90
Programación C/C++ / Calculo de números primos
12 Noviembre 2011, 14:26 PM
Me han dado el siguiente código de programa en c, es un programa que pide un numero por teclado e indica si el número es o no primo, comprobando todos los posibles divisores:



#include <stdio.h>
int main()
{

int valor;

int i;

printf("Introduzca un valor: ");
scanf(" %d", &valor);

for ( i = 2; i < valor; i++ )
if (0 == (valor % i))

printf(" %d no es primo\n", valor);
return 0;
}


He probado el código y es un poco malo, si el número es primo directamente se sale del programa, y si el número no lo es, te lo repite por cada divisor que tenga, y me han pedido que haga que solo se imprima un mensaje indicando si el número es primo o no al final del bucle. Para esto, nos dicen que utilicemos una variable de control, cuando encuentre un divisor se active dicha variable. Y al final del bucle se mostrará el mensaje adecuado segun el valor de la variable de control.

He pensado que se tendría que usar la variable de control flag, pero no sé como implementarla muy bien, ¿alguien podría aclararmelo?, yo lo he intentado poniendo esto:

#include <stdio.h>
int main()
{

int valor;
int i;
int flag;
printf("Introduzca un valor: ");
scanf(" %d", &valor);

flag=0;

for ( i = 2; i < valor; i++ )
if (0 == (valor % i))
{flag=1;
printf(" %d no es primo\n", valor);
}
else
flag=0;
printf(" %d es primo\n", valor);
return 0;
}


Pero aun así, al probarlo me sigue dando error, ¿alguna solución?

Saludos