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

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

Xanatos
Habitual
Habitual
Mensajes: 226
Registrado: 11 Nov 2009, 09:59

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

Mensaje por Xanatos »

largeroliker escribió:Hombre, el embalaje no lo pongo porque al fin y al cabo es un mero algoritmo hecho ejecutable, cuando llegue la hora de hacer un programa en condiciones le pondré todo lo habido y por haber, como hacía con Visual Basic :lol:



bueno pues como sea, edite un poco el código y no veo cual hubiera sido el problema solo era un poco:

Spoiler:
#include <stdio.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
int num1, num2, suma, contador, mayor, objeto;

//Saludo
printf("Este programa imprime:\ntodos los valores pares hasta el mayor de 2 numeros positivos dados\n");
printf("Si la suma de ambos es par\n");
printf("Y si no es par,\nimprime los valores impares hasta la suma de ambos numeros...\n");

//Leemos los números
printf("Introduzca el primer numero: ");
scanf("%d", &num1);
printf("Introduzca el segundo numero: ");
scanf("%d", &num2);

if(num1 > 0 && num2 > 0)// comprobamos que los dos numeros sean positivos
{

//Calculamos la suma
suma= num1+num2;
//Comprobamos el mayor
if (num1 < num2)
mayor = num2;
else
mayor = num1;
//Contamos desde 0 ó 1, dependiendo de si queremos pares o impares.
//Si es par, acabamos en el mayor
//Por contra si es impar, acabaremos en la suma
if (suma % 2 == 0)
{
contador = 0;
objeto = mayor;
}
else
{
contador = 1;
objeto = suma;
}
while (contador <= objeto)
{
printf("%d-", contador);
contador+=2;

}
}
else // si no son positivos, el programa termina!
{
printf("\n*****Lo siento este programa solo funcionacon numeros POSITIVOS*****\n ADIOS....\n");
}

return 0;
}


largeroliker escribió:Y sobre lo de negativo...es cierto, pero no sabría decirte si es por no reconocer el número como negativo o por no operar bien. No tengo tanta soltura en C :lol:


el programa reconoce el numero como negativo y el opera bien, el problema esta en otro lado!

pero bueno, que diga el profe si la tarea era incluir negativos y positivos o solo positivos!

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 »

Te lo doy por válido, vicejefe, aunque los comentarios de Xanatos están acertados.
Imagen

Avatar de Usuario
largeroliker
Administrador
Administrador
Mensajes: 8286
Registrado: 03 Sep 2009, 09:46
PSN ID: larger0o
Gamertag Xbox Live: larger0o
Steam ID: larger0o
Twitter: larger0o
Ubicación: Málaga
Contactar:

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

Mensaje por largeroliker »

He revisado el código y es correcto, siempre que la suma de ambos números, sean positivos o negativos, sea superior a 0 en el caso del par y de 1 en el caso de impar.

En el caso del 5 y -3 resulta 0-2-4, y es correcto. La razón:

En caso de suma par contaremos desde cero hasta el mayor de ellos mostrando únicamente los números pares. 5+(-3)= 2, par, luego cuenta hasta cinco.

Si introducimos 5 y -2 nos mostrará 1-3, y de nuevo es correcto. La razón:

En caso de suma impar contaremos desde uno hasta la suma de ambas cifras mostrando únicamente los números impares. 5+(-2)=3, impar, luego cuenta hasta tres.


Puedo añadirle un check para que cuente en el caso de resultados negativos si queréis, aunque el código aumentará.

Saludos! ;)
Imagen
Steam Deck · Xbox Series X · PS5 · Switch · PS Vita · WiiU · PS3 · new 3DS XL · Xbox 360 · PSP · PS2

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 »

No es correcto vicejefe, la paridad sólo se aplica a números naturales. De hecho, el cero no es par.
Imagen

arisma
Habitual
Habitual
Mensajes: 497
Registrado: 18 Sep 2009, 08:41

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

Mensaje por arisma »

m0skit0 escribió:No es correcto vicejefe, la paridad sólo se aplica a números naturales. De hecho, el cero no es par.


Es que el vicejefe defiende la Teoría de Conjuntos xD

Avatar de Usuario
largeroliker
Administrador
Administrador
Mensajes: 8286
Registrado: 03 Sep 2009, 09:46
PSN ID: larger0o
Gamertag Xbox Live: larger0o
Steam ID: larger0o
Twitter: larger0o
Ubicación: Málaga
Contactar:

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

Mensaje por largeroliker »

Le he añadido soporte para todo N.

Spoiler:

Código: Seleccionar todo

#include <stdio.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
  int num1, num2, suma, contador, mayor, objeto;
 
  //Leemos los números
  printf("Introduzca el primer numero: ");
  scanf("%d", &num1);
  printf("Introduzca el segundo numero: ");
  scanf("%d", &num2);
 
  //Calculamos la suma   
  suma= num1+num2;
   //Comprobamos el mayor
  if (num1 < num2)
      mayor = num2;
  else
      mayor = num1;
  //Contamos desde 0 ó 1, dependiendo de si queremos pares o impares.
