You are on page 1of 59

Especialidad:

COMPUTACIN E INFORMTICA
CICLO I

ASIGNATURA:

Algoritmos

Lima - Per

SILABO ACADMICO I. Identificadores del programa Carrera: Computacin e Informtica ALGORITMOS Ciclo: I Cdigo: Tipo: Curso Semanal: 4 hrs. Horas: 80 pedaggicas Totales : 80 Teora : 40 Prctica : 40 II. Ubicacin del programa Antecedentes -Requisitos: -III. Contenidos Contenido De los problemas a los programas; Definicin de lenguaje; Definicin de algoritmo; Algoritmos cotidianos; Definicin de lenguajes algortmicos; Metodologa para la solucin de problemas por medio de computadora, definicin del problema; Anlisis del problema; Diseo del algoritmo; Codificacin Prueba y depuracin; Documentacin; Mantenimiento El lenguaje de Seudocdigo, reglas bsicas, comentarios, desarrollo de ejemplos bsicos Actividad Breves practicas de programacin Desarrollo de algoritmos de problemas comunes a todos los alumnos Mostrar productos terminados para que el alumno observe como para que estudiar el curso Desarrollar todos los pasos de la implantacin por algoritmos Software SLE Escritura de programa Hola mundo Revisin de mens del programa Escritura de programas de clculo bsico Realizacin de problemas con ejercicios numricos para evaluar prioridad de operadores aritmticos Realizacin de problemas con ejercicios numricos para evaluar prioridad de operadores lgicos Realizacin de problemas con ejercicios numricos para evaluar prioridad de operadores relacionales Escritura de programas con constantes (uso de pi, cambio monetario) Escritura de programas Semana

Sesiones x Semana: 2

Consecuentes Todos los siguientes mdulos

Fundamentos de programacin, tipos de datos (numricos, cadena, lgicos), expresiones, Operadores y operandos (aritmticos, lgicos, relacionales)

Palabras reservadas del lenguajes, delimitadores de sentencias, identificadores, reglas para formacin de identificadores, constantes y variables, clasificacin de las variables, por
Carrera: Computacin e Informtica

Curso: Algoritmos

contenido, por uso Programacin estructurada, tipos de estructura, estructuras secuenciales, operaciones de lectura y escritura.

secuenciales pequeos con uso de variables de distinto tipo.. Programas de lectura y escritura Programas secuenciales con ecuaciones simples Programa de raz N y potencia N de un nmero Programa de conversin entre unidades de longitud Programa de promedios Programa de bonificacin segn condicin civil de una alternativa Programa de bonificacin segn condicin civil de mas de una alternativa Programa evaluacin cualitativa de promedios Programa de asignacin de bonificaciones por mltiples condiciones (estado civil, grado de instruccin), usando valores enteros y cadenas Evaluacin de un promedio con mltiples consecuencias. Determinacin del da de la semana Eleccin de una operacin de entre mltiples operaciones Realizar todos los programas de la semana 7 convertidos a evaluacin de casos Programa que imprima en secuencia los nmeros del 1 al 10 de 1 en 1 de 2 en 2 etc. Tabla de multiplicar de un nmero cualquiera Programa para ingresar 1 nmero y muestre una de las tablas de dicho nmero Generar 6 nmeros aleatorios, sumarlos y promediarlos Medir el nivel de conocimiento alcanzado por los alumnos al finalizar la primera unidad formativa Convertir los programas de la semana 9 en programas con mientras y hasta

Estructuras condiciones simples y dobles

Estructuras condicionales dobles, mltiples y anidados

Estructuras condiciones de tipo general: evaluacin de casos Estructuras repetitivas: ciclos desde, uso de contadores y acumuladores, nmeros aleatorios

X. EXAMEN PARCIAL

10

Estructuras repetitivas: ciclos mientras y hasta, uso de funciones de cadena de longitud y de extraccin

11

Carrera: Computacin e Informtica

Curso: Algoritmos

Arreglos: Definicin de arreglos, Tipos: vectores, matrices, registros. Uso de vectores. Uso de tipos lgicos, vectores dinmicos

Matrices: Llenado de matrices por filas y columnas, matrices dinmicas

Registros: creacin de tipo de dato. Programacin modular: procedimientos, funciones. Uso de procedimientos. Paso de parmetros

Funciones, llamada a funciones

Uso de diagramas de flujos de datos, funciones de lectura, escritura, uso de variables, constantes, estructuras secuenciales, estructuras de decisin. Estructuras repetitivas. Ciclos desde (para), ciclo mientras. Arreglos, matrices, registros, subprogramas XX. EXAMEN FINAL

Programas con funcin strlen() Programas con funcin substr() Programas con vectores para mostrar valores en memoria Programas con vectores para obtener sumatorias y promedios Programas con iteraciones para llenar vectores Programas con vectores para realizar bsqueda de datos Programas con vectores dinmicos Programas para llenar y mostrar matrices llenadas por filas Programas para llenar y mostrar matrices llenadas por columnas Programas para llenar y mostrar matrices dinmicas Programa que crea registros para definicin de tipos de datos Realizacin de programas con subprocedimientos que ejecuten tareas de clculo Realizacin de programas con subprocedimientos que ejecuten tareas de clculo con paso de parmetros Realizacin de programas con funciones que ejecuten tareas de clculo Uso del Software DFD Convertir los programas de las semanas 3 a la 6 en programas de DFD Convertir los programas de las semanas 7 a la 11 en programas de DFD Convertir los programas de las semanas 12 a la 18 en programas de DFD Medir el nivel de conocimiento alcanzado por el alumno durante todo el curso

12

13

14

15

16

17

18

19

20

IV. Criterios de evaluacin y acreditacin Institucionales de acreditacin: Matriculado Mensualidad al da Asistencia mnima de 70% de las clases programadas. Entrega oportuna de trabajos.
Carrera: Computacin e Informtica Curso: Algoritmos

Certificacin con calificacin mnima de 13.00 (Trece) y Constancia con calificacin de 11.00 (Once) Evaluacin del mdulo: Practicas Calificadas (PC) P.U. = (PC+Part)*0.5 + EP 2 Exmenes: parcial (EP), final (EF) S.U. = (PC+Part)*0.5+Trab+EF 3 Trabajos encargados (TE)

Carrera: Computacin e Informtica

Curso: Algoritmos

IT - Expert

Secretariado Ejecutivo de Sistemas

Contabilidad Computarizada

Computacin e Informtica

Diseo Grfico

Computacin de Informtica

Ensamblaje mantenimiento y Reparacin de PC.

Fast Office

Asistente de Gerencia

ALGORITMOS
Carrera: Computacin e Informtica
Secretariado Ejecutivo Computarizado

Curso: Algoritmos

CAPITULO I

LA ALGORITMIA
La palabra algoritmo se deriva de la traduccin al latn de la palabra rabe alkhowarizmi, nombre de un matemtico y astrnomo rabe que escribi un tratado sobre manipulacin de nmeros y ecuaciones en el siglo IX. Un algoritmo es una serie de pasos organizados que describe el proceso que se debe seguir, para dar solucin a un problema especfico. Tipos de Algoritmos Cualitativos: Son aquellos en los que se describen los pasos utilizando palabras. Cuantitativos: Son aquellos en los que se utilizan clculos numricos para definir los pasos del proceso. Lenguajes Algortmicos Alude a series de smbolos y reglas que se utilizan para describir de manera explcita un proceso. Pueden ser: Grficos: Es la representacin grfica de las operaciones que realiza un algoritmo (diagrama de flujo). No Grficos: Representa en forma descriptiva las operaciones que debe realizar un algoritmo (seudocdigo). Metodologa para la solucin de problemas por medio de computadora a. Definicin del Problema Esta fase est dada por el enunciado del problema, el cual requiere una definicin clara y precisa. Es importante que se conozca lo que se desea que realice la computadora; mientras esto no se conozca del todo no tiene mucho caso continuar con la siguiente etapa. El planteamiento debe ser tan claro como para que cualquiera entienda exactamente lo que se desea hacer. No es lo mismo decir: sumar dos nmeros que, ingresar dos nmeros enteros, sumar ambos nmeros y mostrar el resultado de la suma. b. Anlisis del Problema Una vez que se ha comprendido lo que se desea de la computadora, es necesario definir: Los datos de entrada. (Nmero1 y Nmero2) Cual es la informacin que se desea producir (Resultado) Los mtodos y frmulas que se necesitan para procesar los datos. (Resultado = Nmero1 + Nmero2) Una recomendacin muy practica es el que nos pongamos en el lugar de la computadora y analicemos que es lo que necesitamos que nos ordenen y en que secuencia para producir los resultados esperados. c. Diseo del Algoritmo Las caractersticas de un buen algoritmo son: Debe tener un punto particular de inicio. Debe ser definido, no debe permitir dobles interpretaciones. Debe ser general, es decir, soportar la mayora de las variantes que se puedan presentar en la definicin del problema. Debe ser finito en tamao y tiempo de ejecucin. d. Codificacin La codificacin es la operacin de escribir la solucin del problema (de acuerdo a la lgica del diagrama de flujo o seudocdigo), en una serie de instrucciones detalladas, en un cdigo reconocible por la computadora, la serie de instrucciones detalladas se le conoce como cdigo fuente, el cual se escribe en un lenguaje de programacin o lenguaje de alto nivel. Solucin del problema ejemplo (En formato de seudocdigo) var Numero1, Numero2, Resultado : numerico inicio

Carrera: Computacin e Informtica

Curso: Algoritmos

8
Leer(Numero1,Numero2); Resultado=Numero1+Numero2; Imprimir(Resultado); fin Como ver el seudocdigo es fcil de implementar a travs de los verbos de la accin. NO USAR ACENTOS. Es probable que en algunos textos aparezca Lee por Leer o Ingresa por Leer; Asigna(Resultado=Numero1+Numero1); Muestra por Imprimir o Salida por Imprimir. Tambin es probable que no aparezca las palabras inicio y fin o en lugar de var diga variables. Es posible incluso que primera vaya el tipo de dato (numerico) y luego las variables, o que sea ms especfica la definicin del tipo de dato (real, entero, flotante, etc.). El seudocdigo se ajusta a dichas variantes pero siempre debe tratar que no se pierda la legibilidad. Obviamente usaremos el lenguaje de seudocdigo del SL. e. Prueba y Depuracin Los errores humanos dentro de la programacin de computadoras son muchos y aumentan considerablemente con la complejidad del problema. El proceso de identificar y eliminar errores, para dar paso a una solucin sin errores se le llama depuracin. La depuracin o prueba resulta una tarea tan creativa como el mismo desarrollo de la solucin, por ello se debe considerar con el mismo inters y entusiasmo. No seremos tan detallistas; bsicamente, lo que pretendemos cubrir es lo concerniente a: Planteamiento de los problemas Declaracin del seudocdigo El Lenguaje de Seudocdigo El lenguaje natural no es apropiado para la descripcin de algoritmos ya que es inconcreto y disperso. Los lenguajes de programacin, y ms los muy estructurados como el C el Pascal, podran ser utilizados perfectamente en la descripcin. Pero en estos casos el detalle sintctico oscurecer lo esencial del algoritmo. Se utilizar por ello, un lenguaje intermedio: Seudocdigo; que siendo muy simple en su sintaxis permita una buena estructuracin. La traduccin de seudocdigo a un determinado lenguaje de programacin puede implicar que un sentencia se traduzca en varias o, en estructuras de bucle complejas, pero este efecto no ser considerado a nuestros propsitos. . Igualmente, a efectos de simplicidad se evitar la declaracin de magnitudes escalares (Enteras, reales, booleanas, ..) considerando, a menos que se especifique lo contrario, todas las variables de mbito local. Se utilizarn los sangrados para aclarar el cdigo y sus bloques, y las sentencias inicio y fin para englobar bloques de cdigo, tratando de no abusar de ello. Los espacios alrededor de los smbolos ayudaran a su mejor lectura. En las funciones solo se declararn los parmetros y el valor de retorno si ello ayuda a entender el seudocdigo. Los parmetros se pasaran por valor salvo indicacin de lo contrario Se utilizarn siempre letras minsculas, reservando las maysculas para separar trminos en nombres compuestos o en la nomenclatura de constantes. Los trminos que representan sentencias o acciones se dispondrn en negrita y las variables, nombres de funciones o procedimientos y parmetros en oblicuo. Usaremos Leer e Imprimir para procesos de entrada y salida respectivamente; desde para bucles de n ciclos fijos; mientras o hasta bucles con centinelas; Si para decisiones simples y Si Entonces SinoSi para decisiones mltiples o eval para las mismas. Volveremos sobre el tema luego. Ejemplo: El programa recibir dos nmeros y devolver la suma, resta, multiplicacin y divisin de ambos nmeros (no use acentos en el nombre de las variables). Haremos la solucin en lenguaje de seudocdigo. var numero1, numero2, suma, resta, multiplicacion, division : numerico inicio cls()

