sentencias de control 2009 if switch sabatino · este documento es una extracción del libro...

35
2009 UNAN – LEON FACULTAD DE CIENCIA Y TECNOLOGIA Departamento de Computación Autor: MSc. Ana María Salgado G. Asignatura: Programación II Ingeniería en Sistemas Sabatino SENTENCIAS DE CONTROL (SENTENCIAS if Y switch) Este documento es una extracción del libro Programación en C, metodología, estructura de datos y objetos, de Luis Joyanes Aguilar e Ignacio Zahonero Martínez. Fue recopilado por la MsC. Ana María Salgado G. y completado con ejercicios obtenidos de otros textos e Internet.

Upload: truongkhue

Post on 14-Oct-2018

214 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: sentencias de control 2009 if switch SABATINO · Este documento es una extracción del libro Programación en C, metodología, estructura de datos y objetos, de Luis Joyanes Aguilar

2009

UNAN – LEON

FACULTAD DE CIENCIA Y TECNOLOGIA

Departamento de Computación

Autor: MSc. Ana María Salgado G.

Asignatura:

Programación II

Ingeniería en Sistemas Sabatino

SENTENCIAS DE CONTROL (SENTENCIAS if Y switch)

Este documento es una extracción del libro Programación en C, metodología, estructura de datos y objetos, de Luis Joyanes Aguilar e Ignacio Zahonero Martínez. Fue recopilado por la MsC. Ana María Salgado G. y completado con ejercicios obtenidos de otros textos e Internet.

Page 2: sentencias de control 2009 if switch SABATINO · Este documento es una extracción del libro Programación en C, metodología, estructura de datos y objetos, de Luis Joyanes Aguilar

Sentencias de control

MSc. Ana María Salgado G. 2

ESTRUCTURAS DE CONTROL

Las estructuras de control controlan el flujo de ejecución de un programa o

función. Las estructuras de control permiten combinar instrucciones o sentencias

individuales en una simple unidad lógica con un punto de entrada y un punto de

salida.

Las instrucciones o sentencias se organizan en tres tipos de estructuras de control

que sirven para controlar el flujo de la ejecución: secuencia, selección y repetición.

Hasta este momento sólo se ha utilizado el flujo secuencial. Una sentencia

compuesta es un conjunto de sentencias encerradas entre llaves ({ y } ) que se

utiliza para especificar un flujo secuencial.

{

sentencia1;

sentencia2;

.

.

.

sentencian;

}

El control fluye de la sentencia1, a la sentencia2, y así sucesivamente. Sin embargo

existen problemas que requieren etapas con dos o más opciones o alternativas a

elegir en función del valor de una condición o expresión.

Page 3: sentencias de control 2009 if switch SABATINO · Este documento es una extracción del libro Programación en C, metodología, estructura de datos y objetos, de Luis Joyanes Aguilar

Sentencias de control

MSc. Ana María Salgado G. 3

LA SENTENCIA if

En C, la estructura de control de selección es una sentencia if. La sentencia if tiene

dos alternativas o formatos posibles. El formato más sencillo tiene la sintaxis

siguiente:

if(condición)

sentencia;

condición es una expresión entera lógica

sentencia es cualquier sentencia ejecutable, que se ejecutará sólo si la condición

toma un valor distinto de cero.

La sentencia if funciona de la siguiente manera:

Cuando se llega a la sentencia if dentro de un programa, se evalúa la condición

entre paréntesis que viene a continuación de if. Si condición es verdadera, se

ejecuta sentencia; en caso contrario no se ejecuta sentencia. En cualquier caso la

ejecución del programa continúa con la siguiente sentencia del programa.

Diagrama de flujo de una sentencia básica if

condición

sentencia

verdadera

falsa

Page 4: sentencias de control 2009 if switch SABATINO · Este documento es una extracción del libro Programación en C, metodología, estructura de datos y objetos, de Luis Joyanes Aguilar

Sentencias de control

MSc. Ana María Salgado G. 4

Ejemplo #1:

Un hombre desea saber cuánto dinero se genera por concepto de intereses sobre la

cantidad que tiene en inversión en el banco. El decidirá reinvertir los intereses

siempre y cuando estos excedan a $7000, y en ese caso desea saber cuánto dinero

tendrá finalmente en su cuenta.

Pseudocódigo:

Inicio Leer p_int, cap interes = cap * p_int Si int > 7000 entonces capf = cap + interes Fin-si Imprimir capf Fin

Solución en Lenguaje C:

//if1.c

#include <stdio.h>

float p_int, cap, interes, capf;

void main(void)

{

printf("Introduzca su capital inicial: ");

scanf("%g", &cap);

printf("Cual es el porcentaje de interes?: ");

scanf("%g", &p_int);

interes = cap * p_int;

if(interes > 7000)

capf = cap + interes;

printf("El capital final es: %.2f\n",capf);

}

Page 5: sentencias de control 2009 if switch SABATINO · Este documento es una extracción del libro Programación en C, metodología, estructura de datos y objetos, de Luis Joyanes Aguilar

Sentencias de control

MSc. Ana María Salgado G. 5

Ejecución:

Ejemplo #2:

Este programa lee dos números enteros y comprueba cuál es el valor del resto de la

división (n %d). Si el resto es cero, n es divisible por d (en nuestro caso 36 es

divisible por 4, ya que 36 / 4 = 9 y el resto es 0)

Pseudocódigo:

Inicio Leer n,d Si (n mod d = 0) entonces

