• No se han encontrado resultados

Errores frecuentes de programación

PARTE I. DE LA PROGRAMACIÓN

Capítulo 5. Estructuras de selección: sentencias if y switch

5.9. Errores frecuentes de programación

Uno de los errores más comunes en una sentencia i f es utilizar un operador de asignación (=) 2. En una sentencia i anidada, cada cláusula s e se corresponde con la i precedente más

en lugar de un operador de igualdad

cercana. Por ejemplo, en el segmento de programa siguiente

if (a O ) O )

else

c = a

+

;

es la sentencia i f asociada a se?

El sistema más fácil para evitar errores es el sangrado o indentación, con lo que ya se aprecia que la cláusula else se corresponde a la sentencia que contiene la condición b

if (a O )

if O )

else

164 Programación en Metodología, algoritmos y estructura de datos

3. Las comparaciones con operadores == de cantidades algebraicamente iguales pueden producir una expresión lógica falsa, debido u que la mayoría de los números reales no se almacenan exactamente. Por ejemplo, aunque las expresiones reales siguientes son equivalentes:

a *

1 . 0

son algebraicamente iguales, la expresión

a * 1 . 0

puede ser falsa debido a que a es real.

4.

en una sentencia s w i t c h en un bloque de sentencias falta una de las llaves ( aparece mensaje de error tal como:

Error

. . .

statement missing in

Si no se tiene cuidado con la presentación de la escritura del código, puede ser muy difícil

5. El selector de una sentencia t ch debe ser de tipo entero o compatible entero. Así las localizar la llave que falta.

constantes reales

2 . 4 , - 4 . 5 , 3 . 1 4 1 6

no pueden ser utilizadas en el selector.

6. Cuando se utiliza una sentencia s w i t ch, asegúrese que el selector de s w i t ch y las etiquetas

c a s e son del mismo tipo (in t , c h a r pero no f o a t ) . Si el selector se evalúa a un valor listado en ninguna de etiquetas c a s e , la sentencia s w i t ch no gestionará ninguna acción;

por esta causa se suele poner etiqueta t pura resolver este problema.

Múltiples alternativas

5.10. RESUMEN

Sentencia i f Una alternativa resultado = Dos alternativas if (a O ) f = f 0.5; if puts "Negativo") ; = else if == puts "Cero" = O ; else puts ("positivo") ; = x;

Estructuras de selección: sentencias L y t

case 'A' : case 'a :

puts ; break; puts ; break; puts ; break; puts ; break; puts no válida") ; case case 'b': case ' : case 'c ' : case 'D': case default: Sentencia switch I

5.1

EJERCICIOS

5.1. errores de sintaxis tiene la siguiente sen- tencia?

if x 25.0

else y = x y = z;

5.2. valor se asigna a consumo en la senten- cia if siguiente si velocidad es

if (velocidad 80) consumo 10.00; else if (velocidad 100) consumo 12.00; else if (velocidad 120) consumo 15.00;

5.3. Explique las diferencias entre las sentencias de la columna de la izquierda y de la columna de la derecha. Para cada una de ellas deducir el valor final de x si el valor inicial de x es O.

if O) if O)

else if 1); if 1)

x++ ; ;

X+= 2; x+= 2;

5.4. salida producirá el código siguiente, cuan- do se empotra en un programa completo y primera-opcion vale vale int primera-opcion; switch (primera-opcion

+

1) case 1: puts ; break; puts ; break; puts ; puts de ; break; case 2: case 3: case 4: default: puts ;

- -

166 Programación en Metodología, algoritmos y estructura de datos

5.5. 5.6. 5.7. 5.8. 5.9. 5.10. 5.11.

salida producirá el siguiente código, cuando se empotra en un programa completo?

int x = 2;

puts ("Arranque" ;

if 3)

if ! = O)

puts ("Hola desde el segundo if")

else

puts ( "Hola el else. ;

puts de nuevo'' ;

if 3)

if ! = O)