Carrera: Computacin e Informtica

Curso: Algoritmos

9
imprimir("\nIngrese el primer nmero : "); leer(numero1); imprimir("\nIngrese el segundo nmero : "); leer(numero2); suma=numero1+numero2; resta=numero1-numero2; multiplicacion=numero1*numero2; division=numero1/numero2; imprimir("\nEl resultado de la suma es : ",suma); imprimir("\nEl resultado de la resta es : ",resta); imprimir("\nEl resultado de la multiplicacin es : ", multiplicacion); imprimir("\nEl resultado de la divisin es : ", division); fin Comentario: cls() se emplea para limpiar la pantalla

CAPITULO II SEUDOCODIGO Y LENGUAJE SLE


El SLE (Lenguaje de Seudocdigo) Es un software diseado para construir y analizar algoritmos en un lenguaje cercano al natural. Es un programa antiguo para sistemas operativos DOS pero que corre sin problemas en ambientes Windows y est en castellano. Al ejecutarlo se ver la siguiente pantalla: Es una buena prctica crear una carpeta para guardar nuestros trabajos (Podemos establecer dicha carpeta como el directorio por con Archivo-Cambiar Directorio). men Archivo tomamos la opcin aparecer al centro una pgina con el ttulo untitled lo que indica tiene nombre. Es ah donde escribimos nuestra aplicacin. Escribimos: inicio imprimir(Hola Mundo); fin

defecto Del Nuevo; azul que no

Se ver de la siguiente forma: (Slo estamos mostrando la parte superior de la pantalla). Observe que en SL casi toda lnea termina en punto y coma (;). Ya explicaremos las excepciones.

Del Men ejecutar, tomamos la opcin Compilar. Aparecer un cuadro de dilogo para darle nombre a la aplicacin, pongmosle Saludo.sl (sl es la extensin para los archivos del programa).

Carrera: Computacin e Informtica

Curso: Algoritmos

10

Y hacemos un clic sobre OK, apareciendo el siguiente cuadro de dilogo (si no hay errores de escritura)

Para ejecutar pulsamos Ejecutar-Ejecutar. Se ver como sigue:

Tambin hemos recortado la pantalla. Es una vista tipo consola que se cierra al pulsar cualquier tecla. Bastante sencillo o no?. Algunos elementos bsicos los detallamos a continuacin. El resto de elementos se expondrn durante el desarrollo e cada tema. Los comentarios se escriben as: /* Este es un comentario hecho en dos lneas*/ //Este es un comentario en una sola lnea En SL solo existen variables numricas y de cadena, se declaran antes del bloque del programa o sea antes de la palabra inicio. var num1, num2, num3 : numerico estado : cadena Las constantes tambin se declaran antes de inicio: const pi=3.1416 vacio=

Carrera: Computacin e Informtica

Curso: Algoritmos

11
Opciones del Men de SLE

Lista de principales teclas rpidas

Carrera: Computacin e Informtica

Curso: Algoritmos

12
Programa 1: Permite ingresar un nombre y mostrar un saludo: var nombre : cadena inicio imprimir("\nIngrese Nombre : ") leer(nombre) imprimir("\nHola " + nombre) fin Nota: str(numero) se emplea para convertir un nmero en una expresin de cadena para ser mostrada por imprimir. str(numero,0,0) evita que se muestren decimales Puede usarse , para encadenar sin necesidad de str()

Carrera: Computacin e Informtica

Curso: Algoritmos

13

CAPITULO III FUNDAMENTOS DE PROGRAMACION


Tipos De Datos Todos los datos tienen un tipo asociado con ellos. Un dato puede ser un simple carcter, tal como b, un valor entero tal como 35. El tipo de dato determina la naturaleza del conjunto de valores que puede tomar una variable.

Simples Tipos de datos

Numricos Lgicos Alfanumricos (string)

Arreglos (Vectores, Matrices) Estructurados Registros Clases (Def. por el Archivos usuario) Apuntadores

Tipos de Datos Simples (Los tipos de datos estruturados los trataremos en el captulo respectivo) Datos Numricos: Permiten representar valores escalares de forma numrica, esto incluye a los nmeros enteros y los reales. Este tipo de datos permiten realizar operaciones aritmticas comunes. Datos Lgicos: Son aquellos que solo pueden tener dos valores (cierto o falso) ya que representan el resultado de una comparacin entre otros datos (numricos o alfanumricos). Datos Alfanumricos (String): Es una secuencia de caracteres alfanumricos que permiten representar valores identificables de forma descriptiva, esto incluye nombres de personas, direcciones, etc. Es posible representar nmeros como alfanumricos, pero estos pierden su propiedad matemtica, es decir no es posible hacer operaciones con ellos. Este tipo de datos se representan encerrados entre comillas. Ejemplo: Instituto Wiener 1997 Programa 2: Permite ingresar un nombre, sexo y edad y mostrar dichos valores en una sola expresin var nombre,sexo : cadena edad : numerico inicio cls() imprimir("\nIngrese Nombre : ") leer(nombre) imprimir("\nIngrese Edad : ") leer(edad) imprimir("\nIngrese Sexo : ") leer(sexo) imprimir("\nHola " + nombre + " tu edad es " + str(edad,0,0) + " y eres " + sexo) fin Expresiones Las expresiones son combinaciones de constantes, variables, smbolos de operacin, parntesis y nombres de funciones especiales. Por ejemplo: a+(b + 3)/c Programa 3: Ingrese 2 nmeros y muestre la suma de ambos nmeros:

Carrera: Computacin e Informtica

Curso: Algoritmos

14

var n1,n2, s: numerico inicio cls() imprimir("\nIngrese primer nmero : ") leer(n1) imprimir("\nIngrese segundo nmero : ") leer(n2) s=n1+n2 imprimir("\nLa suma de ambos nmeros es " + str(s)) fin Cada expresin toma un valor que se determina tomando los valores de las variables y constantes implicadas y la ejecucin de las operaciones indicadas. Una expresin consta de operadores y operandos. Segn sea el tipo de datos que manipulan, se clasifican las expresiones en: Aritmticas Relacinales Lgicas

Operadores y Operandos Operadores: Son elementos que relacionan de forma diferente, los valores de una o mas variables y/o constantes. Es decir, los operadores nos permiten manipular valores.

Tipos de Operadores

Aritmticos Relacinales Lgicos

Operadores Aritmticos: Los operadores aritmticos permiten la realizacin de operaciones matemticas con los valores (variables y constantes). Los operadores aritmticos pueden ser utilizados con tipos de datos enteros o reales. Si ambos son enteros, el resultado es entero; si alguno de ellos es real, el resultado es real.

Operando (Operador) Operando Valor (constante o variable)

Operadores Aritmticos + Suma Resta * Multiplicacin / Divisin Mod Modulo (residuo de la divisin entera) En Java y C++ es % Ejemplos: Expresin 7/2 12 mod 7 4 +2*5 Resultado 3.5 5 14

Programa 4: Ingrese un sueldo bsico y otorgue una bonificacin de 15% y muestre el sueldo a cobrar. var basico, bonif, sueldo: numerico

Carrera: Computacin e Informtica

Curso: Algoritmos

15

inicio cls() imprimir("\nIngrese Bsico : ") leer(basico) bonif=basico * 0.15 sueldo=basico+bonif imprimir("\nEl basico es " + str(basico)) imprimir("\nla Bonificacin es de " + str(bonif)) imprimir("\nEl sueldo a recibir es " + str(sueldo)) fin Prioridad de los Operadores Aritmticos Todas las expresiones entre parntesis se evalan primero. Las expresiones con parntesis anidados se evalan de dentro a fuera, el parntesis mas interno se evala primero. Dentro de una misma expresin los operadores se evalan en el siguiente orden. 1.- ^ Exponenciacin 2.- *, /, mod Multiplicacin, divisin, modulo. 3.- +, - Suma y resta. Los operadores en una misma expresin con igual nivel de prioridad se evalan de izquierda a derecha. Ejemplos: 4 + 2 * 5 = 14 23 * 2 / 5 = 9.2 46 / 5 = 9.2 3 + 5 * (10 - (2 + 4)) = 23 3 + 5 * (10 - 6) = 3 + 5 * 4 = 3 + 20 = 23 3.5 + 5.09 - 14.0 / 40 = 5.09 3.5 + 5.09 - 3.5 = 8.59 - 3.5 = 5.09 2.1 * (1.5 + 3.0 * 4.1) = 28.98 2.1 * (1.5 + 12.3) = 2.1 * 13.8 = 28.98 Programa 5: Haga un programa para hallar X,Y, si se sabe que : X = (A+B*C)/8 Y = (B*D)/A Z =( X + Y)/Y*4 var A,B,C,D,X,Y,Z : numerico inicio cls() imprimir("\nIngrese los valores de A,B,C,D : \n") leer(A,B,C,D) X = (A+B*C)/8 Y = (B*D)/A Z =( X + Y)/Y*4 imprimir("\nEl valor de X : " + str(X)) imprimir("\nEl valor de Y : " + str(Y)) imprimir("\nEl valor de Z : " + str(Z)) fin Operadores Relacinales: Se utilizan para establecer una relacin entre dos valores. Compara estos valores entre si y esta comparacin produce un resultado de certeza o falsedad (verdadero o falso). Los operadores relacinales comparan valores del mismo tipo (numricos o cadenas) Tienen el mismo nivel de prioridad en su evaluacin. Los operadores relacinales tiene menor prioridad que los aritmticos. Son: > Mayor que

Carrera: Computacin e Informtica

Curso: Algoritmos

16
< >= <= <> = Menor que Mayor o igual que Menor o igual que Diferente Igual (En C++ y Java se usa == y = para asignacin)

Ejemplos: Si a = 10 b = 20 c = 30 a+b>c Falso a-b<c Verdadero a-b=c Falso a*b<>c Verdadero Ejemplos no lgicos: a<b<c 10 < 20 < 30 T < 30 (no es lgico porque tiene diferentes operandos) Operadores Lgicos: Estos operadores se utilizan para establecer relaciones entre valores lgicos. Estos valores pueden ser resultado de una expresin relacional. Son: Y O No Operador Y Operando1 T T F F Operador O Operando1 T T F F And Or Not Operador Y Operando2 T F T F Operando2 T F T F Resultado T F F F Resultado T T T F

Operador O

Operador Not Operando Resultado T F F T Ejemplos: (a < b) Y (b < c) (10<20) Y (20<30) T Y T