Imprimir n, “es divisible por “,d Fin-si Fin

Solución en Lenguaje C:

//divisibilidad.c

#include <stdio.h>

void main(void)

{

int n, d;

printf("Introduzca dos enteros:");

scanf("%d %d",&n,&d);

if(n % d = = 0)

printf("%d es divisible por %d \n",n,d);

}

Page 6: sentencias de control 2009 if switch SABATINO · Este documento es una extracción del libro Programación en C, metodología, estructura de datos y objetos, de Luis Joyanes Aguilar

Sentencias de control

MSc. Ana María Salgado G. 6

Ejecución:

Ejemplo #3: El siguiente programa determina si un número es positivo, negativo o nulo.

Pseudocódigo:

Inicio Leer numero Si (numero > 0) entonces

Imprimir numero, “es mayor que cero “ Fin-si Si (numero < 0) entonces

Imprimir numero, “es menor que cero “ Fin-si Si (numero = 0) entonces

Imprimir numero, “es igual a cero “ Fin-si Fin

Page 7: sentencias de control 2009 if switch SABATINO · Este documento es una extracción del libro Programación en C, metodología, estructura de datos y objetos, de Luis Joyanes Aguilar

Sentencias de control

MSc. Ana María Salgado G. 7

Solución en Lenguaje C:

//comparacion.c

#include <stdio.h>

void main()

{

float numero;

/* comparar numero introducido por el usuario */

printf("Introduzca un numero positivo o negativo: ");

scanf("%f", &numero);

/* comparar numero */

if(numero > 0)

printf("%f es mayor que cero\n",numero);

if(numero < 0)

printf("%f es menor que cero\n",numero);

if(numero = = 0)

printf("%f es igual a cero\n",numero);

}

Ejemplo #4:

El siguiente ejercicio, visualiza la tarifa de luz según el gasto de corriente

eléctrica. Para un gasto menor de 1000Kw por hora, la tarifa es 1.2, entre 1000 y

1850Kw por hora es 1.0 y mayor de 1850Kw por hora es 0.9

Page 8: sentencias de control 2009 if switch SABATINO · Este documento es una extracción del libro Programación en C, metodología, estructura de datos y objetos, de Luis Joyanes Aguilar

Sentencias de control

MSc. Ana María Salgado G. 8

Pseudocódigo:

Inicio TARIFA1 = 1.2 TARIFA2 = 1.0 TARIFA3 = 0.9 Leer gasto Si(gasto < 1000) entonces tasa = TARIFA1; Fin-si Si(gasto >= 1000 and gasto <= 1850) entonces tasa = TARIFA2; Fin-si Si(gasto > 1850) tasa = TARIFA3; Fin-si Imprimir "Tasa que le corresponde a “,gasto, “Kw x h es de “, tasa Fin

Solución en Lenguaje C:

//tarifaluz.c

#include <stdio.h>

#define TARIFA1 1.2

#define TARIFA2 1.0

#define TARIFA3 0.9

void main()

{

float gasto, tasa;

printf("\n Gasto de corriente: ");

scanf("%f",&gasto);

if(gasto < 1000)

tasa = TARIFA1;

Page 9: sentencias de control 2009 if switch SABATINO · Este documento es una extracción del libro Programación en C, metodología, estructura de datos y objetos, de Luis Joyanes Aguilar

Sentencias de control

MSc. Ana María Salgado G. 9

if(gasto >=1000 && gasto <= 1850)

tasa = TARIFA2;

if(gasto > 1850)

tasa = TARIFA3;

printf("\n Tasa que le corresponde a %.1f Kw x h es de %f \n",gasto, tasa);

}

Ejercicios propuestos

1. En un almacén se hace un 20% de descuento a los clientes cuya compra

supere los $1000 ¿Cuál será la cantidad que pagará una persona por su

compra?

2. Dados como datos los valores enteros P y Q, determine si los mismos

satisfacen la siguiente expresión:

P3 + Q4 – 2P2 < 680

En caso afirmativo debe imprimir los valores de P y Q.

SENTENCIA if DE DOS ALTERNATIVAS: if – else

Un segundo formato de la sentencia if es la sentencia if-else. Este formato de la

sentencia if tiene la siguiente sintaxis:

if(condición)

sentencia1

else

sentencia2

condición Expresión lógica que determina la acción a ejecutar.

sentencia1 Acción que realiza si la condición lógica es verdadera.

sentencia2 Acción que se ejecuta si la expresión lógica es falsa.

Page 10: sentencias de control 2009 if switch SABATINO · Este documento es una extracción del libro Programación en C, metodología, estructura de datos y objetos, de Luis Joyanes Aguilar

Sentencias de control

MSc. Ana María Salgado G. 10

En este formato sentencia1 y sentencia2 son individualmente, o bien una única

sentencia que termina con punto y coma(;) o un grupo de sentencias encerrado

entre llaves. Se evalúa la condición. Si condición es verdadera, se ejecuta

sentencia1 y en caso contrario se ejecuta sentencia2.

Diagrama de flujo de la representación de una sentencia if-else

Ejemplo #1: Determinar si un alumno aprueba o reprueba un curso, sabiendo que aprobará si

su promedio de tres calificaciones es mayor o igual a 70; reprueba en caso

contrario. Para ambos casos, imprima también su promedio.

Pseudocódigo:

