unidad iv estructuras selectivas 2012

Upload: josue-torres

Post on 19-Jul-2015

260 views

Category:

Documents


0 download

TRANSCRIPT

UNIVERSIDAD DE EL SALVADOR FACULTAD DE INGENIERA Y ARQUITECTURA ESCUELA DE INGENIERA DE SISTEMAS INFORMTICOS INTRODUCCIN A LA INFORMTICA UNIDAD IV PROGRAMACION ESTRUCTURADA, LGICA ESTRUCTURADA: ESTRUCTURAS SELECTIVAS Objetivo: Conocer y aplicar las estructuras selectivas en la solucin de problemas, tanto en su forma grfica como en cdigo o lenguaje de programacin. Contenido: I. II. III. IV. V. VI. Estructura Selectiva Concepto de Expresin Lgica o Condicin Jerarqua General de Operadores Estructura de Seleccin Simple Estructura de Seleccin Doble Estructura de Seleccin Anidada Estructura de Seleccin Mltiple Pg. 1 2 6 7 14 22 36

INTRODUCCIN En nuestra vida diaria, nos la pasamos decidiendo o seleccionando que hacer, por ejemplo: Cmo me voy a la U? Caminando, en bus, en carro propio, con un amigo?, o tal vez: Voy a clase de Informtica o me voy al cafetn? Y otras cosas tan sencillas como stas. En esta Unidad aprenderemos a tomar decisiones en la resolucin de problemas, unos tan sencillos como los que hasta ahora hemos resuelto y otros un poco ms complicados. Para tomar una decisin siempre nos hacemos una pregunta, aprenderemos tambin a formular esas preguntas correctamente, desde el punto de vista informtico, el ejemplo anterior la pregunta se puede formular as: Me voy a la U caminando? Me voy a la U en bus? Me voy a la U en mi carro? Me voy a la U con un amigo? Note que cada pregunta tiene una de dos posibles respuestas: Si bien No. Recordemos que, en los algoritmos no podemos permitir ambigedades, por lo tanto no es aceptable un tal vez o quizs como respuesta. Tambin es fcil notar que si a la primera pregunta la respuesta es afirmativa ya no es necesario preguntarse las siguientes. Los algoritmos que hemos diseado, hasta el momento, son completamente verticales, es decir que al correrlos (o probarlos), se van ejecutando cada uno de los pasos o bloques desde el principio hasta el fin, en el orden en que fueron diseados, no tomamos ninguna decisin, solo se ejecutan. Con las estructuras Selectivas podremos elegir hacer o no uno de esos bloques, o tambin elegir entre dos o ms rutas del algoritmo.

1

I. ESTRUCTURA SELECTIVA A los bloques que dentro de un algoritmo, nos permiten elegir que hacer en un momento determinado se les conoce como Estructuras Selectivas, normalmente se selecciona entre dos o ms acciones como clculos, lectura o impresin de datos. Estas estructuras se clasifican en los siguientes tipos: a. Estructura selectiva simple b. Estructura selectiva doble c. Estructura selectiva anidada y d. Estructura selectiva mltiple El smbolo que utilizaremos para representar la toma de una decisin es un rombo:

Este rombo nos permite bifurcar o multiplicar los caminos o rutas, que contienen las diferentes acciones a seleccionar, de acuerdo a la respuesta de la pregunta que se escribe dentro del mismo, a esta pregunta se le conoce como: proceso lgico, expresin lgica o simplemente condicin. El rombo, al igual que las estructuras secuenciales debe tener una nica flecha de entrada y una nica flecha de salida. II. CONCEPTO DE EXPRESIN LGICA O CONDICIN Es una expresin que al evaluarla se puede obtener uno de dos resultados posibles: verdadero (true) o falso (false). La condicin se escribe dentro del rombo y dependiendo del valor de verdad que tome, permite seguir un camino u otro, pero al final deben unirse de nuevo para indicar que la estructura selectiva ha terminado. Flecha de inicio de la Estructura o de Entrada a la misma

Falso. . .

Condicin

Cierto. . .

Flecha de fin de la Estructura o de Salida a la misma Para escribir las condiciones se necesitan operadores relacionales y operadores lgicos y de acuerdo a los que se utilicen se clasifican en: Simple y Compuesta. 1. CONDICIN SIMPLE Una condicin simple es una expresin que se construye con un solo operador relacional. Los operadores relacionales son aquellos que permiten comparar dos expresiones y obtener siempre un nico resultado, cierto o falso; se comparan dos expresiones para determinar si son iguales, diferentes o, si una es mayor que la otra.

2

Estos operadores, ya los conocemos y podemos utilizarlos, lo que cambia es la escritura de algunos de ellos: Operadores Relacionales Significado Ejemplo Menor que a0 Menor o igual que a = 10 Igual que a == c Distinto de c != 5

Operador < > = == !=

Debe tenerse en cuenta que el operador ==, solo compara dos datos no asigna nada y que es diferente del operador = que solo asigna, no compara. Ejemplo: Para realizar una de dos acciones posibles, se elige dependiendo del valor que tenga la variable A, si sta es 25 o ms elegimos un camino, de lo contrario se elige el otro:

Falso. . .

A>= 25