puts ("Hola desde el segundo

if ;

else

puts ("Hola desde el else. ;

puts nuevo ;

Escribir una sentencia f - e 1 se que visualice la palabra Alta si el valor de la variable nota es mayor que y Baja si el valor de esa nota es menor que 100.

hay de incorrecto en el siguiente código?

if (x O) =

else printf != ;

es el error del siguiente código?

if y

es error de este código?

printf ("Introduzca ;

scanf ;

if O)

número es negati- vo. Pruebe de nuevo.") ;

scanf , ;

printf n ;

Escribir un programa que lea tres enteros y emita un mensaje que indique si están o no en orden numérico.

else

Escribir una sentencia i f -e 1 se que clasifique un entero en una de las siguientes categorías

y escriba un mensaje adecuado:

5.12. 5.13. 5.14. 5.15. 5.16. 5.17. x o bien

o

x 100 o bien x 100

Escribir un programa que introduzca el número de un mes (1 a 12) y visualice el número de días de ese mes.

Se trata de escribir un programa que clasifique enteros leídos del teclado de acuerdo a los siguientes puntos:

si el entero es 30 o mayor, o negativo, visualizar un mensaje en ese sentido; en caso contrario, si es un nuevo primo, potencia de 2, o un número compuesto, visualizar el mensaje correspondiente; si son cero o visualizar 'cero'o 'uni- dad'.

Escribir un programa que determine el mayor de tres números.

El domingo de Pascua es el primer domingo después de la primera luna llena posterior al equinoccio de primavera, y se determina mediante el siguiente cálculo sencillo:

A año mod 19 año mod 4 = año mod 7 D (19 * A

+

24) mod 3 0 E (2

+

4 6

*

D + 5 ) (22

+

D

+

E ) mod 7

Donde indica el número de día del mes de marzo (si N es igual o menor que 3) o abril (si es mayor que 31). Construir un programa que determine fechas de domingos de Pascua.

Codificar un programa que escriba la cali- ficación correspondiente a una nota, de acuerdo con el siguiente criterio:

O a Suspenso

5 a Aprobado

6.5 a 8.5 Notable 8.5 a 10 Sobresaliente 10 Matrícula de honor.

Determinar si el carácter asociado a

introducido por teclado corresponde a un carácter alfabético, dígito, de puntuación, especial o no

Estructuras de selección: sentencias y 167

PROBLEMAS

5.1. 5.2. 5.3. 5.4. 5.5.

Cuatro enteros entre O y 100 representan las pun- tuaciones de un estudiante de un curso de infor- mática. Escribir un programa para encontrar la media de estas puntuaciones y visualizar una tabla de notas de acuerdo al siguiente cuadro:

Media Puntuación 80-89

70-79

0-59

I

Escribir un programa que lea la hora de un día de notación de 24 horas y la respuesta en notación de 12 horas. Por ejemplo, si la entrada es la salida será

PM

El programa pedirá al usuario que intro- duzca exactamente cinco caracteres. Así, por ejemplo, las nueve en punto se introduce como

Escribir un programa que acepte fechas escri- tas de modo usual y las visualice como tres números. Por ejemplo, la entrada

producirá la salida

15, Febrero 1989

15 2 1989

Escribir un programa que acepte un número de tres dígitos escrito en palabra y a continuación los visualice como un valor de tipo entero. La entrada se termina con un punto. por ejemplo, la entrada

doscientos veinticinco producirá la salida

225

Escribir un programa que acepte un año escrito en cifras arábigas y visualice el año escrito en números romanos, dentro del rango a

Nota: Recuerde que V = 5 L = 50

MCM = MCMLX = 1960 = 1989 = 10 = 900 MCML = 1950 = 1940

5.6. Se desea redondear un entero positivo N a la centena más próxima y visualizar la salida. Para ello la entrada de datos debe ser los cuatro dígitos del entero N. Por ejemplo, si A es 2, I3 es 3, C es 6 y D es 2, entonces N será 2362 y el resultado redondeado Si N es 2342, el resultado será 2300, y si N = 2962, entonces el número será 3000. Diseñar el programa correspondiente.

Se quiere calcular la edad de un individuo, para ello se va a tener como entrada dos fechas en el formato día (1 a mes (1 a 12) y año (entero de cuatro dígitos), correspondientes a la fecha de nacimiento y la fecha actual, respec- tivamente. Escribir un programa que calcule y visualice la edad del individuo. Si es la fecha de un (menos de un año de edad), la edad se debe dar en meses y días; en caso contrario, la edad se calculará en años.

Escribir un programa que determine si un año es bisiesto. Un año es bisiesto si es múltiplo de 4 (por ejemplo, 1984). Sin embargo, los años múltiplos de 100 sólo son bisiestos cuando a la vez son múltiples de (por ejemplo, 1800 no es bisiesto, mientras que sí lo será).

5.9. Escribir un programa que calcule el número de días de un mes, dados los valores numéricos del mes y el año.

5.10. Se desea calcular el salario neto semanal de los trabajadores de una empresa de acuerdo a las siguientes normas:

Horas semanales trabajadas 38 a una tasa

Horas extras (38 o más) a una tasa 50 por

Impuestos O por 100, si el salario bruto es

Impuestos 10 por 100, si el salario bruto es

5.11. Determinar el menor número de billetes y

monedas de curso legal equivalentes a cierta cantidad de pesetas (cambio óptimo).

5.12. Escribir y ejecutar un programa que simule un calculador simple. Lee dos enteros y un carác- ter. Si el carácter es un

+,

se imprime la suma; si es un-, se imprime la diferencia; si es un se imprime el producto; si es un se imprime el cociente; y si es un se imprime el resto. Nota: utilizar la sentencia switch.

5.7.

5.8.

dada.

superior a la ordinaria.

menor o igual a 50.000 pesetas.

Documento similar