Inicio Leer calif1, calif2, calif3 prom = (calif1 + calif2 + calif3)/3.0 Si (prom >= 70) entonces Imprimir “promedio = “, prom, “alumno aprobado” si no Imprimir “promedio = “, prom, “alumno reprobado” Fin-si Fin

c o n d ic ió n

s e n te n c ia 1 s e n te n c ia 2

v e rd a d e ra fa ls a

Page 11: sentencias de control 2009 if switch SABATINO · Este documento es una extracción del libro Programación en C, metodología, estructura de datos y objetos, de Luis Joyanes Aguilar

Sentencias de control

MSc. Ana María Salgado G. 11

Solución en Lenguaje C:

//aprobado_rep.c

#include <stdio.h>

int calif1, calif2, calif3;

float prom;

void main(void)

{

printf("Favor introduzca tres calificaciones:\n");

scanf("%d %d %d",&calif1, &calif2, &calif3);

prom = (calif1 + calif2 + calif3) / 3.0;

if(prom >= 70)

printf("\npromedio = %.2f, alumno aprobado\n", prom);

else

printf("\npromedio = %.2f, alumno reprobado\n", prom);

}

Ejemplo #2: Un obrero necesita calcular su salario semanal, el cual se obtiene de la siguiente

manera:

• Si trabaja 40 horas o menos se le paga $16 por hora

• Si trabaja más de 40 horas se le paga $16 por cada una de las primeras 40

horas y $20 por cada hora extra.

Pseudocódigo:

Inicio Leer ht Si ht > 40 entonces he = ht - 40 ss = he * 20 + 40 * 16 si no ss = ht * 16 Fin-si Imprimir “Salario semanal = ", ss Fin

Page 12: sentencias de control 2009 if switch SABATINO · Este documento es una extracción del libro Programación en C, metodología, estructura de datos y objetos, de Luis Joyanes Aguilar

Sentencias de control

MSc. Ana María Salgado G. 12

Solución en Lenguaje C:

//salariosemanal.c

#include <stdio.h>

void main(void)

{

int ht, he;

float ss;

printf("Horas trabajadas: ");

scanf("%d", &ht);

if(ht > 40)

{

he = ht - 40;

ss = he * 20 + 40 * 16;

}

else

ss = ht * 16;

printf("Salario semanal = %.2f\n",ss);

}

Ejemplo #3: Una empresa quiere hacer una compra de varias piezas de la misma clase a una

fábrica de refacciones. La empresa, dependiendo del monto total de la compra,

decidirá qué hacer para pagar al fabricante.

Si el monto total de la compra es $500 000 ó más, la empresa tendrá la

capacidad de invertir de su propio dinero un 55% del monto de la compra, pedir

prestado al banco un 30% y el resto lo pagará solicitando un crédito al fabricante.

Si el monto total de la compra no excede de $500 000, la empresa tendrá

capacidad de invertir de su propio dinero un 70% y el restante 30% lo pagará

solicitando crédito al fabricante.

El fabricante cobra por concepto de intereses un 20% sobre la cantidad que se le

pague a crédito. Realice el pseudocódigo correspondiente al programa en

Lenguaje C presentado:

Page 13: sentencias de control 2009 if switch SABATINO · Este documento es una extracción del libro Programación en C, metodología, estructura de datos y objetos, de Luis Joyanes Aguilar

Sentencias de control

MSc. Ana María Salgado G. 13

//refacciones.c

#include <stdio.h>

float costopza, totcomp, cantinv, prestamo, credito, interes;

int numpza;

void main( )

{

printf("Costo de la pieza: ");

scanf("%f", &costopza);

printf("Numero de piezas: ");

scanf("%d", &numpza);

totcomp = costopza * numpza;

if(totcomp >= 500000)

{

cantinv = totcomp * 0.55;

prestamo = totcomp * 0.30;

credito = totcomp * 0.15;

}

else

{

cantinv = totcomp * 0.70;

prestamo = 0;

credito = totcomp * 0.30;

}

interes = credito * 0.20;

printf("\nCantidad invertida: %.2f\nPrestamo:%.2f\n",cantinv, prestamo);

printf("Credito = %.2f\nIntereses = %.2f\n",credito, interes);

}

Page 14: sentencias de control 2009 if switch SABATINO · Este documento es una extracción del libro Programación en C, metodología, estructura de datos y objetos, de Luis Joyanes Aguilar

Sentencias de control

MSc. Ana María Salgado G. 14

Ejemplo #4: Una persona enferma, que pesa 70 kg, se encuentra en reposo y desea saber

cuántas calorías consume su cuerpo durante todo el tiempo que realice una misma

actividad. Las actividades que tiene permitido realizar son únicamente dormir o

estar sentado en reposo. Los datos que tiene son que estando dormido consume

1.08 calorías por minuto y estando sentado en reposo consume 1.66 calorías por

minuto.

Al pseudocódigo presentado, realizar su programa en Lenguaje C: Inicio Leer act, tiemp Si act = “dormido” entonces cg = 1.08 * tiemp si no cg = 1.66 * tiemp fin-si Imprimir cg Fin

Ejemplo #5: Escriba un programa que determine si un número entero, es divisible por otro

número entero, leídos ambos del teclado. Al programa presentado en Lenguaje C,

realizar su pseudocódigo.

//divisibilidad2.c

#include <stdio.h>

void main(void)

{

int n, d;

printf("Introduzca dos enteros:");

scanf("%d %d",&n,&d);

if(n % d = = 0)

printf("%d es divisible por %d \n",n,d);

else

printf("%d no es divisible por %d \n",n,d);

}