T
Prioridad de los Operadores Lgicos No Y O Prioridad de los Operadores en General 1.- ( ) 2.- ^ 3.- *, /, Mod, No 4.- +, -, Y 5.- >, <, > =, < =, < >, =, O Ejemplos:

Carrera: Computacin e Informtica

Curso: Algoritmos

17
a = 10 b = 12 c = 13 d =10 1) ((a > b) O (a < c)) Y ((a = c) O (a > = b)) F T F F T F F ((a > = b) O (a < d)) F F F F 3) NO(a = c) Y (c > b) F T T T Y ((a > = d) Y (c > d)) T T T

2)

Programa 6: Haga un programa que reciba el precio de 3 productos, obtenga el IGV (19%) de la suma de dichos productos y muestre el total a pagar. var pp1, pp2, pp3, ti, igv, tf: numerico inicio cls() imprimir("\nIngrese Precio primer producto : ") leer(pp1) imprimir("\nIngrese Precio segundo producto : ") leer(pp2) imprimir("\nIngrese Precio tercer producto : ") leer(pp3) ti=pp1+pp2+pp3 igv=ti*0.19 /*puedo no usar igv y multiplicar ti*1.19 */ tf=ti+igv imprimir("\nEl precio sin impuestos es " + str(ti)) imprimir("\nEl IGV es de " + str(igv)) imprimir("\nEl Total a pagar es " + str(tf)) fin Palabras reservadas Las palabras utilizadas por SL para propsitos especiales son llamadas palabras reservadas. Dado que las mismas tienen un significado especfico para el compilador de SL, no pueden ser utilizadas como identificadores. Todas las palabras reservadas deben ser escritas siempre completamente en letras minsculas, de lo contrario el compilador SL no las reconocer como tales.

Delimitadores de sentencias Las sentencias pueden ocupar una o varias lneas, es decir: a = (b + c) * (b / y) + (y / c) es una sentencia vlida, aunque ocupa dos lneas.

Carrera: Computacin e Informtica

Curso: Algoritmos

18
Puede escribirse ms de una sentencia en una sola lnea, si se las separa por el carcter punto y coma (;). As: a = b + c; n = a / y son dos sentencias escritas en una sola lnea, separadas por el carcter puntoy coma (;). Las expresiones numricas complejas o las sentencias muy largas pueden ser libremente distribuidas en dos o ms lneas para mejorar la legibilidad del programa fuente SL. Tambin debemos sealar que las lneas en blanco y los espacios entre las sentencias no son necesarios para la computadora interprete correctamente el programa, por lo tanto podramos omitirlas, pero al suprimirlos haremos difcil a otras personas, e incluso a nosotros mismos, la comprensin de nuestros programas. Identificadores Los identificadores representan los datos de un programa (constantes, variables, tipos de datos). Un identificador es una secuencia de caracteres que sirve para identificar una posicin en la memoria de la computadora, que nos permite accesar a su contenido. Ejemplo: Nombre Num_hrs Calif2

Reglas para formar un Identificador Los identificadores son utilizados para dar nombre a los programas, variables, subrutinas, tipos de datos, constantes y otros elementos de un programa SL. Existen algunas reglas a tener en cuenta en la creacin de identificadores: 1. Deben comenzar con una letra o con el carcter _ (guin bajo). 2. Pueden tener hasta 32 caracteres. 3. No deben contener espacios. 4. La combinacin de maysculas y minsculas en los identificadores hace que los mismos sean considerados diferentes. En otras palabras: CANTIDAD, cantidad y Cantidad representan tres identificadores distintos. 5. Pueden incluir las letras y (ee minscula y mayscula respectivamente). 6. No pueden contener caracteres acentuados. 7. Pueden incluir combinaciones de letras y nmeros y el carcter _ (guin bajo) Constantes y Variables Constante: Una constante es un dato numrico o alfanumrico que no cambia durante la ejecucin del programa. Ejemplo: pi = 3.1416 (Java tiene una constante Math.PI) Variable: Es un espacio en la memoria de la computadora que permite almacenar temporalmente un dato durante la ejecucin de un proceso, su contenido puede cambia durante la ejecucin del programa. Para poder reconocer una variable en la memoria de la computadora, es necesario darle un nombre con el cual podamos identificarla dentro de un algoritmo. Ejemplo: rea = pi * radio ^ 2 Las variables son : el radio, el rea y la constate es pi Clasificacin de las Variables

Por su Contenido Variables Por su Uso

Numricas Lgicas Alfanumricas (String) De Trabajo Contadores Acumuladores

Por su Contenido Variable Numricas: Son aquellas en las cuales se almacenan valores numricos, positivos o negativos, es decir almacenan nmeros del 0 al 9, signos (+ y -) y el punto decimal. Ejemplo: iva=0.15 pi=3.1416 costo=2500

Carrera: Computacin e Informtica

Curso: Algoritmos

19
Variables Lgicas: Son aquellas que solo pueden tener dos valores (TRUE o FALSE O SUS EQUIVALES SI - NO) estos representan el resultado de una comparacin entre otros datos. Variables Alfanumricas: Esta formada por caracteres alfanumricos (letras, nmeros y caracteres especiales). Ejemplo: letra=a apellido=lopezdireccion=Av. Libertad #190 Por su Uso Variables de Trabajo: Variables que reciben el resultado de una operacin matemtica completa y que se usan normalmente dentro de un programa. Ejemplo: suma=a+b/c Contadores: Se utilizan para llevar el control del numero de ocasiones en que se realiza una operacin o se cumple una condicin. Con los incrementos generalmente de uno en uno. (Su uso ms comn es dentro de bucles) Acumuladores: Forma que toma una variable y que sirve para llevar la suma acumulativa de una serie de valores que se van leyendo o calculando progresivamente (a=a+3 en un ciclo desde por ejemplo que es donde ms se usan)

Carrera: Computacin e Informtica

Curso: Algoritmos

20

CAPITULO IV ESTRUCTURAS ALGORITMICAS


Las estructuras de operacin de programas son un grupo de formas de trabajo, que permiten, mediante la manipulacin de variables, realizar ciertos procesos especficos que nos lleven a la solucin de problemas. Estas estructuras se clasifican de acuerdo con su complejidad en:

Secuenciales

- Asignacin - Entrada - Salida - Simples

Estructuras Condicionales Algoritmicas

- Mltiples - Hacer desde - Hacer mientras - Repetir hasta

Cclicas

Estructuras Secuenciales Son las que hemos estado viendo en los ejercicios del captulo 2. 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 pseudocdigo como sigue: leer a, b leer(a,b) Donde a y b son las variables que recibirn los valores Escritura: Consiste en mandar por un dispositivo de salida (p.ej. monitor o impresora) un resultado o mensaje. Este proceso se representa en un pseudocdigo como sigue: Escribe El resultado es:, R Muestra(El resultado es:, R) En SLE usamos: Imprimir(\nEl resultado es , R)

Carrera: Computacin e Informtica

Curso: Algoritmos

21

Donde El resultado es: es un mensaje que se desea aparezca y R es una variable que contiene un valor. Programa 7: Hallar Z si se sabe que var a,b,x,y,z : numerico x=3^(4)/7 + (9*(a-b)^(2)*8)/5 y=(4^(-3.23))/(a-b) z=(x+y)/(x-y) inicio cls() imprimir("\nIngrese el valor de A y B: \n") leer(a,b) x=3^(4)/7 + (9*(a-b)^(2)*8)/5 y=(4^(-3.23))/(a-b) z=(x+y)/(x-y) imprimir("\nEl resultado es " + str(z)) fin Programa 8: Halle la potencia X de N y la raiz X de N si N y X se ingresan por teclado. (^ smbolo de potencia) var N, X, potencia, raiz : numerico inicio cls() imprimir("\nIngrese el nmero : " ) leer(N) imprimir("\nIngrese el exponente : " ) leer(X) potencia=N^X raiz= N^(1/X) imprimir("\nLa Potencia es : " + str(potencia)) imprimir("\nLa raiz es : " + str(raiz)) fin Programa 9: Haga un programa permita ingresar una cantidad en metros y que convierta dicha cantidad en su equivalente en centmetros, pie, pulgadas, yardas si se sabe que: metro = 100 cm pulgada = 2.54 cm pie = 12 pulgadas yarda = 3 pies var metros, cm, pie, pulg, yar: numerico inicio cls() imprimir("\nIngrese cantidad en metros : \n") leer(metros) cm=metros*100 pulg=cm/2.54 pie=pulg/12 yar=pie/3 imprimir("centimetros " + str(cm)) imprimir("\npulgadas " + str(pulg)) imprimir("\npie " + str(pie)) imprimir("\nyarda " + str(yar)) fin

Carrera: Computacin e Informtica

Curso: Algoritmos

22
Programa 10: Haga un programa que permita ingresar 3 notas de prctica, 2 exmenes y una nota de trabajo. Debe obtener el promedio ponderando: Promedio de prcticas peso 2 Promedio de exmenes peso 3 Trabajo peso 1 Forma 1: var pr1,pr2,pr3,ex1,ex2,tr,pp,pe,pf : numerico inicio cls() imprimir("\nIngrese prctica 1 : ") leer(pr1) imprimir("\nIngrese prctica 2 : ") leer(pr2) imprimir("\nIngrese prctica 3 : ") leer(pr3) imprimir("\nIngrese Examen 1 : ") leer(ex1) imprimir("\nIngrese Examen 2 : ") leer(ex2) imprimir("\nIngrese Trabajo : ") leer(tr) pp=(pr1+pr2+pr3)/3 pe=(ex1+ex2)/2 pf=(pp*2+pe*3+tr)/6 imprimir("\nEl promedio final es : " + str(pf)) fin Forma 2: var pr1,pr2,pr3,ex1,ex2,tr,pp,pe,pf : numerico inicio cls() imprimir("\nIngrese las notas de las prcticas (3)\n") leer(pr1,pr2,pr3) imprimir("\nIngrese las notas de los exmenes (2)\n") leer(ex1,ex2) imprimir("\nIngrese la nota del trabajo (1)") leer(tr) pp=(pr1+pr2+pr3)/3 pe=(ex1+ex2)/2 pf=(pp*2+pe*3+tr)/6 imprimir("\nEl promedio final es : " + str(pf)) fin Estructuras Condicionales Las estructuras condicionales comparan una variable contra otro(s) valor(es), para que en base al resultado de esta comparacin, se siga un curso de accin dentro del programa. Cabe mencionar que la comparacin se puede hacer contra otra variable o contra una constante, segn se necesite. Existen dos tipos bsicos, las simples y las mltiples. Simples: Las estructuras condicionales simples se les conoce como Toma de decisin. Estas tomas de decisin tienen la siguiente forma: si(condicin){ Accin(es) } Programa 11: Realice un programa que reciba el sueldo bsico de un trabajador y su estado civil (use 0 para casado y 1 para soltero).

Carrera: Computacin e Informtica

Curso: Algoritmos

