[Curso] Introducción a la programación en C (VIII)

Moderadores: Kravenbcn, largeroliker, fidelcastro, cerealkiller, pspCaracas, m0skit0, LnD, ka69, zacky06

Avatar de Usuario
Dante
Enteradillo
Enteradillo
Mensajes: 42
Registrado: 28 May 2010, 01:51

Re: [Curso] Introducción a la programación en C (VIII)

Mensaje por Dante »

mejor tarde que nunca :lol: , los dos ejercicios que estaban mal, y lo de darle el nombre cache a la variable, la verdad no recuerdo bien por que lo hice :mrgreen: , ahora que lo pienso contador le hubiera quedado mejor

Ejercicio 3:
Spoiler:

Código: Seleccionar todo

#include <stdio.h>

#include <stdlib.h>

int main()

{
     int num, num2, x;

     printf("Introduce un numero: ");
     scanf("%d", &num);

     printf("Itroduce otro numero: ");
     scanf("%d", &num2);

     x = 0;

     if((num + num2) % 2 == 0)
     {
            printf("Se mostraran todos los numeros pares hasta el numero resultado de la suman\n");

            while(x <= (num + num2))
            {
                    printf("%d\n", x);
                    x += 2;
             }
      }     
     else
     {
             printf("Se mostraran todos los numeros impares hasta el numero resultado de la suma");
             x = 1;

            while(x <= (num + num2))
            {

             printf("%d\n", x);
             x += 2;

             }

     }             
             
     system("PAUSE");               

     return 0;

}

 


Creo que este ejercicio ha sido hasta ahora el mas difícil que se me a hecho, me sentí realizado cuando funciono :D pero en fin.
Ejercicio 4:
Spoiler:

Código: Seleccionar todo

#include <stdio.h>

#include <stdlib.h>

main()

{

   int num, cont = 2; 

   printf("Introduce un numero: ");
   scanf("%d", &num);
 
   while(num%cont !=0)
   cont++;
   
   if (num==cont)
   {     
      printf("El numero es primo");
   }
   else
   {
      printf("El numero no es primo"); 
   }
   return 0;

}


Espero tu revisión

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

Re: [Curso] Introducción a la programación en C (VIII)

Mensaje por m0skit0 »

Dante escribió:Ejercicio 3:

Bien, pero sigue flojo. Sigues escribiendo el mismo bucle en dos partes del código. Es exactamente el mismo bucle, ¿para qué escribirlo dos veces? Sigue buscando la manera de escribirlo sólo una vez.

Código: Seleccionar todo

num + num2

Calculas demasiadas veces esta suma. En el bucle while se calcula esta suma a cada vuelta, algo innecesario ya que ni num ni num2 cambian de valor.

Dante escribió:Ejercicio 4:

Bien, lo hace, pero de la forma más "basta". Se puede hacer muchísimo más rápido (el doble de rápido en la optimización más obvia). Si quieres pegarte un poco más con él a lo mejor consigues una forma más bonita de hacerlo. Todo depende de tu ambición :lol:

Ah, el while va con {}. Bien es cierto que C permite no ponérselos, pero acostúmbrate a ponerlos siempre.
Imagen

Avatar de Usuario
dRoLl3R
Habitual
Habitual
Mensajes: 315
Registrado: 29 Sep 2009, 21:30
Ubicación: [ † ] Asturias

Re: [Curso] Introducción a la programación en C (VIII)

Mensaje por dRoLl3R »

Mira lo que se me ocurrió el otro dia :P

Ejercicio 4:
Spoiler:

Código: Seleccionar todo

#include <stdio.h>

int main(int argc, char* argv[])
{
    int num, n = 3, primo = 1;
   
    printf("Te voi a decir si un numero es primo o no.\n");
    printf("Introduce un numero entero: ");
    scanf("%d", &num);
   
    if (num < 2)
        printf("\nEl numero no es valido.");
    else if (num == 2)
        printf("\nEl numero es primo.");
    else if (num % 2 == 0)
        printf("\nEl numero no es primo.");
    else
    {
        while ((n*n <= num) && (primo == 1))
        {
              if (num % n == 0)
                 primo = 0;
              n = n + 2;
        }
         
        if (primo == 1)
           printf("El numero es primo.");
        else
           printf("El numero no es primo.");
    }
       
    return 0;
}
PSP3ooo: 4.21 -> 5.00 -> 5.03 -> 5.03 GEN-A -> 5.03 M33 -> 5.03 MHU -> 5.03 GEN-C -> 5.03 MHU -> 6.20 PRO-B4

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

Re: [Curso] Introducción a la programación en C (VIII)

Mensaje por m0skit0 »

Hm parece estar bien, pero un poco enrevesado en mi opinión. Y lento. Hallar el cuadrado de n por cada vuelta del bucle es muy costoso en tiempo de proceso. La multiplicación y sobre todo la división consume mucho tiempo de procesador.

Pero me ha gustado eso de "se me ocurrió el otro día". Pensar en ello, siempre ayuda a la mente a incorporar esos conceptos a su funcionamiento :oki:
Imagen