Page 15: sentencias de control 2009 if switch SABATINO · Este documento es una extracción del libro Programación en C, metodología, estructura de datos y objetos, de Luis Joyanes Aguilar

Sentencias de control

MSc. Ana María Salgado G. 15

Ejemplo #6: Dada la función f(x) calcular la función para un valor dado x y visualizarlo en

pantalla.

x2 – x para x <= 0.0

-x2 + 3x para x > 0

//funcion.c

#include <stdio.h>

#include <math.h>

void main()

{

float f, x;

printf("Elige un valor de x: ");

scanf("%f",&x);

/* seleccion del rango en que se encuentra x */

if(x <= 0.0)

f = pow(x,2) - x;

else

f = -pow(x,2) + 3 * x;

printf("f(%.1f) = %.3f", x,f);

}

f(x)=

Page 16: sentencias de control 2009 if switch SABATINO · Este documento es una extracción del libro Programación en C, metodología, estructura de datos y objetos, de Luis Joyanes Aguilar

Sentencias de control

MSc. Ana María Salgado G. 16

Comentario:

Una vez introducido x, se evalúa la condición x <= 0.0, si es cierta asigna a f, x2 – x;

en caso contrario asigna a f, -x2 + 3x

Ejercicios propuestos

1. Que lea dos números y los imprima en forma ascendente.

2. Calcular el mayor de dos números leídos del teclado y visualizarlo en

pantalla.

3. Hacer un algoritmo que calcule el total a pagar por la compra de camisas. Si

se compran tres camisas o más se aplica un descuento del 20% sobre el total

de la compra y si son menos de tres camisas un descuento del 10%

4. Calcular el total que una persona debe pagar en una llantera, si el precio de

cada llanta es de $800 si se compran menos de 5 llantas y de $700 si se

compran 5 o más.

5. Calcular el número de pulsaciones que debe tener una persona por cada 10

segundos de ejercicio aeróbico; la fórmula que se aplica cuando el sexo es

femenino es:

num_ pulsaciones = (220 - edad)/10

y si el sexo es masculino:

num_pulsaciones = (210 - edad)/10

6. En una escuela la colegiatura de los alumnos se determina según el número

de materias que cursan. El costo de todas las materias es el mismo.

Se ha establecido un programa para estimular a los alumnos, el cual consiste

en lo siguiente: si el promedio obtenido por un alumno en el último período

es mayor o igual que 9, se le hará un descuento del 30% sobre la colegiatura

y no se le cobrara IVA; si el promedio obtenido es menor que 9 deberá pagar

la colegiatura completa, la cual incluye el 10% de IVA. Obtener cuánto debe

pagar un alumno.

7. Una empresa de bienes raíces ofrece casas de interés social, bajo las

siguientes condiciones: Si los ingresos del comprador son $8000 o más, el

enganche será del 15% del costo de la casa y el resto se distribuirá en pagos

mensuales, a pagar en diez años. Si los ingresos del comprador son menos

de $8000, el enganche será del 30% del costo de la casa y el resto se

distribuirá en pagos mensuales a pagar en 7 años. La empresa quiere

Page 17: sentencias de control 2009 if switch SABATINO · Este documento es una extracción del libro Programación en C, metodología, estructura de datos y objetos, de Luis Joyanes Aguilar

Sentencias de control

MSc. Ana María Salgado G. 17

obtener cuanto debe pagar un comprador por concepto de enganche y

cuanto por cada pago parcial.

8. Una persona desea iniciar un negocio, para lo cual piensa verificar cuánto

dinero le prestará el banco por hipotecar su casa. Tiene una cuenta bancaria,

pero no quiere disponer de ella a menos que el monto por hipotecar su casa

sea muy pequeño. Si el monto de la hipoteca es menor que $1 000 000

entonces invertirá el 50% de la inversión total y un socio invertirá el otro

50%. Si el monto de la hipoteca es de $ 1 000 000 o más, entonces invertirá el

monto total de la hipoteca y el resto del dinero que se necesite para cubrir la

inversión total se repartirá a partes iguales entre el socio y él.

9. El gobierno del estado de México desea reforestar un bosque que mide

determinado número de hectáreas. Si la superficie del terreno excede a 1

millón de metros cuadrados, entonces decidirá sembrar de la sig. manera:

Porcentaje de la superficie del bosque Tipo de árbol

70% pino

20% oyamel

10% cedro

Si la superficie del terreno es menor o igual a un millón de metros

cuadrados, entonces decidirá sembrar de la siguiente manera:

Porcentaje de la superficie del bosque Tipo de árbol

50% pino

30% oyamel

20% cedro

El gobierno desea saber el número de pinos, oyameles y cedros que tendrá

que sembrar en el bosque, si se sabe que en 10 metros cuadrados caben 8 pinos, en

15 metros cuadrados caben 15 oyameles y en 18 metros cuadrados caben 10 cedros.

También se sabe que una hectárea equivale a 10 mil metros cuadrados.

SENTENCIAS if – else ANIDADAS

Una sentencia if es anidada cuando la sentencia de la rama verdadera o la rama

falsa, es a su vez una sentencia if. Una sentencia if anidada se puede utilizar para

implementar decisiones con varias alternativas o multialternativas.

Page 18: sentencias de control 2009 if switch SABATINO · Este documento es una extracción del libro Programación en C, metodología, estructura de datos y objetos, de Luis Joyanes Aguilar

Sentencias de control

MSc. Ana María Salgado G. 18