Cierto. . .

2. CONDICIN COMPUESTA Una condicin compuesta se construye a partir de dos o ms condiciones simples, lo cual indica que tiene ms de un operador relacional. Para escribir condiciones compuestas se hace necesario utilizar los operadores lgicos. Operador && || ! Significado Y O NO Ejemplo a > 8 && a < 10 b==3 || c>5 !(a != b)

El ejemplo con el que empezamos esta unidad ahora podemos escribirlo as: Me voy a la U caminando o ( || ) en bus o ( || ) en mi carro o ( || ) con un amigo? Otro ejemplo es aquel en el que se elige una accin a realizar dependiendo de los valores de tres variables: A, B y C. Si los tres son iguales se elige el camino de cierto si no son iguales el camino de falso. Matemticamente esto lo escribimos as: A=B=C Pero, en informtica, ya que en esta expresin existen dos operadores relacionales de igualdad, se DEBE escribir as:

3

A == B && B == C En flujograma se ve as:

Falso

A==B && B==C

Cierto . . .

. . .

Tablas de Verdad de los Operadores Lgicos El resultado, o valor de verdad, de una condicin compuesta depende de los operadores lgicos que se utilizan. En las siguientes tablas C1 y C2 son consideradas como 2 condiciones simples, teniendo cada una 2 posibles resultados: cierto o falso, al relacionarlas por medio de operadores lgicos, los resultados de la condicin compuesta cambia ya que cada operador genera un resultado de acuerdo a sus tablas de verdad: Operador && C2 C1 && C2 Cierto Cierto Falso Falso Cierto Falso Falso Falso

C1 Cierto Cierto Falso Falso

El operador && da como resultado CIERTO siempre que las dos condiciones, indicadas en la tabla como C1 y C2, sean ciertas, en caso contrario dar FALSO. Operador || C2 Cierto Falso Cierto Falso

C1 Cierto Cierto Falso Falso

C1 || C2 Cierto Cierto Cierto Falso

El operador || da como resultado FALSO siempre que las dos condiciones sean falsas, en caso contrario dar CIERTO. Operador ! C1 ! C1 Cierto Falso Falso Cierto

El operador ! cambia el valor de verdad de su operando o expresin lgica.

4

Las condiciones compuestas, pueden volverse complejas, por lo que se recomienda el uso de parntesis que encierren cada condicin simple, con lo que se facilita la comprensin de las mismas, y se indica que condicin queremos que se evale primero. 3. EVALUACIN DE EXPRESIONES LGICAS O CONDICIONES. La evaluacin de una expresin lgica o condicin consiste en ejecutar lo que indica cada operador que la forman y obtener un solo resultado cierto o falso; para hacerlo es necesario llevar cierto orden indicado por la jerarqua (u orden de ejecucin) de cada tipo de operadores. La jerarqua de los operadores, indica el orden en el que se deben aplicar los mismos a un dato o valor; es decir, los que tienen mayor jerarqua se aplican primero. Cuando en una condicin existen varios operadores del mismo nivel jerrquico, se utiliza adems de la jeraqua lo que se conoce como asociatividad. La asociatividad determina el orden de ejecucin de operadores del mismo nivel jerrquico; es decir, si una expresin tiene dos operadores con la misma jerarqua el orden de ejecucin de los mismos es determinado por la asociatividad, que puede ser de izquierda a derecha o de derecha a izquierda, por ejemplo la suma y la resta, tienen el mismo nivel jerarquico y la asociatividad es de izquierda a derecha, por lo tanto en la siguiente expresin: X = 3 a + 5 b 2 + 10

Como todos los operadores tienen el mismo nivel jerarquico, se evalan en orden de aparicin de izquierda a derecha: asociatividad

Jerarqua de Operadores de Relacin OPERADORES JERARQUIA Mayor >, =, , = pow(7,2) ) || ( 43 8 * 2 % 4 != 3 * 2 / 2 )

Para resolver este ejercicio, se ha utilizado la jerarqua general de los operadores, que hemos visto hasta el momento, y en cada paso se ha subrayado la operacin que se realiza.

6

Paso 1: Paso 2: Paso 3: Paso 4: Paso 5: Paso 6: Paso 7: Paso 8: Paso 9: Paso 10: Paso 11:

! ( 15 >= pow(7,2) ) || ( 43 8 * 2 % 4 != 3 * 2 / 2 ) ! ( 15 >= 49.0) ) || ( 43 8 * 2 % 4 != 3 * 2 / 2 ) ! ( F ) || ( 43 8 * 2 % 4 != 3 * 2 / 2 ) ! F || ( 43 16 % 4 != 3 * 2 / 2 ) 3*2 / 2 )