Avatar de Usuario
dRoLl3R
Habitual
Habitual
Mensajes: 315
Registrado: 29 Sep 2009, 21:30
Ubicación: [ † ] Asturias

Re: [Curso] Introducción a la programación en C (VIII)

Mensaje por dRoLl3R »

Es que con el cuadrado de n el bucle recorre muchos menos números, recorre hasta la raíz cuadrada del número que quieres comprobar por lo que se reducen muchísimo los números a comprobar.
PSP3ooo: 4.21 -> 5.00 -> 5.03 -> 5.03 GEN-A -> 5.03 M33 -> 5.03 MHU -> 5.03 GEN-C -> 5.03 MHU -> 6.20 PRO-B4

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

Re: [Curso] Introducción a la programación en C (VIII)

Mensaje por m0skit0 »

Sí, lo sé, pero aún así gastas más tiempo de computación, sobre todo para número grandes. Comparar un número es una resta, que al fin y al cabo es una suma, que el procesador hace cual rayo. Una multiplicación le cuesta como 5 veces más (como mínimo).
Imagen

Avatar de Usuario
dRoLl3R
Habitual
Habitual
Mensajes: 315
Registrado: 29 Sep 2009, 21:30
Ubicación: [ † ] Asturias

Re: [Curso] Introducción a la programación en C (VIII)

Mensaje por dRoLl3R »

Buff, entonces no se como optimizarlo mas :(
PSP3ooo: 4.21 -> 5.00 -> 5.03 -> 5.03 GEN-A -> 5.03 M33 -> 5.03 MHU -> 5.03 GEN-C -> 5.03 MHU -> 6.20 PRO-B4

Avatar de Usuario
Dark Pallacus
ViP Hordes
ViP Hordes
Mensajes: 1509
Registrado: 03 Sep 2009, 00:35
PSN ID: Pallacus
Ubicación: Barcelona
Contactar:

Re: [Curso] Introducción a la programación en C (VIII)

Mensaje por Dark Pallacus »

1. Dado un número entero evaluar si es menor que 20 y par (debe cumplir ambas condiciones).
Spoiler:

Código: Seleccionar todo

#include <stdio.h>

int main(int argc, char *argv[])
{
  //Establecemos la variable.
  int numero;
  //Damos instrucciones al usuario.
  printf("\n Por favor, introduce un numero menor que 20 y que sea par: ");
  scanf(" %d", &numero);
 
  if ((numero < 20) && (numero %2 == 0))
    printf("\n BIEN! Me gusta el numero %d\n\n", numero);
  else
    printf("\n El numero proporcionado no cumple los requisitos.\n\n");

  return 0;
}


2. Dados dos números reales, evaluar si la media, la suma y la multiplicación son mayores que 20 (cada una de ellas).
Spoiler:

Código: Seleccionar todo

#include <stdio.h>

int main(int argc, char *argv[])
{
  //Establecemos las variables requeridas
  int numero_1, numero_2;
  char *frase_1 = " es 20!", *frase_2 = " es mayor que 20.";
 
  //Pedimos al usuario que introduzca dos números enteros
  printf("\n Por favor, introduce dos numeros enteros: ");
  scanf(" %d %d", &numero_1, &numero_2);
 
  //Calculamos y publicamos si se cumplen las condiciones.
  //Media.
  printf("\n La media de ambos números");
  if ((numero_1 + numero_2) /2 == 20)
    printf("%s", frase_1);
  else if ((numero_1 + numero_2) /2 < 20)
  {
    printf(" no");
    printf("%s", frase_2);
  }
  else if ((numero_1 + numero_2) /2 > 20)
    printf("%s", frase_2);
 
  //Suma.
  printf("\n La suma de ambos numeros");
  if ((numero_1 + numero_2) == 20 )
    printf("%s", frase_1);
  else if ((numero_1 + numero_2) < 20)
  {
    printf(" no");
    printf("%s", frase_2);
  }
  else if ((numero_1 + numero_2) > 20)
    printf("%s", frase_2);
 
  //Producto
  printf("\n El producto de ambos numeros");
  if ((numero_1 * numero_2) == 20)
    printf("%s", frase_1);
  else if ((numero_1 * numero_2) < 20)
  {
    printf(" no");
    printf("%s", frase_2);
  }
  else if ((numero_1 * numero_2) > 20)
    printf("%s", frase_2);
 
  printf("\n\n");
 
  return 0;
}

Voy a por los otros, y luego revisaré el hilo ;)
Última edición por Dark Pallacus el 05 Ene 2011, 17:20, editado 1 vez en total.
PS3 - PSP 2000

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

Re: [Curso] Introducción a la programación en C (VIII)

Mensaje por m0skit0 »

Perfecto Pallacus, veo que esto es lo tuyo ;)
Imagen

Avatar de Usuario
Dark Pallacus
ViP Hordes
ViP Hordes
Mensajes: 1509
Registrado: 03 Sep 2009, 00:35
PSN ID: Pallacus
Ubicación: Barcelona
Contactar:

Re: [Curso] Introducción a la programación en C (VIII)