23
EL programa debe otorgar 10% de bonificacin si es casado. var basico,ec,bonif, total: numerico inicio cls() imprimir("\nIngrese el bsico : ") leer(basico) imprimir("\nEstado Civil : ") leer(ec) si(ec==0){ bonif=(basico*0.1)} total=basico+bonif imprimir("\nLa bonificacin es de : " + str(bonif)) imprimir("\nEl total a cobrar es de : " + str(total)) fin Programa 12: Reciba 3 notas y aumente 1 punto al promedio si este es mayor a 15. var not1,not2,not3,prom : numerico inicio cls() imprimir("\nIngrese 3 notas :\n") leer(not1,not2,not3) prom=(not1+not2+not3)/3 si(prom>=15){ prom=prom+1} imprimir("\nEl promedio es " + str(prom)) fin Dobles: Las estructuras condicionales dobles permiten elegir entre dos opciones o alternativas posibles en funcin del cumplimiento o no de una determinada condicin. Se representa de la siguiente forma: si(condicin){ Accin(es) sino Accin(es) } Donde: Si Indica el comando de comparacin Condicin Indica la condicin a evaluar accin(es) Son las acciones a realizar cuando se cumple o no la condicin sino Precede a las acciones a realizar cuando no se cumple la condicin {}.. Las instrucciones luego de si o sino que se ejecutaran. Dependiendo de si la comparacin es cierta o falsa, se pueden realizar una o mas acciones. Programa 13: Agregue al programa anterior 5% si es soltero (o si no es casado) /* programa para ejecutar una estructura condicional doble */ var basico,ec,gi,bonif, total: numerico inicio cls() imprimir("\nIngrese el bsico : ") leer(basico) imprimir("\nEstado Civil : ")

Carrera: Computacin e Informtica

Curso: Algoritmos

24
leer(ec) si(ec==0){ bonif=(basico*0.1) sino bonif=(basico*0.05)} } total=basico+bonif imprimir("\nLa bonificacin por Estado Civil es de : " + str(bonif)) imprimir("\nEl total a cobrar es de : " + str(total)) fin Mltiples: Las estructuras de comparacin mltiples, son tomas de decisin especializadas que permiten comparar una variable contra distintos posibles resultados, ejecutando para cada caso una serie de instrucciones especificas. La forma comn es la siguiente: si(condicin){ Accin(es) sino Si(condicin){ Accin(es) sino . . Varias condiciones . }} Programa 14: Agrege al programa anterior una bonificacin por grado de instruccin (0 licenciado, 1 bachiller, 2 tcnico) Licenciado = 16% Bachiller = 8% Tcnico 4% /* programa para ejecutar una estructura condicional multiple */ var basico,ec,gi,bonifec, bonifgi,total: numerico inicio cls() imprimir("\nIngrese el bsico : ") leer(basico) imprimir("\nEstado Civil : ") leer(ec) imprimir("\nGrado de Instruccin : ") leer(gi) si(ec==0){ bonifec=(basico*0.1) sino bonifec=(basico*0.05)} si(gi==0){ bonifgi=(basico*0.16) sino si(gi==1) bonifgi=(basico*0.08) sino si(gi==2) bonifgi=(basico*0.04) sino imprimir("\nSlo 0/1/2 ") }

Carrera: Computacin e Informtica

Curso: Algoritmos

25
total=basico+bonifec+bonifgi imprimir("\nLa bonificacin por Estado Civil es de : " + str(bonifec)) imprimir("\nLa bonificacin por Grado de Instruccin es de: " + str(bonifgi)) imprimir("\nEl total a cobrar es de : " + str(total)) fin Programa 15: Ingrese 1 promedio y que muestre si est aprobado o desaprobado. Cualquier nmero mayor a 20 se mostrar como nota no vlida. var promedio : numerico

inicio cls() imprimir("\nIngrese Promedio : \n") leer(promedio) si(promedio>=11 and promedio<=20){ imprimir("\nAprobado") sino si(promedio>=0 and promedio<11) imprimir("\nDesaprobado") sino imprimir("\nNota no vlida")} fin Muchos ejercicios se pueden resolver con estructuras simples o dobles sin problemas por ejemplo Programa 16: Haga 1 programa que reciba un nmero del 1 al 7 y muestre el da de la semana. Forma 1 (varios si simples) var dia : numerico inicio cls() imprimir("\Ingrese nmero del da de la semana : \n") leer(dia) si(dia==1){ imprimir("El da es lunes")} si(dia==2){ imprimir("El da es Martes")} si(dia==3){ imprimir("El da es Mircoles")} si(dia==4){ imprimir("El da es Jueves")} si(dia==5){ imprimir("El da es Viernes")} si(dia==6){ imprimir("El da es Sbado")} si(dia==7){ imprimir("El da es Domingo")} si(dia>7){ imprimir("Da incorrecto")} fin Forma 2 (mltiple) var dia : numerico inicio cls() imprimir("\Ingrese nmero del da de la semana : \n")

Carrera: Computacin e Informtica

Curso: Algoritmos

26
leer(dia) si(dia==1){ imprimir("El da es lunes") sino si(dia==2) imprimir("El da es Martes") sino si(dia==3) imprimir("El da es Mircoles") sino si(dia==4) imprimir("El da es Jueves") sino si(dia==5) imprimir("El da es Viernes") sino si(dia==6) imprimir("El da es Sbado") sino si(dia==7) imprimir("El da es Domingo") sino imprimir("Da incorrecto")} fin Forma 3 (mltiple anidado) var dia : numerico inicio cls() imprimir("\Ingrese nmero del da de la semana : \n") leer(dia) si(dia==1){ imprimir("El da es lunes") sino si(dia==2){ imprimir("El da es Martes") sino si(dia==3){ imprimir("El da es Mircoles") sino si(dia==4){ imprimir("El da es Jueves") sino si(dia==5){ imprimir("El da es Viernes") sino si(dia==6){ imprimir("El da es Sbado") sino si(dia==7){ imprimir("El da es Domingo") sino si(dia>7){ imprimir("Da incorrecto")}}}}}}}} fin Programa 17: Haga un programa que permita ingresar 2 nmeros a calcular y un tercer nmero para determinar la operacin a realizar (1 suma, 2 resta, 3 multiplicacin, 4 divisin) Forma 1 (varias simples) var n1,n2,ope, res : numerico inicio cls() imprimir("\nIngrese primer nmero : ") leer(n1)

Carrera: Computacin e Informtica

Curso: Algoritmos

27
imprimir("\nIngrese segundo nmero : ") leer(n2) imprimir("\nIngrese Operacin (1=Suma; 2=Resta; 3=Multiplicacin; 4=Divisin: ") leer(ope) si(ope==1){ res=n1+n2} si(ope==2){ res=n1-n2} si(ope==3){ res=n1*n2} si(ope==4){ res=n1/n2} imprimir("\nEl resultado es " + str(res)) fin Forma 2 (mltiples) var n1,n2,ope, res : numerico inicio cls() imprimir("\nIngrese primer nmero : ") leer(n1) imprimir("\nIngrese segundo nmero : ") leer(n2) imprimir("\nIngrese Operacin (1:Suma / 2:Resta / 3:Multiplicacin / 4:Divisin: ") leer(ope) si(ope==1){ res=n1+n2 imprimir("\nEl resultado es " + str(res)) sino si(ope==2) res=n1-n2 imprimir("\nEl resultado es " + str(res)) sino si(ope==3) res=n1*n2 imprimir("\nEl resultado es " + str(res)) sino si(ope==4) res=n1/n2 imprimir("\nEl resultado es " + str(res)) sino imprimir("\nSolo #s entre 1 y 4 ")} fin Forma 3 (anidados) var n1,n2,ope, res : numerico inicio cls() imprimir("\nIngrese primer nmero : ") leer(n1) imprimir("\nIngrese segundo nmero : ") leer(n2) imprimir("\nIngrese Operacin (1=Suma; 2=Resta; 3=Multiplicacin; 4=Divisin: )") leer(ope) si(ope==1){ res=n1+n2 sino si(ope==2){ res=n1-n2 sino si(ope==3){ res=n1*n2 sino si(ope==4){

Carrera: Computacin e Informtica

Curso: Algoritmos

28
res=n1/n2}}}} imprimir("\nEl resultado es " + str(res)) fin Forma General evaluacin de casos La estructura condicional toma la forma de una evaluacin de casos. eval{ caso(condicion1) Acciones caso(condicion2) Acciones sino Acciones} Programa 18: Resuelva el problema 17 usando eval var n1,n2,ope, res : numerico inicio cls() imprimir("\nIngrese primer nmero : ") leer(n1) imprimir("\nIngrese segundo nmero : ") leer(n2) imprimir("\nIngrese Operacin (1=Suma; 2=Resta; 3=Multiplicacin; 4=Divisin: )") leer(ope) eval { caso(ope==1) res=n1+n2 caso(ope==2) res=n1-n2 caso(ope==3) res=n1*n2 caso(ope==4) res=n1/n2} imprimir("\nEl resultado es " + str(res)) fin Programa 19: Haga un programa que genere un nmero al azar del 1 al 20 y se muestre: Notable si est entre 18 y 20 Bueno entre 15 y 17 Regular entre 11 y 14 Malo cualquier otra nota var promedio : numerico inicio cls() promedio=random(20)+1 //random(N) genera un nmero menor a N a partir de cero. Para que llegue a N a partir de 1 sumar 1. eval{ caso (promedio>=18 and promedio<=20) imprimir("\Notable") caso (promedio>=15 and promedio<=17) imprimir("\Bueno") caso (promedio>=11 and promedio<=14) imprimir("\Regular") sino imprimir("Mal\n")} imprimir(str(promedio) )

Carrera: Computacin e Informtica

Curso: Algoritmos

29
fin Programa 20 Resolver el problema 14 con casos usando la primera letra de la condicin (C o c para casado por ejemplo) var basico, bonec, bongi, toting : numerico ec, gi : cadena inicio cls() imprimir("\Ingrese el bsico : ") leer(basico) imprimir("\Ingrese el Estado Civil (C=Casado - S=Soltero) : ") leer(ec) imprimir("\Ingrese el Grado de Instruccin (L=Licenciado - B=Bachiller - T=Tcnico) : ") leer(gi) eval { caso ((ec=="c") or (ec=="C")) bonec=basico*0.1 caso ((ec=="s") or (ec=="S")) bonec=basico*0.05 sino imprimir("\n " + ec + " No es un dato correcto para el Estado Civil") terminar()} eval { caso ((gi=="l") or (gi=="L")) bongi=basico*0.16 caso ((gi=="t") or (gi=="T")) bongi=basico*0.08 caso ((gi=="s") or (gi=="S")) bongi=basico*0.04 sino imprimir("\n " + gi + " No es un dato correcto para el Grado de Instruccin") terminar()} toting=basico+bonec+bongi imprimir("\nEl bsico es : " + str(basico)) imprimir("\nLa bonificacin por EC es : " + str(bonec)) imprimir("\nLa bonificacin por GI es : " + str(bongi)) imprimir("\nEl total a pagar es : " + str(toting)) fin Estructuras Repetitivas o Cclicas Se llaman problemas repetitivos o cclicos a aquellos en cuya solucin es necesario utilizar un mismo conjunto de acciones que se puedan ejecutar una cantidad especifica de veces. Esta cantidad puede ser fija (previamente determinada por el programador) o puede ser variable (estar en funcin de algn dato dentro del programa).Los ciclos se clasifican en: Ciclos con un Numero Determinado de Iteraciones (desde) Son aquellos en que el numero de iteraciones se conoce antes de ejecutarse el ciclo. La forma de esta estructura es la siguiente (conocidos como ciclos for): desde V.C = L.I hasta L.S { Accion1 Accion2 . . AccionN} Donde: V.C L.I L.S Variable de control del ciclo Limite inferior Limite superior

Carrera: Computacin e Informtica

Curso: Algoritmos

30
En este ciclo la variable de control toma el valor inicial del ciclo y el ciclo se repite hasta que la variable de control llegue al limite superior. Programa 21: Haga un programa que muestre los nmeros del 1 al 10 var valor : numerico