! F || ( 43 0 !=

! F || ( 43 0 != 6 / 2 ) ! F || ( 43 0 != 3 ) ! F || ( 43 != 3 ) ! F || (C ) C || C C

En informtica, se considera que todo nmero (positivo o negativo) distinto de cero tiene un valor de verdad de cierto, y el cero es el nico cuyo valor de verdad o lgico es falso. Adems, se toma como 1 (uno) el valor numrico de Cierto y, 0 (cero) el valor numrico de Falso. Por lo tanto, el resultado numrico del ejemplo anterior es 1 (uno) Importante: Los resultados de sumar, restar, multiplicar y dividir dos operandos enteros, siempre es un ENTERO. Los resultados de sumar, restar, multiplicar y dividir dos operandos reales es siempre un nmero REAL. Si uno de los operandos es real y el otro entero el resultado siempre es REAL para suma, resta, multiplicacin y divisin. La divisin residual (%) solo se da entre operandos enteros y el resultado es siempre otro ENTERO. Las funciones matemticas (log, sin, sqrt ) generan un resultado REAL.

III. ESTRUCTURA DE SELECCIN SIMPLE La estructura de seleccin simple se utiliza cuando se tiene que ejecutar una accin si la condicin es verdadera. Es decir, se tienen dos alternativas o caminos a seguir, el camino verdadero tiene la accin a ejecutar; en el camino a seguir cuando la condicin es falsa no existe accin a realizar. La accin del lado del cierto puede estar formada por varios bloques de flujograma, pueden ser estructuras secuenciales, selectivas o como las que veremos ms adelante estructuras repetitivas. La forma general de representar esta estructura es la siguiente:

7

Falso

Condicin

Cierto Accin

Lo que esta dentro del punteado es la Estructura Selectiva Simple

En donde: La condicin puede ser Simple o Compuesta. Y la accin puede ser un bloque (o ms de uno) de: 1. Entrada de datos 2. Salida de datos 3. Clculo / asignacin 4. Otra estructura selectiva 5. Una combinacin de las anteriores En los flujogramas, la Estructura Selectiva, al igual que la secuencial tiene una flecha de llegada y una de salida, lo cual nos obliga a reunir las dos rutas despus de la accin. Con esta estructura, ya podemos incluir las restricciones de los datos en nuestro algoritmo. Ejemplo 2 En un almacn se realiza un 20% de descuento a los clientes cuya compra supere los $1000.00 Cul ser la cantidad de dinero que pagar una persona por su compra?

I. Planteamiento del Problema ENTRADA

SALIDA

Valor de la compra Porcentaje de Descuento (20%) Lmite de compra para descuento ($1000)

Total a Pagar por el cliente

II. Anlisis del Problema a. Definicin de Variables de Salida. Nombre pago_T Tipo Real Descripcin Almacena la cantidad total de dinero a pagar por el cliente

8

b. Datos de Entrada Definicin de Variables de Entrada. Nombre Tipo Descripcin valor Real Contiene el monto de la compra Definicin de Constante. Nombre Tipo Descripcin porcen Real Porcentaje de descuento a aplicar

Valor 0.20

c. Restricciones: Es necesario que se realice alguna compra, para calcular, por lo tanto: valor > 0 d. Proceso: Vamos a recordar que en esta parte, solo escribimos los procesos matemticos (clculos o asignaciones) y los procesos lgicos (comparaciones o condiciones), que se realizarn para resolver el problema, y si se escriben en orden nos facilita an ms el diseo de solucin. Aplicar las frmulas pago_T = valor desc; desc = porcen * valor; en donde desc es la cantidad a descontar. en donde porcen es el porcentaje 20% a descontar y es constante.

Los clculos anteriores se realizan siempre y cuando la compra (valor) sea mayor que $1000.00, de lo contrario pago_T ser igual al valor de la compra (valor), lo que quiere decir que no se le descuenta nada al cliente, es decir desc=0. Adems, debe haberse realizado alguna compra, esto es valor > 0, por lo tanto, lo primero que se hace es evaluar si hacemos o no descuento. Ahora si ordenamos la idea planteada anteriormente tenemos lo que debe detallarse en el proceso: porcen = 0.20 desc = 0 Es valor > 1000? S: desc = porcen * valor pago_T = valor - desc e. Definicin de Variables de Proceso. Nombre Tipo Descripcin desc Real Representa la cantidad de dinero a descontarle al cliente

9

III. Diseo de la Solucin: FlujogramaInicio

porcen = 0.2

Definicin de la constante Valor inicial de desc

desc = 0 Digite el valor de la compra

valor

Falso

valor > 1000

Cierto

desc = porcen * valor

pago_T = valor -desc Total a pagar, pago_T, dolares

Fin

3.1 SINTXIS EN C DE LA ESTRUCTURA DE SELECCIN SIMPLE La escritura de la estructura de seleccin simple, es muy fcil, involucra como novedad, la palabra reservada if nicamente, y los separadores u operadores de agrupacin ( ) y { }. If, que en espaol significa si, nos indica que inicia la estructura y a continuacin se escribe la expresin lgica o condicin dentro de parntesis; la accin que se realiza se debe escribir en perfecto C, y si tiene ms de una estructura se debe de escribir dentro de llaves. En C, la seleccin simple, se puede escribir de diferentes formas, aunque se incluyen varias en este guin, indicaremos cual es la que se aconseja utilizar, como se muestra a continuacin en la siguiente tabla, en la que se ha resaltado las nuevas palabras reservadas con letras negritas:

10

Sintaxis if (condicin) lnea;

Utilizarla cuando Ejemplo La accin es una if ((x!=7) || (y==7)) a=4; estructura secuencial

Comentarios La accin a realizar es muy sencilla, una sola Estructura Secuencial; es decir, una sola lnea de cdigo. Note que la lnea de accin se escribe con un margen y que en la lnea de if no se escribe ; Repare en el uso de las llaves, se escriben ms adentro que if, y las lneas de la accin, ms adentro que stas.

if ( condicin ) lnea;

La accin est formada por una if ( (x!=7) || (y ==7) ) sola estructura a=4; //RECOMENDABLE secuencial. if ( condicin ) { lnea 1; lnea 2; . . . lnea N; }

La accin est formada por varias estructuras

if ( x>8 ) { a=2*x; b=a+x; }

Es importante recordar que: La condicin puede ser simple o compuesta, y se escribe dentro de parntesis. Si la condicin es verdadera se ejecutan la o las lneas que estn despus de la sentencia if, y se contina con la sentencia despus de la estructura if. Si la condicin es falsa la ejecucin del programa sigue despus de la estructura if. Si solo hay una sentencia dentro del if las llaves no son necesarias.

Las siguientes sugerencias ayudan mucho para depurar un programa: Cuando la condicin es compuesta, cada condicin simple debe estar dentro de parntesis, esto es opcional, pero ayuda a visualizar cada condicin simple y as revisarlas y corregirlas cuando es necesario. La marginacin es muy importante, facilita distinguir la accin a realizar si la condicin da como resultado cierto. La escritura o sintxis de la accin debe ser la correcta, terminando desde luego cada estructura secuencial (o lnea de cdigo) con un punto y coma (;).

11

El programa o codificacin del ejemplo 2 (pgs. 8, 9 y 10) se muestra a continuacin: // Programa que imprime el total a pagar en una tienda #include #include #define porcen 0.2 main() { float valor, pago_T, desc=0; puts("Digite el valor de la compra"); scanf("%f", &valor); if (valor>1000) desc = porcen*valor; //El margen nos ayuda a distinguir fcilmente la accin del cierto pago_T = valor-desc; printf("\n\n\n Total a pagar \t %.2f", pago_T); getch(); return 0; }

Ejemplo 3 Disee un programa en C que lea un nmero entero, que lo imprima y adems agregue un mensaje de POSITIVO si el nmero es mayor que cero. DESARROLLO DE LA SOLUCIN

I. Planteamiento del problemaEntrada Salida

Un nmero entero

El nmero y un mensaje de positivo, cuando corresponda

II. Anlisis del Problemaa) Definicin de Variables de Salida Se desplegar el nmero con el que se va a trabajar y el mensaje requerido, si corresponde b) Datos de Entrada Definicin de Variables de Entrada Identificador Tipo Descripcin num entero Nmero dado Definicin de Constantes: No existen c) Restricciones: No hay d) Proceso: Es num > 0 ?12