Sintaxis:

if(condición1)

sentencia1

else if(condición2)

sentencia2

.

.

. else if(condición n)

sentencia n

else

sentencia e

Ejemplo #1:

/* incrementar contadores de números positivos, números negativos o ceros */

La ejecución de la sentencia if anidada se realiza como sigue:

Se comprueba la primera condición (x > 0); si es verdadera, num_pos se incrementa

en 1 y se salta el resto de la sentencia if. Si la primera condición es falsa, se

comprueba la segunda condición (x < 0); si es verdadera num_neg se incrementa en

if (x > 0) num_pos = num_pos + 1; else

if(x < 0) num_neg = num_neg + 1; else num_ceros = num_ceros + 1;

Page 19: sentencias de control 2009 if switch SABATINO · Este documento es una extracción del libro Programación en C, metodología, estructura de datos y objetos, de Luis Joyanes Aguilar

Sentencias de control

MSc. Ana María Salgado G. 19

uno; en caso contrario se incrementa num_ceros en uno. Es importante considerar

que la segunda condición se comprueba sólo si la primera condición es falsa.

Ejemplo #2: Leer tres números enteros diferentes e imprimir el número mayor de los tres.

Pseudocódigo:

Inicio

Leer num1, num2, num3 Si (num1 > num2) and (num1 > num3) entonces mayor = num1 si no Si (num2 > num1) and (num2 > num3) entonces mayor = num2 si no mayor = num3 Fin-si Fin-si Imprimir mayor Fin

Solución en Lenguaje C:

//mayor.c

#include <stdio.h>

void main(void)

{

int num1, num2, num3, mayor;

printf("Introduzca tres enteros diferentes: ");

scanf("%d %d %d", &num1, &num2, &num3);

if((num1 > num2) && (num1 > num3))

mayor = num1;

else if((num2 > num1) && (num2 > num3))

mayor = num2;

else

mayor = num3;

printf("El mayor es %d \n",mayor);

}

Page 20: sentencias de control 2009 if switch SABATINO · Este documento es una extracción del libro Programación en C, metodología, estructura de datos y objetos, de Luis Joyanes Aguilar

Sentencias de control

MSc. Ana María Salgado G. 20

Ejemplo #3: Leer 2 números enteros; si son iguales que los multiplique, si el primero es mayor

que el segundo que los reste y si no que los sume.

//operaciones.c

#include <stdio.h>

void main()

{

int num1, num2, resul;

printf("Ingrese dos numeros enteros:\n");

scanf("%d %d",&num1,&num2);

if(num1 = = num2)

resul = num1 * num2;

else if(num1 > num2)

resul = num1 - num2;

else

resul = num1 + num2;

printf("resul = %d\n",resul);

}

Ejemplo #4: Calcular la utilidad que un trabajador recibe en el reparto anual de utilidades si

este se le asigna como un porcentaje de su salario mensual que depende de su

antigüedad en la empresa de acuerdo con la sig. tabla:

Tiempo Utilidad

Menos de 1 año 5 % del salario

1 año o más y menos de 2 años 7% del salario

2 años o más y menos de 5 años 10% del salario

5 años o más y menos de 10 años 15% del salario

10 años o más 20% del salario

Page 21: sentencias de control 2009 if switch SABATINO · Este documento es una extracción del libro Programación en C, metodología, estructura de datos y objetos, de Luis Joyanes Aguilar

Sentencias de control

MSc. Ana María Salgado G. 21

Pseudocódigo: Inicio Leer sm, antig Si antig < 1 entonces util = sm * 0.05 si no Si (antig > = 1) and (antig < 2) entonces util = sm * 0.07 si no Si (antig > = 2) and (antig < 5) entonces util = sm * 0.10 si no Si (antig > = 5) and (antig < 10) entonces util = sm * 0.15 si no util = sm * 0.20 Fin-si Fin-si Fin-si Fin-si Imprimir “Utilidad = “, util Fin Solución en Lenguaje C: //antiguedad.c

#include <stdio.h>

int antig;

float sm, util;

void main(void)

{

printf("Salario mensual: ");

scanf("%f",&sm);

printf("Antiguedad: ");

scanf("%d",&antig);

Page 22: sentencias de control 2009 if switch SABATINO · Este documento es una extracción del libro Programación en C, metodología, estructura de datos y objetos, de Luis Joyanes Aguilar

Sentencias de control

MSc. Ana María Salgado G. 22

if(antig < 1)

util = sm * 0.05;

else if((antig >= 1) && (antig < 2))

util = sm * 0.07;

else if((antig >=2) && (antig < 5))

util = sm * 0.10;

else if((antig >= 5) && (antig < 10))

util = sm * 0.15;

else

util = sm * 0.20;

printf("Utilidad = %.2f\n",util);

}

Ejemplo #5: En una tienda de descuento se efectúa una promoción en la cual se hace un descuento sobre el valor de la compra total según el color de la bolita que el cliente saque al pagar en caja. Si la bolita es de color blanco no se le hará descuento alguno, si es verde se le hará un 10% de descuento, si es amarilla un 25%, si es azul un 50% y si es roja un 100%. Determinar la cantidad final que el cliente deberá pagar por su compra. Se sabe que sólo hay bolitas de los colores mencionados. Se presenta su psudocódigo, realice el programa correspondiente en Lenguaje C: Inicio leer tc, b si b = “blanca” entonces d = 0 si no si b = “verde” entonces d = tc*0.10 si no si b = “amarilla” entonces d = tc*0.25 si no si b = “azul” entonces d = tc*0.50 si no d = tc Fin-si