inicio cls() desde valor=1 hasta 10 paso 1{ imprimir("\nNmero " + str(valor))} fin
El paso por defecto es 1 as que omitiendo el paso funciona igual var valor : numerico inicio cls() desde valor=1 hasta 10{ imprimir("\nNmero " + str(valor))} fin pero si queremos solos los pares del hasta el 10 entonces var valor : numerico inicio cls() desde valor=2 hasta 10 paso 2{ imprimir("\nNmero " + str(valor))} fin Programa 22: Programa que muestra que el contador del ciclo llega al lmite + 1 var n,cont : numerico /*n es la variable del ciclo cont es la variable contadora */ inicio cls() n=1 desde n=1 hasta 10 paso 1{ imprimir("\n " + str(n)) cont=cont+1} imprimir("\nEL contador llego a " + str(cont)) imprimir("\nEL ciclo llego a " + str(n)) fin n llega a 11 por eso se sale del bucle la iteracin, mientras que cont se incrementa hasta 10 que es el nmero de veces que se ejecuta el bucle Programa 23: Hacer la tabla de multiplicar de un nmero cualquiera var n, numero,result : numerico inicio cls() imprimir("\nIngrese el nmero a calcular : ")

Carrera: Computacin e Informtica

Curso: Algoritmos

31
leer(numero) desde n= 1 hasta 12{ result=numero*n imprimir("\n " + str(numero,0,0) + "*" + str(n,0,0) + "=" + str(result,0,0))} fin Programa 24: Recibir 2 nmeros a calcular y un tercero para determinar la tabla que se mostrar: var num, n, op,res : numerico signo :cadena inicio cls() imprimir("\Ingrese el nmero a calcular : ") leer(num) imprimir("\Ingrese que tabla quiere mostrar (1:suma, 2:resta, 3:multip, 4:divisin) : ") leer(op) desde n= 1 hasta 12{ si(op==1){ res=num+n signo = "+" sino si(op==2) res=num-n signo = "-" sino si(op==3) res=num*n signo = "*" sino si(op==4) res=num/n signo = "/" } imprimir(str(num,0,0) + signo + str(n,0,0) + "=" + str(res) +"\n")} fin Programa 25: Haga un programa que genera 10 nmeros al azar del 1 al 6 y muestre la suma y promedio de dichos nmeros (contador y acumulador) var n,aleat,acum: numerico /*n es la variable del ciclo cont es la variable contadora */ inicio cls() desde n=1 hasta 10{ aleat=random(6)+1 //5 - 3 -4 imprimir("\n " + str(aleat)) acum=acum+aleat} //0+5 - 5+3 - 12 imprimir("\n " + str(acum)) fin Ciclos con un Numero Indeterminado de Iteraciones (Mientras, Repetir-Hasta) Son aquellos en que el numero de iteraciones no se conoce con exactitud, ya que esta dado en funcin de un dato dentro del programa. Mientras: Esta es una estructura que repetir un proceso durante N veces, donde N puede ser fijo o variable. Para esto, la instruccin se vale de una condicin que es la que debe cumplirse para que se siga ejecutando (conocidos como ciclos while). Cuando la condicin ya no se cumple, entonces ya no se ejecuta el proceso. La forma de esta estructura es la siguiente: mientras(condicin){ Accion1 Accion2 .

Carrera: Computacin e Informtica

Curso: Algoritmos

32
. AccionN} Programa 26: Problema 21 con mientras: var valor: numerico inicio cls() valor=1 mientras(valor<=10){ imprimir("\nNmero " + str(valor)) valor=valor+2} fin Programa 27: Problema 25 con mientras var n,aleat,acum: numerico /*n es la variable del ciclo cont es la variable contadora */ inicio cls() n=1 mientras(n<=10){ aleat=random(6)+1 imprimir("\n " + str(aleat)) n=n+1 acum=acum+aleat} imprimir("\n " + str(acum)) fin Problema 28: Programa que permita procesar N notas y muestre la suma y el promedio de dichas notas. var numnot, n,nota, suma, prom, cont : numerico

inicio cls() imprimir("\Ingrese el nmero de notas a procesar ") leer(numnot) n= 1 mientras(n<=numnot){ imprimir("\nIngrese la nota" +str(n,0,0) + " : ") leer(nota) suma=suma+nota cont=cont+1} prom=suma/cont imprimir("\nEl puntaje es " + str(suma)) imprimir("\nEl promedio es " + str(prom)) fin Repetir-Hasta: Esta es una estructura similar en algunas caractersticas, a la anterior. Repite un proceso una cantidad de veces, pero a diferencia del Hacer-Mientras, el RepetirHasta lo hace hasta que la condicin se cumple y no mientras, como en el Hacer-Mientras. Por otra parte, esta estructura permite realizar el proceso cuando menos una vez, ya que la condicin se evala al final del proceso, mientras que en el Hacer-Mientras puede ser que nunca llegue a entrar si la condicin no se cumple desde un principio (conocidos como ciclos until no est presente en algunos lenguajes). La forma de esta estructura es la siguiente:

Carrera: Computacin e Informtica

Curso: Algoritmos

33

repetir Accion1 Accion2 . . AccionN hasta (condicin) Problema 29: Problema 25 con hasta var n,aleat,acum: numerico /*n es la variable del ciclo cont es la variable contadora */ inicio cls() n=1 repetir aleat=random(6)+1 imprimir("\n " + str(aleat)) n=n+1 acum=acum+aleat} hasta(n>10) imprimir("\n " + str(acum)) fin Problema 30: Problema 28 con hasta var numnot, n,nota, suma, prom, cont : numerico

inicio cls() imprimir("\Ingrese el nmero de notas a procesar ") leer(numnot) n= 1 repetir imprimir("\nIngrese la nota" +str(n,0,0) + " : ") leer(nota) suma=suma+nota cont=cont+1 hasta(n>numnot) prom=suma/cont imprimir("\nEl puntaje es " + str(suma)) imprimir("\nEl promedio es " + str(prom)) fin Vamos a desarrollar algunos problemas con estructuras repetitivas pero antes vamso a ver el uso de algunas funciones de cadena: Strlen Se emplea para recoger la longitud de una cadena Problema 31: Haga un programa que pida un nombre y muestre cuantas letras tiene var nombre : n,longitud cadena : numerico

Carrera: Computacin e Informtica

Curso: Algoritmos

34
inicio cls() imprimir("\Ingrese Nombre : ") leer(nombre) longitud=strlen(nombre) imprimir("\n" + nombre + " tiene " + str(longitud) + " caracteres") Problema 32: Que permita ingresar un nombre e imprima las letras en forma vertical. Se emplea substr para eso donde substr( cadena,inicio,cantidad) sea Victor la cadena entonces substr(victor,3,2) mostrar ct var nombre : cadena n,longitud : numerico inicio cls() imprimir("\Ingrese Nombre : ") leer(nombre) longitud=strlen(nombre) desde n = 1 hasta longitud{ imprimir("\n" + substr(nombre,1, n))} fin Problema 33: Que permita ingresar un nombre e imprima las letras aumentando 1 cada vez. Por ejemplo si ingreso Vctor V Vi Vic Vict Victo Victor var nombre : n,longitud cadena : numerico

inicio cls() imprimir("\Ingrese Nombre : ") leer(nombre) longitud=strlen(nombre) desde n = 1 hasta longitud{ imprimir("\n" + substr(nombre, n, longitud))} fin Problema 34: Que permita ingresar un nombre e imprima las letras disminuyendo 1 cada vez. Por ejemplo si ingreso Vctor Victor Victo Vict Vic Vi V var nombre : n,longitud cadena : numerico

Carrera: Computacin e Informtica

Curso: Algoritmos

35

inicio cls() imprimir("\Ingrese Nombre : ") leer(nombre) longitud=strlen(nombre) desde n = 1 hasta longitud{ imprimir("\n" + substr(nombre, n, 1))} fin Programa 35 : Haga un programa que permita extraer una subcadena de un nombre (2 caracteres desde la tercera letra) Se usa var nombre,pedacito : cadena

inicio cls() imprimir("\Ingrese Nombre : ") leer(nombre) pedacito=substr(nombre,5,2) imprimir("\nLa subcadena es " + pedacito) fin Programa 36: Imprimir N asteriscos var signo : cadena n,cantidad : numerico inicio cls() signo="*" imprimir("\nIngrese Cantidad de asteriscos : ") leer(cantidad) desde n = 1 hasta cantidad{ imprimir("\n"+ signo)} //agrege "\n" para que vaya hacia abajo fin Programa 37: Imprimir N filas y columnas de asteriscos var signo : cadena n,m,cantidad : numerico inicio cls() signo="*" imprimir("\nIngrese Cantidad de asteriscos : ") leer(cantidad) desde n = 1 hasta cantidad{ imprimir("\n") desde m = 1 hasta cantidad{ imprimir(signo)}} //por que el "\n" va en el primero fin Programa 38: Imprimir N filas y columnas de asteriscos en celdas de colores var signo : n,m,cantidad cadena : numerico

Carrera: Computacin e Informtica

Curso: Algoritmos

36

inicio set_color(1,16) cls() signo="*" imprimir("\nIngrese Cantidad de asteriscos : ") leer(cantidad) desde n = 1 hasta cantidad{ imprimir("\n") desde m = 1 hasta cantidad{ set_color(n,m) imprimir(signo)}} //por que el "\n" va en el primero fin

Carrera: Computacin e Informtica

Curso: Algoritmos

37

CAPITULO V ARREGLOS
Un Arreglo es una estructura de datos que almacena bajo el mismo nombre (variable) a una coleccin de datos del mismo tipo. Los arreglos se caracterizan por: Almacenan los elementos en posiciones contiguas de memoria Tienen un mismo nombre de variable que representa a todos los elementos. Para hacer referencia a esos elementos es necesario utilizar un ndice que especifica el lugar que ocupa cada elemento dentro del archivo.

Unidimensionales (Vectores) Tipo de Arreglos Bidimensionales (Matrices)


Vectores Es un arreglo de N elementos organizados en una dimensin donde N recibe e l nombre de longitud o tamao del vector. Para hacer referencia a un elemento del vector se usa el nombre del mismo, seguido del ndice (entre corchetes), el cual indica una posicin en particular del vector. Por ejemplo: Vec[x] Donde: Vec x Nombre del arreglo Numero de datos que constituyen el arreglo

Representacin grfica de un vector

Llenado de un Vector desde I = 1 hasta 10{ leer(vec[I])} I=1 mientras(I <= 10){ leer vec[I]} I=1 repetir leer(vec[I]) I=I+1 Hasta(I>10)

Vec[ 1] Vec[ 2] Vec[ 3] Vec[ 4]

7 8 9
1 0

La declaracin de vectores en SLE es muy sencilla: se declara como una variables ms, indicando al compilador los datos adicionales que necesita: La cantidad de elementos que tendr, y De qu tipo sern los elementos, es decir, si sern numricos, de cadena o lgicos.

Carrera: Computacin e Informtica

Curso: Algoritmos

38
En captulos siguientes veremos que incluso pueden tener elementos mucho ms complejos que estos. Por ejemplo, para declarar un vector numrico de 100 elementos escribiremos: var A : vector [100] numerico Para imprimir el valor del primer elemento escribiremos: imprimir (A [1]) Con el siguiente ciclo podemos imprimir todos los elementos del vector, uno en cada lnea: desde k=1 hasta 100 imprimir (\n, A [k])} Programa 39: Haga un programa que permita ingresar 5 notas y muestre 1 de ellas var a n,m : : vector[5] numerico numerico