SI:

imprimir num POSITIVO

e) Definicin de Variables de proceso: No existen

III. Diseo de solucin:Inicio

Flujograma

Digite unnmero entero

num

num

num> 0

Si

Es POSITIVO

Fin

IV.

Codificacin // Programa que imprime si un numero es positivo #include #include main () { int num; puts (Digite un numero entero); scanf (%i, &num); printf (\n %i , num); if (num > 0) printf (\t POSITIVO); getch(); return 0; } // Fin del programa

13

IV. ESTRUCTURA DE SELECCIN DOBLE La estructura de seleccin doble se utiliza cuando se pueden elegir entre dos acciones distintas, dependiendo del resultado obtenido al evaluar la condicin. En flujograma se representa de la siguiente forma:

FalsoAccin 2

Condicin

CiertoAccin 1

Entre lo punteado tenemos la Estructura Selectiva Doble

La condicin puede ser simple o compuesta, la accin 1 y la accin 2 pueden estar formadas por ms de un bloque de estructuras secuenciales o selectivas. Si al evaluar la condicin el resultado es cierto se ejecuta la accin 1 o si al evaluarla el resultado es falso se ejecuta la accin 2. Ejemplo 4 Disee un algoritmo (flujograma) que calcule la raz cuadrada de un nmero y que le sume 2.1 y=x + 2.1 o bien: Resultado = numero + 2.1

I. Planteamiento del Problema: Entrada

Salida

Un nmero II. Anlisis del problema: a. Definicin de Variables de Salida Nombre res Tipo Real

Resultado del clculo

Descripcin Almacena el resultado del clculo

b. Datos de Entrada Definicin de Variables de Entrada: Nombre Tipo Descripcin num Real Almacena el nmero o dato Definicin de Constantes: No se utilizan, el valor de 2.1 que es constante nos lo dan en la frmula.

14

c. Restricciones: num>0

//el nmero debe ser positivo, para calcular la raz cuadrada.

d. Proceso: El clculo a realizar es muy sencillo: res = sqrt(num) + 2.1 siempre y cuando num sea positivo.

Por lo tanto lo primero que hacemos es verificar la restriccin, para saber si realizamos el clculo o no, nuestra condicin se escribe as: Es num>0? Si: res = sqrt(num) + 2.1 No: Imprimir No se puede calcular e. Definicin de Variables de Proceso: No se utilizan.

III.

Diseo de la Solucin:

FlujogramaInicio

Digite, un nmero