Page 23: sentencias de control 2009 if switch SABATINO · Este documento es una extracción del libro Programación en C, metodología, estructura de datos y objetos, de Luis Joyanes Aguilar

Sentencias de control

MSc. Ana María Salgado G. 23

Fin-si Fin-si Fin-si Fin

Ejemplo #6: Una persona enferma, que pesa 70 kg, se encuentra en reposo y desea saber

cuántas calorías consume su cuerpo durante todo el tiempo que realice una misma

actividad. Las actividades que tiene permitido realizar son únicamente dormir o

estar sentado en reposo. Los datos que tiene son que estando dormido consume

1.08 calorías por minuto y estando sentado en reposo consume 1.66 calorías por

minuto.

Se presenta el programa escrito en Lenguaje C, realice el pseudocódigo

correspondiente:

//enferma.c

#include <stdio.h>

#include <string.h>

int tiempo;

char actividad[30];

float calorias;

void main(void)

{

printf("Que actividad realiza, dormir o estar sentado en reposo?: \n");

gets(actividad); printf("\nIntroduzca el tiempo en minutos en que ejecuta una de las dos actividades: \n");

scanf("%d",&tiempo);

if (!strcmp(actividad,"dormir"))

{

calorias = 1.08 * tiempo;

printf("\nSu cuerpo consume %.2f calorias por minuto\n",calorias);

}

else

Page 24: sentencias de control 2009 if switch SABATINO · Este documento es una extracción del libro Programación en C, metodología, estructura de datos y objetos, de Luis Joyanes Aguilar

Sentencias de control

MSc. Ana María Salgado G. 24

if (!strcmp(actividad,"estar sentado en reposo"))

{

calorias = 1.66 * tiempo; printf("\nSu cuerpo consume %.2f calorias por minuto\n",calorias);

}

else

printf("\nactividad invalida\n");

}

Ejercicios propuestos

1. Determinar la cantidad de dinero que recibirá un trabajador por concepto de las horas extras trabajadas en una empresa, sabiendo que cuando las horas de trabajo exceden de 40, el resto se consideran horas extras y que estas se pagan al doble de una hora normal cuando no exceden de 8; si las horas extras exceden de 8 se pagan las primeras 8 al doble de lo que se pagan las horas normales y el resto al triple.

2. En una fábrica de computadoras se planea ofrecer a los clientes un descuento que dependerá del número de computadoras que compre. Si las computadoras son menos de cinco se les dará un 10% de descuento sobre el total de la compra; si el número de computadoras es mayor o igual a cinco pero menos de diez se le otorga un 20% de descuento; y si son 10 o más se les da un 40% de descuento. El precio de cada computadora es de $11,000

3. En una llantera se ha establecido una promoción de las llantas marca “Ponchadas”,

dicha promoción consiste en lo siguiente: Si se compran menos de cinco llantas el precio es de $300 cada una, de $250 si se compran de cinco a 10 y de $200 si se compran más de 10. Obtener la cantidad de dinero que una persona tiene que pagar por el total de la compra.

4. Una frutería ofrece las manzanas con descuento según la siguiente tabla: NUM. DE KILOS COMPRADOS % DESCUENTO 0 - 2 0% 2.01 - 5 10% 5.01 - 10 15% 10.01 en adelante 20%

Determinar cuánto pagará una persona que compre kilos de manzanas es esa frutería.

Page 25: sentencias de control 2009 if switch SABATINO · Este documento es una extracción del libro Programación en C, metodología, estructura de datos y objetos, de Luis Joyanes Aguilar

Sentencias de control

MSc. Ana María Salgado G. 25

SENTENCIA DE CONTROL switch

La sentencia switch es una sentencia C que se utiliza para seleccionar una de entre

múltiples alternativas. La sentencia switch es especialmente útil cuando la

selección se basa en el valor de una variable simple o de una expresión simple

denominada selector. El valor de esta expresión puede ser de tipo int o char, pero

no de tipo float ni double.

Sintaxis:

switch(selector)

{

case etiqueta1:

sentencia1;

case etiqueta2:

sentencia2;

.

.

case etiquetan:

sentencian;

default:

sentenciad;

}

El selector se evalúa y se compara con cada una de las etiquetas del case. La

expresión selector debe ser un tipo ordinal, por ejemplo, int, char, pero no float, o

string. Cada etiqueta es un valor único, constante y cada etiqueta debe tener un

valor distinto de los otros. Si el valor de selector es igual a una de las etiquetas

case, por ejemplo, etiquetai, entonces la ejecución comenzará con la primera

sentencia de la secuencia sentenciai y continuará hasta que se encuentre el final de

la sentencia de control switch, o hasta encontrar la sentencia break. Es habitual

que después de cada bloque de sentencias correspondiente a una secuencia se

desee terminar la ejecución del switch, para ello se sitúa la sentencia break como

última sentencia del bloque; break hace que siga la ejecución en la siguiente

sentencia al switch.

Page 26: sentencias de control 2009 if switch SABATINO · Este documento es una extracción del libro Programación en C, metodología, estructura de datos y objetos, de Luis Joyanes Aguilar

Sentencias de control

MSc. Ana María Salgado G. 26

Sintaxis con break:

switch(selector)

{

case etiqueta1:

sentencia1;

break;

case etiqueta2:

sentencia2;

break;

.

.

.

case etiquetan:

sentencian;

break;

default:

sentenciad;

}