inicio cls() imprimir("\nIngrese nota1 ") leer(a[1]) imprimir("\nIngrese nota2 ") leer(a[2]) imprimir("\nIngrese nota3 ") leer(a[3]) imprimir("\nIngrese nota4 ") leer(a[4]) imprimir("\nIngrese nota5 ") leer(a[5]) imprimir("\nIngrese el nmero que desea mostrar ") leer(m) imprimir("\nEl valor solicitado contiene ",a[m]) fin Programa 40: Haga un programa que genere 5 nmeros aleatorios y muestre cualquiera de ellos var a n,m : : vector[5] numerico numerico

inicio cls() desde n= 1 hasta 5{ a[n]=random(6)+1 imprimir("\n",n," elemento=",a[n])} imprimir("\nIngrese el nmero que desea mostrar") leer(m) imprimir("\nEl valor solicitado contiene ",a[m]) fin Programa 41: Modifique el programa 1 para que se muestre la suma y el promedio de dichas notas var a : vector[5] numerico n,m,suma,promedio : numerico inicio cls() imprimir("\nIngrese nota1 ") leer(a[1]) imprimir("\nIngrese nota2 ")

Carrera: Computacin e Informtica

Curso: Algoritmos

39
leer(a[2]) imprimir("\nIngrese nota3 ") leer(a[3]) imprimir("\nIngrese nota4 ") leer(a[4]) imprimir("\nIngrese nota5 ") leer(a[5]) desde n= 1 hasta 5{ suma=suma+a[n]} promedio=suma/5 imprimir("\nLa sumatoria es ",suma) imprimir("\nEl promedio es ",promedio) fin Programa 42: Ingrese hasta 5 notas o hasta que responda SI a salir. Muestra suma y promedio var a : vector[5] numerico n,suma,promedio : numerico salida : logico inicio cls() n=1 salida=NO mientras(salida==NO){ imprimir("\nIngrese nota",n) leer(a[n]) suma=suma+a[n] imprimir("\nSalir?? (SI/NO)") leer(salida) si(salida==NO){ n=n+1} si(n>5){ salida=SI}} promedio=suma/n imprimir("\nLa sumatoria es ",suma) imprimir("\nEl promedio es ",promedio) fin Programa 43: Ingrese datos de 5 alumnos: nombre y nota y muestre los datos del alumno que se le indique hasta que desee salir var a b : : vector[5] cadena vector[5] numerico

n,m,suma,promedio : numerico salida : logico nombre : cadena inicio cls() n=1 desde n=1 hasta 5{ imprimir("\nIngrese nombre",n) leer(a[n]) imprimir("\nIngrese nota",n) leer(b[n])} salida=NO mientras(salida==NO){ imprimir("\nIndique nmero del alumno a mostrar ") leer(m)

Carrera: Computacin e Informtica

Curso: Algoritmos

40
imprimir("\mAlumno",m, " Nombre=", a[m], " Nota=",b[m]) imprimir("\nSalir (SI/NO)") leer(salida)} fin Programa 44: Modifique el programa del dia de la semana para ser usado con arreglos var dias_sem : vector [7] cadena dia : numerico inicio cls() dias_sem = {"Lunes", "martes", "miercoles", "jueves","viernes", "sabado", "domingo"} imprimir("Indique dia de la semana") leer(dia) imprimir("\nEl dia ", dia, " es ", dias_sem[dia]) fin Matrices Es un arreglo de M * N elementos organizados en dos dimensiones donde M es el numero de filas o reglones y N el numero de columnas. Para representar una matriz se necesita un nombre de matriz se necesita un nombre de matriz acompaado de dos ndices. Mat [R,C] Donde R indica el rengln y C indica la columna, donde se encuentra almacenado el dato. Representacin grfica de una matriz

Mat [R,C]

Fila o Renglon [R]

1,1 2,1 3,1 4,1

1,2 2,2 3,2 4,2

1,3 2,3 3,3 4,3

1,4 2.4 3,4 4,4

Columna [C]
Llenado de una matriz Por renglones desde R = 1 hasta 5{ desde C = 1 hasta 5{ leer(Mat [R,C]) }} Por columnas desde C = 1 hasta 5{ desde R = 1 hasta 5{ leer(Mat [R,C])}} Para hacer el llenado de una matriz se deben de usar dos variables para los ndices y se utilizan 2 ciclos uno para los renglones y otro para las columnas; a estos ciclos se les llama ciclos anidados (un ciclo dentro de otro ciclo). Las matrices son declaradas exactamente igual que los vectores, excepto que se especifica ms de una dimensin entre los corchetes: var M : matriz [5, 10] cadena En este caso M es una matriz de 5 filas por 10 columnas, donde cada elemento es una cadena.

Carrera: Computacin e Informtica

Curso: Algoritmos

41
La siguiente matriz tridimensional se declara con: M3 : matriz [3, 5, 2] numerico Programa 45: Haga un programa que permita ingresar nmeros en una matriz de 2*2 y mostrar los nmeros generados var num : matriz [2,2] numerico r,c : numerico inicio cls() desde r= 1 hasta 2{ desde c= 1 hasta 2{ num[r,c]=random(20)+1}} desde r= 1 hasta 2{ desde c= 1 hasta 2{ imprimir("\n",r,"-",c,"=", num[r,c])}} fin Programa 46: Haga un programa que permita crear una matriz de 4 x 2 var num : matriz [4,2] numerico r,c : numerico inicio cls() desde r= 1 hasta 4{ desde c= 1 hasta 2{ imprimir("\nIngrese el elemento ",r,"-",c," ") leer(num[r,c]) cls()}} desde r= 1 hasta 4{ desde c= 1 hasta 2{ imprimir("\n",r,"-",c,"=", num[r,c])}} fin Programa 47: Haga un programa que permita crear una matriz de 2x4 var num : matriz [2,4] numerico r,c : numerico inicio cls() desde r= 1 hasta 2{ desde c= 1 hasta 4{ imprimir("\nIngrese el elemento ",r,"-",c," ") leer(num[r,c]) cls()}} desde r= 1 hasta 2{ desde c= 1 hasta 4{ imprimir("\n",r,"-",c,"=", num[r,c])}} fin Como ya habamos visto, la siguiente declaracin habilita un vector de 100 elementos numricos: v : vector [100] numerico En este caso el tamao del vector ya est definido al momento de la compilacin. Sin embargo existen algunos problemas de la vida real en los que no es posible conocer o no es conveniente predefinir la cantidad mxima de elementos que se requerirn. Puede incluso que el valor mximo vare de tiempo en tiempo. En estas situaciones podemos usar arreglos cuya creacin

aleatorios

Carrera: Computacin e Informtica

Curso: Algoritmos

42
sea dinmica, que se declaran como sigue: v : vector [*] numerico es decir, en vez del tamao ubicamos un asterisco para indicar que dicho valor an no conocemos. Ya en el cuerpo del programa, cuando sepamos la cantidad de elementos que necesitamos, usamos la subrutina predefinida dim() que posibilita asignar efectivamente la memoria necesaria: leer (n) dim (v, n) ... Esta posibilidad existe tambin para las matrices, sin importar la cantidad de dimensiones. Por ejemplo, lo que sigue declarara una matriz en las que la cantidad de filas y columnas no son conocidas al momento de la compilacin: M : matriz [*, *] numerico inicio leer (cant_fil, cant_col) dim (M, cant_fil, cant_col) ... A los vectores y matrices creables dinmicamente los llamamos genricamente arreglos abiertos. Como veremos en captulos siguientes, SL aprovecha la disponibilidad de arreglos abiertos para facilitar la escritura de algoritmos ms generales. Los arreglos abiertos tambin pueden ser inicializados con literales estructurados: var v : vector [*] numerico inicio v = {10, 20, 30, 40, 50} ... Cuando un arreglo abierto es inicializado de esta forma, no es necesario el uso de dim(). Por otra parte, con los arreglos abiertos no es posible el uso de la opcin de autocompletado (los tres puntos seguidos) como componente de inicializacin. Un arreglo abierto, independientemente de la cantidad de dimensiones, puede volver al estado de no inicializado usando el inicializador {}: var v : vector [*] numerico m : matriz [*, *] numerico inicio dim (v, 10) dim (m, 5, 3) /* Tanto v como m ya estan inicializadas. Ahora eliminemos los elementos de ambos arreglos. */ v = {} m = {} /* Vuelven a estar como si nunca hayan sido inicializados. */ fin Programa 48: Haga un programa que tenga un vector y una matriz a las que se les pueda establecer dinmicamente su tamao (Uso de la funcin alen() para ver las longitudes y de dim() para cambiar el tamao) var A : vector [*] numerico M : matriz [*, *] cadena n=0 inicio imprimir ("\nIngrese tamao del vector A:") leer (n) dim (A, n) imprimir ("\nLa cantidad de elementos de A es ", alen (A)) dim (M, 3, 4) imprimir ("\nLa matriz M tiene ", alen (M), " filas.",

Carrera: Computacin e Informtica

Curso: Algoritmos

43
"\nTodas las filas tienen ", alen (M [1]), " columnas.") fin Programa 49: Intercambiar el contenido de dos arreglos (uso de la funcin intercambiar()) var a = 100 b = 30 M : vector [5] numerico = {10, 14, 21, 3, 1} N : vector [5] numerico = {1, 212, 31, 4, 90} inicio imprimir ("\nAntes de intercambiar: a=", a, " b=", b) intercambiar (a, b) imprimir ("\nLuego de intercambiar: a=", a, " b=", b) imprimir ("\nAntes de intercambiar:\nM=", M, "\nN=", N) intercambiar (M, N) imprimir ("\nLuego de intercambiar:\nM=", M, "\nN=", N) fin Declaracin de Registros Se llama registro (algunos usan el trmino estructura) a una variable que est compuesta a su vez de otras variables. La ventaja de agrupar variables para formar una estructura ms compleja es que de esa forma se mantiene la unidad conceptual del dato. Por ejemplo, una fecha es un solo dato, a pesar de que se compone de da, mes y ao. En muchos casos es deseable tratarla como una sola entidad y en otros deseamos operar sobre sus componentes. A continuacin un ejemplo de declaracin de registro: var r : registro { nombre : cadena edad, peso : numerico direccion : cadena } A las variables contenidas en un registro se las llama campos. En este caso, r es una variable que contiene tres campos, los que pueden ser accedidos de la siguiente forma: r.nombre = Maria Gonzalez r.edad = 15 r.peso = 48 r.direccion = Algun lugar Es decir, los campos son accedidos poniendo el nombre de la variable-registro, seguido de un punto y a continuacin el nombre del campo. Los campos son utilizados como cualquier otra variable. Los registros pueden contener variables de cualquier tipo, incluyendo vectores, otros registros, etc. Dadas las siguientes definiciones: var p1, p2 : registro { nombre : cadena edad, peso : numerico direccion : cadena fecha_nac : registro { dia, mes, ao : numerico } notas : vector [100] numerico } Las variables p1 y p2 son registros, ambos conteniendo 6 campos, uno de los cuales (fecha_nac) es a su vez un registro y el ltimo es un vector numrico de 100 elementos. Por lo tanto, para asignar un valor al campo dia de la variable p1 se usara:

Carrera: Computacin e Informtica

Curso: Algoritmos

44
p1.fecha_nac.dia = 23 y para asignar un valor al segundo elemento del vector notas de la variable p2 se usara: p2.notas [2] = 98 Programa 50: Haga un programa que permita asignar 5 notas a 5 alumnos usando registros y arreglos tipos Alumno : registro { codigo : cadena notas : vector [*] numerico } var lista : vector [5] Alumno k=0 inicio cls() lista = { {"1283912 = ", {10, 11, 14, 12, 13}}, {"3281242 = ", {13, 12, 13, 11, 14}}, {"1278217 = ", {12, 14, 16, 11, 13}}, {"2381923 = ", {15, 15, 15, 15, 14}}, {"1938281 = ", {14, 13, 12, 12, 11}} } imprimir ("\nDatos de la clase:\n") desde k=1 hasta alen(lista) { imprimir (lista [k], "\n") } fin