num

No

num >0

Si

No se puede calcular

res= sqrt (num) + 2.1El resultado es:, res

Fin

4.1 SINTXIS DE LA ESTRUCTURA DE SELECCIN DOBLE Para escribir en C esta estructura necesitamos adems de la palabra if, los parntesis y las llaves, la palabra else, que le daremos en espaol el significado de de otra forma o de lo contrario y nos sirve para indicar el inicio de la accin del lado Falso (o accin 2 en el dibujo del estructura de la pgina 14).

15

El lenguaje de programacin C tiene adems un operador condicional ?: que nos permite escribir estructuras selectivas dobles y simples, solo que stas deben ser muy sencillas, es decir la accin ha realizar en ambos lados del rombo, tiene que estar formada por una sola estructura secuencial. Este operador condicional (?:) necesita tres operandos, por eso se le conoce como operador ternario, un operando es la expresin lgica o condicin, el segundo es la accin del lado cierto y el tercer operando es la accin del falso: (Condicin)? Accin1 : Accin2; Este operando funciona de la siguiente manera: Se evala la condicin siendo el resultado el que determina que accin ejecutar, si el resultado es cierto (distinto de cero) se ejecuta la accin1; si por el contrario el resultado es falso (igual a cero) se ejecuta la accin2. Se puede utilizar tambin con una estructura de seleccin simple: (Condicin)? Accin1; El operador ?: tiene un grado de jerarqua superior al de asignacin (=) y uno menor que el o (||), es decir se ejecuta dentro de una expresin despus de || y antes de =. Su asociatividad es de derecha a izquierda. Por ejemplo, las sentencias: a=2; b=5; (a>=b)? c=a+2: c=b; printf(\n %i \t %i \t %i, a, b, c); a=2; b=3; (a!=b)? c=a: c=a+1; printf(\n %i \t %i \t %i, a, b, c);

Imprimen los siguientes valores:

2

5

5

2

3

2

A continuacin se muestran las posibles formas de escribir esta estructura, y desde luego, se indica cual es la recomendada:

16

Sintxisif (condicin) sentencia; else sentencia;

(Condicin)? Accin 1: Accin 2;

if (condicin) sentencia; else sentencia; //RECOMENDADA if (expresin) { Lnea1 de accin1; Lnea2 de accin1; ... } else { Lnea1 de accin 2; Lnea2 de accin 2; ... } Recordar que:

Utilizarla cuando: Ejemplo La accion1 y la accin 2 tienen solo una sola if (a!=3) x=2*a; else x=a; estructura secuencial, que implica una lnea de cdigo. Igual que el anterior, las acciones 1 y 2 slo estn (a!=3)? x=2*a : x=a; formadas por una estructura secuencial y se escribe todo (z= 5 ) { b = 2*a; x = b+a; t = a; } else { a=2; b= 2*a; }

Las palabras if y else, van alineadas, las llaves tambien tanto las del cierto (if) como las del falso (else) Y las acciones deben llevar un mismo margen, para que se distinga claramente cada parte de la estructura.

Si la condicin es verdadera se ejecutan la o las lneas que estn Si la condicin es falsa se ejecutan la o las lneas que estn despus de la sentencia if, y luego contina con la lnea que sigue despus de la palabra reservada else y contina con las lneas despus de la estructura. que siguen despus de la estructura. Si solo hay una lnea dentro del if o else las llaves no son necesarias. La marginacin es importante, facilita la depuracin del programa.17

La condicin debe de ir dentro de parntesis.

Codificacin del ejemplo 4 pg. 14 y15 //Programa que hace clculos con raiz cuadrada #include #include #include main() { float num, res; puts("Digite un numero"); scanf("%f", &num); if (num>0) { res = sqrt(num) +2.1; printf("\n\n\n El resultado es: %.4f", res); } else puts("No se puede calcular"); getch(); return 0; }

//Estamos solicitando la salida con 4 decimales

Ejemplo 5 Disee un algoritmo que lea un nmero entero, lo imprima y agregue despus un comentario que indique si el nmero dado es mltiplo de 7 o no. DESARROLLO DE LA SOLUCIN

I. Planteamiento del ProblemaEntrada Salida

El nmero a analizar

El nmero y el mensaje requerido

II. Anlisis del problemaa) Definicin de Variables de salida Se desplegar el nmero y un mensaje b) Datos de Entrada Definicin de Variables de Entrada Nombre Tipo de dato Descripcin dato Entero El nmero dado, el que se va a analizar Definicin de Constantes: siete (7) es el dato que se usa como divisor para verificar la multiplicidad c) Restricciones: No hay

18

d) Proceso:Un nmero es mltiplo de 7, si al dividir el nmero entre 7 (divisin entera) el residuo es cero:

r = dato % 7 Es r = = 0? Si: imprimir Es multiplo de 7 No: imprimir No es multiplo de 7 e) Definicin de Variable de proceso Nombre Tipo de dato Descripcin r Entero El residuo de la divisin de dato entre 7

III. Diseo de solucin:FlujogramaInicio digite un nmero entero

IV Codificacin:

dato

