Documente Academic
Documente Profesional
Documente Cultură
Metodologa de la programacin
79
Tema 3
3.2 Datos
Un dato es una expresin general que describe los objetos con los cuales opera una computadora. Se los representa :
valor
80
Diseo de Algoritmos Una cadena o string es una sucesin de caracteres que se encuentran delimitados por comillas ( " " ). La longitud de la cadena es la cantidad de caracteres que la forma, incluyendo los espacios que son un carcter ms. As: "Asuncin, Paraguay" es una cadena de longitud 18 "1 de Junio de 1.971" es una cadena de longitud 19 (el 1 y el 1.971 no son nmeros) "123456" es una cadena de longitud 6, no es el nmero 123.456 sobre "123456" no se puede realizar ninguna operacin como sumar, restar, etc. Los datos lgicos Es el conjunto formado por los valores cierto y falso Valores verdaderos: True, 1 Valores Falsos: False,0 Dato
Numricos
No Numricos
Enteros
Reales
Cadenas
Lgicos
Caracteres
Simple Precisin
Doble Precisin
3.4 Constantes
Son objetos cuyo valor permanece invariable a lo largo de la ejecucin de un programa, Una constante es la denominacin de un valor concreto inalterable, de tal forma que se utiliza su nombre cada vez que se necesita referenciarlo. Existen diferentes tipos de constantes: Constantes numricas enteras. Es el rango de enteros compuesta por los signos(+,-) seguido de una serie de dgitos (0..9) A 45
Constantes numricas Reales. Compuestas por los signos(+,-)seguido de una serie de dgitos (0..9) y seguido de un punto (.) seguido de una serie de dgitos (0..9)
Metodologa de la programacin
81
Tema 3 Z 45.6
Constantes no numricas Carcter. Cualquier carcter del lenguaje utilizado encerrado entre comillas. C P
Constante no numricas cadenas. Cualquier serie de caracteres del lenguaje utilizado encerrado entre comillas. S hola
3.5 Variables
Cuando representamos datos, numricos o alfanumricos, debemos darles un nombre. Una variable es un nombre que representa el valor de un dato. En esencia, una variable es una zona o posicin de memoria en la computadora donde se almacena informacin. En un pseudocodigo y tambin en un programa se pueden crear tantas variables como querramos. As tenemos: A = 50; Variable tipo numrica A cuyo valor es 50. Ciudad = "Asuncin"; Variable alfanumrica o de tipo carcter Ciudad, cuyo valor es Asuncin. X = C + B; Variable numrica X cuyo valor es la suma de los valores de las variables numricas C y B. Es una variable calculada Tomar en cuenta que las operaciones que se pueden realizar con dos o ms variables exigen que stas sean del mismo tipo. No podemos "sumar", por ejemplo una variable alfanumrica a otra numrica y viceversa como por ejemplo:
FechaNueva="1 de Junio de 1.971" + 5 Esto no se puede hacer !! Para dar nombres a las variables hay que seguir ciertas reglas: Pueden tener hasta 32 caracteres Debe empezar obligatoriamente con una letra (a-z o A-Z) No pueden contener espacios en blanco
82
Diseo de Algoritmos El resto de los dgitos pueden ser nmeros Se pueden incluir algunos caracteres especiales como el guin. Ejemplos de nombres vlidos de variables FechaNueva C1 totalGuaranies CONTADOR-5 H123 cantidad_de_Alumnos
Ejemplos de nombres de variables NO vlidos Fecha nueva 1contador 24ABC primer-valor N almacen.pedido Algunos lenguajes de programacin exigen la declaracin de las variables que se van a utilizar en todo el programa; es decir, que al comenzar el programa se debe decir que nombre tiene, de que tipo es (numrica o alfanumrica) y un valor inicial. Como aqu no estamos tratando con ningn lenguaje, la declaracin de las variables puede omitirse. Las variables tambin pueden inicializarse; darles un valor inicial. Por defecto, todas las variables para las que no especifiquemos un valor inicial, valen cero si son de tipo numrica y nulo (nulo no es cero ni espacio en blanco; es nulo) si son de tipo carcter.
3.6 Expresiones
Una expresin es una combinacin de operadores y operandos. Los operandos podrn ser constantes, variables u otras expresiones y los operadores de cadenas, aritmticos, relacionales o lgicos. Las variables se pueden procesar utilizando expresiones apropiadas para su tipo. Las expresiones son de 4 clases:
Metodologa de la programacin
83
Tema 3 Las expresiones relacionales se utilizan para formar expresiones que al ser evaluadas producen un valor de tipo lgico: verdadero o falso. Ellos son: Signo > < = <= >= <> Ejemplos: Ejemplo 25 <= 25 25 <> 25 25 <> 4 50 <= 100 500 >= 1 1=6 Resultado Verdadero Falso Verdadero Verdadero Verdadero Falso Operador Mayor que Menor que Igual a Menor o igual que Mayor o igual que Distinto
Cuando se comparan caracteres alfanumricos se hace uno a uno, comenzando por la izquierda hacia la derecha. Si las variables son de diferente longitud, pero exactamente iguales, se considera que la de menor longitud es menor. Los datos alfanumricos son iguales si y solo si tienen la misma longitud y los mismos componentes. Las letras minsculas son mayores que las maysculas y cualquier carcter numrico es menor que cualquier letra mayscula o minscula; As: carcter numrico < maysculas < minsculas. Ejemplos: Comparacin "A" < "B" "AAAA" > "AAA" "B" > "AAAA" "C" < "c" "2" < "12" Resultado Verdadero Verdadero Verdadero Verdadero Falso
84
Diseo de Algoritmos Estas comparaciones se realizan utilizando el valor ASCII de cada carcter Para tratar los nmeros se utilizan los operadores aritmticos: Signo + * / ^ DIV MOD Significado Suma Resta Multiplicacin Divisin Potenciacin Divisin entera Resto de la divisin entera
El nico operador alfanumrico se utiliza para unir o concatenar datos de este tipo: Signo + Ejemplos: Expresin "Pseudo" + "cdigo" "3" + "4567" "Hola " + "que tal ?" Resultado "Pseudocdigo" "34567" "Hola que tal ?" Significado Concatenacin
Los operadores lgicos combinan sus operandos de acuerdo con las reglas del lgebra de Boole para producir un nuevo valor que se convierte en el valor de la expresin, puede ser verdadero o falso. Signo OR AND NOT Ejemplos: Expresin Verdad AND Falso NOT Falso Verdad OR Falso Resultado Falso Verdad Verdad Significado Suma lgica (O) Producto lgico (Y) Negacin (NO)
Metodologa de la programacin
85
Tema 3
Por ejemplo, la expresin: (12 + 5) OR (7 + 3) = 10 es verdadera (se cumple una y verdad OR Falso es Verdad). La expresin (12 * 5) AND (3 + 2 ) = 60 es falsa (verdad AND falso = Falso).
Cmo se evalan los operadores? La prioridad de los operadores es: Parntesis Signo Potencias Productos y Divisiones Sumas y restas Concatenacin Relacionales Lgicos negacin, conjuncin, disyuncin
( 33 + 3 * 7 ) / 5 33 + 12 45 9 /5
16 * 6 3 * 2 96 - 6 90
86
>
>
<
or and
La flecha se sustituye en los lenguajes de programacin por = (C++); : = (pascal). Pero para evitar ambigedades en el pseudocodigo utilizaremos la flecha para la asignacin y el smbolo = para indicar igualdad. He aqu algunos ejemplos: A 100 ; significa que a la variable A se le ha asignado el valor 100, ahora A vale 100. suma 5+10; asigna el valor 15 a la variable suma a travs de una asignacin aritmtica. x z + v ; asigna el valor de la suma de las variables z y v a la variable x. El resultado depende de los valores que se asignen a x y a z Toda asignacin es destructiva. Esto quiere decir que el valor que tuviera antes la variable se pierde y se reemplaza por el nuevo valor que asignamos, as cuando se ejecuta esta secuencia: B B B 25 100 77
el valor final que toma B ser 77 pues los valores 25 y 100 han sido destruidos.
Metodologa de la programacin
87
Tema 3
Cuando una variable aparece a ambos lados del smbolo de asignacin como: C C+1
conviene incializarlas al comenzar el programa con cero, aunque no es obligatorio por ahora (en algunos lenguajes de programacin s es necesario). Recordemos que no se pueden asignar valores a una variable de un tipo diferente al suyo. Pongamos atencin a este ejemplo de asignaciones: A 3 B 4 C A+2*B B C-A
C vale 11, A vale 3, por lo tanto B valdr 11 - 3 = 8 Como toda asignacin es destructiva, el valor anterior de B se pierde y pasa a valer ahora 8. Otro ejemplo: J 33 J J+5 J J*3
Esto es: Sumar 5 al valor de J y asignarlo a la variable J. J vale 33. J J vale ahora 38. El valor anterior que era 33 se destruy. Seguimos: J J*3 33 + 5 ; J 38
Esto es: Multiplicar 3 al valor de J y asignarlo a la variable J. 88 Dpl. Ing. Carlos Balderrama Vsquez
Diseo de Algoritmos
38 * 3 ;
114
Metodologa de la programacin
89
Tema 3 La estructura secuencial es aquella en la que una accin (instruccin) sigue a otra en secuencia. Las tareas se suceden de tal modo que la salida de una es la entrada de la siguiente y as sucesivamente hasta el fin del proceso. Una estructura secuencial se representa de la siguiente forma: Inicio Accion1 Accion2 . AccionN Fin Asignacin La asignacin consiste, en el paso de valores o resultados a una zona de la memoria. Dicha zona ser reconocida con el nombre de la variable que recibe el valor. La asignacin se puede clasificar de la siguiente forma: Simples Consiste en pasar un valor constate a una variable (a=15) Contador Consiste en usarla como un verificador del numero de veces que se realiza un proceso (a=a+1) Acumulador Consiste en usarla como un sumador en un proceso (a=a+b)
De trabajo Donde puede recibir el resultado de una operacin matemtica que involucre muchas variables (a=c+b*2/4). Lectura La lectura consiste en recibir desde un dispositivo de entrada (p.ej. el teclado) un valor. Esta operacin se representa en un pseudocodigo como sigue: Leer a, b Donde a y b son las variables que recibirn los valores
90
Diseo de Algoritmos Escritura Consiste en mandar por un dispositivo de salida (p.ej. monitor o impresora) un resultado o mensaje. Este proceso se representa en un pseudocodigo como sigue: Escribe El resultado es:, R Donde El resultado es: es un mensaje que se desea aparezca y R es una variable que contiene un valor.
Metodologa de la programacin
91
Tema 3
El formato de la estructura de seleccin es: Condicional simple Si condicin entonces Instruccin 1 instruccin 2 ......... instruccin n Fin_si
Condicional doble Si condicin entonces Instruccin 1 instruccin 2 ......... instruccin n si - no instruccin a instruccin b ......... instruccin x fin - si Observa como el sangrado permite identificar fcilmente que grupo de instrucciones se ejecutan en cada caso. Por ejemplo, Cuando realizamos una llamada telefnica: Si {seal de ocupado} entonces Colgar el telfono si - no Iniciar la conversacin fin - si En este caso, la condicin es {seal de ocupado}, que puede ser verdadera o falsa. Si es verdadera, entonces debemos colgar el telfono y si no, podemos relizar la conversacin.
Condicional multiple Segn_sea expresin hacer E1 : S1,S2,...Sn E2 : S1,S2,...Sn E3 : S1,S2,...Sn ..... EN : S1,S2,...Sn En_otro_caso EN : S1,S2,...Sn Fin_segn_sea
Tema 3
Desde variable= Vi hasta Vf [incremento] accin o acciones fin-desde Donde: variable: variable ndice Vi: valor inicial de la variable indice Vf: valor final de la variable indice [incremento]: el nmero que se incrementa (o decrementa) a la variable indice en cada iteracin del bucle, si se omite es 1.
Ejemplo: Imprimir todos los nmeros del 1 al 100. Inicio Desde I = 1 hasta 100 imprimir I Fin I es la variable ndice con un valor inicial de 1, se incrementa uno en cada paso hasta 100. Podemos notar que la estructura desde comienza con un valor incial de la variable indice y las acciones se ejecutan hasta que el valor inicial sea MAYOR que el que el Valor final. La variable indice se incremente en uno (en el ejemplo) y si este nuevo valor del indice no es mayor que el valor final, se ejecuta de nuevo la accin imprimir. En este caso se visualizar los nmeros 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ....97, 98, 99, 100 El incremento o paso de contador es siempre 1 si no es especifica lo contrario. Otro Ejemplo: Imprimir todos los nmeros pares desde 2 hasta el 300 Desde I= 2 hasta 300 incremento 2 imprimir I fin-desde Donde: La variable indice comienza en 2, se imprime 2 y en el siguiente paso se incrementa (suma) 2 a la variable indice que pasa a valer 4; se imprime el 4 y como 4 es menor que 300 (valor final) , se pasa a una nueva iteracin incrementando nuevamente en 2 el indice, que ahora vale 6; y as sucesivamente... 94 Dpl. Ing. Carlos Balderrama Vsquez
Diseo de Algoritmos
Aqui se visualizan: 2, 4, 6, 8, 10, 12, 14, 16, 18, ..... 296, 298, 300 Si deseamos mostrar los impares el algortimo es el siguiente: Desde I= 1 hasta 300 incremento 2 imprimir fin-desde La variable indice toma estos valores: Indice o Paso (veces que se ejecuta el Valor de ciclo) I 1 1 2 3 3 5 4 7 5 9 6 11 .... .... 150 299 Vemos los valores: 1, 3, 5, 7, 9, 11, 13, .... , 299 El ciclo termina mostrando 299 puesto que en el siguiente paso, La variable I valdra 301 y es mayor al lmite establecido de 300. I pasa a valer realmente 301 en el ltimo paso, solo que la instruccin de imprimir no se ejecuta porque el limite de 300 se supera. Si dieramos la instruccin de imprimir el valor de I, inmediatamente despues del fin-desde, veamos 301. Ejemplo 3: Imprimir los valores comprendidos entre el 460 y 500 en orden inverso. Debemos mostrar: 500, 499, 498, 497, ..... 462, 461, 460. En este caso haremos un decremento a la variable indice (no un incremento como en los ejemplos anteriores). Tenemos que comenzar nuestra variable indice en 500 y decrementar una unidad hasta alcanzar el 460, as: Desde I= 500 hasta 460 incremento -1 imprimir fin-desde Indice o Paso (veces que se ejecuta el Valor de ciclo) I 1 500
Metodologa de la programacin
95
Tema 3 2 499 3 498 4 497 5 496 .... .... 39 462 40 461 41 460 Como salida tenemos, entonces: 500, 499, 498, 497, 496, 495, 494, .... 464, 463, 462, 461, 460. El segundo tipo de estructura repetitiva se diferencia de la primera en que no se conoce el nmero de repeticiones o iteraciones en que se va a ejecutar una instruccin o un bloque de instrucciones. Estas estructuras son bsicamente dos: Estructura mientras....fin-mientras y la estructura repetir.... hasta.Estas dos se diferencian en que la verificacin de la condicin para repetir el ciclo se hace al inicio con mientras y al final con repetir Tambien existen esteucturas repetitivas que son combinaciones de estas dos que mencionamos, pero aqui no las estudiaremos.
96
Diseo de Algoritmos La condicin no se cumple: No entrar en el ciclo. Se ejecutan las instrucciones que vienen despus del bucle, instruccin X, por ejemplo.
De esto se deduce que el cuerpo del bucle de una estructura mientras puede repetirse cero o ms veces, veces que son determinadas por el cumplimiento o no de la condicin. Ejemplo mientras contrasea < > "josua" imprimir"La contrasea es incorrecta !" fin-mientras imprimir "Ha ingresado la contrasea correcta" Veremos ms ejemplos de esta estructura en la seccin ejercicios. Al analizarlos coprenderemos mejor como funciona.-
Recordemos una vez ms las diferencias entre las estructuras mientras y repetir
Metodologa de la programacin
97
Tema 3 MIENTRAS REPETIR Comprobacin de la condicin al final, Comprobacin de la condicin al inicio, antes de despus de haber ingresado una vez al entrar al bucle bucle Las instrucciones del cuerpo del bucle se ejecutan Las instrucciones del cuerpo del bucle se en forma repetitiva si la condicin es verdadera ejecutan si la condicin es falsa Las acciones del bucle se pueden ejecutar 0 o ms Las acciones del bucle se ejecutan por lo veces mneos una vez Ejemplo repetir imprimir "La contrasea es incorrecta !" hasta contrasea = "josua"
Ms ejemplos en la seccin Ejercicios. En resumen, hemos visto dos tipos de estructuras repetivas, el primer tipo en la que conocemos el nmero de veces que se repetir el bucle o ciclo (Desde ....fin-desde; y el segundo tipo en el cual no conocemos el numero de veces en se repite el ciclo ya que est determinado por el cumplimiento o no de una condicin (mientras ..... fin-mientras y repetir....hasta). Toda estructura Desde....fin-desde tiene una estructura mientras....fin-mientras o repetir.....hasta equivalente. Pero las estructuras mientras... o hacer ... no tienen NINGN desde.....fin-desde equivalente.
Diseo de Algoritmos
3.14.1 Pseudocodigo
Mezcla de lenguaje de programacin y espaol (o ingles o cualquier otro idioma) que se emplea, dentro de la programacin estructurada, para realizar el diseo de un programa. En esencial, el pseudocodigo se puede definir como un lenguaje de especificaciones de algoritmos. Es la representacin narrativa de los pasos que debe seguir un algoritmo para dar solucin a un problema determinado. El pseudocodigo utiliza palabras que indican el proceso a realizar. El inicio de un algoritmo en pseudocodigo comienza con la palabra Inicio y termina con la palabra fin. Las lneas que estn entre llaves ({ }) se denomina comentario. Un ejemplo aclaratorio es el siguiente. Calcular el rea de un cuadrado. Inicio Leer (lado) A lado * lado Imprimir( A) Fin Acciones simples Las acciones simples, tambin denominadas instrucciones primitivas, son aquellas que el procesador ejecuta de forma inmediata.
expresin
Sentencias de control Tambin se llaman sentencias estructuradas y controlan el flujo de ejecucin de otras instrucciones.
Metodologa de la programacin
99
Tema 3
Alternativa. En esta instruccin la condicin es booleana Si Fin_si Si condicin entonces I1,I2,...,In Sino J1, J2,..,Jn condicin I1,I2,...,In entonces
Fin_si Opcin V1 V2 V3 ... VN Otro Fin_opcin Expresin de Hacer I1,I2,...,In Hacer J1,J2,...,In Hacer K1,K2,...,Kn Hacer L1,L2,...,Ln Hacer M1,M2,...,Mn
Repeticin o bucles. En un bucle hay una o varias acciones que se han de repetir y una condicin que determina el nmero de veces que se repiten las instrucciones. Mientras Mientras condicin hacer I1,I2,...,In Fin_mientras Repetir Repetir I1,I2,...,In Hasta condicin Para Para Variable de Valinc a ValFin hacer I1,I2,...,In Fin_para
100
Diseo de Algoritmos
Caractersticas
Toda representacin grfica, de cualquier tipo sea, debe cumplir las siguientes cualidades. Sencillez. Un mtodo grfico de diseo de algoritmo debe permitir la construccin de estos de manera fcil y sencilla Claridad. Cuando un algoritmo es representado por un mtodo grfico necesita ser interpretado por otra persona distinta de la que lo dise, debe estar lo suficientemente claro para su un fcil reconocimiento de todos los elementos. Normalizacin. Tanto los diseadores de programas como los usuarios que necesitan la documentacin de estos deben utilizar las mismas normas de documentacin. Flexibilidad. Todo mtodo grfico de representacin debe permitir, sin grandes dificultades, posteriores modificaciones de algunas partes de un algoritmo y la insercin de alguna nueva.
Descripcin de los bloques utilizados Los smbolos utilizados han sido normalizados por el instituto norteamericano de normalizacin (ANSI). Terminal. Indica el inicio y el final de nuestro diagrama de flujo.
Metodologa de la programacin
101
Smbolo de proceso y nos indica la asignacin de un valor en la memoria y/o la ejecucin de una operacin aritmtica.
No
si
Subrprogramas
Conector dentro de pagina. Representa la continuidad del diagrama dentro de la misma pagina.
102
NO
SI
No
si
Metodologa de la programacin
103
Tema 3
2) Un vendedor recibe un sueldo base mas un 10% extra por comisin de sus ventas, el vendedor desea saber cuanto dinero obtendr por concepto de comisiones por las tres ventas que realiza en el mes y el total que recibir en el mes tomando en cuenta su sueldo base y comisiones. Inicio Leer sb, v1, v2, v3 tot_vta = v1 + v2 + v3 com = tot_vta * 0.10 tpag = sb + com Imprimir tpag, com Fin 3) Una tienda ofrece un descuento del 15% sobre el total de la compra y un cliente desea saber cuanto deber pagar finalmente por su compra. Inicio Leer tc d = tc * 0.15 tp = tc - d Imprimir tp Fin 4) Un alumno desea saber cual ser su calificacin final en la materia de Algoritmos. Dicha calificacin se compone de los siguientes porcentajes: 55% del promedio de sus tres calificaciones parciales. 30% de la calificacin del examen final. 15% de la calificacin de un trabajo final. Inicio Leer c1, c2, c3, ef, tf prom = (c1 + c2 + c3)/3 ppar = prom * 0.55 pef = ef * 0.30 ptf = tf * 0.15 cf = ppar + pef + ptf Imprimir cf Fin
5) Un maestro desea saber que porcentaje de hombres y que porcentaje de mujeres hay en un grupo de estudiantes. Inicio Leer nh, nm ta = nh + nm ph = nh * 100 / ta pm = nm * 100 / ta Imprimir ph, pm Fin 104 Dpl. Ing. Carlos Balderrama Vsquez
Diseo de Algoritmos
6) Realizar un algoritmo que calcule la edad de una persona. Inicio Leer fnac, fact edad = fact - fnac Imprimir edad Fin. b)Problemas Condicionales i)Problemas Selectivos Simples 1) Un hombre desea saber cuanto dinero se genera por concepto de intereses sobre la cantidad que tiene en inversin en el banco. El decidir reinvertir los intereses siempre y cuando estos excedan a $7000, y en ese caso desea saber cuanto dinero tendr finalmente en su cuenta. Inicio Leer p_int, cap int = cap * p_int si int > 7000 entonces capf = cap + int fin-si Imprimir capf fin 2) Determinar si un alumno aprueba a reprueba un curso, sabiendo que aprobara si su promedio de tres calificaciones es mayor o igual a 70; reprueba en caso contrario. Inicio Leer calif1, calif2, calif3 prom = (calif1 + calif2 + calif3)/3 Si prom >= 70 entonces Imprimir alumno aprobado si no Imprimir alumno reprobado Fin-si Fin 3) En un almacn se hace un 20% de descuento a los clientes cuya compra supere los $1000 Cual ser la cantidad que pagara una persona por su compra? Inicio Leer compra Si compra > 1000 entonces desc = compra * 0.20 si no desc = 0 fin-si
Metodologa de la programacin
105
Tema 3 tot_pag = compra - desc imprimir tot_pag fin. 4) Un obrero necesita calcular su salario semanal, el cual se obtiene de la sig. manera: Si trabaja 40 horas o menos se le paga $16 por hora Si trabaja mas de 40 horas se le paga $16 por cada una de las primeras 40 horas y $20 por cada hora extra. Inicio Leer ht Si ht > 40 entonces he = ht - 40 ss = he * 20 + 40 * 16 si no ss = ht * 16 Fin-si Imprimir ss Fin 5) Un hombre desea saber cuanto dinero se genera por concepto de intereses sobre la cantidad que tiene en inversin en el banco. El decidir reinvertir los intereses siempre y cuando estos excedan a $7000, y en ese caso desea saber cuanto dinero tendr finalmente en su cuenta. Inicio Leer p_int, cap int = cap * p_int si int > 7000 entonces capf = cap + int fin-si Imprimir capf fin 6) Que lea dos nmeros y los imprima en forma ascendente Inicio Leer num1, num2 Si num1 < num2 entonces Imprimir num1, num2 si no Imprimir num2, num1 fin-si fin 7) Una persona enferma, que pesa 70 kg, se encuentra en reposo y desea saber cuantas caloras 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.
106
Diseo de Algoritmos Los datos que tiene son que estando dormido consume 1.08 caloras por minuto y estando sentado en reposo consume 1.66 caloras por minuto. Inicio Leer act$, tiemp Si act$ = dormido entonces cg = 1.08 * tiemp si no cg = 1.66 * tiemp fin-si Imprimir cg Fin 8) Hacer un algoritmo que imprima el nombre de un articulo, clave, precio original y su precio con descuento. El descuento lo hace en base a la clave, si la clave es 01 el descuento es del 10% y si la clave es 02 el descuento en del 20% (solo existen dos claves). Inicio Leer nomb, cve, prec_orig Si cve = 01 entonces prec_desc = prec_orig - prec_orig * 0.10 si no prec_desc = prec_orig - prec_orig * 0.20 fin-si Imprimir nomb, cve, prec_orig, prec_desc fin 9) Hacer un algoritmo que calcule el total a pagar por la compra de camisas. Si se compran tres camisas o mas se aplica un descuento del 20% sobre el total de la compra y si son menos de tres camisas un descuento del 10% Inicio Leer num_camisas, prec tot_comp = num_camisas * prec Si num_camisas > = 3 entonces tot_pag = tot_comp - tot_comp * 0.20 si no tot_pag = tot_comp - tot_comp * 0.10 fin-si Imprimir tot_pag fin 10) Una empresa quiere hacer una compra de varias piezas de la misma clase a una fabrica de refacciones. La empresa, dependiendo del monto total de la compra, decidir que hacer para pagar al fabricante. Si el monto total de la compra excede de $500 000 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 pagara solicitando un crdito al fabricante.
Metodologa de la programacin
107
Tema 3 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 pagara solicitando crdito al fabricante. El fabricante cobra por concepto de intereses un 20% sobre la cantidad que se le pague a crdito. Inicio Leer costopza, numpza totcomp = costopza * numpza Si totcomp > 500 000 entonces cantinv = totcomp * 0.55 prstamo = totcomp * 0.30 crdito = totcomp * 0.15 si no cantinv = totcomp * 0.70 crdito = totcomp * 0.30 prstamo = 0 fin-si int = crdito * 0.20 Imprimir cantinv, prstamo, crdito, int Fin ii) Problemas Selectivos Compuestos 1) Leer 2 nmeros; si son iguales que los multiplique, si el primero es mayor que el segundo que los reste y si no que los sume. Inicio Leer num1, num2 si num1 = num2 entonces resul = num1 * num2 si no si num1 > num2 entonces resul = num1 - num2 si no resul = num1 + num2 fin-si fin-si fin 2) Leer tres nmeros diferentes e imprimir el numero mayor de los tres. Inicio Leer num1, num2, num3 Si (num1 > num2) and (num1 > num3) entonces mayor = num1 si no Si (num2 > num1) and (num2 > num3) entonces
108
Diseo de Algoritmos mayor = num2 si no mayor = num3 fin-si fin-si Imprimir mayor fin 3) 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. Inicio Leer ht, pph Si ht < = 40 entonces tp = ht * pph si no he = ht - 40 Si he < = 8 entonces pe = he * pph * 2 si no pd = 8 * pph * 2 pt = (he - 8) * pph * 3 pe = pd + pt fin-si tp = 40 * pph + pe fin-si Imprimir tp fin 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 antigedad en la empresa de acuerdo con la sig. tabla: Tiempo Utilidad Menos de 1 ao 5 % del salario 1 ao o mas y menos de 2 aos 7% del salario 2 aos o mas y menos de 5 aos 10% del salario 5 aos o mas y menos de 10 aos 15% del salario 10 aos o mas 20% del salario Inicio Leer sm, antig Si antig < 1 entonces util = sm * 0.05 si no Si (antig > = 1) and (antig < 2) entonces Metodologa de la programacin 109
Tema 3 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 util fin 5) En una tienda de descuento se efecta una promocin en la cual se hace un descuento sobre el valor de la compra total segn 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 solo hay bolitas de los colores mencionados. 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 fin-si fin-si fin-si fin
6) El IMSS requiere clasificar a las personas que se jubilaran en el ao de 1997. Existen tres tipos de jubilaciones: por edad, por antigedad joven y por antigedad adulta. Las personas adscritas a la jubilacin por edad deben tener 60 aos o mas y una antigedad en 110 Dpl. Ing. Carlos Balderrama Vsquez
Diseo de Algoritmos su empleo de menos de 25 aos. Las personas adscritas a la jubilacin por antigedad joven deben tener menos de 60 aos y una antigedad en su empleo de 25 aos o mas. Las personas adscritas a la jubilacin por antigedad adulta deben tener 60 aos o mas y una antigedad en su empleo de 25 aos o mas. Determinar en que tipo de jubilacin, quedara adscrita una persona. Inicio leer edad,ant si edad >= 60 and ant < 25 entonces imprimir la jubilacin es por edad si no si edad >= 60 and ant > 25 entonces imprimir la jubilacin es por edad adulta si no si edad < 60 and ant > 25 entonces imprimir la jubilacin es por antigedad joven si no imprimir no tiene por que jubilarse fin-si fin-si fin-si fin
c) Problemas Repetitivos i) Problemas ( Hacer para ) 1) Calcular el promedio de un alumno que tiene 7 calificaciones en la materia de Diseo Estructurado de Algoritmos Inicio Sum=0 Leer Nom Hacer para c = 1 a 7 Leer calif Sum = sum + calif Fin-para prom = sum /7 Imprimir prom Fin. 2) Leer 10 nmeros y obtener su cubo y su cuarta. Inicio Hacer para n = 1 a 10 Leer num cubo = num * num * num cuarta = cubo * num
Metodologa de la programacin
111
3) Leer 10 nmeros e imprimir solamente los nmeros positivos Inicio Hacer para n = 1 a 10 Leer num Si num > 0 entonces Imprimir num fin-si Fin-para Fin. 4) Leer 20 nmeros e imprimir cuantos son positivos, cuantos negativos y cuantos neutros. Inicio cn = 0 cp = 0 cneg = 0 Hacer para x = 1 a 20 Leer num Sin num = 0 entonces cn = cn + 1 si no Si num > 0 entonces cp = cp + 1 si no cneg = cneg + 1 Fin-si Fin-si Fin-para Imprimir cn, cp, cneg Fin. 5) Leer 15 nmeros negativos y convertirlos a positivos e imprimir dichos nmeros. Inicio Hacer para x = 1 a 15 Leer num pos = num * -1 Imprimir num, pos Fin-para Fin. 6) Suponga que se tiene un conjunto de calificaciones de un grupo de 40 alumnos. Realizar un algoritmo para calcular la calificacin media y la calificacin mas baja de todo el grupo. 112 Dpl. Ing. Carlos Balderrama Vsquez
Diseo de Algoritmos Inicio sum = 0 baja = 9999 Hacer para a = 1 a 40 Leer calif sum = sum + calif Si calif < baja entonces baja = calif fin-si Fin-para media = sum / 2 Imprimir media, baja fin 7) Calcular e imprimir la tabla de multiplicar de un numero cualquiera. Imprimir el multiplicando, el multiplicador y el producto. Inicio Leer num Hacer para X = 1 a 10 resul = num * x Imprimir num, * , X, = , resul Fin-para fin. 8) Simular el comportamiento de un reloj digital, imprimiendo la hora, minutos y segundos de un da desde las 0:00:00 horas hasta las 23:59:59 horas Inicio Hacer para h = 1 a 23 Hacer para m = 1 a 59 Hacer para s = 1 a 59 Imprimir h, m, s Fin-para Fin-para Fin-para fin. ii) Problemas ( Mientras ) 1) Dada la siguiente serie matemtica: a1=0 a2=0 an=an-1 + (2*an-2) para n>=3 Determinar cual es el valor y el rango del primer trmino cuyo valor sea mayor o igual a 2000. Algoritmo serie Var Metodologa de la programacin 113
Tema 3 A1, a2, an, cont: entero Inicio A1 1 A2 0 An a1 + (2*a2) N 3 Mientras an < 2000 A2 a1 A1 an An a1 + (2*a2) Cont cont + 1 Fin mientras Escribir El rango es cont y el resultado esan fin
2) Calcular la suma de los divisores de cada nmero introducido por teclado. Terminaremos cuando el nmero sea negativo o 0.
Algoritmo divisores Var Numero, i, suma :entero Inicio Escribir Introduce un nmero, y para acabar uno negativo Leer nmero Mientras numero > 0 Suma 0 Desde i=1 hasta numero /2 Si numero mod i =0 Entonces suma suma + i Fin si Fin desde Suma suma + numero Escribir La suma de los divisores del nmero es suma Leer numero Fin mientras Fin
X =
((a b)
i =1 n 1 i =2
3) + n
(2 + a * (i 1))
Dpl. Ing. Carlos Balderrama Vsquez
114
Diseo de Algoritmos
Averiguar el valor de x pidiendo al usuario los valores de n, a, b. Algoritmo ecuacion Var N, a, b, primer, segn, i, j: entero X: real Inicio Primer 0 Segn 1 Repetir Escribir Introduce el valor de n, a, b Leer n, a, b Hasta n>=0 Desde i=1 hasta n Primer (((a-b)^i 3)+n)+primer Fin desde Desde j=2 hasta n-1 Segn ((2*a*(i-1))*segn) Fin desde X primer / segn Escribir x Fin 2) Dada una fecha en formato dia/mes/ao determinar el nmero de das y el nombre del mes de dicha fecha, y sacar por pantalla la fecha convertida a formato de dia de mes de ao. Algoritmo fecha Var Dia, mes, ao, n_dias: entero N_mes: cadena Inicio Repetir Escribir Introduce la fecha en formato dia mes ao Leer dia, mes, ao Segn sea mes 1,01: n_mes enero n_dias 31 2,02: n_mes febrero si ao mod 4=0 entonces n_dias 29 entonces n_dias 28 3,03: n_mes marzo n_dias 31
Metodologa de la programacin
115
Tema 3 4,04: n_mes abril n_dias 30 5,05: n_mes mayo n_dias 31 6,06: n_mes junio n_dias 30 7,07: n_mes julio n_dias 31 8,08: n_mes agosto n_dias 31 9,09: n_mes septiembre n_dias 30 10: n_mes octubre n_dias 31 11: n_mes noviembre n_dias 30 12: n_mes diciembre n_dias 31 fin segn sea hasta (dia <=n_dias) y ((mes >=1)y(mes <=12)) y (ao >=0) escribir El mes de n_mestiene n_dias dias escribir La fecha es: n_dias de n_mes de ao fin 3) Se coloca un cpital C, a un interes I, durante M aos y se desea saber en cuanto se habr convertido ese capital en m aos, sabiendo que es acumulativo. Algoritmo interes Var I, j, m: entero C, temporal: real Inicio repetir Escribir Introduce el capital, el interes y el tiempo Leer c, i, m Hasta (c>0) y ((i<=0)y(i<=100)) y (m >=0) Desde j=1 hasta m C c * (1+I/100) Fin desde Escribir Tienes c pts Fin
116