// Este alumno no tiene notas

Otras consideraciones Los nombres de campos no pueden duplicarse dentro de un mismo registro. Para leer o imprimir un registro, debe realizarse la operacin deseada sobre cada uno de sus campos, toda vez que estos sean de tipos simples. Una definicin de registro debe especificar al menos un campo.

Carrera: Computacin e Informtica

Curso: Algoritmos

45

CAPITULO VI PROGRAMACION MODULAR


Manejo De Mdulos Definicin, Funcin y Manipulacin Un problema complejo se puede dividir en pequeos subproblemas mas sencillos. Estos subproblemas se conocen como Mdulos y su complementacion en un lenguaje se llama subprograma (procedimientos y funciones). Un subprograma realiza las mismas acciones que un programa, sin embargo, un subprograma lo utiliza solamente un programa para un propsito especifico. Un subprograma recibe datos de un programa y le devuelve resultados (el programa llama o invoca al subprograma, este ejecuta una tarea especifica y devuelve el control al programa que lo llamo).

Funciones Tipos de Mdulos Procedimientos


Funcin: Una funcin en matemticas, es una operacin que toma un o mas valores (argumentos) y devuelve un resultado (valor de la funcin para los argumentos dados). Por ejemplo: F(X) = X / (1+X2) Donde: F .. Nombre de la funcin X . Es el argumento (tambin conocido como parmetro formal) Definicin de funciones: Una definicin de funcin se presenta de la siguiente manera: Sub nombre_funcion (p1, p2, , pn : tipos) : tipo inicio Bloque de instrucciones fin Donde: sub Es la palabra clave que nos indica una definicin de funcin. Nombre_funcion .. Es el identificador con el cual se reconoce a la funcin en el cuerpo del algoritmo principal. P1,p2,,pn ... Es el grupo de parmetros que define a la funcin. Tipo Tipo de dato del parmetro o tipo de dato retornado Llamado a una funcin Cuando definimos una funcin solo le indicamos al algoritmo que esta funcin existe, pero una definicin de funcin no implica la realizacin de las instrucciones que la constituyen. Para hacer uso de una funcin, el algoritmo principal la debe llamar. Por ejemplo: inicio imprimir(\nEste es el algoritmo principal) Leer(N) R = F(N) llamado de la funcin Imprimir El resultado de la funcin es:,R fin sub F(X) inicio F = X /(1 + X^2) fin Programa 51: Modifique el programa 20 de manera que las operaciones (clculos) se realicen a travs de subprocedimientos var basico, bonec, bongi, toting : numerico ec, gi : cadena

Carrera: Computacin e Informtica

Curso: Algoritmos

46

inicio cls() imprimir("\Ingrese el bsico : ") leer(basico) imprimir("\Ingrese el Estado Civil (C=Casado - S=Soltero) : ") leer(ec) imprimir("\Ingrese el Grado de Instruccin (L=Licenciado - B=Bachiller - T=Tcnico) : ") leer(gi) bonifec() bonifgi() total() imprimir("\nEl bsico es : " + str(basico)) imprimir("\nLa bonificacin por EC es : " + str(bonec)) imprimir("\nLa bonificacin por GI es : " + str(bongi)) imprimir("\nEl total a pagar es : " + str(toting)) fin sub bonifec() inicio si((ec=="c") or (ec=="C")){ bonec=basico*0.1 sino si((ec=="s") or (ec=="S")) bonec=basico*0.05 sino imprimir("\n " + ec + " No es un dato correcto para el Estado Civil") terminar()} fin sub bonifgi() inicio si((gi=="l") or (gi=="L")){ bongi=basico*0.16 sino si((gi=="t") or (gi=="T")) bongi=basico*0.08 sino si((gi=="s") or (gi=="S")) bongi=basico*0.04 sino imprimir("\n " + gi + " No es un dato correcto para el Grado de Instruccin") terminar()} fin sub total() inicio toting=basico+bonec+bongi fin Programa 52: Modifique el programa anterior para que el programa principal solo tenga llamadas a funciones o procedimientos var basico, bonec, bongi, toting : numerico ec, gi : cadena inicio cls() lectura() bonifec() bonifgi() total() escritura() fin sub lectura() inicio imprimir("\Ingrese el bsico : ")

Carrera: Computacin e Informtica

Curso: Algoritmos

47
leer(basico) imprimir("\Ingrese el Estado Civil (C=Casado - S=Soltero) : ") leer(ec) imprimir("\Ingrese el Grado de Instruccin (L=Licenciado - B=Bachiller - T=Tcnico) : ") leer(gi) fin sub bonifec() inicio si((ec=="c") or (ec=="C")){ bonec=basico*0.1 sino si((ec=="s") or (ec=="S")) bonec=basico*0.05 sino imprimir("\n " + ec + " No es un dato correcto para el Estado Civil") terminar()} fin sub bonifgi() inicio si((gi=="l") or (gi=="L")){ bongi=basico*0.16 sino si((gi=="t") or (gi=="T")) bongi=basico*0.08 sino si((gi=="s") or (gi=="S")) bongi=basico*0.04 sino imprimir("\n " + gi + " No es un dato correcto para el Grado de Instruccin") terminar()} fin sub total() inicio toting=basico+bonec+bongi fin sub escritura() inicio imprimir("\nEl bsico es : " + str(basico)) imprimir("\nLa bonificacin por EC es : " + str(bonec)) imprimir("\nLa bonificacin por GI es : " + str(bongi)) imprimir("\nEl total a pagar es : " + str(toting)) fin

Carrera: Computacin e Informtica

Curso: Algoritmos

48

CAPITULO VII USO DEL SOFTWARE DFD


El Dfd (Diagrama De Flujos De Datos) Dfd es un software diseado para construir y analizar algoritmos de manera grfica. Usted puede crear diagramas de flujo de datos para la representacin de algoritmos de programacin estructurada a partir de las herramientas de edicin que para ste propsito suministra el programa. Despus de haber ingresado el algoritmo representado por el diagrama, podr ejecutarlo, analizarlo y depurarlo en un entorno interactivo diseado para ste fin. La interfaz grfica de Dfd, facilita en gran medida el trabajo con diagramas ya que simula la representacin estndar de diagramas de flujo en hojas de papel. Una vez ejecutado el programa se ver as:

Debajo de la barra de mens esta la barra de herramientas estandar y por debajo la barra de la aplicacin que ampliamos:

Ant.M.

Asignar Sig.M

while Nv.M.

for Bo.M

if

Lectura

Salida

Modulo

Para hacer una aplicacin de ejemplo, haga un clic sobre el botn SALIDA (es equivalente a Imprimir del seudocdigo) y haga otro clic entre los smbolos inicio y fin dentro del rea de trabajo. Haga un doble clic sobre el smbolo que apareci y escriba (comillas simples): Hola a Todos de manera que se vea as:

Pulse la tecla de funcin F9 y ver la salida:

Carrera: Computacin e Informtica

Curso: Algoritmos

49

PLANTEAMIENTO Y SOLUCION DE PROBLEMAS (PROGRAMACIN SECUENCIAL) Disee un algoritmo que permita convertir una cantidad dada en metros a sus equivalentes en centmetros, pulgadas, pies y yardas SEUDOCDIGO: var metros, pies, pulgadas, yardas, centmetros : numerico //note que la declaracin de variables no lleva punto y coma (;) inicio leer(metros) ; centmetros=metros*100; pulgados=centmetros/2.54; pies=pulgadas/12; yardas=pies/3; imprimir(Convertido a centmetros : , centmetro s); imprimir(Convertido a pulgadas : ,pulgadas); imprimir(Convertido a pies : , pies); imprimir(Convertido a yardas : , yardas); fin Si ingresar 100 metros, la salida sera como sigue:

DFD: 1. Seleccione el cono de SALIDA y colquelo entre inicio y fin 2. Haga Un doble clic e ingrese lo siguiente:

Carrera: Computacin e Informtica

Curso: Algoritmos

50

3. Seleccione el botn LECTURA y colquelo luego del de Salida. 4. Haga un doble clic sobre el smbolo colocado y escriba su primera variable:

5. Ahora seleccione el botn ASIGNACIN

y escriba lo que sigue:

Como falta definir yardas entonces colocamos otro cuadro de asignacin y escribimos:

6. Acepte. Ahora tomamos el control de Salida

, haga un doble clic y escribimos en l:

'centimetros= ', centimetros, '; pulgadas= ', pulgadas, '; pies= ' , pies, '; yardas= ', yardas

Carrera: Computacin e Informtica

Curso: Algoritmos

51
Lo que est entrecomillas (simples) con el signo igual es una cadena de caracteres y se ver tal cual. Las que estn solamente delimitadas por comas son las variables. Hay espacios en blanco antes y despus de algunas comillas en las cadenas para que no se peguen como los resultados de las variables. Al ejecutar (F9) se ver as:

El programa muestra un mensaje indicando que deber ingresar un valor para la variable metros. Haga clic en Continuar.

En la posicin de cursor ingrese cualquier nmero (yo ingrese un 15 por ejemplo). La salida se ver como sigue:

Carrera: Computacin e Informtica

Curso: Algoritmos

52

Podramos haber colocado 4 conos de salida pero se vera muy largo, adems que apareceran 4 pantallas de salida. PLANTEAMIENTO Y SOLUCION DE PROBLEMAS (ESTRUCTURAS CONDICIONALES) Los dos problemas propuestos cubrirn una condicin doble y una mltiple. En este ltimo caso construiremos una estructura condicional mltiple SI y otra CASE o SWITCH

Disee un algoritmo que calcule el monto de una compra (mcompra), su descuento (mdescuento) y el monto a pagar (mpago) basado en la cantidad de unidades del mismo tipo de producto. Si se compro ms de 10 unidades entonces se aplica un descuento del 10%, sino slo un descuento de 3%. SEUDOCDIGO
Var unidades, precio, mcompra, mpago, mdescuento : numerico inicio imprimir("\nIngrese precio de producto : "); leer(precio); imprimir("\nIngrese cantidad a comprar : "); leer(unidades); mcompra=unidades*precio; si(unidades > 10){ mdescuento = mcompra*0.1; sino mdescuento = mcompra*0.03; } mpago=mcompra-mdescuento; imprimir("\nPrecio de Compra : ", mcompra); imprimir("\nDescuento : ", mdescuento); imprimir("\nCantidad a Pagar : ", mpago); fin Observe como se inicia el SI con una llave. Todo lo que est entre llaves forma parte de la misma estructura condicional.

Carrera: Computacin e Informtica

Curso: Algoritmos

53

DFD 1. 2. 3. 4.

5. 6.