Si el valor de selector no está listado en ninguna etiqueta case, no se ejecutará

ninguna de las opciones a menos que se especifique una acción por defecto.

Una sentencia break consta de la palabra reservada break seguida por un punto y

coma. Cuando la computadora ejecuta las sentencias siguientes a una etiqueta

case, continúa hasta que se alcanza una sentencia break. Si la computadora

encuentra una sentencia break, termina la sentencia switch. Si se omiten las

sentencias break, después de ejecutar el código de case, la computadora ejecutará

el código que sigue a la siguiente case.

Page 27: sentencias de control 2009 if switch SABATINO · Este documento es una extracción del libro Programación en C, metodología, estructura de datos y objetos, de Luis Joyanes Aguilar

Sentencias de control

MSc. Ana María Salgado G. 27

Ejemplo #1:

1. Hacer un algoritmo que imprima el nombre de un artículo, clave, precio original y

su precio con descuento. El descuento lo hace en base a la clave, si la clave es 1 el descuento es del 10% y si la clave es 2 el descuento en del 20% (solo existen dos claves).

Pseudocódigo: Inicio Leer nomb, cve, prec_orig Seleccionar (cve) caso 1: prec_desc = prec_orig - prec_orig * 0.10 caso 2: prec_desc = prec_orig - prec_orig * 0.20 en otro caso: Imprimir “Clave invalida” Fin seleccionar Imprimir nomb, cve , prec_orig, prec_desc

Fin

Solución en Lenguaje C:

//clave.c #include <stdio.h> #include <stdlib.h> char nomb[40]; int cve; float prec_orig,prec_desc ; void main(void) { printf("Ingrese el nombre del articulo:"); gets(nomb); printf("Introduzca la clave:"); scanf("%d",&cve); printf("Ingrese el precio original:"); scanf("%f",&prec_orig);

Page 28: sentencias de control 2009 if switch SABATINO · Este documento es una extracción del libro Programación en C, metodología, estructura de datos y objetos, de Luis Joyanes Aguilar

Sentencias de control

MSc. Ana María Salgado G. 28

switch(cve) { case 1: prec_desc = prec_orig - prec_orig * 0.10; break; case 2: prec_desc = prec_orig - prec_orig * 0.20; break; default: printf("Clave invalida\n"); exit(0); } printf("\n\nNombre del articulo: %s\nClave: %d\n", nomb, cve); printf("Precio original = %.2f\nPrecio con descuento= %.2f\n", prec_orig, prec_desc); }

Ejemplo #2: Se necesita saber si un determinado carácter car es una vocal.

//vocal.c

#include <stdio.h>

void main()

{

char car;

printf("Ingrese un caracter:");

car = getchar();

switch(car)

{

case 'a': case 'A':

case 'e': case 'E':

case 'i': case 'I':

case 'o': case 'O':

case 'u': case 'U':

printf("%c es una vocal\n", car);

break;

Page 29: sentencias de control 2009 if switch SABATINO · Este documento es una extracción del libro Programación en C, metodología, estructura de datos y objetos, de Luis Joyanes Aguilar

Sentencias de control

MSc. Ana María Salgado G. 29

default:

printf("%c no es una vocal\n", car);

}

}

Ejemplo #3: Dada una nota de un examen mediante un código escribir el literal que le

corresponde a la nota. La calificación está dada de la A – F.

Pseudocódigo:

Inicio Leer nota Seleccionar(nota) caso ‘A’: Imprimir “Excelente. Examen superado.”

caso ‘B’: Imprimir “Notable. Suficiencia.” caso ‘C’:

Imprimir “Aprobado.”

caso ‘D’: caso ‘F’: Imprimir “Suspendido.” en otro caso: Imprimir “No es posible esa nota.” Fin seleccionar

Fin

Page 30: sentencias de control 2009 if switch SABATINO · Este documento es una extracción del libro Programación en C, metodología, estructura de datos y objetos, de Luis Joyanes Aguilar

Sentencias de control

MSc. Ana María Salgado G. 30

Solución en Lenguaje C:

#include <stdio.h>

void main( )

{

char nota;

printf(“Introduzca calificación (A – F) y pulse Intro: “);

scanf(“%c”, &nota);

switch(nota)

{

case ‘A’:

puts(“Excelente. Examen superado”);

break;

case ‘B’:

puts(“Notable. Suficiencia”);

break;

case ‘C’:

puts(“Aprobado”);

break;

case ‘D’:

case ‘F’:

puts(“Suspendido”);

break;

default:

puts(“No es posible esa nota”);

}

puts(“Final del programa”);

}

Page 31: sentencias de control 2009 if switch SABATINO · Este documento es una extracción del libro Programación en C, metodología, estructura de datos y objetos, de Luis Joyanes Aguilar

Sentencias de control

MSc. Ana María Salgado G. 31

Ejemplo #4: El siguiente programa hace las conversiones:

• De pulgadas a milímetros.

• De yardas a metros.

• De millas a kilómetros.

Use un tipo enumerado. Realice su pseudocódigo.

//pulgmilim.c

#include <stdio.h>

enum tipo

{

pulgmilim=1,

yardmetros=2,

millakm=3

};

enum tipo conversion;

float pulg, milim, yardas, metros, millas, km;

void main(void)

