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

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

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

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

Mensaje por arisma »

100% de acuerdo con el getch(); :juasjuas:

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 (VII)

Mensaje por largeroliker »

m0skit0 escribió:
largeroliker escribió:decena= (numero/10)+1;

¿Para qué sumar 1? Es superfluo(r).

int decena = (numero/10)+1
Luego para el caso que comentaste del 52, 52/10 = 5.2, que al estar obligado a ser entero se redondea a cinco, más uno seis. Está en la sexta decena.
m0skit0 escribió:
arisma escribió:Del segundo, no usaria system("cls") es dependiente del sistema.

100% de acuerdo.

Esto sí que era superfluo, uso system("cls") para mostrar ese mensaje a modo de pequeño easter egg :mrgreen:
m0skit0 escribió:
arisma escribió:El 4º caso a mí no me funciona, me da como segundo número siempre 0, y el resultado ni por asomo se acercar.

La división no funciona, cierto. Vicejefe, comprueba tus programas antes de postearlos :tongue:

Además:

Código: Seleccionar todo

// Calculamos los resultados
suma= num1+num2; resta= num1-num2; prod= num1*num2; division= num1/num2;

¿Por qué calculas todo si sólo vas a mostrar uno? ¿Y por qué todo en la misma línea :roll: ?

Y déjate de getches ya :mrgreen:

Sabes que siempre procuro probar todo lo que publico :lol: pero iba con prisas y ese bug no lo ví.

Edito: Seguro que hay un bug? A mí me funciona.
Imagen
Tened en cuenta que hasta que no cambie la cosa en la carrera, yo programo en Windows para Windows. Por más que me pese xD

A lo segundo:

Manías del VB. No estoy acostumbrado a que el programa haga una sola operación y se cierre, así que lo dejo preparado para que haga cuantas quiera. Aún así me lo apunto.

Y a lo del getch(), os digo lo mismo que antes. Programo para Windows, y si no pongo el getch() se cierra el programa antes de leer la respuesta. Podría poner un retardo, pero pienso que es mejor dejarlo tal y como está.

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

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

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

Mensaje por arisma »

Sigo sin estar de acuerdo respecto al cls y al getch, siguen siendo dependientes.

Compila desde tu IDE, pero abre una linea de comandos y ejecutas desde ahí, así verás el contenido y no se cerrará.


Ahora respecto a la división, no funciona. Y ya no sólo porque los que compilamos en linux no funcione, ok se achacamos si quieres a nuestro compilador y etc, pero....

Siguiendo tu ejemplo, hazlo con lo siguientes datos->
625
25
Opción 4.
Resultado???? ->MAL, no es ese ;)

El motivo

Código: Seleccionar todo

printf("La division de %d y %.2f resulta %d", num1, num2, division);


Luego lo has corregido.

Por lo demás, el otro ejercicio hazlo sin sumarle 1 en el de las decenas.

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 (VII)

Mensaje por largeroliker »

arisma escribió:Sigo sin estar de acuerdo respecto al cls y al getch, siguen siendo dependientes.

Compila desde tu IDE, pero abre una linea de comandos y ejecutas desde ahí, así verás el contenido y no se cerrará.

Yap, pero para una comprobación es más lioso. Y lo mismo si lo ejecuto con doble click, depender de la consola me parece demasiado lioso...
arisma escribió:Ahora respecto a la división, no funciona. Y ya no sólo porque los que compilamos en linux no funcione, ok se achacamos si quieres a nuestro compilador y etc, pero....

Siguiendo tu ejemplo, hazlo con lo siguientes datos->
625
25
Opción 4.
Resultado???? ->MAL, no es ese ;)


Puees... :?
Imagen
Yo qué quieres que te diga. 625/25= 25...
EDIT: Se me movió el float de sitio, era %d,%d y %.2f pero se escurrió :lol:
arisma escribió:Por lo demás, el otro ejercicio hazlo sin sumarle 1 en el de las decenas.

Sin sumarle uno? Nontiendo...entonces dirá que 3 está en la decena 0 y que 52 en la 5, lo queréis así?

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 (VII)

Mensaje por m0skit0 »

largeroliker escribió:Yo qué quieres que te diga. 625/25= 25...

Prueba con 3 y 4, ya me cuentas.

largeroliker escribió:Sin sumarle uno? Nontiendo...entonces dirá que 3 está en la decena 0 y que 52 en la 5, lo queréis así?