Coloque un cono de Salida, haga doble clic e ingrese el texto Ingrese precio del producto Coloque un objeto de lectura y defina en l la variable precio. Coloque un cono de Salida, haga doble clic e ingrese el texto Ingrese cantidad a comprar Coloque un objeto de lectura y defina en l la variable cantidad. NOTA: El DFD permite ingresar varias variables juntas, de manera que pudo haber ingresado 1 slo icono de Salida con un mensaje parecido a este: Ingrese precio y cantidad de productos a comprar. Luego coloca 1 cono de Lectura y escribe lo siguiente: precio, cantidad. El DFD mostrar un cuadro de ingreso de datos por variable en el orden que se colocaron. Es decir aparecera un primer cuadro para ingresar precio y luego otro para cantidad Recuerde que el DFD no permite indicar el tipo de dato Incluya un objeto de Asignacin en donde escribir: a. mcompra= precio*unidades b. mdescuento=0 c. A esto ltimo se le denomina INICIALIZACION DE VARIABLE. A veces es pertinente hacerlo. Incluya por debajo un objeto de decisin Note que aparece un lado Si y uno No. Haga doble clic sobre el objeto decisin y escriba a. unidades>10 b. Eso es lo que evaluaremos. Acepte. Colocaremos la accin si la cantidad de artculos comprados es mayor que 10 En la lnea del lado Si del objeto decisin incluya un objeto asignacin y escribir luego de hacer un doble clic: a. mdescuento = mcompra*0.1 En la lnea del lado NO del objeto decisin incluya un objeto asignacin y escribir luego de hacer un doble clic: a. mdescuento = mcompra*0.03 Coloque debajo de la lnea inferior del objeto de decisin un objeto de asignacin y escriba a. mpago = mcompra-mdescuento Ahora colocar por debajo un objeto de Salida y escribir: a. 'Precio de Compra= ',mcompra, ' Descuento= ', mdescuento, ' Pagar= ' , mpago

7. 8. 9. 10. 11. 12. 13.

Disee un algoritmo que reciba 2 nmero enteros y la operacin a realizar entre dichos nmeros. Operacin es 1 para suma, 2 para resta, 3 para multiplicacin y 4 para divisin. SEUDOCDIGO var n1 : numerico n2 : numerico ope : numerico inicio imprimir("\nIngrese Primer Nmero: "); leer(n1); imprimir("\nIngrese segundo Nmero: "); leer(n2); imprimir("\nIngrese Operacin: 1. Suma, 2. Resta, 3. Multip. , 4. Divisin: "); leer(ope); si (ope==1){

Carrera: Computacin e Informtica

Curso: Algoritmos

54
imprimir("\n", n1 , " + ", n2, "=", n1+n2); sino si (ope==2){ imprimir("\n", n1 , " - ", n2, "=", n1-n2); sino si (ope==3){ imprimir("\n", n1 , " * ", n2, "=", n1*n2); sino si (ope==4){ imprimir("\n", n1 , " / ", n2, "=", n1/n2); sino imprimir(\nSlo nmeros del 1 al cuatro;}}}} fin 1. Note que para los mensajes en imprimir colocamos \n que implica un salto a la siguiente lnea luego de mostrar el mensaje 2. La instruccin 5 mltiple o anidada se asume como una sola por eso se abre en el s y se cierra en el ltimo sino con tantas llaves como si haya abierto. DFD 1. Seleccione un cono de salida y escriba: Ingrese 3 nmeros: los dos primeros que sern usados para los clculos y el tercero (entre 1 y 4) que indica la operacin: 1=Suma, 2=Resta, 3)Multiplicacin y 4) Divisin 2. Nota que estamos modificando un poco el algoritmo con el propsito de hacerlo ms corto (menos conos) 3. Seleccione 1 cono de lectura y escriba: a. n1, n2, operacion 4. Ahora ingrese un cono de Decisin para evaluar el valor de la variable operacin.

5.

Si es igual a uno entonces la operaciones es la suma. Ingrese un cono de asignacin en el lado Si de la decisin y escriba lo siguiente:

resultado es una variable que guardar el valor obtenido al sumar n1 y n2

Carrera: Computacin e Informtica

Curso: Algoritmos

55
6. En el lado no ingrese un cono de decisin que evale si la variable operacin es igual a 2 y as sucesivamente. Hasta el momento se vera como sigue:

7. Siga ingresando decisiones en el lado No hasta llegar a la divisin. Al llegar a la evaluacin de la divisin, es decir si operacin es igual a 4, asigna a resultado el valor de la divisin de numero1/numero2 en el lado si de la condicin 8. En el lado no coloca un cono de salida con el mensaje:

9. Para terminar por encima del cono de fin y fuera de todas las decisiones coloca un cono de salida para mostrar:

10. 11.

Ejecute. El algoritmo, es decir la solucin al problema se ha modificado un poco en el DFD con respecto al seudocdigo. Es comn creer que primero se hace el seudocdigo y luego el diagrama de flujo y por ello el DFD debe representar exactamente al seudocdigo. Esto no es cierto. Pueden ser complementarios cuando se inicia en el mundo de la programacin, pero realmente son dos tcnicas distintas y, al modificarlos un poco slo pretendemos mostrar dos soluciones (que pueden ser ms) para el mismo problema.

Dijimos que este problema tambin iba a ser resuelto con un switch (CASE o evaluacin de casos). El DFD no grafica esta estructura condicional as que slo lo haremos con SL.

Carrera: Computacin e Informtica

Curso: Algoritmos

56
SEUDOCODIGO var n1,n2,ope,resultado: numerico inicio imprimir("\nIngrese primer nmero: "); leer(n1) imprimir("\nIngrese segundo nmero: "); leer(n2) imprimir("\nIngrese operacin a realizar: 1=Suma, 2=Resta, 3=Multiplicin, 4=Divisin); leer(ope) eval { caso (ope==1) resultado=n1+n2; caso (ope==2) resultado=n1-n2; caso (ope==3) resultado=n1*n2; caso (ope==4) resultado=n1/n2; sino imprimir("\nSlo nmeros entre 1 y 4"); } imprimir("\nEl Resultado es: ",resultado); fin PLANTEAMIENTO Y SOLUCION DE PROBLEMAS (ESTRUCTURAS REPETITIVAS) El problema propuesto ser resuelto con estructuras for y while dado que el DFD y la mayora de lenguajes no tienen una solucin tipo until, salvo Visual Basic) Realice un algoritmo que permita calcular las tablas de la suma, resta, multiplicacin y divisin de un nmero ingresado a travs del teclado, asumiendo que cada tabla sea del 1 al 12 ESTRUCTURA REPETITIVA FOR SEUDOCDIGO var tabla, i: numerico; inicio imprimir("\nPrograma para mostrar las tablas de 1 nmero"); imprimir("\n============================================"); imprimir("\nIngrese el nmero a calcular : "); leer(tabla); imprimir("\n Suma Resta Multiplicacin Divisin"); desde i=1 hasta 12 { imprimir ("\n",tabla, " + ", i , " = " ,tabla+i," ",tabla, " - ", i , " = " ,tabla-i," " * ", i , " = " ,tabla*i, " ", tabla, " / ", i , " = " ,str(tabla/i,2)); } fin

",tabla,

Los ciclos desde repiten las instrucciones dentro del ciclo tantas veces como se indica en la declaracin. Si i va desde 1 hasta 12 entonces las instrucciones se repetirn 12 veces. Nota: Hay que sealar que en SL no hay una funcin para darle formato a un nmero propiamente dicho. La funcin str convierte el nmero a cadena y le agrega dos decimales. Realmente no se nota la diferencia pero no podramos hacer una operacin matemtica incluyendo dicha funcin. DFD En DFD los ciclos for o desde (segn el SL), se conocen como ciclos para (for significa para) y asumen 3 valores obligatorios: lmite inferior del bucle (1 por ejemplo), lmite superior del bucle (12 por

Carrera: Computacin e Informtica

Curso: Algoritmos

57
ejemplo) e incremento (en el ejemplo es de 1 pero si queremos que se haga de 2 en 2 slo hay que indicarlo, pero ya no se repetiran las instrucciones 12 veces sino 6). Nota: En SL son obligatorios solamente los dos primeros 1. Ingrese un cono de Salida (se supone que ya lo conoce o sino vea la primera parte de este captulo). 2. Escriba lo siguiente:

3. Para separar las lneas pulse CTRL.+ENTER 4. En un cono de lectura escriba lo que ve en el siguiente recuadro

5. En la barra de herramientas seleccione un ciclo PARA de Salida. Se ver como sigue.

. Colquelo debajo del cono

6. Haga un doble clic sobre dicho cono y escriba lo siguiente (Note que los valores son: lmite inferior de i, lmite superior de i, incremento en 1 para i)

7. Coloque un cono de salida entre para y cierre y escriba lo siguiente: 'suma=',tabla,'+',i,'=',tabla+i, ' resta=',tabla,'-',i,'=',tabla-i,' multip=',tabla,'*',i,'=',tabla*i,' div=',tabla,'/',i,'=',tabla/i 8. Todo en forma seguida. Sea cuidadoso con las comas y las comillas simples. 9. Aqu se va a repetir 12 veces la salida de manera tal que va apareciendo la tabla del nmero ingresado operando con el 1, luego con el 2, hasta completar 12 salidas. Algo largo, no?.

Carrera: Computacin e Informtica

Curso: Algoritmos

58
10. Hemos modificado un poco la solucin para que sea ms legible la salida. ESTRUCTURA REPETITIVA WHILE SEUDOCODIGO var tabla, i: numerico; inicio i=1; imprimir("\nPrograma para mostrar las tablas de 1 nmero"); imprimir("\n============================================"); imprimir("\nIngrese el nmero a calcular : "); leer(tabla); imprimir("\n Suma Resta Multiplicacin Divisin"); mientras (i<=12){ imprimir("\n",tabla, " + ", i , " = " ,tabla+i," ",tabla, " - ", i , " = " ,tabla-i," * ", i , " = " ,tabla*i, " ", tabla, " / ", i , " = " ,str(tabla/i,2)); i=i+1;} fin 1. Note que el inicio del ciclo (i=1) se coloca fuera del bucle mientras. Dentro, se imprimen los resultados y la variable de lmites (i), se va incrementando (i=i+1 ); cuando llega al lmite superior (12) se termina el bucle. La instruccin mientras actua como un centinela controlando que se ejecuten las acciones mientras la afirmacin (i<=12), sea verdadera. DFD En DFD los ciclos while tambien se conocen como mientras (al igual que el SL). Comparndolo con la misma estructura en el SL diremos que su secuencia es similar para bloques repetitivos. 1. Repita los pasos del 1 al 4 del ciclo for en el DFD. 2. Ingrese un cono de asignacin y escriba lo siguiente. (dando valor al lmite inferior)

",tabla, "

3. En la barra de herramientas seleccione un ciclo MIENTRAS. Colquelo debajo del cono de Salida. Se ver como sigue.

4. MQ significa mientras que. Haga un doble clic sobre dicho cono y escriba:

i<=12
5. Coloque un cono de salida entre para y cierre y escriba lo siguiente: 'suma=',tabla,'+',i,'=',tabla+i, ' resta=',tabla,'-',i,'=',tabla-i,' multip=',tabla,'*',i,'=',tabla*i,' div=',tabla,'/',i,'=',tabla/i

Carrera: Computacin e Informtica

Curso: Algoritmos

59
6. Todo en forma seguida. Sea cuidadoso con las comas y las comillas simples. 7. Aqu se va a repetir 12 veces la salida de manera tal que va apareciendo la tabla del nmero ingresado operando con el 1, luego con el 2, hasta completar 12 salidas. Algo largo, no?. Hemos modificado un poco la solucin para que sea ms legible la salida. ESTRUCTURA REPETITIVA UNTIL Esta estructura no la hace el DFD, pero la incluimos en el seudocdigo para que la pueda comparar con for y while var tabla, i: numerico; inicio i=1; imprimir("\nPrograma para mostrar las tablas de 1 nmero"); imprimir("\n============================================"); imprimir("\nIngrese el nmero a calcular : "); leer(tabla); imprimir("\n Suma Resta Multiplicacin Divisin"); repetir imprimir ("\n",tabla, " + ", i , " = " ,tabla+i," ",tabla, " - ", i , " = " ,tabla-i," ",tabla, " * ", i , " = " ,tabla*i, " ", tabla, " / ", i , " = " ,str(tabla/i,2)); i=i+1; hasta (i == 12) fin

Carrera: Computacin e Informtica

Curso: Algoritmos