//Si es par, acabamos en el mayor
//Por contra si es impar, acabaremos en la suma
   
  if (suma % 2 == 0)
  {
    contador = 0;
    objeto = mayor;
  }
  else
  {
    objeto = suma;
    //Si la suma da un resultado negativo, comenzaremos a contar desde -1
    if (suma < 0)
       contador = -1;
    else
       contador = 1;
  }
  //Si la suma da un resultado negativo, tendremos que contar de cero hacia abajo. Por tanto, habrá que restar.
  if (suma < 0)
  {
   while (contador >= objeto)
     {
         printf("(%d)-", contador);
         contador-=2;
         sleep(500);   
     }   
  }
  else
  {
      while (contador <= objeto)
     {
         printf("%d-", contador);
         contador+=2;
         sleep(500);   
         
     } 
  }     
   sleep(1000);
  return 0;
}


Saludos! ;)
Imagen
Steam Deck · Xbox Series X · PS5 · Switch · PS Vita · WiiU · PS3 · new 3DS XL · Xbox 360 · PSP · PS2

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 »

Vicejefe... Está bien para que practiques y tal, pero como he dicho, a los números negativos no se les aplica paridad. Además, repito que el 0 no es un número par. Por tanto tu supuesta mejora en realidad sigue estando mal. El programa sólo debe aceptar entradas válidas: números naturales nada más, cualquier otro tendría que devolver un error al usuario.

PD: eso de poner 2 bucles se puede remediar con uno solo.
Imagen

Avatar de Usuario
largeroliker
Administrador
Administrador
Mensajes: 8286
Registrado: 03 Sep 2009, 09:46
PSN ID: larger0o
Gamertag Xbox Live: larger0o
Steam ID: larger0o
Twitter: larger0o
Ubicación: Málaga
Contactar:

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

Mensaje por largeroliker »

Hombre, 0 pertenece al conjunto de los números naturales, pero por definición no es par...

Y ahora entiendo lo de paridad, te juro que antes no sabía de qué me estabas hablando :lol:

Código retocado.
Spoiler:

Código: Seleccionar todo

#include <stdio.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
  int num1, num2, suma, contador, mayor, objeto;

  //Leemos los números
  printf("Introduzca el primer numero: ");
  scanf("%d", &num1);
  printf("Introduzca el segundo numero: ");
  scanf("%d", &num2);
 
 if (num1 && num2 >= 0 )
{
  //Calculamos la suma   
  suma= num1+num2;
   //Comprobamos el mayor
  if (num1 < num2)
      mayor = num2;
  else
      mayor = num1;
  //Contamos desde 0 ó 1, dependiendo de si queremos pares o impares.
//Si es par, acabamos en el mayor
//Por contra si es impar, acabaremos en la suma
   
  if (suma % 2 == 0)
  {
    contador = 0;
    objeto = mayor;
  }
  else
  {
    objeto = suma;
     contador = 1;
  }
 
     while (contador <= objeto)
     {
         printf("%d-", contador);
         contador+=2;
         sleep(500);   
         
     }
}
 else
 printf("Alguno de los numeros introducidos es negativo y por tanto no valido");
     
   sleep(1000);
  return 0;
}


Saludos! ;)
Imagen
Steam Deck · Xbox Series X · PS5 · Switch · PS Vita · WiiU · PS3 · new 3DS XL · Xbox 360 · PSP · PS2

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 »

largeroliker escribió:0 pertenece al conjunto de los números naturales

Creo que no. 0 es un número entero, no natural.

largeroliker escribió:Código retocado.

Sigue estando mal. Acepta 0 y números negativos en el primer número. Ni compilarlo me ha hecho falta :tongue: A ver si probamos el código antes de postearlo :roll:
Imagen

Avatar de Usuario
largeroliker
Administrador
Administrador
Mensajes: 8286
Registrado: 03 Sep 2009, 09:46
PSN ID: larger0o
Gamertag Xbox Live: larger0o
Steam ID: larger0o
Twitter: larger0o
Ubicación: Málaga
Contactar:

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

Mensaje por largeroliker »

Spoiler:

Código: Seleccionar todo

#include <stdio.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
  int num1, num2, suma, contador, mayor, objeto;

  //Leemos los números
  printf("Introduzca el primer numero: ");
  scanf("%d", &num1);
  printf("Introduzca el segundo numero: ");
  scanf("%d", &num2);
 
 if ((num1 > 0) && (num2 > 0) )
{
  //Calculamos la suma   
  suma= num1+num2;
   //Comprobamos el mayor
  if (num1 < num2)
      mayor = num2;
  else
      mayor = num1;
  //Contamos desde 0 ó 1, dependiendo de si queremos pares o impares.
//Si es par, acabamos en el mayor
//Por contra si es impar, acabaremos en la suma
   
  if (suma % 2 == 0)
  {
    contador = 0;
    objeto = mayor;
  }
  else
  {
    objeto = suma;
     contador = 1;
  }
 
     while (contador <= objeto)
     {
         printf("%d-", contador);
         contador+=2;
         sleep(500);   
         
     }
}
 else
 printf("Alguno de los numeros introducidos no es positivo y por tanto no valido");
     
   sleep(1000);
  return 0;
}


Hala, pequeño fallo en la construcción.

m0skit0 escribió:Creo que no. 0 es un número entero, no natural.

Depende donde mire, lo aceptan o no.

http://descartes.cnice.mec.es/materiale ... atural.htm

Y según mis apuntes, lo es.

Saludos! ;)
Imagen
Steam Deck · Xbox Series X · PS5 · Switch · PS Vita · WiiU · PS3 · new 3DS XL · Xbox 360 · PSP · PS2

Responder