/* Verifica si un numero es multiplo de 7 */ #include #include main() { int dato; puts(digite un nmero entero); scanf (%i, &dato); printf (\n %i, dato); r = dato % 7; if ( r == 0) printf (\t es multiplo de 7); else printf (\t no es multiplo de 7); getch(); return 0;` }

dato r = dato%7Si r == 0

No es multiplo de 7

Es multiplo de 7

Fin

Ejemplo 6 Disee un flujograma que permita imprimir la suma algebraica de dos nmeros reales y, un comentario de positivo o negativo de acuerdo al resultado, se deben imprimir tambin los datos originales.

19

DESARROLLO DE LA SOLUCIN I. Planteamiento del problema Entrada Salida

Dos nmeros reales

Suma de los nmeros Comentario sobre el resultado Desplegar los dos nmeros

II Anlisis del Problema a. Definicin de Variables de Salida Nombre Tipo suma Real

Descripcin Contiene el resultado de la suma

Recordar que los datos iniciales se desplegarn junto con el resultado y el comentario. El mensaje se toma como constante de caracteres esto es, un comentario impreso. b. Datos de Entrada Definicin de Variables de Entrada Nombre Tipo Descripcin num1 Real Representa el primer nmero num2 Real Representa el segundo nmero Definicin de Constantes: No hay c. Restricciones: No existen, los nmeros pueden ser positivos, negativos o igual a cero. d. Proceso: Para el proceso solo basta con sumar ambos nmeros y el resultado compararlo con cero, para elegir el comentario a imprimir, ntese que de acuerdo a los datos a sumar el resultado tambin puede ser cero: suma = num1 + num2 suma > 0? Si: imprimir Resultado positivo No: suma < 0? Si: imprimir Resultado negativo No: imprimir Resultado cero e. Definicin de Variables de proceso: No hay.

20

III

Diseo de la solucin:

FlujogramaInicio

Digite los nmerosnum1, num2

suma = num1 + num2

Los datos son:,num1, num2, Resultado,suma

Falso

suma >0

Cierto

Falso

suma 0? -3>0? FALSO suma 0

Si

No

dato < 0

Si

POSITIVO

CERO

NEGATIVO

Fin

IV. Codificacin //Programa que imprime si un numero es pos., neg, o cero #include #include main() { float dato; puts("Digite un numero"); scanf("%f", &dato); printf("\n\n\n El numero: \t %.2f \t es \t", dato); if (dato>0) printf("POSITIVO \n"); else if (datob? //condicin 2 Si: Es b>c? //condicin 3 Si: desplegar a, b, c No: Es a > c? Si: desplegar a, c, b No: desplegar c, a, b No: Es b>c? Si: Es a>c? Si: desplegar b, c, No: desplegar b, a, No: desplegar c, b, a

//condicin 4

//condicin 5 //condicin 6 a c

Ntese que cada condicin tiene sus dos respuestas posibles si (cierto) o no (falso) y la marginacin que se ha hecho facilita la distincin de ambas. Adems, siempre se va escribiendo la accin del lado del si o cierto, despus la del no o falso. e. Definicin de Variables de Proceso: No son necesarias

30

III. Diseo de la solucin:

Flujograma

Inicio

Esta es una de las posibles soluciones que se pueden disear, y tiene un anidamiento a la izquierda.

Digite tres numeros enteros

a, b, c

Aclaracin: Los nmeros deben ser diferentes, por lo que la restriccin es ! ( a!=b && b!=c && a!=c )

NoNo

!(a!=b && b!=c && a!=c)

SiNo cumplen con restriccin

a>b

Si

No

b>cNo

Si Si b, a, cNo

No

b>c Si a, c, b

Si a, b, c

c, b, a

a>c

a>c

b, c, a

c, a, b

Los nmeros son iguales

Fin

31

IV Codificacin //Escribe 3 numeros en orden descendente #include #include main() { int a, b, c; puts("Digite tres numeros enteros "); //Separe los numeros por un espacio en blanco scanf("%i %i %i", &a, &b, &c); if (!(a!=b && b!=c && a!=c)) { //Son necesarias, son 2 lineas printf puts("No cumplen con restricciones"); puts("Los numeros son iguales"); } else if (a>b) if (b>c) printf("\n\n\n %i \t %i \t%i", a,b,c); //Note la marginacin de if - else, else //las llaves y las sentencias de if (a>c) //las acciones printf("\n\n\n %i \t %i \t%i", a, c, b); else printf("\n\n\n %i \t %i \t%i", c, a, b); else if (b>c) if (a>c) printf("\n\n\n %i \t %i \t %i", b,a,c); else printf("\n\n\n %i \t %i \t %i", b,c,a); else printf("\n\n\n %i \t %i \t %i",c,b,a); getch(); return 0; }

Ejemplo 9 Calcular la utilidad que un trabajador recibe en el reparto anual de utilidades si ste se le asigna como un porcentaje de su salario mensual que depende de su antigedad en la empresa de acuerdo con la siguiente tabla: TIEMPO UTILIDAD Menos de 1 ao 5% del salario 1 ao o ms y menos de 2 aos 7% del salario 2 aos o ms y menos de 5 aos 10% del salario 5 aos o ms y menos de 10 aos 15% del salario 10 aos o ms 20% del salario

32

I.

Planteamiento del problema Entrada