Mensaje por Dark Pallacus »

De momentro si XD
Iguamlente se acepta cualquier comentario ;)

El tercero me ha costado, eh!
3. Dados dos números enteros, si la suma de ambos es par, imprimir todos los valores pares hasta el mayor de ellos. Si la suma no es par, imprimir los valores impares hasta la suma de ambos.
Spoiler:

Código: Seleccionar todo

#include <stdio.h>

int main(int argc, char *argv[])
{
  //establecemos las variables:
  int numero_1, numero_2, contador = 0;
 
  //Pedimos al usuario que proporcione 2 numeros enteros
  printf("\n Por favor, introduce 2 numeros enteros: ");
  scanf(" %d %d", &numero_1, &numero_2);
 
  printf("\n La suma de ambos es ");
 
  //Si la suma es par imprimiremos todos los pares.
  if ((numero_1 + numero_2) % 2 == 0)
  {
    printf("par. Igual que: ");
   
    while (contador <= (numero_1 + numero_2))
    {
      if (contador % 2 == 0)
   printf("%d, ", contador);
      contador ++;
    }
   
  }
 
  //Si no es par es que es impar. En este caso imprimiremos los impares.
  else
  {
    printf("impar. Igual que: ");
   
    while (contador <= (numero_1 + numero_2))
    {
      if (contador % 2 != 0)
   printf("%d, ", contador);
      contador ++;
    }
   
   }
  printf("\n\n");
 
  return 0;
}

Y el cuarto.
4. Dado un número entero, verificar si el número es primo o no.
Spoiler:

Código: Seleccionar todo

#include <stdio.h>

int main(int argc, char *argv[])
{
  int numero, contador = 2;
 
  //pedimos al usuario que introduzca un número.
  printf("\n Por favor, introduce un numero entero y comprobare si es primo o no: ");
  scanf(" %d", &numero);
 
  while (contador < numero)
  {
    if (numero % contador == 0)
    {
      printf("\n %d no es primo. Pero tu si.", numero);
      contador = contador + numero;
    }
    contador ++;
  }
   
  //Compruebo si el numero introducido es 0. ¬¬
  if (numero == 0)
    printf("\n En serio que has puesto %d?", numero);
   
  //Compruebo si el numero introducido es 1.
  if (numero == 1)
    printf("\n %d es el primero de los primos. Como tu.", numero);
 
  //Si el numero no es divisible, "contador" acabará teniendo el mismo valor que "numero", por tanto:
  if (contador == numero)
    printf("\n %d es primo!", numero);
 
  printf("\n\n");
  return 0;
}


Y el último: Probadlo que os vais a reír. ;)
5. Crear un programa en el que un usuario A introduce un número secreto entre 0 y 10 y otro usuario B debe adivinarlo en 5 intentos máximo. El programa sólo se debe detener si el usuario B acertó o si ha gastado los 5 intentos de manera fallida.
Spoiler:

Código: Seleccionar todo

#include <stdio.h>

int main(int argc, char *argv[])
{
  //Establecemos las variables.
  char jugador_1 [20], jugador_2 [20];
  int clave_secreta, numero_2, turno = 1;
 
  //Pedimos a los usuarios que se identifiquen.
  printf("\n Introduce el nombre del jugador 1: ");
  scanf("%s", jugador_1);
  printf("\n Introduce el nombre del jugador 2: ");
  scanf("%s", jugador_2);
 
  // Ahora pedimos al jugador 1 que introduzca un número secreto.
  printf("\n\n %s escribe un numero del 0 al 10 :", jugador_1);
  scanf(" %d", &clave_secreta);
  system ("clear");
 
  while (turno <= 5)
  {
    printf("\n %s cual crees que es el numero que ha elegido %s? ", jugador_2, jugador_1);
    scanf(" %d", &numero_2);
    if (numero_2 == clave_secreta)
    {
      printf("\n Felicidades! Eres telequinesico!");
      turno = 10;
    }
    //Si se equivoca, nos reimos de él.
    else if (numero_2 == 0)
      printf("\n Cero patatero!");
    else if (numero_2 == 1)
      printf("\n Uno! Que no pare ninguno!");
    else if (numero_2 == 2)
      printf("\n Dos! Dime adios!");
    else if (numero_2 == 3)
      printf("\n Tres! Prueba del reves!");
    else if (numero_2 == 4)
      printf("\n Cuatro! Atate el zapato!");
    else if (numero_2 == 5)
      printf("\n Cinco! Ai, pillin, pillin!");
    else if (numero_2 == 6)
      printf("\n Seis! A ver si aprendeis!");
    else if (numero_2 == 7)
      printf("\n Siete! Pa cagarla al retrete!");
    else if (numero_2 == 8)
      printf("\n Ocho! Te has quedado sin bizcocho!");
    else if (numero_2 == 9)
      printf("\n Nueve! Date prisa que llueve!");
    else if (numero_2 == 10)
      printf("\n Diez! Pero aciertalo pardiez!");
    turno ++;
  }
  printf("\n\n");
  return 0;
}
PS3 - PSP 2000

Responder