Pero tú escribes "está en la primera decena". Es cuestión de cambiar el valor de los cases, nada más. Es superfluo sumarle 1, es una operación sin mucho sentido la verdad. Y así te vas acostumbrando a que las cuentas empiecen en 0, que te viene bien para más tarde ;)

En cuanto al tema del gecth() y system(), hazlo como quieras. Dejemos ya el tema.
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 (VII)

Mensaje por largeroliker »

m0skit0 escribió:
largeroliker escribió:Sin sumarle uno? Nontiendo...entonces dirá que 3 está en la decena 0 y que 52 en la 5, lo queréis así?

Pero tú escribes "está en la primera decena". Es cuestión de cambiar el valor de los cases, nada más. Es superfluo sumarle 1, es una operación sin mucho sentido la verdad. Y así te vas acostumbrando a que las cuentas empiecen en 0, que te viene bien para más tarde ;)

Ostia, ya lo veo :lol:
m0skit0 escribió:
largeroliker escribió:Yo qué quieres que te diga. 625/25= 25...

Prueba con 3 y 4, ya me cuentas.

Vale, ahí he visto un error.

Corregido dos:

Spoiler:

Código: Seleccionar todo

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  int eleccion;
  float num1, num2, suma, resta, prod, division;
 
  //Leemos los números
     printf("Introduzca los numeros a operar\n");
     printf("El primero sera: ");
     scanf("%f", &num1);
     printf("El segundo sera: ");
     scanf("%f", &num2);
     //Dejamos un espacio
     printf("\n\n");     
    //Ahora se muestran las opciones.
    printf("----Pulse 1 para sumar\n");
    printf("----Pulse 2 para restar\n");
    printf("----Pulse 3 para multiplicar\n");
    printf("----Pulse 4 para dividir\n");
    printf(" Su eleccion es: ");
    scanf("%d", &eleccion);
    //Dejamos un espacio
     printf("\n\n"); 
          
    //Calculamos las opciones y las mostramos en función de la elección deseada
    switch (eleccion)
     {
           case 1:
                suma= num1+num2;
                printf("La suma de %.0f y %.0f resulta %.0f", num1, num2, suma);
                break;
           case 2:
                resta= num1-num2;
                printf("La resta de %.0f y %.0f resulta %.0f", num1, num2, resta);
                break;
           case 3:
                prod= num1*num2;
                printf("La multiplicacion de %.0f y %.0f resulta %.0f", num1, num2, prod);
                break;
           case 4:
                division= num1/num2;
                printf("La division de %.0f y %.0f resulta %.2f", num1, num2, division);
                break;
           default:
                printf("No te inventes opciones...\n");
                break;
   }
           getch();
  return 0;
}

He cambiado los int por float en todos menos en elección, he eliminado el system ("cls") por superfluo y he limitado los cálculos en función del caso. El getch(), quiera o no, lo tengo que dejar... :(


El primero, corregido:

Spoiler:

Código: Seleccionar todo

#include <stdio.h>

int main(int argc, char* argv[])
{
  int numero, decena;
  //Capturamos el número
  printf("Introduzca un numero del 0 al 100\n");
  scanf("%d", &numero);
  //Hallamos la decena para el switch. Para ello, dividimos el número por diez.
  decena= numero/10;
 
  switch (decena)
  {
        case 0:
            printf("Esta en la primera decena\n");
            break;
        case 1:
            printf("Esta en la segunda decena\n");
            break;
        case 2:
            printf("Esta en la tercera decena\n");
            break;
        case 3:
            printf("Esta en la cuarta decena\n");
            break;
        case 4:
            printf("Esta en la quinta decena\n");
            break;
        case 5:
            printf("Esta en la sexta decena\n");
            break;
        case 6:
            printf("Esta en la septima decena\n");
            break;
        case 7:
            printf("Esta en la octava decena\n");
            break;
        case 8:
            printf("Esta en la novena decena\n");
            break;
        case 9:
             printf("Esta en la decima decena\n");
             break;
        default:
                if (numero ==100)
                printf("Esta en la decima decena\n");
                else
            printf("No esta entre 1 y 100\n");
            break;
            // 100 es un caso especial, porque numero/10+1 es igual a 11. Si incluyéramos case 11 101 también entraría,
            // así que la solución es añadir una excepción para el 100 en caso de que no se cumpla ninguna.
    }
  getch();
     
  return 0;
}

arisma, por más que le doy vueltas no caigo en algún algoritmo que permita definir todo el rango sin añadir también 101-109. Porque recuerda que entre 0 y 100 hay 101 números ;)


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 (VII)