Salida

Tiempo de trabajar en la empresa, en aos Salario actual

Utilidad

II

Anlisis del problema a) Definicin de Variables de Salida Nombre Tipo Descripcin u Real Utilidad que recibe el trabajador anualmente b) Datos de Entrada Definicin de Variables de Entrada Nombre Tipo Descripcin ta Real Tiempo de trabajar en la empresa s Real Salario actual del trabajador Constantes: Los porcentajes de utilidad: 0.05, 0.07, 0.1, 0.15, 0.2 Los lmites de tiempo en aos: 1, 2, 5, 10 c) Restricciones: ta >= 0 s>0 d) Proceso ta < 1 ? SI: u = s * 0.05 NO: ta < 2? SI: u = s * 0.07 NO: ta < 5 ? SI: u = s * 0.1 NO: ta < 10? SI: u = s * 0.15 NO: u = s * 0.2 e) Variables de Proceso: No se han utilizado

33

III

Diseo de solucin: FlujogramaInicio

digite el tiempo

ta salario?

s

No

ta>=0 && s>0

Si

datos incorrectos

No

ta0? -5>=0 && 100>0 F && C Falso Ta>=0 && s>0? 5>=0 && 0 >0 C && F Falso Zona de Salida Digite el tiempo -5 Salario? 100.0

Primera vez

Segunda vez

ta 5

s 0

u

Digite el tiempo 5 Salario? 0

Tercera vez

ta 15

s 800.00

u 16.0

Ta>=0 && s>0? 10>=0 && 800.0 >0 C && C Cierto ta0 && cat>0 && h_e>=0? //prueba de restricciones 1 pre=30.00 Si: cat : 2 pre=38.00 //Seleccin mltiple 3 pre=50.00 4 pre=70.00 Exc pre=0.00 h_e > 30? Si: horas = 30 No: horas= h_e extra = horas * pre pago = sal + extra No: Desplegar Error en los datos e. Definicin de Variables de proceso Nombre Tipo Descripcin extra real La cantidad de dinero ganada en concepto de horas extra horas entero La cantidad de horas extras laboradas, menor o igual que 30 pre real El precio de una hora extra . III Diseo de la Solucin: Flujograma:

45

Inicio

Digite el salario, la

categora y el nmero de horas extra realizadas

sal, cat, h_e

No i Error en los datos

Sal>0 && cat>0 && h_e>=0

Si

cat 1 2 3 4pre=30

pre=38

pre=50 pre=70

Excep

pre=0

No horas=h_e

h_e > 30

Si

horas=h_e - 30

extra=pre*horaspago = sal + extraEl total a pagar es: $, pago

Fin

46

Pruebe el flujograma con: 875.00, 3, 15 Zona de memoria Zona de proceso pago sal extra pre cat H_e horas sal>0 && cat>0 && h_e>0? 1625 875 750 50 3 15 15 875>0 && 3>0 && 15>0 C && 3>0 && 15>0 C && C && 15>0 C && C && C C && C CIERTO Cambio segn cat (3) Caso 1: Caso 2: Caso 3: Pre=50 h_e>30? 15>30 FALSO horas=h_e horas= 15 extra=pre*horas extra=50*15 extra=750 pago=sal+extra pago= 875 + 750 pago=1625.00

Zona de salida Digite el salario, la categora y el nmero de horas extra realizadas 875.0 3 15

El total a $1625.00

pagar

es:

47

IV. Codificacin //Calcula el pago total de un empleado #include #include main() { float pago, sal, extra, pre; int cat, h_e, horas; puts("digite el salario y la categoria del empleado"); scanf("%f %i", &sal, &cat); puts("digite el numero de horas extra realizadas"); scanf("%i", &h_e); if ((sal>0) && (cat>0) && (h_e>=0)) { switch (cat) { case 1: pre=30; break; case 2: pre=38; break; case 3: pre=50; break; case 4: pre=70; break; default: pre=0; } if (h_e>30) horas=h_e-30; else horas=h_e; extra=pre*horas; pago=sal+extra; printf("\n\n\n El total a pagar es: \t $ %.2f dolares", pago); } else puts("Error en los datos"); getch(); return 0; }

48

Ejemplo 11 Disee un flujograma que simule una calculadora sencilla, con solo las cuatro operaciones aritmticas: suma, resta, multiplicacin y divisin. I. Planteamiento del problema Entrada

Salida

Datos o nmeros a operar Tipo de operacin a realizar II.

Nombre de la operacin realizada Resultado

Anlisis del Problema a. Definicin de Variables de Salida Nombre Tipo Descripcin res Real Almacena el resultado de la operacin realizada El nombre de la operacin se imprimir como mensaje o cadena de caracteres. b. Datos de Entrada Definicin de Variables de Entrada: Nombre Tipo Descripcin a Real Representa el primer dato a operar b Real Representa el segundo dato para operar op Caracter Representa el tipo de operacin a realizar: +: suma; -: resta;*: multiplicacin y /: divisin. Definicin de Constantes: No se han utilizado c. Restricciones: Los nmeros u operandos, pueden ser positivos, negativos o cero. op== + || op== - || op== * || op== / //Solo 4 operaciones permitidas d. Proceso: La operacin que se va realizar, depende del tipo de operacin que hemos digitado:

+ * /

si queremos sumar si queremos restar si queremos multiplicar si queremos dividir

Se debe recordar que en la divisin, el segundo operando o divisor no puede ser igual a cero. El proceso queda entonces as:

49

Es op==+ || op==- || op==* || op==/? Si: op : + - * / res = a + b res = a b res = a * b Es b!=0? Si: res = a / b No: desplegar No se puede dividir

No: Desplegar Error en el tipo de operacine. Definicin de Variables de proceso: No se han utilizado

III. Diseo de la Solucin:

Flujograma

50

Inicio

2

1

Digite los dos datos

op

+a, b

res = a + b

SUMA, res

+: suma-: resta *: multiplicacin /: divisin

-

res = a - b RESTA, res

Digite el smbolo deseado op

*

res = a * b MULTIPLICACION, res

/Noop==+ || op==- || op==* || op==/

res = a / b No

Si

b!=0

Si

2

1

No se puededividir

res= a / b DIVISIN, res

Error en el tipo de operacin

Fin

51

IV. Codificacin //Programa que simula una calculadora sencilla #include #include main() { float res, a, b; char op; puts("Digite los dos datos"); scanf("%f %f", &a, &b); //lectura de operandos puts(" +: suma"); //muestra los simbolos de las puts(" -: resta"); //operciones puts(" *: multiplicacion)"); puts(" /: division"); puts("Digite el simbolo de la operacion deseada"); scanf("%s", &op); //lectura del operador if ((op=='+') || (op=='-') || (op=='*') || (op=='/')) //prueba de restriccin de op switch (op) //inicio el lado cierto, solo es una estructura { //Selectiva multiple, no son necesarias llaves case '+': res = a+b; printf("\n\n\n SUMA \t %.2f", res); break; case '-': res = a-b; printf("\n\n\n RESTA \t %.2f", res); break; case '*': res = a*b; printf("\n\n\n MULTIPLICACION \t %.2f", res); break; case '/': if (b!=0) //verificacion del divisor (b) { res = a/b; printf("\n\n\n DIVISION \t %.2f", res); } else puts("No se puede dividir"); break; } else puts("Error en el tipo de operacion"); getch(); return 0; }

52

Ejemplo 12 Disee un programa que calcule el salario de un empleado, si la compaa aumentar a su personal de acuerdo a los aos de servicio de cada empleado, ver tabla de porcentajes. El programa debe imprimir el nombre y el nuevo salario del empleado. Aos de servicio Aumento, en % 10 7.5 15 12 20 18.25 30 25

I. Planteamiento del ProblemaEntrada Salida

Nombre del empleado Salario del empleado Aos de servicio del empleado

Desplegar el nombre Nuevo salario del empleado

II. Anlisis del Problemaa. Variables de Salida Nombre Tipo Descripcin sal_nu Real Representa el nuevo salario del empleado Se desplegarn el nombre y la categora del empleado. b. Datos de Entrada Definicin de Variables de Entrada Nombre Tipo Descripcin nom alfanumrico Representa el nombre del empleado sal Real Representa el salario actual del empleado annio entero Representa los aos de servicio del empleado Constantes: Simblicas no se han utilizado.; sin embargo se toman como constantes numricas: los aos de servicios: 10, 15, 20, 30 Porcentajes de aumento 0.075, 0.12, 0.1825, 0.25

c. Restricciones

sal > 0

&&

annio >0

53

d. Proceso:

Es sal>0? Si: annio =

//Prueba de restriccin 10: aum = 0.075*sal 15: aum = 0.12*sal 20: aum = 0.1825*sal 30: aum = 0.25*sal Exc.. aum = 0 // Prueba de La otra restriccin

sal_nu = sal + aum No: Imprimir Error en el dato de salario

e. Variables de Proceso Nombre Tipo Descripcin aum Real Representa la cantidad de dinero que le aumentaran al empleado

III. Diseo de Solucin: Flujograma:

54

InicioDigite el nombre y los aos de trabajo de empleado

nom, annio

digite el salario

sal

No

sal>0

Si

annio

Error en el dato del salario

10 15 20 30Excep

aum = 0.075s*sal

aum = 0.12*sal aum = 0.1825*sal aum = 0.25*sal aum = 0

sal_nu = sal+ aum

nom,

sal_nu

Fin

55

IV. Codificacin//Calculo de nuevo salario #include #include main() { float nu_sal, sal, aum; int annio; char nom[40]; puts("Digite el nombre y los aos de servicio del empleado"); scanf(" %[^n]s %i", &nom, &cat); puts("Digite el salario actual"); scanf("%f", &sal); if (sal>0) { switch (annio) { case 10: aum = 0.075*sal; break; case 15: aum = 0.12*sal; break; case 20: aum = 0.1825*sal; break; case 30: aum = 0.25*sal; break; default: //prueba restriccin de aos aum = 0; } nu_sal = sal + aum; printf("\n\n\n %s \t %i \t %.2f dolares", nom, nu_sal); } else puts("Error en el dato del salario"); getch(); return 0; }

Material editado por Carolina Ayala y Milagro Castillo Ciclo I 2012

56