Tag Archives: if else

Devolver cambio en C++

¿Han pagado algún recibo en una máquina automática y se han preguntado cómo será el programa que les devuelve el cambio? Lo más seguro es que no, pero pues resulta que el profesor de Miguel Ángel le encargó un programa que simulara eso, en sus propias palabras:

Supón que una maquina de monedas de 10,5,2,1 y 50 centavos. Debes escribir un programa que decida cuantas monedas dará de cambio, dando prioridad las de mayor denominación. Debe recibir como entrada la cantidad de dar a cambio. Ejemplo: para $40.50 será 4 de 10, 0 de 5, 0 de 2, 0 de 1 y 1 de 50 centavos.
Cambio
Así que el primer problema se presenta con la entrada ¿cómo hacer que el usuario introduzca sólo cantidades como $50 o $43.50 y no cantidades como $23.45 o $9.70?

Lo que se me ocurrió es pedir la cantidad en una variable float (cambio), en otra variable convertir esa cantidad a tipo int (cambioint). En ese proceso se perderá la parte decimal del número, así que si la resta cambio – cambioint es igual a 0 o igual a 0.50, la cantidad que introdujo el usuario es correcta.

La otra parte es sencilla, sólo se necesita ver si la variable cambio es mayor que 10. Si si,  se le restan 10 a la variable y se aumenta un contador. Luego se hace lo mismo con las demás monedas.

Pero bueno, el programa es este:

#include
using namespace std;

int main()
{
    float cambio; int cambioint, m10=0, m5=0, m2=0, m1=0, m50c=0;
    do
    {
        cout <> cambio;
        cambioint = (int)cambio;
    }while((cambio - cambioint) != 0 && (cambio - cambioint) != 0.50);
    while(cambio != 0)
    {
        if(cambio>=10)
        {
            m10++;
            cambio-=10;
        }
        else if(cambio>=5)
        {
            m5++;
            cambio-=5;
        }
        else if(cambio>=2)
        {
            m2++;
            cambio-=2;
        }
        else if(cambio>=1)
        {
            m1++;
            cambio-=1;
        }
        else if(cambio>=0.5)
        {
            m50c++;
            cambio-=0.5;
        }
    }
    cout << m10 << ", " << m5 << ", " << m2 << ", " << m1 << ", " << m50c;
}

Solo le faltaría darle un poco de formato a la salida, pero pues ya es cuestión de gustos y ya saben, cualquier duda aquí están los comentarios abajo.

Advertisements

Primo o no ¡SIN CICLOS! en C++

Me preguntaban en los comentarios de este post: Primo o no, que si habría alguna forma de hacer ese mismo programa pero sin ciclos. Mmmm…

Pues mi primera respuesta es no. Pero hay una forma muy burda de aproximarse a él. El siguiente programa es para calcular si un número es primo o no sin ciclos y es infalible hasta el 168, a partir de ahí puede que le atine o puede que no.

#include
using namespace std;

int main()
{
    int n;
    cout <> n;
    if(n!=2 & n%2==0)
        cout << "No es primo";
    else
    {
        if(n!=3 & n%3==0)
            cout << "No es primo";
        else
        {
            if(n!=5 & n%5==0)
                cout << "No es primo";
            else
            {
                if(n!=7 & n%7==0)
                    cout << "No es primo";
                else
                {
                    if(n!=11 & n%11==0)
                        cout << "No es primo";
                    else
                    {
                        cout << "Es primo";
                    }
                }
            }
        }
    }
}
  • Como vemos, primeramente checa si n es igual a 2; si no, checa si el residuo de n/2 es cero. Si si, no es primo; si no, sigue.
  • Luego checa si n es igual a 3; si no, checa si el residuo de n/3 es cero. Si si, no es primo; si no, sigue.
  • Lo mismo con el 5, el 7 y el 11.

Con eso obtenemos un buen número de números en los que estamos seguros que no fallaremos. Si agregamos el 13, agrandamos esa cantidad; y aún mas con el 17, el 19, … como en esta versión optimizada, que tiene su primer error con el 1681 (que no es primo)

#include
using namespace std;

