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

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

Avatar de Usuario
Bright Julen
Experto
Experto
Mensajes: 843
Registrado: 03 Sep 2009, 11:34
PSN ID: BrightJulen
Contactar:

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

Mensaje por Bright Julen »

Por qué a veces me da problemas el else if? Me pone syntax error.
Imagen

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ó:El tema es, comprueba si suma es par y si num1 (suponiendo que sea el menor, si no tendría que añadir otra comprobación en cada caso) es par. Porque si lo hago tal y como lo escribo, si sumáramos 3 y 23 daría 26, par, pero a la hora de contar contaría 3, 5, 7, 9...y lo mismo en el caso inverso. Lo del código igual repetido cuatro veces es por eso.

¿Ein? Vaya líos mentales te haces xD. En tu ejemplo, 3 + 23 = 26, par, por tanto

m0skit0 escribió:imprimir todos los valores pares hasta el mayor de ellos

Imprimes 2, 4, 6 hasta 22. Con todos los valores pares hasta el mayor de ellos me refiero desde el 1 hasta el mayor de ambos números introducidos, no desde el menor hasta el mayor (que creo que es donde radica tu confusión).

largeroliker escribió:Como verás, la idea es comprobar si es par la suma y luego el número. Si el número es impar hay que convertirlo en par, y viceversa.

Como he dicho, no tienes que comprobar que el número es par. Y mucho menos convertirlo, que eres un lioso :tongue:

largeroliker escribió:Oka, lo he medio rehecho, a ver qué tal ahora:

Bueno, aparte de lo comentado más arriba, más cosillas :twisted:

Código: Seleccionar todo

int menor;

Sobra.

Código: Seleccionar todo

     while (menor < mayor)
     {
         printf("%d-", menor);
         menor+=2;
         sleep(500);   
     }   

Otra vez lo tienes repetido tal cual, aunque has reducido las repeticiones a la mitad xD Se puede hacer con un solo bucle. A comerse el coco :mrgreen:

Bright Julen escribió:Por qué a veces me da problemas el else if? Me pone syntax error.

Julen majo, como no pongas un código de ejemplo en el que te lo dé, mal andamos :|
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 »

m0skit0 escribió:
m0skit0 escribió:imprimir todos los valores pares hasta el mayor de ellos

Imprimes 2, 4, 6 hasta 22. Con todos los valores pares hasta el mayor de ellos me refiero desde el 1 hasta el mayor de ambos números introducidos, no desde el menor hasta el mayor (que creo que es donde radica tu confusión).

Cooño, haber empezao por ahí.

Spoiler:

Código: Seleccionar todo

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

int main(int argc, char *argv[])
{
  int num1, num2, suma, contador, mayor;
 
  //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, hasta el mayor.
  if (suma % 2 == 0)
    contador = 0;
  else
    contador = 1;
  while (contador < mayor)
     {
         printf("%d-", contador); 
         contador+=2; 
         sleep(500);   
     }   

  sleep(1000); 
  return 0;
}


Ahora? :mrgreen:

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

Avatar de Usuario
Bright Julen
Experto
Experto
Mensajes: 843
Registrado: 03 Sep 2009, 11:34
PSN ID: BrightJulen
Contactar:

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

Mensaje por Bright Julen »

Código: Seleccionar todo

//Ejercicio 5, lección VIII
#include<stdio.h>

int main()
{
    int numero_secreto, intentos, numero_introducido;
    //Introducimos el número secreto...
    printf("Jugador A, introduzca el numero secreto del 0 al 10: ");
    scanf("%d", &numero_secreto);
   
    //El otro jugador intenta adivinarlo...
    printf("\nJugador B, intente adivinar el numero (solo tienes 5 intentos): ");
    scanf("%d", &numero_introducido);
   
    intentos=5;
    while(numero_introducido!=numero_secreto)
    {                                         
    printf("\nLo siento, vuelve a intentarlo: ", intentos--);
    scanf("%d", &numero_introducido);
    if(intentos==0)
    {
    printf("\nLo siento, se termina el juego.\n");
    break;
    }
    }
    if(numero_introducido==numero_secreto);
    {
    printf("\nEnhorabuena, has acertado.\n");
    }   
    getch();
    return 0;
   
}

donde if(numero_introducido==numero_secreto); no me deja poner delante un else.
Imagen

Avatar de Usuario
dark_sasuke
Moderador Global
Moderador Global
Mensajes: 3380
Registrado: 03 Sep 2009, 02:13
Twitter: D4rkyt0

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

Mensaje por dark_sasuke »

prueba a imprimir fuera del bucle
Imagen

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ó:Ahora? :mrgreen:

No te precipites y vuelve a leer el enunciado :tongue:

Bright Julen, para empezar ese código tiene un formateo horrible (tirando por lo bajo), y no debes usar break. Si lo formatearas en condiciones verías por qué no puedes poner un else antes del if.

Spoiler:

Código: Seleccionar todo

//Ejercicio 5, lección VIII
#include<stdio.h>

int main()
{
    int numero_secreto, intentos, numero_introducido;
    //Introducimos el número secreto...
    printf("Jugador A, introduzca el numero secreto del 0 al 10: ");
    scanf("%d", &numero_secreto);
   
    //El otro jugador intenta adivinarlo...
    printf("\nJugador B, intente adivinar el numero (solo tienes 5 intentos): ");
    scanf("%d", &numero_introducido);
   
    intentos=5;
    while(numero_introducido!=numero_secreto)
    {                                         
      printf("\nLo siento, vuelve a intentarlo: ", intentos--);
      scanf("%d", &numero_introducido);
      if(intentos==0)
      {
         printf("\nLo siento, se termina el juego.\n");
         break;
      }
   }
   
   if(numero_introducido==numero_secreto);
   {
      printf("\nEnhorabuena, has acertado.\n");
   }   
   getch();
   return 0;
   
}

Porque un if va dentro del while y el otro fuera. Son dos condiciones en lugares diferentes. Para que entiendas un poco, un if..else, traducido al castellano sería: SI pasa esto haz esto otro, SI NO, haz aquello. Un if... else if sería SI pasa esto, haz esto otro, SI NO, ENTONCES SI pasa aquello, haz aquello otro. Esto no tiene sentido en caso de un if vaya dentro del bucle y el else fuera :tongue:
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 »

m0skit0 escribió:
largeroliker escribió:Ahora? :mrgreen:

No te precipites y vuelve a leer el enunciado :tongue:

Si la suma no es par, imprimir los valores impares hasta la suma de ambos.

....

Spoiler:

Código: Seleccionar todo

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

int main(int argc, char *argv[])
{
  int num1, num2, suma, contador, mayor;
 
  //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;
  else
    contador = 1;
  while (contador <= suma)
     {
         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:

m0skit0 escribió:si la suma de ambos es par, imprimir todos los valores pares hasta el mayor de ellos

Yo no veo que controles la condición de mayor, sólo veo la de la suma :shock:
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 »

Cierto...pero me dejo ahora mismo de programación hasta dentro de unos días, que mañana tengo el hachazo de Física.

PD: Se me ocurre una variable objeto que determine si irá a suma o a mayor a la vez que determina si contador vale 0 ó 1. Pero esto es sin mucho pensar que me piro a estudiar :lol:

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 »

Buena idea, pero se puede hacer sin necesidad de otra variable. Aunque sería un resultado totalmente válido.

¡Suerte con Física (y dale gracias a Gauss xD)!
Imagen

Responder