{

printf("1. Conversion de pulgadas a milimetros\n");

printf("2. Conversion de yardas a metros\n");

printf("3. Conversion de millas a kilometros\n");

scanf("%d",&conversion);

switch(conversion)

{

case pulgmilim:

printf("Cuantas pulgadas quiere convertir?\n");

scanf("%f",&pulg);

milim = 25.40 * pulg;

printf("%.1f pulgadas equivalen a %.1f milimetros\n",pulg,milim);

break;

Page 32: sentencias de control 2009 if switch SABATINO · Este documento es una extracción del libro Programación en C, metodología, estructura de datos y objetos, de Luis Joyanes Aguilar

Sentencias de control

MSc. Ana María Salgado G. 32

case yardmetros:

printf("Cuantas yardas quiere convertir?\n");

scanf("%f",&yardas);

metros = 0.9144 * yardas;

printf("%.1f yardas equivalen a %.1f metros\n",yardas,metros);

break;

case millakm:

printf("Cuantas millas quiere convertir?\n");

scanf("%f",&millas);

km = 1.6093 * millas;

printf("%.1f millas equivalen a %.1f kilometros\n",millas,km);

break;

default:

printf("Opcion invalida");

exit(1);

}

}

Ejemplo #5:

Escriba un programa que calcule el importe a pagar por un vehículo al circular por

una autopista. El vehículo puede ser una bicicleta, una moto, un coche, o un

camión. Para definir el conjunto vehículos utilizaremos un tipo enumerado. El

importe se calculará según los siguientes datos:

• Un importe fijo de 100 córdobas para las bicicletas.

• Las motos y los carros pagarán 30 córdobas por Km.

• Los camiones pagarán 30 córdobas por Km más 25 córdobas por Tm

La presentación en pantalla de la solución, será de la forma siguiente:

1 - bicicleta

2 – moto

3 – carro

4 - camión

5 – salir

Seleccione la opción deseada: 4

Kilómetros y toneladas? 100 50

Importe = 4250

Page 33: sentencias de control 2009 if switch SABATINO · Este documento es una extracción del libro Programación en C, metodología, estructura de datos y objetos, de Luis Joyanes Aguilar

Sentencias de control

MSc. Ana María Salgado G. 33

/* Importe a pagar por un vehículo al circular por una autopista

* switch.c */

#include <stdio.h>

#include <stdlib.h>

void main()

{

typedef enum tipo_vehiculo

{

bicicleta = 1,

moto,

coche,

camion

} tvehiculo;

tvehiculo vehiculo;

int km, tm, importe;

printf("\t1 - bicicleta\n");

printf("\t2 - moto\n");

printf("\t3 - coche\n");

printf("\t4 - camión\n");

printf("\n\tPulse la opción deseada ");

scanf("%d", &vehiculo);

switch (vehiculo)

{

case bicicleta:

importe = 100;

break;

case moto:

case coche:

printf("\n¿Kilómetros? ");

scanf("%d", &km);

importe = 30 * km;

break;

Page 34: sentencias de control 2009 if switch SABATINO · Este documento es una extracción del libro Programación en C, metodología, estructura de datos y objetos, de Luis Joyanes Aguilar

Sentencias de control

MSc. Ana María Salgado G. 34

case camion:

printf("\n¿Kilómetros y toneladas? ");

scanf("%d %d", &km, &tm);

importe = 30 * km + 25 * tm;

break;

default:

printf("\nLa opción no es correcta\n");

return; /* error; salir de main */

}

printf("\nImporte = %d\n", importe);

}

Ejercicios propuestos

1 Realizar un programa que permita ingresar un número correspondiente a

los días de una semana y muestre el nombre del día. Use switch.

2 Escriba un programa tal, que dados como datos el modelo de un vehículo y

su precio, determine el valor final que debe pagar el comprador. El

concesionario está haciendo descuentos teniendo en cuenta el modelo, con

base en la siguiente tabla:

Modelo Descuento

Cutlass 8%

Cavalier 5%

Chevy 6%

Century 9%

Haga uso de una enumeración. Defínala como un nuevo tipo. Además,

utilice break y una opción por defecto que imprima “El modelo no es

válido”. 3 El costo de las llamadas telefónicas internacionales, depende de la zona geográfica

en la que se encuentre el país destino, y del número de minutos hablados. En la siguiente tabla se presenta el costo por minuto, por zona. A cada zona se le ha asociado una clave.

Page 35: sentencias de control 2009 if switch SABATINO · Este documento es una extracción del libro Programación en C, metodología, estructura de datos y objetos, de Luis Joyanes Aguilar

Sentencias de control

MSc. Ana María Salgado G. 35

Clave Zona Precio 12 América del Norte 2 15 América Central 2.2 18 América del Sur 4.5 19 Europa 3.5 23 Asia 6 25 Africa 6 29 Oceanía 5

4 Realice un pseudocódigo y programa en Lenguaje C que permita calcular e

imprimir el costo total de una llamada.

5 En un hospital se ha hecho un estudio sobre los pacientes registrados

durante los últimos 10 años, con el objeto de hacer una aproximación de los

costos de internación por paciente. Se obtuvo un costo promedio diario

según el tipo de enfermedad que aqueja al paciente; además se pudo

determinar que en promedio todos los pacientes con edad entre 14 y 22 años

implican un costo adicional del 10%. La siguiente tabla expresa los costos

diarios, según el tipo de enfermedad.

Tipo de enfermedad Costo/Paciente/Día

1 25

2 16

3 20

4 32

Construya un programa que calcule e imprima el costo total que representa

un paciente.