int main()
{
    int n;
    cout <> n;
    if((n!=2 & n%2==0)||(n!=3 & n%3==0)||(n!=5 & n%5==0)||(n!=7 & n%7==0)||
       (n!=11 & n%11==0)||(n!=13 & n%13==0)||(n!=17 & n%17==0)||(n!=19 & n%19==0)||
       (n!=23 & n%23==0)||(n!=29 & n%29==0)||(n!=31 & n%31==0)||(n!=37 & n%37==0))
        cout << "No es primo";
    else
        cout << "Es primo";
}

Pero pues de eso no se trata, los ciclos son para evitar las cantidades interminables de ifs, así que usémoslos.

Ah y recuerden que si corren un programa y su compilador no se pausa solo, tienen que agregar cin.get();cin.get(); al final del programa, antes de la llave de cierre del main.

Si llegaste aquí buscando un programa para saber si un número es primo o no, sigue el link que está al principio del post.

Programa: Porcentaje de Hombres y Mujeres

Supongamos que nos preguntan qué porcentaje de hombres y qué porcentaje de mujeres hay un salón de clases. Lo primero que tenemos que hacer es preguntar el total de personas que hay, luego hacer un ciclo que en cada iteración pregunte el sexo de cada alumno. En base a esos datos se calculan los porcentajes.

El programa en c++ sería así:

#include<stdio.h>
#include<conio.h>
int main()
{
  float total=0,ciclo=0,conta_h=0,conta_m=0,porc_h=0,porc_m=0;
  char mof;
  gotoxy(5,5);printf("Cuantos alumnos hay en este grupo?: ");scanf("%f",&total);
  for(ciclo=1;ciclo<=total;ciclo++)
  {
    clrscr();
    PREG: gotoxy(10,6);printf("Sexo de alumno %.f? (M o F): ",ciclo);scanf("%c",&mof);
    if(mof=='m' || mof=='M')
      conta_h++;
    else if(mof=='f' || mof=='F')
      conta_m++;
    else
      goto PREG;
   }
  //Calculos
  porc_h=conta_h/total*100;
  porc_m=conta_m/total*100;
  //
  gotoxy(5,5);printf("El porcentaje de hombres es %.1f (%.f de %.f)",porc_h,conta_h,total);
  gotoxy(5,6);printf("El porcentaje de mujeres es %.1f (%.f de %.f)",porc_m,conta_m,total);
  getch();
}

if else anidados en c++

Ya había escritos varios posts sobre las condiciones if else en c++, pero algo que hace falta saber es que dentro de una estructura if puede haber otra estructura if tantos veces como sea necesario. Es decir:

if ( condicion )
{
  instrucciones
  if ( condicion )
  {
    instrucciones
  }
}
else
{
  if ( condicion )
  {
    instrucciones
  }
  else
  {
    instrucciones
  }
  instrucciones
}

¿Y como para qué? Pues hay algunas situaciones que así lo requieren. Por ejemplo:

“Si un alumno tiene un promedio mayor o igual a 9 se le hara un 20% de descuento en la colegiatura, si tiene un promedio mayor o igual a 8 pero menor que 9 el descuento será del 10%, si su promedio es menor que 8 pero mayor o igual a 7 el descuento será del 5% y si promedia con 7 o menos no tendrá descuento.”

La solución de este problema en c++ sería así:

Continue reading if else anidados en c++

Programa: ¿Aprobó o no aprobó?

También es muy común entre los profesores, encargar este tipo de programas una vez que se ven las condiciones. De lo que se trata es de pedir, por ejemplo, 3 calificaciones, sacar el promedio y mostrar un mensaje si el alumno aprobó o no aprobó.

Como el promedio puede ser una valor con decimales, tenemos que declarar las variables como tipo float.

#include<stdio.h>
#include<conio.h>

int main()
{
  float calif_1=0,calif_2=0,calif_3=0,promedio=0;
  printf("nIntroduce tu primera calificacion: ");scanf("%f",&calif_1);
  printf("nIntroduce tu segunda calificacion: ");scanf("%f",&calif_2);
  printf("nIntroduce tu tercera calificacion: ");scanf("%f",&calif_3);

  promedio=(calif_1+calif_2+calif_3)/3;

  if(promedio<6)
  {
   printf("ntLo siento, tu promedio de %.2f no es aprobatorio",promedio);
  }
  else
  {
    printf("ntFelicidades, pasaste con un %.2f",promedio);
  }

  getch();
}