Mensaje por m0skit0 »

Ok, ya lo tienes, aunque recuerda modificar los comentarios xDD

largeroliker escribió:no caigo en algún algoritmo que permita definir todo el rango sin añadir también 101-109

Pues añade ese rango. Y de paso haz algo para que detecte, antes de toda la pesca, si el número introducido entra en el rango pedido ;)
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 (VII)

Mensaje por largeroliker »

Hecho.

Código: Seleccionar todo

#include <stdio.h>

int main(int argc, char* argv[])
{
  int numero, decena;
  //Capturamos el número
  printf("Introduzca un numero del 0 al 100\n");
  scanf("%d", &numero);
  //Primero comprobamos que el número esté en el rango deseado. Si se da el caso, continúa.
  if (numero < 0)
      printf("No esta entre 1 y 100\n");
  else if (numero > 100)
      printf("No esta entre 1 y 100\n");
  else
  {
  //Hallamos la decena para el switch. Para ello, dividimos el número por diez.
  decena= numero/10;
 
  switch (decena)
  {
        case 0:
            printf("Esta en la primera decena\n");
            break;
        case 1:
            printf("Esta en la segunda decena\n");
            break;
        case 2:
            printf("Esta en la tercera decena\n");
            break;
        case 3:
            printf("Esta en la cuarta decena\n");
            break;
        case 4:
            printf("Esta en la quinta decena\n");
            break;
        case 5:
            printf("Esta en la sexta decena\n");
            break;
        case 6:
            printf("Esta en la septima decena\n");
            break;
        case 7:
            printf("Esta en la octava decena\n");
            break;
        case 8:
            printf("Esta en la novena decena\n");
            break;
        case 9:
             printf("Esta en la decima decena\n");
             break;
        default:
              printf("Esta en la undecima decena\n");
             break;
   }
   }
  getch();
     
  return 0;
}

Intenté poner if ( 100> numero < 0) pero no me dejaba...

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 (VII)

Mensaje por m0skit0 »

Bueno no importa, ya verás cómo hacerlo en la siguiente lección :mrgreen:
Imagen

Puzky
Experto
Experto
Mensajes: 825
Registrado: 07 Oct 2009, 22:09
PSN ID: Puzky

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

Mensaje por Puzky »

Hola
otra complicacion :oops:

Spoiler:

Código: Seleccionar todo

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  //Variable
  int numero, num;
  //Escaneo de datos
  printf("Introduce un numero entre el 1 y el 100: ");
  scanf("%d", &numero);
  //Condicionales
  num = numero/10
 
  switch(num)
  {
    case 1:
         printf("El %d esta en la primera decena", numero);
         break;
    case 2:
         printf("El %d esta en la segunda decena", numero);
         break;
    case 3:
         printf("El %d esta en la tercera decena", numero);
         break;
    case 4:
         printf("El %d esta en la cuarta decena", numero);
         break;
    case 5:
         printf("El %d esta en la quinta decena", numero);
         break;
    case 6:
         printf("El %d esta en la sexta decena", numero);
         break;
    case 7:
         printf("El %d esta en la septima decena", numero);
         break;
    case 8:
         printf("El %d esta en la octava decena", numero);
         break;
    case 9:
         printf("El %d esta en la novena decena", numero);
         break;
    case 10:
         printf("EL 100 esta en la decima decena =P");
         break;
    default:
         printf("Entre el 1 y el 100, Dahh!!!");
}
  return 0;
}


Me dan estos errores:
Spoiler:
-14 C:\Documents and Settings\ANGELICA\Escritorio\Curso C\VII\main.c syntax error before "switch"
-(Este error me lo da en todas las lineas donde tengo break C:\Documents and Settings\ANGELICA\Escritorio\Curso C\VII\main.c break statement not within loop or switch
-(este en todos los case) C:\Documents and Settings\ANGELICA\Escritorio\Curso C\VII\main.c case label not within a switch statement
-46 C:\Documents and Settings\ANGELICA\Escritorio\Curso C\VII\main.c `default' label not within a switch statement
-48 C:\Documents and Settings\ANGELICA\Escritorio\Curso C\VII\main.c syntax error before "return"


Edito:
Me faltaba un ; en

Código: Seleccionar todo

num = numero/10
:juasjuas:

Responder