Aquí estamos asumiendo que la calificación mínima aprobatoria es de 6, pero ¿y si quiero que este dato también sea variable? Entonces el programa quedaría así:
Continue reading Programa: ¿Aprobó o no aprobó?

Programa: ¿Qué tipo de triángulo es?

Ok, hasta hoy ya hemos visto las herramientas necesarias para hacer nuestro primer programa un poco más en serio. Este programa nos pide la medida de los tres lados de un triángulo y nos devuelve el tipo de triangulo que es (equilátero, isósceles o escaleno).

Para esto vamos a usar condiciones en C++ para comparar los lados de nuestro triángulo.

Un tríangulo equilátero tiene sus tres lados iguales, por tanto, la condición quedaría así:

“si el lado 1 es igual al lado 2 y el lado 2 es igual al lado 3, entonces es equilátero”

Un tríangulo isósceles tiene solo dos lados iguales, por tanto, la condición quedaría así:

“si el lado 1 es igual al lado 2 y el lado 2 es diferente al lado 3, o
el lado 2 es igual al lado 3 y el lado 3 es diferente al lado 1, o
el lado 3 es igual al lado 1 y el lado 1 es diferente al lado 2 entonces es isósceles”

Un tríangulo escaleno tiene sus tres lados diferentes, por tanto, la condición quedaría así:

“si el lado 1 es diferente al lado 2 y el lado 2 es diferente al lado 3 y el lado 3 es diferente al lado 1, entonces es escaleno”

Pero vamos a lo bueno. El programa completo en C++, sería así:

#include<stdio.h>
#include<conio.h>
int main()
{
  //Declaracion de variables
  int lado1=0,lado2=0,lado3=0;

  //Pedir los datos
  printf("TIPOS DE TRIANGULOS");
  printf("nIntroduce el lado 1: ");scanf("%i",&lado1);
  printf("nIntroduce el lado 2: ");scanf("%i",&lado2);
  printf("nIntroduce el lado 3: ");scanf("%i",&lado3);

  //Hacer comparaciones
  if(lado1==lado2 && lado2==lado3)
  { printf("ntEs equilatero"); }
  if(lado1==lado2 && lado2!=lado3 || lado2==lado3 && lado3!=lado1 || lado3==lado1 && lado1!=lado2)
  { printf("ntEs isosceles"); }
  if(lado1!=lado2 && lado2!=lado3 && lado3!=lado1)
  { printf("ntEs escaleno"); }

  //Pausa
  getch();
}

Aprovecho para explicarles un detalle más. n (alt+92 n) dentro de un printf(); indica un salto de línea, y t (alt+92 t) indica una sangría o tabulado o algo de espacio.

Condiciones (decisiones) en C++ – if, else

¿Cómo harían para saber si alguien es mayor o menor de edad? Creo que los pasos serían:

  1. Preguntarle su edad
  2. Si tiene 18 o más entonces es mayor de edad
  3. Si no, es menor de edad

Metiendonos al lenguaje de C++, quedaría algo así:

  1. scanf(“%d”, &edad);
  2. if(edad>=18) { printf(“Es mayor de edad”); }
  3. else { printf(“Es menor de edad”); }

if significa si y else significa si no

edad>=18 es una comparación. Si la variable ‘edad’ es mayor o igual a 18, se hacen las instrucciones que están entre las llaves {} del if; si no es así, se realizan las instrucciones que están entre las llaves del else.

El programa en sí quedaría de la siguiente forma:

#include<stdio.h>
#include<conio.h>
int main()
{
  int edad=0;
  printf("Cual es tu edad?: "); scanf("%d",&edad);
  if(edad>=18)
  {
    printf("Eres mayor de edad");
  }
  else
  {
    printf("Eres menor de edad");
  }
  getch();
}

Un if no tiene que tener un else ‘a fuerzas’, es opcional. Es muy importante que se fijen muy bien en las llaves, cada if tiene su llave de apertura y de cierre, al igual que el else.