Algoritmos

Page 1

CHICLAYO 15 DE JULIO DE 2015

1


Doris Chucas Carlos Diego Alarc贸n Portocarrero Jos茅 Piscoya Patazca Diego Arroyo Torres

2


DEDICATORIA: Con esfuerzo y dedicaci贸n a nuestra maestra, Nerita Tarrillo D谩vila quien con paciencia y vocaci贸n nos impulsa a salir adelante siempre.

3


INTRODUCCIÓN

El Diseño de Algoritmos tiene como propósito fundamental proporcionar al estudiante las estructuras y técnicas de manejo de datos más usuales y los criterios que le permitan decidir, ante un problema determinado, cuál es la estructura y los algoritmos óptimos para manipular los datos. El manual está diseñado para proporcionar al alumno la madurez y los conocimientos necesarios para enfrentar, una gran variedad de los problemas que se le presentarán en su vida académica. El temario gira en torno a dos temas principales: estructuras de datos y diseño de algoritmos, sus definiciones, sus especificaciones como tipos de datos abstractos y finalmente algunas de sus aplicaciones. Se presentan también algunos algoritmos de ordenación, de búsqueda, de recorridos en gráficas y para resolver problemas mediante recursión y retroceso mínimo analizando también su complejidad, lo que constituye una primera experiencia del alumno con el análisis de algoritmos y le proporcionará herramientas y madurez que le serán útiles más adelante El desarrollo de algoritmos es un tema fundamental en el diseño de programas o soluciones. Por lo cual, el alumno debe tener buenas bases que le sirvan para poder crear de manera fácil y rápida sus programas. La siguiente documentación pueden servir de apoyo a tutores o profesores, en su labor cotidiana de enseñanza y al estudiante, facilitarle el desarrollo de su capacidad analítica y creadora, para de esta manera mejorar su destreza en la elaboración de algoritmos que sirven como base para la codificación de los diferentes programas que tendrá que desarrollar. Los autores.

4


CONTENIDO Presentación Autores Dedicatoria Introducción Contenido Etimología Qué es un algoritmo Clasificación de los algoritmos  Computacional  No computacional  Cualitativos  Cuantitativos Lenguajes algorítmicos Tipos de lenguaje algorítmico  Gráficos  No gráficos Características de los algoritmos Propiedades de un algoritmo  Enunciado del problema  Análisis de la solución general  Diferentes alternativas de solución Constantes, variables y expresiones  Constantes

5


 Variables  Clasificación de las variables  Por su contenido  Por su uso  Identificadores  Expresiones Elaboración de algoritmos  Procedimiento  Análisis  Buscar diferentes alternativas de solución al resultado del problema. ¿Quiénes pueden elaborar algoritmos? Lógica de la Computadora, Todo lógica para niños Diseño algorítmico. ¿ Cómo enseñar a un niño a realizar un trabajo?  Conjunto de símbolos y números  Aritmética y sus operaciones  Lógica y sus operaciones  Cuántas veces. Estructuras de Repetición  Simplificación de Problemas  Primeros ejercicios en su computadora Codificación: Traducir para la máquina  Componentes de un lenguaje  Aritmética y lógica  ¿ y cómo sabe la máquina de la variable? Declaración de variables  Cadenas de caracteres. Operaciones muy especiales

6


 Carátula del programa, formatos de entrada y salida  Arreglos uni y pluri dimensionales  Dividir un programa, funciones y procedimientos  Estructuras y registros Acerca de entrada y salida. Manejo de archivos Ejercicios propuestos Problemas resueltos de algoritmos Ejercicios propuestos para diagramas de flujos Referencias linkográficas

7


1. ETIMOLOGÍA La palabra algoritmo se deriva de la traducción al latín de la palabra árabe alkhowarizmi, nombre de un matemático y astrónomo árabe que escribió un tratado sobre manipulación de números y ecuaciones en el siglo IX. 2. ¿QUÉ ES UN ALGORITMO? Un algoritmo es una serie de pasos organizados que describe el proceso que se debe seguir, para dar solución a un problema específico. La habilidad para manejar algoritmos tiene un valor estratégico en el uso de la computadora como herramienta para resolver un problema, después de que se ha dicho como resolverlo. Un algoritmo se transforma en una herramienta de computadora cuando se han preparado instrucciones adecuadas para que la computadora pueda llevarlos a cabo. Estas instrucciones deberán comunicarse a la computadora en un lenguaje que pueda “entenderse”, tal lenguaje se conoce como lenguaje de programación. Un algoritmo se define como un conjunto de instrucciones para resolver un problema. En otros términos, un algoritmo es una sola prescripción determinante de un proceso de cálculo que, partiendo de diversos datos iniciales, conduce en todos los casos al resultado que le corresponde. 3. CLASIFICACIÓN DE LOS ALGORITMOS Los algoritmos se pueden clasificar en cuatro tipos: Algoritmo computacional: Es un algoritmo que puede ser ejecutado en una computadora. Ejemplo: Fórmula aplicada para un cálculo de la raíz cuadrada de un valor x. Algoritmo no computacional: Es un algoritmo que no requiere de una computadora para ser ejecutado. Ejemplo: Instalación de un equipo de sonido. Algoritmo cualitativo: Un algoritmo es cualitativo cuando en sus pasos o instrucciones no están involucrados cálculos numéricos. Ejemplos: Las instrucciones para desarrollar una actividad física, encontrar un tesoro.

8


Algoritmo cuantitativo: Una algoritmo es cuantitativo cuando en sus pasos o instrucciones involucran cálculos numéricos. Ejemplo: Solución de una ecuación de segundo grado.

4. PARTES DE UN ALGORITMO Todo Algoritmo debe tener las siguientes partes: · Entrada de datos, son los datos necesarios que el algoritmo necesita para ser ejecutado. · Proceso, es la secuencia de pasos para ejecutar el algoritmo. · Salida de resultados, son los datos obtenidos después de la ejecución del algoritmo.

5. TÉCNICAS DE REPRESENTACIÓN Para la representación de un algoritmo, antes de ser convertido a lenguaje de programación, se utilizan algunos métodos de representación escrita, gráfica o matemática. Los métodos más conocidos son: · Diagramación libre (Diagramas de flujo). · Diagramas Nassi-Shneiderman. · Pseudocódigo. · Lenguaje natural (español, inglés, etc.). · Fórmulas matemáticas.

6. LENGUAJES ALGORÍTMICOS Un Lenguaje algorítmico es una serie de símbolos y reglas que se utilizan para describir de manera explícita un proceso. Tipos de Lenguajes Algorítmicos

Gráficos: Es la representación gráfica de las operaciones que realiza un algoritmo (diagrama de flujo).

9


Los diagramas de flujo son una manera de representar visualmente el flujo de datos a través de sistemas de tratamiento de información. Los diagramas de flujo describen que operaciones y en que secuencia se requieren para solucionar un problema dado. Un diagrama de flujo u organigrama es una representación diagramática que ilustra la secuencia de las operaciones que se realizarán para conseguir la solución de un problema. Los diagramas de flujo se dibujan generalmente antes de comenzar a programar el código frente a la computadora. Los diagramas de flujo facilitan la comunicación entre los programadores y la gente del negocio. Estos diagramas de flujo desempeñan un papel vital en la programación de un problema y facilitan la comprensión de problemas complicados y sobre todo muy largos. Una vez que se dibuja el diagrama de flujo, llega a ser fácil escribir el programa en cualquier idioma de alto nivel. Vemos a menudo cómo los diagramas de flujo nos dan ventaja al momento de explicar el programa a otros. Por lo tanto, está correcto decir que un diagrama de flujo es una necesidad para la documentación mejor de un programa complejo.

10


Reglas para dibujar un diagrama de flujo. Los Diagramas de flujo se dibujan generalmente usando algunos símbolos estándares; sin embargo, algunos símbolos especiales pueden también ser desarrollados cuando sean requeridos. Algunos símbolos estándares, que se requieren con frecuencia para diagramar programas de computadora se muestran a continuación: Inicio o fin del programa Pasos, procesos o líneas de instruccion de programa de computo Operaciones de entrada y salida

Toma de desiciones y Ramificación

Conector para unir el flujo a otra parte del diagrama

Cinta magnética

Disco magnético

Conector de pagina

Líneas de flujo

Anotación

11


Display, para mostrar datos

Envía datos a la impresora Observación: Para obtener la correcta elaboración de los símbolos, existen plantillas. Las puedes conseguir en Papelerías. Símbolos gráficos Dentro de los símbolos fundamentales para la creación de diagramas de flujo, los símbolos gráficos son utilizados específicamente para para operaciones aritméticas y relaciones condicionales. La siguiente es una lista de los símbolos más común mente utilizados: +

Sumar

-

Menos

*

Multiplicación

/

División

±

Mas o menos

=

Equivalente a

>

Mayor que

<

Menor que

³

Mayor o igual que

£

Menor o igual que

¹o <>

Diferente de Si No

12


True False Reglas para la creación de Diagramas Los Diagramas de flujo deben escribirse de arriba hacia abajo, y/o de izquierda a derecha. Los símbolos se unen con líneas, las cuales tienen en la punta una flecha que indica la dirección que fluye la información procesos, se deben de utilizar solamente líneas de flujo horizontal o verticales (nunca diagonales). Se debe evitar el cruce de líneas, para lo cual se quisiera separar el flujo del diagrama a un sitio distinto, se pudiera realizar utilizando los conectores. Se debe tener en cuenta que solo se vana utilizar conectores cuando sea estrictamente necesario. No deben quedar líneas de flujo sin conectar Todo texto escrito dentro de un símbolo debe ser legible, preciso, evitando el uso de muchas palabras. Todos los símbolos pueden tener más de una línea de entrada, a excepción del símbolo final. Solo los símbolos de decisión pueden y deben tener mas de una línea de flujo de salida. Ejemplos de diagramas de flujo Diagrama de flujo que encuentra la suma de los primeros 50 numeros naturales

13


Bueno, y ahora la descripción del diagrama anterior Suma, es la variable a la que se le va agregando la valor de cada número natural. N, es el contador. Éste recorrerá los números hasta llegar al 50. El primer bloque indica el inicio del Diagrama de flujo

El segundo bloque, es un Símbolo de procesos En este bloque se asume que las variables suma y N han sido declaradas previamente y las inicializa en 0 para comenzar a el conteo y la suma de valores (Para declararlas existe el bloque Tarjeta perforada).

14


El tercer bloque, es también un Símbolo de procesos En éste paso se incrementa en 1 la variable N (N = N + 1). Por lo que, en la primera pasada esta N valdrá 1, ya que estaba inicializada en 0.

El cuarto bloque es exactamente lo mismo que el anterior Pero en éste, ya se le agrega el valor de N a la variable que contendrá la suma (En el primer caso contendrá 1, ya que N = 1). El quinto bloque es un Símbolo de Toma de decisiones y Ramificación Lo que hay dentro del bloque es una pregunta que se le hace a los valores que

actualmente influyen en el proceso ¿Es N=50?, Obviamente la respuesta es no, ya que N todavía es 1. por lo que el flujo de nuestro programa se dirigirá hacía la parte en donde se observa la palabra no: Tercer Bloque, éste le sumará 1 (N=N+1) y vuelve a llegar a éste bloque, donde preguntará ¿Es N=50?... ¡No!, todavía es 2. Ha pues, regresa al Tercer bloque y vuelve hacer lo mismo. Y así hasta llegar a 50, obteniendo así la suma de los primeros 50 primeros números naturales. Por último indicamos que el resultado será mostrado en la impresora (Este lo

puedes cambiarlo por el display para mostrar datos).

Fin del programa (o diagrama)

No Gráficos: Representa en forma descriptiva las operaciones que debe realizar un algoritmo (pseudocódigo). INICIO Edad: Entero

15


ESCRIBA “cual es tu edad?” Lea Edad SI Edad >=18 entonces ESCRIBA “Eres mayor de Edad” FINSI ESCRIBA “fin del algoritmo” FIN

7. CARACTERÍSTICAS DE UN ALGORITMO: En términos generales las características 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 mayoría de las variantes que se puedan presentar en la definición del problema.  Debe ser finito en tamaño y tiempo de ejecución.  Diseño del Algoritmo

16


 Prueba de escritorio o Depuración Se denomina prueba de escritorio a la comprobación que se hace de un algoritmo para saber si está bien hecho. Esta prueba consiste en tomar datos específicos como entrada y seguir la secuencia indicada en el algoritmo hasta obtener un resultado, el análisis de estos resultados indicará si el algoritmo está correcto o si por el contrario hay necesidad de corregirlo o hacerle ajustes.

Sus pasos deben estar definidos con precisión de forma que no existan ambiguedades que den origen a elegir una opción equivocada. Los algoritmos son finitos; es decir, su ejecución termina en un número determinado de pasos. La mayoría de los algoritmos de utilidad al programador poseen tres partes principales:

Si detallamos sus características encontraremos que son: 1. Finitud: Un algoritmo debe terminar después de ejecutar un número finito de pasos. 2. Definición: Cada paso en un algoritmo debe estar definido con precisión, esto es, la acción a seguir no debe ser ambigua, sino rigurosamente especificada. Un algoritmo descrito en como inglés o español, en el cual una misma palabra puede significar varias cosas, puede no cumplir con este punto. Es por eso que se han definido los lenguajes de programación o lenguajes de computación para especificar algoritmos, ya que en ellos el significado de cada palabra es uno y sólo uno

17


.3.Entrada: Se considera como entrada de datos o información requerida para resolver un problemadado. No cualquier grupo de datos sepuede considerar como entrada en elprocedimiento señalado.4.

Salida: La salida es un conjunto de resultados que se obtienen al aplicar el algoritmo al conjunto de datos de entrada. 5. Efectividad: Un algoritmo debe llevar a la solución del problema planteado, en otras palabras, se puede decir que todas las operaciones que efectúa el algoritmo ,deben ser lo suficientemente simples para que en principio, se puedan ejecutar con papel y lápiz y al final obtener el resultado deseado. Además, los algoritmos se pueden representar gráficamente a través de un diagrama de flujo. 8. PROPIEDADES DE UN ALGORITMO Las propiedades de un algoritmo son puntos guías a seguir para su elaboración, ya que estos llevan un mejor desarrollo del problema del computador. Sus propiedades son: 8.1.

Enunciado del problema: El enunciado del problema debe ser claro y completo. Es importante que conozcamos exactamente que se desea del computador. Mientras esto no se comprenda, no tiene caso pasar a la siguiente etapa.

18


8.2.

Análisis de la solución general: Entendido el problema, para resolver es preciso analizar: Los datos o resultados que se esperan. Los datos de entrada que nos suministran. El proceso al que se requiere someter esos datos a fin de obtener los resultados esperados. Áreas de trabajo, fórmulas y otros recursos necesarios. Una recomendación muy práctica es el que nos pongamos en el lugar del computador, y analicemos que necesito que me ordenen y en que secuencia, para poder producir los resultados esperados.

8.3.

Diferentes alternativas de solución: Analizando el problema posiblemente tengamos varias formas de resolverlo. Lo importante es determinar cuál es la mejor alternativa: la que produce los resultados esperados en el menor tiempo o al menor costo.

19


9. CONSTANTES, VARIABLES Y EXPRESIONES. 9.1.

Constantes Una constante es un dato numérico o alfanumérico que no cambia durante la ejecución del programa.

9.2.

Variable Es un espacio en la memoria de la computadora que permite almacenar temporalmente un dato durante la ejecución de un proceso, su contenido puede cambiar durante la ejecución del programa. Para poder reconocer una variable en la memoria de la computadora, es necesario darle un nombre con el cual podamos identificarla

20


dentro de un algoritmo. Ejemplo: área = pi * radio ^ 2 Las variables son : el radio, el área y la constante es pi Clasificación de las Variables

Por su contenido  Variables Numéricas: Son aquellas en las cuales se almacenan valores numéricos, positivos o negativos, es decir almacenan números del 0 al 9, signos (+ y -) y el punto decimal. Ejemplo: iva = 0.15 pi = 3.1416 costo = 2500  Variables Lógicas: Son aquellas que solo pueden tener dos valores (cierto o falso) estos representan el resultado de una comparación entre otros datos.  Variables Alfanuméricas: Está formada por caracteres alfanuméricos (letras, números y caracteres especiales). Ejemplo: letra = ’a’ apellido = ’lopez’ direccion = ’Av. Libertad #190’ Por su uso  Variables de Trabajo: Variables que reciben el resultado de una operación matemática completa y que se usan normalmente dentro de un programa. Ejemplo: Suma = a + b /c  Contadores: Se utilizan para llevar el control del número de ocasiones en que se realiza una operación o se cumple una condición. Con los incrementos generalmente de uno en uno.

21


ďƒź 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.

Identificadores

22


Expresiones Las expresiones son combinaciones de constantes, variables, símbolos de operación, paréntesis y nombres de funciones especiales. Por ejemplo: a + (b + 3) / c Cada expresión toma un valor que se determina tomando los valores de las variables y constantes implicadas y la ejecución de las operaciones indicadas. Una expresión consta de operadores y operandos. Según sea el tipo de datos que manipulan, se clasifican las expresiones en:  Aritméticas  Relacionales  Lógicas

10. ELABORACIÓN DE ALGORITMOS. Los conocimientos adquiridos anteriormente son las herramientas necesarias para llevar a cabo la elaboración de un algoritmo a través de un problema. Se recomienda tomar en cuenta cada una de las propiedades de un algoritmo, ya que de ahí se inicia el proceso de elaboración. A continuación se mostrará el desarrollo de un problema con su respectivo algoritmo de solución.

23


Supongamos que s necesita calcular e imprimir el área de un triángulo cuya base y altura se suministrarán de un disco.

Procedimiento: Escribir correctamente el enunciado del problema. “Calcular e imprimir el área de un triángulo cuya base y altura se suministrarán de un disco”.

Análisis: 1. ¿Qué se quiere?, ¿Cómo se quiere?, ¿ Que deseo obtener?. -

¿Qué se quiere? Quiero calcular el área de un triángulo.

-

¿Cómo se quiere? Lo quiero calcular a través de una fórmula

-

Área del triángulo= Base x altura 2 ¿ Que deseo obtener?. Imprimir el área del triángulo y suministrar los resultados en un disco.

2. Solución: Variables utilizadas en esta solución: De lectura

Para almacenar - El valor correspondiente a la base del triángulo. - El valor correspondiente a la altura del triángulo.

Base

Altura

24


Buscar diferentes alternativas de solución al resultado del problema. Ejemplo: El problema pide imprimir el área del triángulo como resultado, en un disco.

Algoritmo: Programa para calcular el área de un triángulo. Inicio Lea

Base, Altura, Área

Calcule

Área= (base*altura)/2

Imprima

“Resultado=”, Área

Fin Otros ejemplos: 

Analice los siguientes problemas  Obtener la suma de A y B, donde A y B se solicitan al usuario, mostrar el resultado.  Obtener la división de A y B, donde A y B se solicitan al usuario, mostrar el resultado

Desarrollo de los algoritmos  Algoritmo: suma de dos valores Variables necesarias: A,B,C, tipo real Inicio Mostrar “ Favor de teclear dos números” Leer A Leer B Hacer C < - A+B

25


Mostrar C Fin del algoritmo

 Algoritmo: División de dos valores Variables necesarias: A,B,C, tipo real Inicio Mostrar “Favor de teclear dos números” Leer A, B Si B <> 0 entonces Hacer C < - A/B Mostrar C En caso contrario Mostrar “ La división no se puede llevar a cabo” Fin de Si Fin del algoritmo

11. ¿QUIENES PUEDEN ELABORAR ALGORITMOS? Toda persona, implícitamente y diariamente diseña y realiza algoritmos, para dar solución a situaciones cotidianas de forma natural. Sin embargo el programador diseña el algoritmo consciente de que al realizar cada paso obtendrá la solución de un problema específico.

12. LÓGICA DE LA COMPUTADORA, TODO ES LÓGICA PARA NIÑOS El programa de aplicación debe contener todas las instrucciones, paso a paso, para que el ordenador realice la tarea encomendada. La realización de un programa de aplicación es como intentar, de una manera lógica, de enseñar a un niño a realizar una tarea. Imaginemos que tenemos que

26


enseñar a sumar a un niño curioso, este primero nos preguntara que son números, como se cuenta, que es sumar, como lo sumo, que voy a sumar, donde lo voy a sumar, etc., vemos de esta manera que en su mayoría son preguntas lógicas que cualquier niño curioso haría, pero que tal ves nosotros no vemos como relevantes. Así para enseñar a un ordenador, o escribir un programa de aplicación, es necesario que pensemos con lógica como le podría decir a este niño curioso que es lo que va hacer y como lo hará. 13. DISEÑO ALGORÍTMICO, ¿COMO ENSEÑAR A UN NIÑO A REALIZAR UN TRABAJO? El primer paso para realizar un programa de aplicación, es su comprensión total, es decir, piensa como un niño resolvería el problema que tendría que resolver el programa de aplicación, así si no tenemos idea del problema será muy difícil solucionarlo. Pensando de esta manera debemos imaginarnos todas las preguntas que nos haría el niño para resolver el problema encomendado, teniendo que documentarnos para poder responderle, porque sin duda alguna, no nos aceptara una respuesta a medias. Pero nuestro niño (la computadora) no es tan inocente como lo hemos pintado, el sabe algunas cosas, y las hace muy bien, entre esas cosas tenemos: 

Conjuntos de Símbolos y Números

El niño propuesto en este manual reconoce muy bien los conjuntos, el diferencia muy bien un numero de una letra, una letra de una palabra, y entre los números para el no es igual un numero entero (sin decimales) que un numero real (con decimales). De esta manera se pueden definir unos Conjuntos de Símbolos y Números que el computador distingue, estos conjuntos son: Letras o Caracteres, estas se caracterizan por corresponderse a un solo símbolo y ocupar solo una unidad de información Números Enteros, son aquellos que carecen de parte decimal, y para una computadora hay varios tipos de estos conjuntos, el tipo de numero entero dependerá básicamente del tamaño del rango en el cual se encuentran estos números Números Reales, estos números si tienen parte decimal, ocupan el mayor rango en un computador, por eso ocupan mayor espacio

27


Arreglo de Caracteres o Palabras, un arreglo de caracteres no es mas que una palabra, como las que lees, son solo caracteres con una secuencia entre ellos, debido a esta propiedad, muchos de los programas de aplicación que escribiremos mas adelante trataran a este conjunto de una forma muy especial Conjunto Lógico, entiéndase a este conjunto como un si o un no. Este conjunto, muy utilizado en la realización de programas, solo permiten dos valores posibles, el de verdadero y el de falso. 

Aritmética y sus operaciones

Por lo general, a los niños no les gustan mucho las matemáticas, por suerte a las computadoras si, y hay algo que ellas hacen muy bien, los cálculos aritméticos. Estos cálculos matemáticos sencillos (sumar, restar, multiplicar, dividir, cociente, residuo). Los hace el computador casi de manera natural, solo debemos respetar algunas reglas a saber : La Suma y la Resta se puede hacer entre conjuntos numéricos, es decir enteros y reales, el resultado pertenecería al conjunto de mayor rango. Si se nos ocurre sumar dos caracteres o letras, el resultado será dos caracteres, o sea, una palabra, si sumamos un numero sin decimales (entero) con uno con decimales (real) el resultado tiene que tener decimales (real), la suma de dos expresiones lógicas en algunos casos no es posible, por lo las operaciones lógicas se trataran en un punto especial en este manual La multiplicación cumple con la misma norma que la suma, solo que entre caracteres no es posible realizarla, porque generaría un error La división acepta cualquier dato numérico de entrada, divisor y dividendo, el resultado es exclusivamente real, así que si intentas que el resultado se guarde en un numero entero, el computador lo rechazara El Cociente, esta es una operación no muy conocida, el cociente te devuelve el cociente de una división, omitiendo el residuo de la división, de esta manera se forza a que sea un entero, se asume que la división no es exacta y el residuo se descarta, eso es lo que hace esta operación. Para esta operación tanto los datos de entrada, divisor y dividendo, como el resultado deben ser números enteros

28


El Residuo, es el complemento de la operación anterior, este devuelve cual es el residuo de una división. Igual que en la operación anterior todos los datos deben números enteros 

Lógica y sus operaciones

La lógica es algo natural en todo ser humano, también en las computadoras, nos es tan común que cuando la necesitamos, no la utilizamos. Existen operaciones que son exclusivas de la lógica, en nuestra vida diaria utilizamos estas operaciones, y al hablar normalmente, podemos detallarlas bien, estas operaciones se pueden representar por una tabla de la verdad, la cual no es mas que una tabla en la que colocamos el resultado de la operación, las operaciones son : Y, esta operación cumple con la siguiente tabla de la verdad : Función Y

Verdadero

Falso

Verdadero

Verdadero

Falso

Falso

Falso

Falso

O, su tabla de la verdad es como sigue :

Función O

Verdadero

Falso

Verdadero

Verdadero

Verdadero

Falso

Verdadero

Falso

Como decidir, Estructuras de Decisión

Como ya habíamos hablado un poco en la introducción, las computadoras son capaces de tomar decisiones, estas decisiones las puede tomar solo si posee la información apropiada, y bajo ciertos formatos. Las computadoras pueden tomar una decisión básicamente de dos maneras: Estructura SI condicional, al igual que en nuestro idioma la estructura condicional si, sirve para que la computadora tome una decisión, por ejemplo: Aprobare la materia si saco diez o más puntos sino la repruebo

29


En esta estructura la computadora para tomar la decisión tendría la información de la nota, la compararía con la condición y a partir de esta toma la decisión de aprobado o reprobado. Es exactamente igual al español, la estructura condicional si, compara un parámetro con una condición establecida, y en función de esta comparación, se toma la decisión correspondiente. El ejemplo mas sencillo es sin duda la ordenación numérica : Ordenar 2 números, A y B, de menor a mayor, para hacer esto, debemos preguntar si el numero A es mayor que el numero B, si es cierto entonces el mayor es A y el menor es B, sino el menor será A y el mayor será B, en otras palabras será:

Estructura de selección múltiple : En esta la decisión podrá tomar mas de dos valores para esto se utiliza una expresión EN CASO DE, con esta expresión podemos tomar una decisión entre varias opciones, dependiendo del valor que cumpla todas las condiciones que hemos impuesto. Un ejemplo para esta estructura la podemos ver en nuestra vida diaria : ¿Qué voy a hacer esta noche?, depende del clima en caso de que este despejado caminaré por el parque, en caso de que este nublado iré al cine, en caso de que este lloviendo me quedare estudiando en casa. De otra forma:

30


Cuantas veces, Estructuras de Repetición

Como vimos anteriormente la computadora es una maquina ya que permite repetir un proceso tantas veces como nosotros queramos, comúnmente nosotros para indicar la repetición de un proceso decimos la forma en que este se detenga, dependiendo de la manera en que este proceso se detiene hay varias estructuras, equivalentes entre si, para expresarlo : Si conocemos de antemano el número de veces que deseamos se repita solo le indicamos Haz la tarea encomendada N veces, de alguna forma se debe contar el numero de veces, por lo que también podemos indicarle Haz la tarea encomendada desde No. inicio hasta No. final. Si no conocemos el número de veces en que se debe repetir pero conocemos una condición para que se deje de repetir, además necesitamos que se haga al menos una vez, para esto podemos utilizar la estructura Repetir la tarea encomendada Hasta cumplir la condición. Un clásico ejemplo en programas de aplicación es el de salir, al terminar el programa de aplicación preguntar si desea terminar la ejecución, permitiendo volver a ejecutarlo desde el comienzo cuantas veces deseemos sin estar llamándolo a ejecución en cada ocasión. Si no conocemos el número de veces en que se debe repetir pero conocemos una condición para que no se haga o se deje de repetir, para esto podemos utilizar la estructura Mientras no se cumpla la condición haga la tarea encomendada. Como ejemplo tenemos 

Simplificación de Problemas, ¡Todo se basa en decisiones y repeticiones!

31


Cuando tenemos un problema siempre intentamos solucionarlo, en ese intento de solución debemos, en la mayoría de los casos, buscar información acerca del problema, tomar decisiones de acuerdo a la información que tenemos, si no lo podemos resolver tendremos que volver a buscar información que nos pueda ayudar, total, que para resolver el problema debemos repetir el proceso de resolución algunas veces, etc. Lo que acabamos de ver es lo que aplicamos en la resolución de todos nuestros problemas, este esquema, a veces invisible, lo repetimos una y otra vez para cada situación, por diferente que sea, como un ejemplo algo pintoresco como solucionar el problema de falta de dinero, primero debo saber si tenemos trabajo, si tenemos trabajo y es bien remunerado podemos solicitar un préstamo a la compañía hasta fin de mes, si tengo ahorros disponibles los podría utilizar, si no tengo ni trabajo ni ahorros lo mejor es buscar un trabajo, para buscar trabajo debo buscar información de ofrecimientos de trabajo, seleccionar uno de ellos, y cumplir ese trabajo hasta que me paguen, obteniendo el dinero que necesitaba. Esto que hemos desarrollado es un algoritmo para resolver el problema de falta de dinero, buscamos información, tomamos decisiones y repetimos algunas cosas hasta haber resuelto nuestro problema. Para elaborar algoritmos que resuelvan un problema específico, podemos recomendar los siguientes pasos : Buscar información acerca del problema Tomar las decisiones correspondientes, basándonos en la información que poseemos Repetir estos tres pasos hasta haber resuelto el problema hay que tener en cuenta que la mejor forma de entender un problema es explicarlo a otras personas que no lo sepan resolver, si esas personas después de la explicación son capaces de resolverlo, entonces nosotros ya hemos entendido completamente el problema. Explicar o exponer un problema es una buena practica, ya que te obliga a tomar en cuenta todos los pormenores, buscar toda la información disponible y buscar una manera sencilla para que entiendan. 

Primeros ejercicios sin Computadora

Vamos a concentrarnos en un problema sencillo, el de sacar el promedio de diez números, la información necesaria es la formula del promedio que

32


todos conocemos, así que buscaremos diferentes formas de resolver el problema. La primera manera es leer cada una de los números y luego introducirlos en la fórmula del promedio, obteniendo su valor :

Tenemos que tomar en cuenta que de esta manera necesitamos tener diez cajas para almacenar los números leídos, además del promedio. Otra manera de resolver este problema, como conocemos la cantidad de números es leer los números en una sola caja y sumarlos, repetir este proceso diez veces, y al final dividirlo entre diez :

33


Como podemos ver para este algoritmo solo necesitamos dos cajas para almacenar en una el numero elido en esa repetición y en la otra el promedio, también observamos que este algoritmo es mas corto que el anterior, si en lugar de diez números fuesen 100 o 1000 sin duda que es mejor este algoritmo.

14. CODIFICACIÓN, ¡TRADUCIR PARA LA MAQUINA! ¿Cómo habla la maquina?, Lenguajes de programación Para que las computadoras puedan procesar la información debemos introducirla en un lenguaje qué ella entienda, debido a la naturaleza electrónica de la computadora, este solo reconoce señales lógicas (altos para uno o cierto, y bajos para cero o falso). Traducir la información a niveles lógicos es un arduo trabajo, gracias al desarrollo científico y tecnológico, se han ideado formas para traducir la información de un programa al lenguaje lógico de la computadora De esta manera se han diseñado lenguajes de códigos, equivalentes entre si, que al ser procesado con la respectiva herramienta, obtenemos el programa en leguaje de maquina. Existe una gran variedad de lenguajes para programación, unos mas avanzados que otros, pero que en general nos ayudan al mismo propósito elaborar nuestros programas de aplicación. Selección de un Lenguaje Dada la gran variedad de lenguajes de programación, surge la pregunta ¿Qué lenguaje de programación voy a utilizar para realizar mi programa de

34


aplicación?, la respuesta, solo diremos que el mas sencillo, pues todos tienen las instrucciones básicas de programación. Hay lenguajes de programación que fueron desarrollados para aplicaciones de cierto tipo, así por ejemplo, para trabajos numéricos es recomendable el Fortran, ya que es fácil encontrar gran cantidad de librerías matemáticas listas para utilizar con Fortran; para trabajos generales son muy utilizados el Pascal y el C, gran parte de los programas que utilizamos han sido hechos en alguno de estos lenguajes; existen algunos lenguajes enfocados hacia la adquisición de datos analógicos por la computadora tal es el caso de LabWindowsÒ y LabViewÒ , este ultimo ofrece un ambiente de programación gráfico que para programar solo hay que dibujar y enlazar. Total dependiendo del programa de aplicación que deseemos desarrollar, habrán algunos lenguajes determinados que nos podrían facilitar más el trabajo. 

Componentes de un Lenguaje

Fundamentalmente todos los lenguajes de programación deben tener dos módulos: el Editor y el Compilador. El Editor es el que nos permite escribir todas las líneas de código de nuestro programa de aplicación. Algunos lenguajes de programación requieren de Editores externos tipo texto, otros ya lo tienen incorporado, y también los hay que editan el código del programa sobre archivos binarios directamente. El Compilador es el encargado revisar el código de nuestro programa y traducirlo para la computadora, obteniéndose así nuestro programa ya ejecutable directamente. Conjuntos para una máquina, Tipos de Datos Como ya vimos un computador puede clasificar distintos tipos de conjuntos, cada conjunto esta relacionado con un tipo de dato. Los tipos de datos más comunes en los lenguajes de programación son: Datos Lógicos Aceptan solo dos valores posibles, cierto o falso, en algunos lenguajes este tipo de dato no esta disponible. Datos Enteros

35


Son datos numéricos sin parte decimal Datos Reales Son datos numéricos con parte decimal. Al igual que en el tipo entero, el tipo de dato real se subdivide en varios grupos dependiendo del rango que abarcan, y del lenguaje de programación utilizado Datos de Caracteres Son datos de símbolos Ascii, un carácter corresponde a un solo símbolo Ascii, como sabemos, la tabla Ascii es un conjunto de símbolos alfanuméricos, los mismos que utilizamos para escribir y comunicarnos. Datos de Conjuntos de Caracteres A través de este tipo de dato es que podemos escribir las palabras, las palabras no son mas que un arreglo ordenado de caracteres, los distintos lenguajes de programación dedican algunas funciones especiales a este tipo de datos

Aritmética y Lógica

Las operaciones aritméticas en la mayoría de los lenguajes de programación son las operaciones básicas de suma, resta, multiplicación y división, además tienen dos operaciones que nos pueden parecer nuevas: MOD y DIV, la primera función da el residuo de la división exacta de dos números, la segunda devuelve el dividendo de la división exacta entre dos números. Al escribir una operación matemática, las operaciones se interpretaran de una por una, según orden de prioridad dado por el compilador del lenguaje, por lo que es necesario agrupar con paréntesis aquellas operaciones que deseemos se realicen primero, los paréntesis se interpretan a partir del más interno. Las operaciones lógicas también son interpretadas linealmente, por lo que hay que agrupar con paréntesis para obtener la lógica deseada, las funciones lógicas disponibles son: Y, este requiere que se cumplan las dos condiciones en cierto para dar un valor cierto.

36


O inclusivo, esta función permite dar un valor cierto si cualquiera de las dos condiciones es cierta. O exclusivo, esta función da el valor cierto si solo una de las condiciones es cierta.

¿Y Como sabe la Maquina de la variable?, Declaración de Variables

Cuando estamos realizando un programa de aplicación, requerimos de cajas donde se pueda introducir y recuperar información, estas cajas se denominan variables. Al escribir un programa de aplicación, algunos lenguajes de programación requieren que sean declaradas las variables que se vayan a utilizar. Esta declaración de variables debe incluir el tipo de dato que va a ser almacenado y el nombre de la variable, el nombre que se le da a la variable corresponderá al nombre con el cuál la llamaremos en el resto del programa, dependiendo del lenguaje escogido existen algunas reglas y restricciones para nombrar a las variables.

Cadenas de caracteres, Operaciones muy especiales

Las cadenas de caracteres como ya mencionamos, son tipos de datos muy especiales, ya que se trata de caracteres arreglados con un orden especiíico para formar las palabras. Por este motivo es que muchos lenguajes de programación dedican una serie de operaciones muy especiales para manejar estas cadenas de caracteres, en los manuales de usuario de cada lenguaje explican si disponen de funciones especiales para el manejo de este tipo de variables. 

Carátula del Programa, Formatos de Entrada y Salida

Al estructurar un programa hay un momento en el que es necesario mostrar o pedir información al usuario, es necesario definir dos situaciones: La computadora espera datos por parte del usuario, se dice que la computadora espera leer datos del usuario La computadora muestra datos computadora escribe datos al usuario.

37

al

usuario,

se

dice

que

la


Estas dos situaciones tienden a confundir a los programadores novatos, un ejemplo de esta confusión es cuando se requiere que la computadora lea datos por parte del usuario colocan escribir datos, es cierto que el usuario tiene que escribir datos, pero la computadora debe leer los datos que le suministra usuario. El programa de aplicación es un conjunto de instrucciones para la computadora, no para el usuario. Es buena costumbre que en el momento de solicitar datos al usuario se le muestre un mensaje de que es lo que debe introducir, esto hace que nuestro programa tenga una carátula amena al usuario y despierte interes en continuar el uso de nuestro programa.

Arreglos Uní y pluri dimensionales

En algunas situaciones debe cumplirse una cierta organización dentro de un conjunto de datos, tal es el caso de una institución de estudios, en esta los estudiantes están organizados en diferentes salones, y a cada uno le corresponde un número de lista dentro de la sección, tal que para referirnos rápidamente a un estudiante especifico, es necesario especificar el numero del salón y el numero del estudiante, esto lo podemos observar mas claramente en la figura:

Para ubicar cualquier estudiante del plantel de estudio, se debe indicar el número de sección y el número de estudiante. Esta forma de organizar los datos puede ser almacenado en arreglos de tipos de datos, para cada lenguaje hay una forma de definir este tipo de arreglos de datos, comúnmente llamados vectores, ya que puede tener dimensiones para ubicar un dato especifico. 

Dividir un programa, Funciones y Procedimientos

38


En algunas ocasiones existe una serie de instrucciones que se repiten en varias ocasiones en nuestro programa. Este conjunto de instrucciones pueden ser escritas como pequeños programas dentro del programa principal, se pueden definir como funciones o procedimientos del programa principal, ya que este ultimo los utiliza con solo una llamada. La capacidad de organizar programas con funciones y procedimientos totalmente independientes es propia de los lenguajes de programación estructurados tal es el ejemplo del lenguaje C y Pascal que trataremos más adelante. Existe una diferencia entre Función y Procedimiento, la función realiza un cálculo que devuelve un valor, pudiendo colocar este valor directamente sobre una variable o un formato de salida, mientras que el procedimiento no devuelve un único valor, este puede realizar cálculos sobre diferentes variables pudiendo almacenar su información dentro del procedimiento en mas de una variable o formato de salida. Al llamar una función debe hacerse asignando su valor a una variable o a un formato de salida, al llamar a un procedimiento no es necesario asignar ninguna variable. Las funciones y procedimientos pueden tener acceso a los datos mediante parámetros de entrada, para una función estos parámetros se utilizan por valor, es decir, una vez introducidos a la función solo interesa su valor, no pueden ser modificados dentro de la función, los procedimientos pueden utilizar parámetros por valor y por referencia, los parámetros por valor se tratan igual que en las funciones, los parámetros por referencia si pueden ser modificados dentro del procedimiento, y sus datos se modifican en el programa principal. Para cada lenguaje de programación hay una forma para definir estas funciones y procedimientos, así como la manera de pasar los parámetros. En este manual estudiaremos en detalle los lenguajes C y Pascal. 

Estructuras y/o Registros

Ya vimos la ventaja que tienen los arreglos de datos para ubicar direcciones con múltiples dimensiones, solo tienen una limitación los datos del arreglo deben ser todos del mismo tipo. Existe una manera de organizar datos de diferentes tipos, esto se logra mediante las Estructuras y/o Registros. Los registros son datos organizados en campos, estos campos pueden ser de diferentes tipos de datos. Los lenguajes de programación modernos permiten manejar este tipo de estructuras, trataremos la forma como C y Pascal tratan a este tipo de estructuras.

39


Mas acerca de Entrada y Salida, Manejo de Archivos

Existen otros formatos de entrada y salida de datos además del teclado y monitor, estos son los archivos de datos. Ya estamos familiarizados con el concepto de archivos, como sabemos pueden ser de tipo texto (ASCII) o binarios, en la realización de programas podemos utilizar archivos para manejar la información que requiere el programa, evitando así las preguntas al usuario, con esto logramos que nuestro programa sea más rápido en tiempo de ejecución, tal vez esto no se aprecie en programas sencillos, pero al aumentar la envergadura de nuestros programas necesitamos mejorar la eficiencia de los mismos. Los lenguajes de programación tienen instrucciones que permiten crear archivos de texto o binarios, abrir archivos ya existentes para escribir sobre ellos en una posición determinada, o al final o simplemente borrando todo lo que había en el archivo, también algunos lenguajes permiten instrucciones semejantes a las del Sistema operativo para manejar archivos, tal como copiar, borrar, renombrar, cambiar atributos, etc. 15. EJERCICIOS PROPUESTOS  Imprima el nombre, la edad, sexo y el estado civil de una persona.

imprima tanto el nombre como la edad. imprima, sólo si la persona es mayor de edad, el nombre de la persona.

sólo si la persona es mayor de edad, el nombre de la persona, de lo contrario un mensaje que diga : “No puede votar”.

imprima, sólo si la persona es de sexo masculino y mayor de edad el nombre de la persona. Nota: Suponga que el registro que se lee tiene grabado, en el campo denominado “sexo” el número 1 en vez de la palabra “masculino” o el número 2 en vez de la palabra femenino.

cualquier persona e imprima, sólo si la persona es hombre o mujer menor de edad

40


o es hombre casado de cualquier edad, el nombre de la persona y un mensaje que diga “Usted no se manda”. En los demás casos imprima el nombre de la persona solamente. 16. PROBLEMAS RESUELTOS DE ALGORITMOS 1.- Mostrar su nombre, sexo edad y estado civil, que son ingresados por teclado ALGORITMO dato personal INICIO CARACTER nombre[30], sexo, Ec Entero edad 1.-LEER nombre, sexo, edad, Ec

// Ec = estado civil

2.-MOSTRAR nombre, sexo, edad , Ec FIN

2.- Ingresar por teclado el nombre y la edad de cualquier persona e imprima tanto el nombre como la edad ALGORITMO edad INICIO CARACTER nombre[30]. Entero edad

1.-LEER nombre, edad 2.-MOSTRAR nombre, edad FIN

3.- Ingresar por teclado el nombre y la edad de cualquier persona e imprima, solo si la persona es mayor de edad, el nombre de la persona. ALGORITMO adulto

41


INICIO CARACTER nombre Entero edad 1.- LEER nombre, edad 2.- SI (edad >= 18) ENTONCES a)MOSTRAR nombre FINSI FIN 4.- .- Ingresar por teclado el nombre y la edad de cualquier persona e imprima solo si la persona es mayor de edad, el nombre de la persona, de lo contrario, imprima un mensaje que diga : “no puede votar”. ALGORITMO votar INICIO Cadena nombre Entero edad 1.-LEER nombre , edad 2.-SI ( edad >= 18) ENTONCES a)MOSTRAR nombre SINO a)MOSTRAR “no puede votar” FINSI FIN

5.- Ingresar por teclado el nombre, la edad y el sexo de cualquier persona e imprima, solo si la persona es de sexo masculino y mayor de edad, el nombre de

42


la persona. NOTA: suponga que en el campo denominado sexo el numero 1 es masculino o el numero 2 es femenino ALGORITMO sex INICIO Cadena nombre Entero sexo , edad 1.-LEER nombre, sexo, edad 2.-SI (sexo = 1) y (edad>= 18) ENTONCES a)MOSTRAR nombre. FINSI FIN

6.- Ingresar por teclado el nombre, la edad, el sexo (1 o 2) y el estado civil de cualquier persona e imprima solo si la persona es un hombre soltero mayor de edad, el nombre de la persona. NOTA: en el campo de estado civil se graba el numero 1 en vez de soltero, el numero 2 en vez de casado o el numero 3 en vez de otro.

ALGORITMO hombsolt INICIO Cadena nombre Entero edad , sexo, ec

// ec =estado civil.

1.-LEER nombre, edad, sexo, ec. 2.-SI (sexo = 1) y (ec = 1) y (edad >= 18) ENTONCES a)MOSTRAR nombre

43


FINSI FIN

7.-Lea de un registro el nombre, la edad, el sexo y el estado civil de cualquier persona e imprima, solo si la persona es hombre o mujer menor de edad o es hombre casado de cualquier edad, el nombre de la persona y un mensaje que diga “usted no se manda”. En los demás casos imprima el nombre de la persona solamente. ALGORITMO mensaje INICIO CARÁCTER nombre[30] , s, ec Entero, e

// s = sexo,

e = edad

// ec = estado civil

1.-LEER nombre, e, s, ec 2.-SI (s = “M”) o ((s = “F”) y (e < 18)) o ((s = “M”) y ( ec = “C”)) ENTONCES a)MOSTRAR nombre, “usted no se manda” SINO a)MOSTRAR nombre. FINSI FIN

8.-Ingrese un numero e imprima el numero y el valor absoluto del mismo.

ALGORITMO valorabsoluto INICIO

44


Real , x, VA

// {x es el numero}

1.-LEER x 2.-VA ç abs (x) 3.- MOSTRAR VA

// VA es el valor absoluto

FIN 9.-Ingrese un número y calcule e imprima su raíz cuadrada. Si el numero es negativo imprima el número y un mensaje que diga “tiene raíz imaginaria” ALGORITMO RC INICIO Real ,num, RC 1.-LEER num 2.- SI (num >= 0) ENTONCES a.

RC ß sqrt (num)

b.

MOSTRAR RC

SINO a. MOSTRAR num “tiene raíz imaginaria” FINSI FIN

10.-Ingrese dos números desde el teclado e imprima solo los positivos ALGORITMO pos INICIO Real A, B 1.-LEER A, B

45


2.-SI (A>0) ENTONCES MOSTRAR A FINSI 3.-SI (B>0) ENTONCES MOSTRAR B FINSI FIN 11.-Ingrese dos números desde el teclado e imprima ambos números sólo si son positivos ALGORITMO numpos INICIO Real , A, B 1.-LEER A, B 2.-SI (A>0) y (B>0) ENTONCES a)MOSTRAR A, B FINSI FIN 12.-Ingrese dos números desde el teclado e imprima ambos números si por lo menos uno de ellos es positivo ALGORITMO num INICIO Real A ,B 1.-LEER A, B 2.-SI (A>0) o (B>0) ENTONCES a) MOSTRAR A, B

46


FINSI FIN 13.-Ingrese dos números desde el teclado e imprima ambos números solo si son de diferente signo y distintos de cero ALGORITMO signosop INICIO Real A, B 1.-LEER A, B 2.-SI ( A¹ B ) y ( B¹0 ) ENTONCES a)

SI (A<0 ) y (B>0) o (A>0) y (B<0) ENTONCES 1) MOSTRAR A, B FINSI

FINSI FIN

14.-Ingrese dos números desde el teclado. Calcule la suma e imprima los números leídos y la suma. ALGORITMOsum INICIO Real, A, B, S

// S, es la suma

1.- LEER A, B 2.- Sç A + B 3.- MOSTRAR A, B, S FIN

47


15.- Lea dos números de un mismo registro. Calcule la suma de los números. Imprima los números leídos y sólo si suma es negativa. Imprímala también ALGORITMOsuma INICIO Real A, B, S

// S es la suma

1.- LEER A, B 2.- S ç A + B 3.- SI ( S < 0 ) ENTONCES a) MOSTRAR A, B, S SINO a)

MOSTRAR A, B

FINSI FIN

16.- Lea dos números de un mismo registro y calcule el cociente de dividir el primero por el segundo. Imprima el cociente. Si el segundo número es cero no ejecute el cálculo e imprima un mensaje que diga : “la división no es posible”. ALGORITMO cociente INICIO Real A, B , COC

// COC es el cociente

1.-LEER A, B 2.- SI ( B = 0) ENTONCES a.

MOSTRAR “la división no es posible”

SINO a. COC ç A / B

48


b. MOSTRAR COC “es el cociente” FINSI FIN

17.- Leer de un mismo registro el nombre de un empleado, su salario básico por hora y el número de horas trabajadas en el mes. Calcular su salario mensual e imprimir tanto el nombre como su salario mensual ALGORITMO salario INICIO Cadena nombre Real SxH, SM mensual Entero HT

// SxH es salario por hora, SM, salario

// HT es el número de horas trabajadas

1.- LEER nombre SxH, HT 2.- SM ç SxH * HT 3.- MOSTRAR nombre, SM FIN

18.- Leer un número y calcular el 5% del número leído. Obtener tanto el número como el porcentaje calculado ALGORITMO porciento INICIO Real Num , PC

// PC es el porcentaje

1.- LEER , Num 2.- PC ç (5/100) * Num 3.- MOSTRAR PC, Num

49


FIN

19.- Leer de un registro el nombre de un empleado, su salario básico por hora, el número de horas trabajadas en el período y el porcentaje de retención en la fuente. Calcular el salario bruto, el valor de la retención y su salario neto. ALGORITMO retencion INICIO Real SxH, P, R, SB, SN, HT retención,

// SxH salario por hora, P porcentaje de

R Retención, SB Salario bruto, SN salario neto, HT, horas trabajadas. Cadena , nombre 1.- LEER nombre Sxh, HT, P 2.- SBçSxH * HT 3.- Rç(P*SB)/100 4.- SNçSB-R 5.- MOSTRAR SB, R, SN, nombre FIN

20.-Para un salario bruto hasta de $1.500, no hay retención. Para un salario bruto de $1500 a $ 3.000 el porcentaje de retención es de 5%. Para un salario bruto mayor de $3000 el porcentaje de retención es 8%. Obtener el nombre del empleado, el salario bruto, el valor de la retención y el salario neto. Se debe leer el nombre y el salario. ALGORITMO salarioneto INICIO Cadena, nombre Real, SB, SN, Ret

// SB salario bruto, SN salario neto, Ret retención

50


1.- LEER nombre , SB 2.- SI (SB <= 1500) ENTONCES a)

Ret ç 0

SINO 1) SI ( SB > 3000) ENTONCES a)

Retç(8/100) * SB

SINO a) Ret ç(5/100)*SB FINSI FINSI 3.- SN çSB - Ret 4.-MOSTRAR nombre, SB, Ret, SN FIN

21.- Leer de un registro el nombre de un empleado , el salario básico por hora y el número de horas trabajadas durante una semana. Calcular el salario neto, teniendo en cuenta que si el número de horas trabajadas durante la semana es mayor de 48, esas horas demás se consideran horas extras y tienen un 35 % de recargo. Imprima el nombre del empleado y el salario neto. ALGORITMO sueldoneto INICIO Real, Sb, Ht, SN, Sextr, Extr // Sb salario por hora, Ht horas trabajadas, Extr hora extra // SN salario neto, Sextr, salario por hora extra CARACTER Nombre[30] constante Tr = 0.35

// Tr tasa de recargo

51


1.- LEER nombre, Sb, Ht, 2.-SI ( Ht>48) ENTONCES a)ExtrçHt-48 b)Sextrç Sb+Sb*Tr c)SNç(48*Sb) + (Extr*Sextr) SINO a)SNçSb*Ht FINSI 3.- MOSTRAR nombre, SN FIN

22.-Obtenga los 100 primeros números naturales. ALGORITMO ciennum INICIO Entero, i

1.- PARA iç 1 HASTA iç 100 HACER a)

MOSTRAR i

FINPARA

23.- Obtener los números pares comprendidos entre 1 y 1000 ALGORITMO numpar INICIO Entero i

52


1.- PARA iç 2 HASTA i ç 1000 INC = 2 HACER a) MOSTRAR i FINPARA FIN

24.- Leer de un registro un número entero positivo y obtener los múltiplos de 3 comprendidos entre 1 y el número leído. ALGORITMO mult3 INICIO Entero i, N 1.- LEER N 2.- PARA i ç1 HASTA i ç N

HACER

a) SI ( i MOD 3 = 0 ) ENTONCES 1.

MOSTRAR i

FINSI FINPARA FIN

25.- Lea los veinte primeros registros de un archivo, cada uno de los cuales contienen un nombre. Imprimir los nombres. ALGORITMO nombre INICIO Entero, i CARACTER nombre[30]

53


1.- PARA i ç1 HASTA i ç20 HACER a)

LEER nombre

b)

MOSTRAR nombre

FINPARA FIN

26.- Leer varios registros cada uno de ellos, conteniendo un nombre. El número de estos registros se encuentra grabado en un registro que precede a los anteriores. Imprimir cada uno de los hombres leídos. ALGORITMO nombres INICIO CARACTER nombre Entero i, N 1.- LEER NReg 2.- PARA iç1 HASTA içNReg HACER a) LEER nombre b) MOSTRAR nombre FINPARA FIN

27.- Leer un conjunto de registros cada uno de ellos conteniendo el código y el nombre de cada uno de los estudiantes de la universidad. El último registro del conjunto (registro centinela) contiene el código 9999999 y es utilizado sólo para chequear el final de los registros. Imprima cada uno de los códigos leídos. Lógicamente la información del registro centinela no se imprime porque no pertenece a ningún estudiante. ALGORITMO estudiante

54


INICIO Entero cod

// cod es el código.

CARACTER nombre[30] 1.- LEER cod, nombre 2.- MIENTRAS (cod ¹ 9999999) HACER a)

MOSTRAR cod , nombre

b)

LEER cod, nombre

FINMIENTRAS FIN

28.-Imprimir cuatro columnas. En la primera columna, los enteros del 1 al 50 . En las otras columnas, la segunda, la tercera y la cuarta potencia de los enteros de la primera columna ALGORITMOpotencia INICIO Entero , i , pot2, pot3, pot4 1.- PARA i ç1 HASTA i ç50 HACER a)pot2 çsqr ( i ) b)pot3 çpot2 * i c)pot4 çpot2 * pot2 d) MOSTRAR i , pot2, pot3, pot4 FINPARA FIN

29.- Calcule la suma de los100 primeros números naturales

55


ALGORITMO suma INICIO Entero suma, i 1.- suma ç 0 2.- PARA iç 1 HASTA i ç 100 HACER a) sumaç suma + i FINPARA 3.-MOSTRAR suma FIN

30.- Obtener la suma de los números pares comprendidos entre 1 y 100 ALGORITMO sum INICIO Entero i , suma 1.- suma ç 0 2.-PARA i ç 2 HASTA iç 100 INC = 2 HACER a) suma ç suma + i FINPARA 3.-MOSTRAR suma FIN

31.- Encuentre la calificación promedio para un gran número, aunque desconocido, de calificaciones de exámenes. Estas vienen grabadas en registros. La calificación más alta posible es 10.0 ALGORITMO calificación

56


INICIO Real calificación, Promedio, Totcal Entero, calificaciones

n

// Totcal suma de las calificaciones, //

n

es

el

número

de

1.- Totcal ç 0 2.- n ç 0 3.- LEER calificación 4.- MIENTRAS (calificacion >=0 y calificación <= 10 ) HACER a)

Totcal ç Totcal + calificación

b)

nç n + 1

c)

LEER calificación

FINMIENTRAS 5.-Promedio çTotcal / n 6.-MOSTRAR Promedio FIN 32.-Leer una serie de números. Encontrar el valor absoluto (magnitud) de cada número. Imprimir tanto los números como sus valores absolutos. Use centinela 999 ALGORITMO valorabsoluto INICIO Real num, VA, // VA valor absoluto, num número

1.-LEER num 2.-MIENTRAS ( num ¹ 999) HACER

{999 es el valor centinela}

a)

VA ç abs ( num)

b)

MOSTRAR VA “es el valor absoluto de” num

57


c) LEER num FINMIENTRAS FIN

33.- Leer una serie de números. Obtener el cuadrado y el cubo de cada número e imprimir tanto los números como sus cuadrados y sus cubos. ALGORITMO potencia INICIO Real num, cuadrado, cubo 1.- LEER num 2.- MIENTRAS ( num ¹ -999) HACER a)

cuadradoçsqr ( num )

b)

cuboç cuadrado*num

{-999 valor centinela}

c) MOSTRAR cuadrado, cubo,num d) LEER num FINMIENTRAS FIN 34.- Leer una serie de pares de números y obtener de cada par el número mayor. Imprima un mensaje especial si los números son de igual valor. Los numeros son precedidos por la cantidad de registros ALGORITMO mayornum INICIO Real A, B 1.- LEER nreg 2.- PARA i ç1 HASTA i ç nreg a)

HACER

LEER A, B

58


b)

SI (A = B) ENTONCES 1) MOSTRAR A, B, “son iguales” SINO 1) SI ( A>B) ENTONCES a. MOSTRAR A “es el mayor” SINO a. MOSTRAR B “es el mayor” FINSI FINSI

FINPARA FIN 35.- Leer una serie de grupos de tres números y obtener el número mayor y el número menor de cada terna. Escriba un mensaje si por lo menos dos de cada tres números son iguales. ALGORITMO ternasmayormenor INICIO Real A, B, C Entero, cant 1.-MOSTRAR "ingrese la cantidad de ternas" 2.-LEER cant 3.-PARA iç1 HASTA içcant HACER a) LEER A, B, C b)SI (A=B) o (B=C) o (A=C) ENTONCES 1) MOSTRAR "por lo menos 2 de los 3 números son =" SINO 1) MENçA 2) SI (B<MEN) ENTONCES

59


a) MENçB FINSI 3) SI (C<MEN) ENTONCES a) MENçC FINSI 4) MOSTRAR MEN "es el menor" 5) MAYçA 6) SI (B > MAY) ENTONCES a)MAYçB FINSI 7) SI (C > MAY) ENTONCES a)MAYçC FINSI 8) MOSTRAR MAY "es el mayor" FINSI FINPARA FIN

36.-Identifique y obtenga el número medio de un conjunto de tres números únicos. EL número medio es aquel que no es el menor ni el mayor. ALGORITMO numeromedio INICIO Real A, B, C. 1.-MOSTRAR "ingrese tres números distintos" 2.-LEER A, B, C

60


3.-SI ( A>B) ENTONCES a) SI (A>C) ENTONCES 1)SI (B>C) ENTONCES a)MEDçB SINO a) MEDçC FINSI SINO 1)MEDçA FINSI SINO a) SI (B>C)ENTONCES 1)SI (A>C)ENTONCES a)MEDçA SINO a)MEDçC FINSI SINO 1)MEDçB FINSI FINSI 4.-MOSTRAR MED "es el número medio" FIN 37.- El Dane está interesado en saber el número de personas mayores de 18 años, tanto hombres como mujeres en la ciudad de Medellín . Calcule e imprima el

61


resultado de esta investigación. Se deben leer registros que contiene cada uno el sexo y el número de años. ALGORITMO dane INICIO Entero edad, h, m, sexo 1.-hç 0 2.-mç0 3.-LEER edad , sexo 4.-MIENTRAS (edad ¹ 999) a) SI (edad >= 18) y (sexo = 1) ENTONCES 1)hçh + 1 SINO 1) SI (edad > = 18) y (sexo = 2) ENTONCES a)mçm + 1 FINSI FINSI b) LEER edad, sexo FINMIENTRAS 5.- MOSTRAR h, m FIN

38.-Una tienda de libros y géneros diversos al menudeo ofrecen un descuento de cortesía del 10% para profesores. Muestre como la computadora puede calcular e imprimir el 10% de 1.00, 1.10, 1.20, etc hasta $25.00. ALGORITMO menudeo INICIO

62


Real , desc //desc es el descuento Entero, i 1.- iç1.00 2.- MIENTRAS (i < = 25.00) HACER a)

desc ç 0.10 * i

b)

MOSTRAR desc

c) i ç i + 0.10 FINMIENTRAS FIN

39.-Un vendedor desea calcular su comisión total sobre la venta de varios artículos. Al vendedor le corresponde el 5% de su comisión sobre artículos cuyo precio es menor de $100 y el 7.5 % de comisión sobre aquellos artículos cuyo precio es de $100 o más. Suponga que el vendedor hizo N ventas ALGORITMO comisión INICIO Constantes TC1 = 0,05 TC2 = 0.075 Entero N , i. Real comision ,tcom, venta 1.-men ç 0 2.-may ç 0 3.-MOSTRAR " ingrese el número de ventas que hizo " 4.- LEER N 5.- i ç 1

63


6.-MIENTRAS (i <= N ) HACER a) LEER precio, nart b) SI (precio< 100) ENTONCES 1)ventaç (nart*precio) 2)comision ß venta * tc1 SINO 1)ventaç (nart*precio) 2) comision ß venta * tc2 FINSI c) tcom ß tcom + comision d) i ç i + 1 FINMIENTRAS 7.- MOSTRAR tcom FIN 40.-Coldeportes de Antioquia está interesado en promover el básquetbol y para ello desea conocer personas que tengan las siguientes características, edad máxima: 18 años, estatura mínima: 1.80 metros, peso máximo: 80 kilos. Lea identificación. Edad , estatura y peso. Use centinela identificacion 99999 ALGORITMO basquet INICIO Entero identificación, edad Real, estatura, peso 1.- LEER identificación, edad, estatura, peso 2.- MIENTRAS (identificación ¹ 99999) HACER a)

SI (edad <= 18) y (estatura >=1.80 ) y (peso<=80) ENTONCES

64


1)

MOSTRAR identificación, edad, estatura , peso

FINSI b) LEER, identificación, edad, estatura, peso FINMIENTRAS FIN 41.-Lea de un mismo registro A, B, C (coeficientes de la ecuación cuadrática. Calcule e imprima x1 y x2 (raíces de la ecuación ) Recuerde que x1 y x2 se pueden calcular sólo sí a) B2 - 4. AC >= O b) A ¹ 0. ALGORITMO ecuación INICIO Real, x1, x2 , A, B, C 1.-LEER A, B, C 2.-SI ( A ¹ 0 ) ENTONCES a) Disc ß sqr (B) – 4*A*C b) SI (Disc >= 0) ENTONCES 1) X1ç( - B + sqrt(Disc) ) / (2*A) 2)X2ç( - B - sqrt(Disc) ) / (2*A) 3) MOSTRAR x1, x2 SINO MOSTRAR “Tiene raices imaginarias” FINSI FINSI FIN

65


42.-Se tienen registro con los datos de los estudiantes de una universidad, así: código del estudiante, nombre del estudiante. Valor crédito del estudiante, número de créditos tomados, valor del recargo en la matrícula. Se requiere leer los registros e imprimir un listado con la siguiente información por estudiante: código, nombre del estudiante, valor crédito, número de créditos, valor del recargo, valor total pagado por estudiante. También se debe calcular e imprimir al final del listado el total pagado por todos los estudiantes y el promedio por estudiante. Use codigo de centinela = 9999 ALGORITMO pago INICIO Entero, código, n, ct

// n, número de estudiantes, ct créditos tomados

Real, vc, rec, totpag, p // vc valor crédito, ,rec valor de recargo, totpag total pagado CARÁCTER nombre[30] 1.- nç 0 2.- totpagç 0 3.- LEER código, nombre, vc, ct, rec 4.- MIENTRAS ( cod ¹ 9999) HACER a) PEç ( vc* ct) + rec b) nç n + 1 c) totpag ç totpag + PE d) MOSTRAR cod, nombre, vc, ct, rec, PE e) LEER cod, nombre, vc, ct, rec FINMIENTRAS 5.-Pç totpag / n 6.-MOSTRAR p,“es el promedio” FIN 43.-Se tiene un conjunto de registros de los empleados de una compañía, cada registro contiene los siguientes datos: número del empleado, nombre del empleado, salario básico por hora, horas trabajadas en el mes, deducciones, Se

66


requiere leer los registros e imprimir un listado con la siguiente información por empleado : número del empleado , nombre del empleado, salario básico por hora, horas trabajadas, deducciones, salario mensual. También se debe calcular e imprimir al final del listado, el total de salarios pagados a todos los empleados y el promedio salarial por empleado. ALGORITMO compañía INICIO Entero, num, i // num, número del empleado, nov, nombre, sh salario por hora, // ht, horas trabajadas,d, deducciones i, número de empleados, tot, // Total pagado, SM, salario mensual, P, promedio salarial//, Real, sh, ht, d, tot sm , p CARÁCTER nomb [30] 1.- i ç 0 2.- totç 0 3.- LEER num, nomb, sh, ht, d 4.- MIENTRAS ( num ¹ 9999) HACER a) iç i + 1 b) sm ç (sh * ht) – d c) tot ç tot + sm d) MOSTRAR num, nomb, sh, ht, d, sm e) LEER num, nomb, sh, ht, d FINMIENTRAS 5.- MOSTRAR tot 6.- içtot/ i 7.- MOSTRAR P “es el promedio salarial por empleado” FIN 44.-Calcular e imprimir los salarios que se adeudan a trabajadores, basados en tasa a 1.5 veces la tasa regular, cuando Las horas trabajadas excedan de 40 por semana ALGORITMO salarios INICIO Real, ht, d, ext ,td // ht, horas trabajadas, d deuda, sh salario básico por hora, extr, // horas extras, TD total de la deuda 1.-LEER ht, sh 2.- MIENTRAS ( ht ¹ 0 ) HACER a) SI ( ht > 40) ENTONCES 1) Extr çht – 40 2) D ç 1.5 * extr * sh 3) MOSTRAR D 4) TD ß TD + D FINSI b) LEER ht. Sh FINMIENTRAS

67


3. MOSTRAR TD FIN 45.- Dado que un peso de mañana tiene menor valor que un peso de hoy (fenómeno económico que llamamos inflación) las empresas cuando calculan los futuros ingresos transformados a pesos de hoy superan el monto de la inversión hecha. La fórmula general para el cálculo del valor actual es : VA = C / (1 + i) N donde: C es la cantidad del ingreso i es la tasa de inflación N son los años en consideración Una empresa tiene información sobre la tasa de inflación, la inversión y los ingresos calculados para diez años seguidos. Con ésta desea saber si al cabo de dicho tiempo ha recuperado la inversión, hablando en pesos del día en que se hace la misma ALGORITMO inflación INICIO Entero, N Real, VA,. C, inv, i, den 1.-LEER i , inv , C, N 2.- dençexp( N * ln (1+i)) 3.- VA ç C / den 4.- SI ( VA > inv ) ENTONCES a)

MOSTRAR “recupera inversión”

SINO a)

MOSTRAR “ no recupera la inversión”

FINSI 5.- MOSTRAR VA

68


17. EJERCICIOS PROPUESTOS PARA DIAGRAMAS DE FLUJO 1. Hacer el diagrama de flujo para sumar dos números leídos por teclado y escribir el resultado. 2.Modificar el anterior pero para sumar 100 números leídos por teclado. 3.Modificar el anterior para que permita sumar N números. El valor de N se debe leer pre-viamente por teclado. 4.Hacer un diagrama de flujo que permita escribir los 100 primeros pares. 5. Hacer el diagrama de flujo para sumar los N primeros impares. Realizar después uno quehaga lo mismo con los pares y, otro, con los múltiplos de 3. 6.La sucesión de Fibonacci se define de la siguiente forma: a 1= 1 , a 2=1 y a n=a n-1+a n-2 paran>2, es decir los dos primeros son 1 y el resto cada uno es la suma de los dos anteriores, los primeros son: 1, 1, 2, 3, 5, 8, 13, 21, ... Hacer un diagrama de flujo para calcular el N-ésimo término de la sucesión. 7.Hacer un diagrama de flujo que simule un reloj. 8.Realizar el diagrama de flujo para resolver una ecuación de segundo grado, teniendo encuenta las soluciones complejas. 9.Hacer un organigrama que calcule el total de una factura, partiendo de una lista de parejasimporte, iva. La lista finaliza cuando el importe sea 0. El iva puede ser el 4%, el 7% o el16%, en cualquier otro caso se rechazan importe e iva y se deben introducir de nuevo.Finalmente hay que realizar un descuento, en función de la suma de los importes, dichodescuento es del 0% si es menor que 1000, es del 5% si es mayor o igual que 1000 y me-nor que 10000 y es de un 10% si es mayor o igual que 10000. El descuento se debe aplicar a la suma de los importes y a la suma de los ivas.Para acabar se debe imprimir el importe y el iva resultantes (total menos descuento) y lasuma de ambos.

69


10. Hacer un organigrama que lea N números, calcule y escriba la suma de los pares y el producto de los impares. 11. Hacer un diagrama de flujo para calcular el máximo común divisor de dos números ente-ros positivos N y M siguiendo el algoritmo de Euclídes, que es el siguiente:1. Se divide N por M, sea R el resto.2. Si R=0, el máximo común divisor es M y se acaba.3.

Se asigna a N el valor de M y a M el valor de R y volver al paso 1. ¿Por qué el método anterior acaba alguna vez? ¿por qué calcula el máximo común divisor de N y M? 12. Calcular los números primos hasta el N, según la Criba de Eratóstenes, que consiste en poner todos los números del 2 al N en una tabla e ir tachando los múltiplos de cada núme-ro, detalladamente es como sigue:1.

Escribir los números del 2 al N.2.

Hacer I igual a 23.

Mirar el número I de la tabla.4.

Si esta tachado ir al paso 6.5.

Si no lo esta tachar los múltiplos de I en la tabla.6.

70


Incrementar I.7.

Si I es menor o igual que N ir al paso 3.8.

En otro caso finalizar. El punto 5 también requiere un algoritmo, que es el siguiente:5.1 Hacer J igual al doble de I (primer múltiplo de I).5.2 Si J es mayor que N finalizar (el apartado 5).5.3 En otro caso tachar el elemento J.5.4 Incrementar J en I (para pasar al siguiente múltiplo de I).5.5 Volver a 5.2.Para realizarlo se simulará la tabla con números tachados mediante un array P, y el elemento I estará sin tachar cuando P(I) sea 1 y tachado cuando sea 0.

13.Hacer el diagrama de flujo para calcular el factorial de N (N!=1·2·3·...·N). 14.Hacer un diagrama de flujo para sumar los N primeros términos de una progresión geo-métrica de primer término A y razón R (dados por teclado). Se debe realizar la suma sin emplear la fórmula que existe para ello. 15.Hacer un diagrama de flujo para convertir un número decimal N dado por teclado a bina-rio. 16.Hacer un diagrama de flujo para calcular A y B, siendo B un entero, nótese que B puede ser 0o negativo. No se pueden emplear logaritmos. 17.Hacer un diagrama de flujo para calcular el máximo de N números leídos por teclado, se debe realizar de dos formas, una almacenando previamente los números dados por teclado en un array y la otra calculando el máximo directamente según se leen los números del teclado. 18.Hacer un diagrama de flujo para ordenar N números leídos por teclado y almacenados enun array A. El algoritmo es el siguiente:.

 Se lee N y después los N números al array A.2.

71


 Se busca el máximo de los elementos del 1 al N y su índice J.3.

 Se intercambian los elementos A(J) y A(N).4.

 Se decrementa N en 1.5.

 Se compara N con 1, si es mayor se vuelve a 2.6.

 Si es menor o igual se termina.

19.Hacer el organigrama de un programa que dado un array A ordenado de N elementos, la posición de uno B leído por teclado. El algoritmo a emplear es el siguiente:1.

Se fijan los extremos de la porción a buscar: I=1, J=N.2.

Se calcula el índice del elemento medio K=(I+J)/2.3.

Se compara B con el elemento medio A(K).

Si es igual se escribe K y se termina.5.

Si es mayor se cambian los extremos a I=K+1, J=N y se vuelve a 2.6.

72


Si es menor se cambian los extremos a I=1, J=K-1 y se vuelve a 2. Pensar después que habrá que modificar para que busque también valores de B que no estén en el array A, si se da ese caso y no lo encuentra debe poner un mensaje diciendo que no estÁ. 20.Hacer un organigrama de un programa que adivine el número entre 1 y 1000 pensado por un humano. El programa debe ir diciendo números y el humano responderá con los símbolos '<', '>' o '=', según el número pensado sea menor, mayor o igual que el dicho por el ordenador. Cuando lo adivine deberá poner un mensaje especificando cuantas preguntas ha necesitado y finalizar. No debe realizar más de 10 preguntas y debe detectar si el hu-mano le engaña diciéndole cosas imposibles, por ejemplo es mayor que 4 y menor que 5.Si en lugar de estar el número de partida entre 1 y 1000 estuviera entre 1 y 1000000,¿cuantas preguntas serían necesarias? 21.Realizar el organigrama de un programa que permita calcular ceros de funciones empleando el Teorema de Bolzano (si una función continua, definida en un intervalo cerrado[a, b], toma valores de signos opuestos en los extremos, existe un punto c en [a ,b] tal que f(c)=0). Los datos de partida son los extremos del intervalo a y b y E que nos dice el máximo error tolerado en el resultado. El programa deberá poner un mensaje de error si la función tiene igual signo en los extremos del intervalo, en otro caso debe escribir un valor C, que diste del c del Teorema en menos de E. 22.Dados dos números enteros positivos N y D, se dice que D es un divisor de N si el resto de dividir N entre D es 0. Se dice que un número N es perfecto si la suma de sus divisores (excluido el propio N) es N. Por ejemplo 28 es perfecto, pues sus divisores (excluido el28) son: 1, 2, 4, 7 y 14 y su suma es 1+2+4+7+14=28. Hacer un organigrama que dado un número N nos diga si es o no perfecto. 23.Un año es bisiesto si es múltiplo de 4, exceptuando los múltiplos de 100, que sólo son bisiestos cuando son múltiplos además de 400, por ejemplo el año 1900 no fu e bisiesto, pero el año 2000 si lo será. Hacer un organigrama que dado un año A nos diga si es o no bisiesto.

73


24.Hacer un organigrama que dados un día D, un mes M y un año A, calcule cual es el día siguiente. Se debe tener en cuenta que en los años bisiestos Febrero tiene 29 días y en los no bisiestos 28. 25.El Miércoles de Ceniza es 46 días antes que el Domingo de Resurrección. Hacer un organigrama para que dados el día D, el mes M y el año A del Domingo de Resurrección calcule la fecha del Miércoles de Ceniza en ese año. Se debe tener en cuenta si el año es o no bisiesto

26.Hacer un organigrama que lea un número N y obtenga las ternas pitagóricas (A, B, C) en las que A, B y C son todos enteros positivos y menores que N. Para que una terna (A, B,C) sea pitagórica debe cumplir que A 2+B 2=C 2 . 27.Una empresa paga a sus 100 operarios semanalmente, de acuerdo con el número de horas trabajadas, a razón de P pesetas por hora y de 1.5·P pesetas por cada hora extra. Las horas extras son las que exceden de 40h. Hacer el organigrama que dado el número de horas tra- bajadas y el valor de P calcule el salario que le corresponde. 28. Disponemos de una máquina que puede dar vueltas con 5 tipos de monedas distintas: 100,50, 25, 5 y 1 pts. Realizar el organigrama de un programa que dados el precio del artículo y la cantidad entregada por el consumidor nos indique la vuelta a entregar empleando número posible de monedas. 29. Plantear el organigrama de un programa que sea capaz de calcular el impuesto sobre la renta el número de veces que sea necesario y lo escriba por impresora. El impuesto de la renta es el 15% del salario anual de cada persona, al que previamente se debe realizar una deducción en función del número de hijos, que es del 0% si tiene 0, del 5% si tiene 1 o 2 ydel 15% si tiene más de 2. 30.Realizar un organigrama para leer por teclado las notas de N alumnos que están matriculados en M asignaturas, si un alumno no esta matriculado de una

74


asignatura o no se presenta al examen se debe introducir como nota -1. El programa debe calcular y escribir el número de alumnos presentados a cada asignatura, la nota media, el número de suspensos, el número de aprobados, el número de notables y el número de sobresalientes. 31.Hacer el organigrama para resolver el siguiente problema: Un hombre, un lobo, una cabra y un repollo deben pasar un río, para ello se dispone de una barca con capacidad para dos ocupantes, el hombre (único que sabe remar) y otro. Si en una orilla se quedan solos el lo-bo y la cabra, el lobo se come a la cabra. Si en una orilla se quedan solos la cabra y el re- pollo, la cabra se come el repollo

.-Hacer un pseudocodigo que imprima los numeros del 1 al 100. PROGRAMA contador1 ENTORNO: c <- 0 ALGORITMO: Borrar_pantalla( ) MIENTRAS c < 101 HACER ESCRIBIR c c <- c + 1 FINMIENTRAS FINPROGRAMA -------------------------------------------------------------------------2.-Hacer un pseudocodigo que imprima los numeros del 100 al 0, en orden decreciente. PROGRAMA contador2 ENTORNO: c <- 100 ALGORITMO: Borrar_pantalla( ) MIENTRAS c <= 0 HACER ESCRIBIR c c <- c - 1 FINMIENTRAS FINPROGRAMA

75


-------------------------------------------------------------------------3.-Hacer un pseudocodigo que imprima los numeros pares entre 0 y 100. PROGRAMA pares ENTORNO: c <- 2 ALGORITMO: Borrar_pantalla( ) MIENTRAS c < 101 HACER ESCRIBIR c c <- c + 2 FINMIENTRAS FINPROGRAMA -------------------------------------------------------------------------4.-Hacer un programa que imprima la suma de los 100 primeros numeros. PROGRAMA suma ENTORNO: c <- 1 suma <- 0 ALGORITMO: Borrar_pantalla( ) MIENTRAS c <= 100 HACER suma <- suma + c c <- c + 1 FINMIENTRAS ESCRIBIR "La suma de los 100 primeros n拢meros es: " ESCRIBIR suma FINPROGRAMA -------------------------------------------------------------------------5.-Hacer un pseudoc贸digo que imprima los numeros impares hasta el 100 y que imprima cuantos impares hay. PROGRAMA impares

76


ENTORNO: c <- 1 son <- 0 ALGORITMO: Borrar_pantalla( ) MIENTRAS c < 100 ESCRIBIR c c <- c + 2 son <- son + 1 FINMIENTRAS ESCRIBIR "El n£mero de impares: " ESCRIBIR son FINPROGRAMA -------------------------------------------------------------------------6.-Hacer un pseudocodigo que imprima todos los numeros naturales que hay desde la unidad hasta un numero que introducimos por teclado. PROGRAMA natural ENTORNO: i <- 0 n <- 0 ALGORITMO: Borrar_pantalla( ) ESCRIBIR "Introduce un n£mero: " LEER n MIENTRAS i < n HACER i <- i + 1 ESCRIBIR i FINMIENTRAS FINPROGRAMA -------------------------------------------------------------------------7.-Introducir tantas frases como queramos y contarlas. PROGRAMA frases ENTORNO: res <- "S"

77


frase <- Espacios( 30 ) c <- 0 ALGORITMO: Borrar_pantalla( ) MIENTRAS res = "S" HACER ESCRIBIR "Frase: " LEER frase c <- c + 1 ESCRIBIR "Deseas introducir m s frases (S/N): " LEER res FINMIENTRAS ESCRIBIR "El n£mero de frases introducidas son: " ESCRIBIR c FINPROGRAMA

-------------------------------------------------------------------------8.-Hacer un pseudocodigo que solo nos permita introducir S o N. PROGRAMA sn ENTORNO: res <- " " ALGORITMO: Borrar_pantalla( ) MIENTRAS res <> "S" Y res <> "N" HACER ESCRIBIR "Introduce S o N" LEER res res <- Convertir_may£sculas( res ) FINMIENTRAS FINPROGRAMA

78


-------------------------------------------------------------------------9.-Introducir un numero por teclado. Que nos diga si es positivo o negativo. PROGRAMA signo ENTORNO: num <- 0 ALGORITMO: Borrar_pantalla( ) ESCRIBIR "Introduce un n£mero: " LEER num SI num >= 0 ENTONCES ESCRIBIR "es positivo" SINO ESCRIBIR "es negativo" FINSI FINPROGRAMA -------------------------------------------------------------------------10.-Introducir un numero por teclado. Que nos diga si es par o impar. PROGRAMA paridad ENTORNO: num <- 0 ALGORITMO: Borrar_pantalla( ) ESCRIBIR "Introduce un n£mero: " LEER num SI num = int( num / 2 ) * 2 ENTONCES ESCRIBIR "es par" SINO ESCRIBIR "es impar" FINSI FINPROGRAMA --------------------------------------------------------------------------

79


11.-Imprimir y contar los multiplos de 3 desde la unidad hasta un numero que introducimos por teclado. PROGRAMA multiplo3 ENTORNO: i <- 3 n <- 0 c <- 0 ALGORITMO: Borrar_pantalla( ) ESCRIBIR "N£mero: " LEER n MIENTRAS i <= n HACER SI i = int( i / 3 ) * 3 ENTONCES ESCRIBIR i c <- c + 1 FINSI i <- i + 1 FINMIENTRAS ESCRIBIR "El n£mero de m£ltiplos de 3 son: " ESCRIBIR c FINPROGRAMA -------------------------------------------------------------------------12.-Hacer un pseudocodigo que imprima los numeros del 1 al 100. Que calcule la

80


suma de todos los numeros pares por un lado, y por otro, la de todos los impares. PROGRAMA par_impar ENTORNO: i <- 1 sumapar <- 0 sumaimp <- 0 ALGORITMO: Borrar_pantalla( ) MIENTRAS i < 101 HACER SI i = int( i / 2 ) * 2 ENTONCES sumapar <- sumapar + i SINO sumaimp <- sumaimp + i FINSI i <- i + 1 FINMIENTRAS ESCRIBIR "La suma de los pares es: " ESCRIBIR sumapar ESCRIBIR "La suma de los impares es: " ESCRIBIR sumaimp FINPROGRAMA -------------------------------------------------------------------------13.-Imprimir y contar los numeros que son multiplos de 2 o de 3 que hay entre 1 y 100. PROGRAMA multiplo_2_3 ENTORNO: i <- 1 c <- 0 ALGORITMO: Borrar_pantalla( ) MIENTRAS i < 101 HACER SI i = int( i / 2 ) * 2 O i = int( i / 3 ) * 3 ENTONCES c <- c + 1 ESCRIBIR i FINSI i <- i + 1

81


FINMIENTRAS ESCRIBIR "El n£mero de m£ltiplos es de: " ESCRIBIR c FINPROGRAMA -------------------------------------------------------------------------14.-Hacer un pseudocodigo que imprima el mayor y el menor de una serie de cinco numeros que vamos introduciendo por teclado. PROGRAMA mayor_menor ENTORNO: con <- 0 n <- 0 maximo <- 0 minimo <- 99999 ALGORITMO: Borrar_pantalla( ) MIENTRAS con <= 5 HACER ESCRIBIR "N£mero: " LEER n SI n > maximo ENTONCES maximo = n FINSI SI n < minimo ENTONCES minimo <- n FINSI con <- con + 1 FINMIENTRAS ESCRIBIR "El mayor de los n£meros es: " ESCRIBIR maximo ESCRIBIR "El menor de los n£meros es: " ESCRIBIR minimo FINPROGRAMA -------------------------------------------------------------------------15.-Introducir dos numeros por teclado. Imprimir los numeros naturales que hay entre ambos numeros empezando por el m s pequeño, contar cuantos hay y cuantos de ellos son pares. Calcular la suma de los impares.

82


PROGRAMA par_impar ENTORNO: num1 <- 0 num2 <- 0 aux <- 0 son <- 0 pares <- 0 sumaimpa <- 0 ALGORITMO: Borrar_pantalla( ) ESCRIBIR "N£mero: " LEER num1 ESCRIBIR "N£mero: " LEER num2 SI num1 > num2 ENTONCES aux <- num1 num1 <- num2 num2 <- aux FINSI MIENTRAS num1 >= num2 HACER ESCRIBIR num1 son <- son + 1 SI num1 = int( num1 / 2 ) * 2 ENTONCES pares <- pares + 1 SINO sumaimpa <- sumaimpa + num1 FINSI num1 <- num1 + 1 FINMIENTRAS ESCRIBIR "N£meros visualizados: " ESCRIBIR son ESCRIBIR "Pares hay: " ESCRIBIR pares ESCRIBIR "La suma de los impares es: " ESCRIBIR sumaimpa FINPROGRAMA -------------------------------------------------------------------------TEMA 2 --------------------------------------------------------------------------

83


Bucles anidados y subprogramas -------------------------------------------------------------------------16.-Imprimir diez veces la serie de numeros del 1 al 10. PROGRAMA diez ENTORNO: serie <- 0 ALGORITMO: Borrar_pantalla( ) MIENTRAS serie <= 10 HACER numero <- 1 MIENTRAS numero <= 10 HACER ESCRIBIR numero numero <- numero + 1 FINMIENTRAS serie <- serie + 1 FINMIENTRAS FINPROGRAMA -------------------------------------------------------------------------17.-Imprimir, contar y sumar los multiplos de 2 que hay entre una serie de numeros, tal que el segundo sea mayor o igual que el primero. PROGRAMA multiplo2 ENTORNO: res <- "S" ALGORITMO: Borrar_pantalla( ) MIENTRAS res = "S" HACER c <- 0 sum <- 0 num1 <- 0 num2 <- -999 ESCRIBIR "N£mero: " LEER num1 ESCRIBIR "N£mero mayor que el anterior" MIENTRAS num1 >= num2 HACER LEER num2

84


FINMIENTRAS num1 <- num1 + 1 MIENTRAS num1 <= num2 - 1 HACER SI num1 = int( num1 / 2 ) * 2 ENTONCES ESCRIBIR num1 c <- c + 1 sum <- sum + num1 FINSI num1 <- num1 + 1 FINMIENTRAS ESCRIBIR "N£mero de m£ltiplos de 2: " ESCRIBIR c ESCRIBIR "Su suma es: " ESCRIBIR sum res <- Espacios( 1 ) MIENTRAS res <> "S" Y res <> "N" HACER ESCRIBIR "Otra serie de n£meros (S/N): " LEER res res <- Convertir_may£sculas( res ) FINMIENTRAS FINMIENTRAS FINPROGRAMA -------------------------------------------------------------------------18.-Hacer un pseudocodigo que cuente las veces que aparece una determinada letra en una frase que introduciremos por teclado. PROGRAMA letra ENTORNO: frase <- Espacios( 30 ) letra <- Espacios( 1 ) longitud <- 0 a <- 0 res <- "S" ALGORITMO: MIENTRAS res = "S" HACER Borrar_pantalla( ) ESCRIBIR "Introduce una frase: " LEER frase

85


longitud <- Hallar_longitud( frase ) i <- 1 ESCRIBIR "Letra a buscar: " LEER letra MIENTRAS i <= longitud HACER SI letra = Caracter( frase, i, 1 ) ENTONCES a <- a + 1 FINSI i <- i + 1 FINMIENTRAS Borrar_pantalla( ) ESCRIBIR "El n£mero de veces que aparece la letra " ESCRIBIR letra ESCRIBIR " en la frase " ESCRIBIR frase ESCRIBIR " es de " ESCRIBIR a res <- Espacios( 1 ) MIENTRAS res <> "S" Y res <> "N" HACER ESCRIBIR "Desea introducir más frases (S/N): " LEER res res <- Convertir_may£sculas( res ) FINMIENTRAS FINMIENTRAS FINPROGRAMA -------------------------------------------------------------------------19.-Hacer un pseudocodigo que simule el funcionamiento de un reloj digital y que permita ponerlo en hora. PROGRAMA reloj ENTORNO: horas <- 0 minutos <- 0 segundos <- 0 res <- "S" ALGORITMO: Borrar_pantalla( ) ESCRIBIR "Horas: "

86


LEER horas ESCRIBIR "Minutos: " LEER minutos ESCRIBIR "Segundos: " LEER segundos MIENTRAS res = "S" HACER MIENTRAS horas < 24 HACER MIENTRAS minutos < 60 HACER MIENTRAS segundos < 60 HACER ESCRIBIR horas ESCRIBIR minutos ESCRIBIR segundos segundos <- segundos + 1 FINMIENTRAS minutos <- minutos + 1 segundos <- 0 FINMIENTRAS horas <- horas + 1 minutos <- 0 FINMIENTRAS horas <- 0 FINMIENTRAS FINPROGRAMA -------------------------------------------------------------------------20.-Calcular el factorial de un numero, mediante subprogramas. PROGRAMA factorial ENTORNO: res <- "S" ALGORITMO: MIENTRAS res = "S" HACER Borrar_pantalla( ) factorial <- 1 ESCRIBIR "NÂŁmero: " LEER numero SI numero < 0 ENTONCES ESCRIBIR "No tiene factorial" SINO

87


HACER Calculos FINSI HACER Mas FINMIENTRAS FINPROGRAMA -----------------------------SUBPROGRAMA Calculos MIENTRAS numero > 1 HACER factorial <- factorial * numero numero <- numero - 1 FINMIENTRAS HACER Imprimir FINSUBPROGRAMA -----------------------------SUBPROGRAMA Mas res <- " " MIENTRAS res <> "S" Y res <> "N" HACER ESCRIBIR "Desea calcular más factoriales (S/N): " LEER res res <- Convertir_may£sculas( res ) FINMIENTRAS FINSUBPROGRAMA -----------------------------SUBPROGRAMA Imprimir ESCRIBIR "Su factorial es: " ESCRIBIR factorial FINSUBPROGRAMA

--------------------------------------------------------------------------

88


21.-Hacer un programa que calcule independientemente la suma de los pares y los impares de los numeros entre 1 y 1000, utilizando un switch. PROGRAMA suma ENTORNO: par <- 0 impar <- 0 sw <- 0 i <- 1 ALGORITMO: Borrar_pantalla( ) MIENTRAS i <= 1000 HACER SI sw = 0 ENTONCES impar <- impar + i sw <- 1 SINO par <- par + i sw <- 0 FINSI i <- i + 1 FINMIENTRAS ESCRIBIR "La suma de los pares es: " ESCRIBIR par ESCRIBIR "La suma de los impares es: " ESCRIBIR impar FINPROGRAMA -------------------------------------------------------------------------TEMA 3 -------------------------------------------------------------------------Presentacion en pantalla y cabeceras -------------------------------------------------------------------------22.-Introducir una frase por teclado. Imprimirla cinco veces en filas consecutivas, pero cada impresion ir desplazada cuatro columnas hacia la derecha.

89


PROGRAMA frase ENTORNO: frase <- Espacios( 30 ) ALGORITMO: Borrar_pantalla( ) EN 5,15 ESCRIBIR "Frase: " EN 5,22 LEER frase fi <- 8 co <- 15 veces <- 0 MIENTRAS veces <= 5 HACER EN fi,co ESCRIBIR frase veces <- veces + 1 co <- co + 4 fi <- fi + 1 FINMIENTRAS FINPROGRAMA -------------------------------------------------------------------------23.-Hacer un pseudocodigo que imprima los n£meros del 0 al 100, controlando las filas y las columnas. PROGRAMA numeros ENTORNO: c <- 0 ALGORITMO: Borrar_pantalla( ) EN 5,20 ESCRIBIR "Los n£meros del 0 al 100 son: " fi <- 7 col <- 5 MIENTRAS c < 101 HACER EN fi,col ESCRIBIR c c <- c + 1 col <- col + 4 SI col > 75 ENTONCES fi <- fi + 2 col <- 5 FINSI

90


FINMIENTRAS FINPROGRAMA -------------------------------------------------------------------------24.-Comprobar si un numero mayor o igual que la unidad es primo. PROGRAMA primo ENTORNO: res <- "S" ALGORITMO: MIENTRAS res = "S" HACER Borrar_pantalla( ) numero <- 0 sw <- 0 MIENTRAS numero < 1 HACER EN 8,10 ESCRIBIR "N£mero: " EN 8,18 LEER numero FINMIENTRAS i <- numero - 1 MIENTRAS i > 1 Y sw <> 1 HACER SI numero = Int( numero / i ) * i ENTONCES sw = 1 SINO i <- i - 1 FINSI FINMIENTRAS SI sw = 1 ENTONCES EN 10,10 ESCRIBIR "no es primo" SINO EN 10,10 ESCRIBIR "s¡ es primo" FINSI HACER Mas FINMIENTRAS FINPROGRAMA -----------------------------SUBPROGRAMA Mas res <- " " MIENTRAS res <> "S" Y res <> "N" HACER ESCRIBIR "Desea introducir m s n£meros (S/N): "

91


LEER res res <- Convertir_mayusculas( res ) FINMIENTRAS FINSUBPROGRAMA -------------------------------------------------------------------------25.-Introducir un numero menor de 5000 y pasarlo a numero romano. PROGRAMA romano ENTORNO: res <- "S" ALGORITMO: MIENTRAS res = "S" HACER Borrar_pantalla( ) num <- 0 MIENTRAS num < 1 O num > 5000 HACER EN 8,10 ESCRIBIR "N£mero: " EN 8,18 ESCRIBIR num FINMIENTRAS col <- 15 MIENTRAS num >= 1000 HACER EN 15,col ESCRIBIR "M" num <- num - 1000 col <- col + 1 FINMIENTRAS SI num >= 900 ENTONCES EN 15,col ESCRIBIR "CM" num <- num - 900 col <- col + 2 FINSI SI num >= 500 ENTONCES EN 15,col ESCRIBIR "D" num <- num - 500 col <- col + 1 FINSI MIENTRAS num >= 100 HACER EN 15,col ESCRIBIR "C" num <- num - 100 col <- col + 1

92


FINMIENTRAS SI num >= 90 ENTONCES EN 15,col ESCRIBIR "XC" num <- num - 90 col <- col + 2 FINSI SI num >= 50 ENTONCES EN 15,col ESCRIBIR "L" num <- num - 50 col <- col + 1 FINSI SI num >= 40 ENTONCES EN 15,col ESCRIBIR "XL" num <- num - 40 col <- col + 2 FINSI MIENTRAS num >= 10 HACER EN 15,col ESCRIBIR "X" num <- num - 10 col <- col + 1 FINMIENTRAS SI num = 9 ENTONCES EN 15,col ESCRIBIR "IX" num <- num - 9 col <- col + 2 FINSI SI num >= 5 ENTONCES EN 15,col ESCRIBIR "V" num <- num - 5 col <- col + 1 FINSI SI num >= 4 ENTONCES EN 15,col ESCRIBIR "IV" num <- num - 4 col <- col + 2 FINSI MIENTRAS num > 0 HACER EN 15,col ESCRIBIR "I" num <- num - 1 col <- col + 1

93


FINMIENTRAS HACER Mas FINMIENTRAS FINPROGRAMA -----------------------------SUBPROGRAMA Mas res <- " " MIENTRAS res <> "S" Y res <> "N" HACER ESCRIBIR "Desea introducir m s n£meros (S/N): " LEER res res <- Convertir_mayusculas( res ) FINMIENTRAS FINSUBPROGRAMA -------------------------------------------------------------------------26.-Introducir una frase por teclado. Imprimirla en el centro de la pantalla. PROGRAMA centro ENTORNO: res <- "S" frase <- Espacios( 40 ) ALGORITMO: MIENTRAS res = "S" HACER Borrar_pantalla( ) EN 5,15 ESCRIBIR "Frase: " EN 5,22 LEER frase EN 12,40 - Int( Longitud( frase ) / 2 ) ESCRIBIR frase HACER Mas FINMIENTRAS FINPROGRAMA -------------------------------------------------------------------------27.-Realizar la tabla de multiplicar de un numero entre 0 y 10. PROGRAMA tabla ENTORNO: num <- -1 ALGORITMO:

94


HACER Numero Borrar_pantalla( ) EN 5,10 ESCRIBIR "Tabla de multiplicar del n£mero: " EN 5,40 LEER num i <- 0 fi <- 8 MIENTRAS i <= 10 HACER EN fi,15 ESCRIBIR num EN fi,19 ESCRIBIR " * " EN fi,23 ESCRIBIR i EN fi,25 ESCRIBIR " = " EN fi,29 ESCRIBIR num * i fi <- fi + 1 i <- i + 1 FINMIENTRAS FINPROGRAMA -----------------------------SUBPROGRAMA Numero MIENTRAS num < 0 HACER Borrar_pantalla( ) EN 10,25 ESCRIBIR "N£mero: " EN 10,33 LEER num FINMIENTRAS FINSUBPROGRAMA -------------------------------------------------------------------------TEMA 4 -------------------------------------------------------------------------Numeros aleatorios y menus -------------------------------------------------------------------------28.-Simular el lanzamiento de una moneda al aire e imprimir si ha salido cara o cruz. PROGRAMA moneda ENTORNO: res <- "S" ALGORITMO: MIENTRAS res = "S" HACER Borrar_pantalla( )

95


SI Rnd( ) <= 0.5 ENTONCES EN 10,35 ESCRIBIR "Cara" SINO EN 10,35 ESCRIBIR "Cruz" FINSI HACER Mas FINMIENTRAS FINPROGRAMA -----------------------------SUBPROGRAMA Mas res <- Espacios( 1 ) MIENTRAS res <> "S" Y res <> "N" HACER EN 20,30 ESCRIBIR "M s lanzamientos (S/N): " EN 20,57 LEER res res <- Convertir_mayusculas( res ) FINMIENTRAS FINSUBPROGRAMA -------------------------------------------------------------------------29.-Simular cien tiradas de dos dados y contar las veces que entre los dos suman 10. PROGRAMA dado ENTORNO: c <- 0 i <- 0 ALGORITMO: Borrar_pantalla( ) MIENTRAS i < 101 HACER SI Int( Rnd( ) * 6 ) + Int( Rnd( ) * 6 ) + 2 = 10 ENTONCES c <- c + 1 FINSI i <- i + 1 FINMIENTRAS EN 10,20 ESCRIBIR "Las veces que suman 10 son: " EN 10,48 ESCRIBIR c FINPROGRAMA --------------------------------------------------------------------------

96


30.-Simular una carrera de dos caballos si cada uno tiene igual probabilidad de ganar. PROGRAMA caballos ENTORNO: dibujo <- "****" col1 <- 4 col2 <- 4 ALGORITMO: Borrar_pantalla( ) EN 10,col1 ESCRIBIR dibujo EN 10,col2 ESCRIBIR dibujo MIENTRAS col1 <= 75 Y col2 <= 75 HACER SI Rnd( ) <= 0.5 ENTONCES EN 10,col1 ESCRIBIR Espacios( 4 ) col1 <- col1 + 4 EN 10,col1 ESCRIBIR dibujo SINO EN 12,col2 ESCRIBIR Espacios( 4 ) col2 <- col2 + 4 EN 12,col2 ESCRIBIR dibujo FINSI FINMIENTRAS EN 16,20 ESCRIBIR "El ganador es el caballo nÂŁmero: " SI col1 >= 75 ENTONCES EN 16,54 ESCRIBIR "1" SINO EN 16,54 ESCRIBIR "2" FINSI FINPROGRAMA -------------------------------------------------------------------------31.-Introducir dos nymeros por teclado y mediante un menu, calcule su suma, su resta, su multiplicacion o su division. PROGRAMA menu1 ENTORNO: op <- 0

97


ALGORITMO: EN 10,20 ESCRIBIR "N£mero: " EN 10,29 LEER n1 EN 12,20 ESCRIBIR "N£mero: " EN 12,29 LEER n2 MIENTRAS op <> 5 HACER op <- 0 Borrar_pantalla( ) EN 6,20 ESCRIBIR "Men£ de opciones" EN 10,25 ESCRIBIR "1.- Suma" EN 12,25 ESCRIBIR "2.- Resta" EN 14,25 ESCRIBIR "3.- Multiplicaci¢n" EN 16,25 ESCRIBIR "4.- Divisi¢n" EN 18,25 ESCRIBIR "5.- Salir del programa" EN 22,25 ESCRIBIR "Elija opci¢n: " EN 22,39 LEER op Borrar_pantalla( ) HACER CASO CASO op = 1 EN 10,20 ESCRIBIR "Su suma es: " EN 10,33 ESCRIBIR n1 + n2 Pausa( ) CASO op = 2 EN 10,20 ESCRIBIR "Su resta es: " EN 10,33 ESCRIBIR n1 - n2 Pausa( ) CASO op = 3 EN 10,20 ESCRIBIR "Su multiplicaci¢n es: " EN 10,33 ESCRIBIR n1 * n2 Pausa( ) CASO op = 4 EN 10,20 ESCRIBIR "Su divisi¢n es: " EN 10,33 ESCRIBIR n1 / n2 Pausa( ) FINCASO FINMIENTRAS FINPROGRAMA --------------------------------------------------------------------------

98


32.-Hacer un programa que nos permita introducir un numero por teclado y sobre el se realicen las siguientes operaciones: comprobar si es primo, hallar su factorial o imprimir su tabla de multiplicar. PROGRAMA menu2 ENTORNO: op <- 0 ALGORITMO: EN 10,20 ESCRIBIR "N£mero: " EN 10,29 LEER n MIENTRAS op <> 4 HACER op <- 0 Borrar_pantalla( ) EN 6,30 ESCRIBIR "Men£ de opciones" EN 10,25 ESCRIBIR "1.- Comprobar si es primo" EN 12,25 ESCRIBIR "2.- Hallar su factorial" EN 14,25 ESCRIBIR "3.- Tabla de multiplicar" EN 16,25 ESCRIBIR "4.- Salir del programa" EN 22,25 ESCRIBIR "Elija opci¢n: " EN 22,39 LEER op HACER CASO CASO op = 1 HACER Primo CASO op = 2 HACER Factorial CASO op = 3 HACER Tabla FINCASO FINMIENTRAS FINPROGRAMA -----------------------------SUBPROGRAMA Primo sw <- 0 i <- n - 1 MIENTRAS i > 1 Y sw <> 1 HACER SI n = Int( n / i ) * i ENTONCES sw <- 1 SINO i <- i - 1 FINSI

99


FINMIENTRAS Borrar_pantalla( ) SI sw = 1 ENTONCES EN 10,10 ESCRIBIR "no es primo" SINO EN 10,10 ESCRIBIR "sยก es primo" FINSI Pausa( ) FINSUBPROGRAMA -----------------------------SUBPROGRAMA Factorial fac <- 1 Borrar_pantalla( ) SI n < 0 ENTONCES EN 10,10 ESCRIBIR "No tiene factorial" SINO MIENTRAS n > 1 HACER fac <- fac * n n <- n - 1 FINMIENTRAS EN 10,10 ESCRIBIR "Su factorial es: " EN 10,27 ESCRIBIR fac FINSI Pausa( ) FINSUBPROGRAMA -----------------------------SUBPROGRAMA Tabla i <- 0 fi <- 10 Borrar_pantalla( ) MIENTRAS i <= 10 HACER EN 8,10 ESCRIBIR "Tabla de multiplicar" EN fi,10 ESCRIBIR n EN fi,15 ESCRIBIR "*" EN fi,20 ESCRIBIR i EN fi,25 ESCRIBIR "=" EN fi,30 ESCRIBIR n * i i <- i + 1 FINMIENTRAS Pausa( )

100


FINSUBPROGRAMA -------------------------------------------------------------------------TEMA 4 -------------------------------------------------------------------------Arrays unidimensionales -------------------------------------------------------------------------33.-Crear un array unidimensional de 20 elementos con nombres de personas. Visualizar los elementos de la lista debiendo ir cada uno en una fila distinta. PROGRAMA nombres ENTORNO: DIMENSIONA datos[ 20 ] i <- 1 ALGORITMO: Borrar_pantalla( ) fi <- 10 MIENTRAS i < 21 HACER EN fi,10 ESCRIBIR "Nombre: " EN fi, 18 LEER datos[ i ] i <- i + 1 FINMIENTRAS Borrar_pantalla( ) i <- 1 fi <- 3 EN 1,20 ESCRIBIR "Elementos de la lista" MIENTRAS i < 21 HACER EN fi,28 ESCRIBIR datos[ i ] fi <- fi + 1 i <- i + 1 FINMIENTRAS FINPROGRAMA -------------------------------------------------------------------------34.-Hacer un programa que lea las calificaciones de un alumno en 10 asignaturas, las almacene en un vector y calcule e imprima su media.

101


PROGRAMA notamedia ENTORNO: DIMENSIONA notas[ 10 ] suma <- 0 media <- 0 ALGORITMO: Borrar_pantalla( ) fi <- 7 PARA i DESDE 1 HASTA 10 HACER EN fi,15 ESCRIBIR "Nota " EN fi,20 ESCRIBIR i EN fi,21 ESCRIBIR ": " EN fi,23 LEER notas[ i ] fi <- fi + 1 FINPARA PARA i DESDE 1 HASTA 10 HACER suma <- suma + notas[ i ] FINPARA media <- suma / 10 EN 20,20 ESCRIBIR "Nota media: " EN 20,32 ESCRIBIR media FINPROGRAMA -------------------------------------------------------------------------35.-Usando el segundo ejemplo, hacer un programa que busque una nota en el vector. PROGRAMA buscar ENTORNO: i <- 0 num <- 0 ALGORITMO: Borrar_pantalla( ) ESCRIBIR "Nota a buscar: " LEER num ITERAR i <- i + 1 SI notas[ i ] = num O i = 10 ENTONCES SALIR

102


FINSI FINITERAR SI notas[ i ] = num ENTONCES ESCRIBIR "Encontrado en posición: " ESCRIBIR i SINO ESCRIBIR "No existe esa nota" FINSI FINPROGRAMA -------------------------------------------------------------------------TEMA 5 -------------------------------------------------------------------------Arrays bidimensionales -------------------------------------------------------------------------36.-Generar una matriz de 4 filas y 5 columnas con numeros aleatorios entre 1 y 100, e imprimirla. PROGRAMA matriz ENTORNO: DIMENSIONAR A[ 4, 5 ] i <- 1 fi <- 10 co <- 15 ALGORITMO: Borrar_pantalla( ) EN 6,25 ESCRIBIR "Elementos de la matriz" MIENTRAS i <= 4 HACER j <- 1 MIENTRAS j <= 5 HACER A[ i, j ] <- Int( Rnd( ) * 100 ) + 1 EN fi,co ESCRIBIR A[ i, j ] co <- co + 5 j <- j + 1 FINMIENTRAS co <- 15 fi <- fi + 2 i <- i + 1 FINMIENTRAS

103


FINPROGRAMA -------------------------------------------------------------------------37.-Generar una matriz de 4 filas y 5 columnas con n£meros aleatorios entre 1 y 100, y hacer su matriz transpuesta. PROGRAMA transpuesta ENTORNO: DIMENSIONAR A[ 4, 5 ] DIMENSIONAR B[ 5, 4 ] fi <- 8 co <- 10 fit <- 8 cot <- 40 i <- 1 ALGORITMO: Borrar_pantalla( ) EN 6,15 ESCRIBIR "Matriz uno" EN 6,45 ESCRIBIR "Transpuesta" MIENTRAS i <= 4 HACER j <- 1 MIENTRAS j <= 5 HACER A[ i, j ] <- Int( Rnd( ) * 100 ) + 1 B[ j, i ] <- A[ i, j ] EN fi,co ESCRIBIR A[ i, j ] EN fit,cot ESCRIBIR B[ j, i ] co <- co + 4 fit <- fit + 2 j <- j + 1 FINMIENTRAS fi <- fi + 2 co <- 10 fit <- 8 cot <- cot + 4 i <- i + 1 FINMIENTRAS FINPROGRAMA --------------------------------------------------------------------------

104


38.-Cargar en una matriz las notas de los alumnos de un colegio en funcion del numero de cursos (filas) y del n£mero de alumnos por curso (columnas). PROGRAMA notas ENTORNO: i <- 1 j <- 1 ALGORITMO: Borrar_pantalla( ) EN 10,20 ESCRIBIR "N£mero de cursos: " EN 10,39 LEER M EN 12,20 ESCRIBIR "N£mero de alumnos: " EN 12,40 LEER N DIMENSIONAR A[ M, N ] Borrar_pantalla( ) EN 2,25 ESCRIBIR "Introducci¢n de las notas" MIENTRAS i <= M HACER EN 10,25 ESCRIBIR "Curso: " EN 10,32 ESCRIBIR i MIENTRAS j <= N HACER EN 14,25 ESCRIBIR "Alumno: " EN 14,33 ESCRIBIR j EN 16,25 ESCRIBIR "Nota: " EN 16,32 LEER A[ i, j ] j <- j + 1 FINMIENTRAS i <- i + 1 FINMIENTRAS FINPROGRAMA -------------------------------------------------------------------------39.-Ordenar una matriz de M filas y N columnas por la primera columna utilizando el m‚todo SHELL (por insercion). PROGRAMA ordenar ENTORNO: i <- 1 j <- 1

105


fi <- 10 co <- 15 M <- 0 N <- 0 ALGORITMO: Borrar_pantalla( ) EN 10,20 ESCRIBIR "Filas: " EN 10,27 LEER M EN 12,20 ESCRIBIR "Columnas: " EN 12,30 LEER N DIMENSIONAR A[ M, N ] Borrar_pantalla( ) MIENTRAS i <= M HACER MIENTRAS j <= N HACER A[ i, j ] = Int( Rnd( ) * 100 ) + 1 EN fi,co ESCRIBIR A[ i, j ] co <- co + 5 j <- j + 1 FINMIENTRAS co <- 15 fi <- fi + 2 i <- i + 1 FINMIENTRAS salto <- Int( M / 2 ) MIENTRAS salto >= 1 HACER sw <- 1 MIENTRAS sw <> 0 HACER sw <- 0 i <- 1 MIENTRAS i <= M - salto HACER SI A[ i, 1 ] > A[ i + salto, 1 ] ENTONCES HACER Cambios FINSI i <- i + 1 FINMIENTRAS FINMIENTRAS salto <- Int( salto / 2 ) FINMIENTRAS FINPROGRAMA ------------------------------

106


SUBPROGRAMA Cambios j <- 1 MIENTRAS j <= N HACER aux <- A[ i + salto, j ] A[ i + salto, j ] <- A[ i, j ] A[ i, j ] <- aux j <- j + 1 FINMIENTRAS sw <- 1 FINSUBPROGRAMA -------------------------------------------------------------------------TEMA 6 -------------------------------------------------------------------------Arrays multidimensionales -------------------------------------------------------------------------40.-Crear una tabla de 3 paginas, 4 filas y 5 columnas donde el primer elemento valga 1, el segundo 2, el tercero 3 y asยก sucesivamente, e imprimirla. PROGRAMA tabla ENTORNO: DIMENSIONAR A[ 3, 4, 5 ] i <- 1 j <- 1 k <- 1 b <- 0 fi <- 8 co <- 12 ALGORITMO: MIENTRAS i <= 3 HACER Borrar_pantalla( ) EN fi,co ESCRIBIR "Elementos de la p gina: " EN fi,co + 24 ESCRIBIR i fi <- fi + 2 MIENTRAS j <= 4 HACER MIENTRAS k <= 5 HACER b <- b + 1 A[ i, j, k ] <- b

107


EN fi,co ESCRIBIR A[ i, j, k ] co <- co + 4 k <- k + 1 FINMIENTRAS fi <- fi + 2 co <- 12 j <- j + 1 FINMIENTRAS EN fi + 2,20 ESCRIBIR "Pulse INTRO para continuar ..." Pausa( ) i <- i + 1 FINMIENTRAS FINPROGRAMA -------------------------------------------------------------------------41.-Se dispone de una tabla de 5 p ginas, 10 filas y 20 columnas, que se refieren al centro, al curso y al numero de alumnos de un colegio respectivamente. Imprimir la nota media por curso y la nota media maxima y su centro de pertenencia. PROGRAMA notas ENTORNO: max <- -1 sum <- 0 centro <- 0 i <- 1 j <- 1 k <- 1 fi <- 10 ALGORITMO: Borrar_pantalla( ) EN 8,18 ESCRIBIR "Centro" EN 8,38 ESCRIBIR "Nota media" MIENTRAS i <= 5 HACER MIENTRAS j <= 10 HACER MIENTRAS k <= 20 HACER sum <- sum + A[ i, j, k ] k <- k + 1 FINMIENTRAS

108


j <- j + 1 FINMIENTRAS EN fi,20 ESCRIBIR i EN fi,40 ESCRIBIR sum / 20 fi <- fi + 2 SI sum / 20 > max ENTONCES max <- sum / 20 centro <- i FINSI i <- i + 1 FINMIENTRAS EN fi + 2,20 ESCRIBIR "Nota media m xima: " EN fi + 2,39 ESCRIBIR max EN fi + 4, 20 ESCRIBIR "pertenece al centro: " EN fi + 4,41 ESCRIBIR centro FINPROGRAMA -------------------------------------------------------------------------42.-Una empresa guarda en una tabla de 3x12x4 las ventas realizadas por sus tres representantes a lo largo de doce meses de sus cuatro productos, VENTAS[ representante, mes, producto ]. Queremos proyectar el array tridimensional sobre uno de dos dimensiones que represente el total de ventas, TOTAL[ mes, producto ], para lo cual sumamos las ventas de cada producto de cada mes de todos los representantes. Imprimir ambos arrays. PROGRAMA ventas ENTORNO: ** Las variables est n definidas en cada subprograma ALGORITMO: HACER Volcar HACER Imp_Tres HACER Imp_Dos FINPROGRAMA -----------------------------SUBPROGRAMA Volcar DIMENSIONAR TOTAL[ 12, 4 ] j <- 1 MIENTRAS j <= 12 HACER k <- 1

109


MIENTRAS k <= 4 HACER i <- 1 suma <- 0 MIENTRAS i <= 3 HACER suma <- suma + VENTAS[ i, j, k ] i <- i + 1 FINMIENTRAS TOTAL[ j, k ] <- suma k <- k + 1 FINMIENTRAS j <- j + 1 FINMIENTRAS FINSUBPROGRAMA -----------------------------SUBPROGRAMA Imp_Tres i <- 1 MIENTRAS i <= 3 HACER Borrar_pantalla( ) fi <- 8 co <- 12 EN fi,co ESCRIBIR "Ventas del representante: " EN fi,co + 26 ESCRIBIR i fi <- fi + 2 j <- 1 MIENTRAS j <= 12 HACER k <- 1 MIENTRAS k <= 4 HACER EN fi,co ESCRIBIR VENTAS[ i, j, k ] co <- co + 4 k <- k + 1 FINMIENTRAS fi <- fi + 2 co <- 12 j <- j + 1 FINMIENTRAS Pausa( ) i <- i + 1 FINMIENTRAS FINSUBPROGRAMA ------------------------------

110


SUBPROGRAMA Imp_Dos Borrar_pantalla( ) j <- 1 EN 8,20 ESCRIBIR "Ventas totales" fi <- 10 co <- 16 MIENTRAS j <= 12 HACER k <- 1 MIENTRAS k <= 4 HACER EN fi,co ESCRIBIR TOTAL[ j, k ] co <- co + 4 k <- k + 1 FINMIENTRAS fi <- fi + 2 co <- 12 j <- j + 1 FINMIENTRAS FINSUBPROGRAMA -------------------------------------------------------------------------TEMA 7 -------------------------------------------------------------------------Ficheros -------------------------------------------------------------------------43.-Hacer un programa que nos permita dar altas en el fichero secuencial DATOS.DAT, cuyos campos son: DNI, NOMBRE, APELLIDOS, DIRECCION y PROVINCIA. PROGRAMA altas ENTORNO: res <- "S" ALGORITMO: MIENTRAS res = "S" HACER ABRIR "DATOS.DAT" sw <- 0 num <- 0 Borrar_pantalla( ) EN 5,10 ESCRIBIR "D.N.I.: " EN 5,18 LEER num

111


MIENTRAS NO Eof( ) Y sw = 0 HACER SI dni = num ENTONCES EN 10,10 ESCRIBIR "Alta duplicada" EN 15,10 ESCRIBIR "Pulse INTRO para continuar" Pausa( ) sw <- 1 SINO Siguiente_registro( ) FINSI FINMIENTRAS SI sw = 0 ENTONCES EN 7,5 ESCRIBIR "Nombre: " EN 9,5 ESCRIBIR "Apellidos: " EN 11,5 ESCRIBIR "Dirección: " EN 13,5 ESCRIBIR "Provincia: " EN 7,16 LEER nombre EN 9,16 LEER apellidos EN 11,16 LEER direccion EN 13,16 LEER provincia dni <- num Final_fichero( ) Escribir_registro( ) FINSI CERRAR "DATOS.DAT" res <- Espacios( 1 ) HACER Mas FINMIENTRAS FINPROGRAMA -----------------------------SUBPROGRAMA Mas MIENTRAS res <> "S" Y res <> "N" HACER ESCRIBIR "Desea m s altas (S/N): " LEER res res <- Convertir_mayusculas( res ) FINMIENTRAS FINSUBPROGRAMA -------------------------------------------------------------------------44.-Hacer un programa que nos permita dar bajas en el fichero DATOS.DAT.

112


PROGRAMA bajas ENTORNO: res <- "S" ALGORITMO: MIENTRAS res = "S" HACER ABRIR "DATOS.DAT" sw <- 0 Borrar_pantalla( ) EN 5,10 ESCRIBIR "D.N.I.: " EN 5,18 LEER num MIENTRAS NO Eof( ) HACER SI dni = num ENTONCES sw <- 1 SINO ABRIR "AUX.DAT" Final_fichero( ) Escribir_registro( ) FINSI ABRIR "DATOS.DAT" Siguiente_registro( ) FINMIENTRAS CERRAR "DATOS.DAT" CERRAR "AUX.DAT" SI sw = 0 ENTONCES EN 12,10 ESCRIBIR "Baja inexistente" EN 16,10 ESCRIBIR "Pulse INTRO para continuar" BORRAR "AUX.DAT" Pausa( ) SINO BORRAR "DATOS.DAT" RENOMBRAR "AUX.DAT" COMO "DATOS.DAT" FINSI res = Espacios( 1 ) HACER Mas FINMIENTRAS FINPROGRAMA -----------------------------SUBPROGRAMA Mas MIENTRAS res <> "S" Y res <> "N" HACER

113


ESCRIBIR "Desea m s bajas (S/N): " LEER res res <- Convertir_mayusculas( res ) FINMIENTRAS FINSUBPROGRAMA -------------------------------------------------------------------------45.-Dado el fichero secuencial DATOS.DAT, realizar un programa que nos permita realizar modificaciones cuantas veces deseemos. PROGRAMA modifica ENTORNO: res <- "S" ALGORITMO: MIENTRAS res = "S" HACER ABRIR "DATOS.DAT" sw <- 0 num <- 0 nom <- Espacios( 15 ) ape <- Espacios( 30 ) dir <- Espacios( 20 ) pro <- Espacios( 20 ) Borrar_pantalla( ) EN 5,10 ESCRIBIR "D.N.I.: " EN 5,18 LEER num MIENTRAS NO Eof( ) Y sw = 0 HACER SI dni = num ENTONCES HACER Imprimir HACER Cambios sw <- 1 SINO Siguiente_registro( ) FINSI FINMIENTRAS SI sw = 0 ENTONCES HACER Detener FINSI CERRAR "DATOS.DAT"

114


res <- Espacios( 1 ) HACER Mas FINMIENTRAS FINPROGRAMA -----------------------------SUBPROGRAMA Mas MIENTRAS res <> "S" Y res <> "N" HACER ESCRIBIR "Desea m s cambios (S/N): " LEER res res <- Convertir_mayusculas( res ) FINMIENTRAS FINSUBPROGRAMA -----------------------------SUBPROGRAMA Imprimir EN 7,5 ESCRIBIR "Nombre: " EN 9,5 ESCRIBIR "Apellidos: " EN 11,5 ESCRIBIR "Dirección: " EN 13,5 ESCRIBIR "Provincia: " EN 7,16 LEER nombre EN 9,16 LEER apellidos EN 11,16 LEER direccion EN 13,16 LEER provincia FINSUBPROGRAMA -----------------------------SUBPROGRAMA Cambios nom <- nombre ape <- apellidos dir <- direccion pro <- provincia EN 7,16 LEER nom EN 9,16 LEER ape EN 11,16 LEER dir EN 13,16 LEER pro nombre <- nom apellidos <- ape direccion <- dir provincia <- pro Escribir_registro( ) FINSUBPROGRAMA ------------------------------

115


SUBPROGRAMA Detener EN 10,20 ESCRIBIR "Registro inexistente" EN 20,18 ESCRIBIR "Pulse INTRO para continuar" Pausa( ) FINSUBPROGRAMA -------------------------------------------------------------------------TEMA 8 -------------------------------------------------------------------------Informes y rupturas de control -------------------------------------------------------------------------46.-Tenemos el fichero secuencial DATOS.DAT cuyos campos son: DNI, NOMBRE, APELLIDOS, DIRECCION y PROVINCIA. Listar por impresora todos los registros cuya provincia sea una determinada que introduciremos por teclado. PROGRAMA provincia ENTORNO: fi <- 55 c <- 0 pag <- 1 pro <- Espacios( 15 ) ALGORITMO: Borrar_pantalla( ) EN 10,20 ESCRIBIR "Provincia: " EN 10,32 LEER pro ABRIR "DATOS.DAT" Activar_impresora( ) MIENTRAS NO Eof( ) HACER SI provincia = pro ENTONCES SI fi = 55 ENTONCES HACER Cabecera FINSI EN fi,5 ESCRIBIR dni EN fi,15 ESCRIBIR nombre EN fi,35 ESCRIBIR apellidos EN fi,65 ESCRIBIR direccion fi <- fi + 1 c <- c + 1

116


FINSI Siguiente_registro( ) FINMIENTRAS SI pag <> 1 ENTONCES EN fi + 2,20 ESCRIBIR "Total de personas: " EN fi + 2,39 ESCRIBIR c FINSI Activar_pantalla( ) CERRAR "DATOS.DAT" FINPROGRAMA -----------------------------SUBPROGRAMA Cabecera Salto_pagina( ) EN 2,65 ESCRIBIR "P g.: " EN 2,71 ESCRIBIR pag EN 4,10 ESCRIBIR "Relaci¢n de las personas que viven en la provincia: " EN 4,62 ESCRIBIR pro EN 6,7 ESCRIBIR "D.N.I." EN 6,18 ESCRIBIR "Nombre" EN 6,40 ESCRIBIR "Apellidos" EN 6,68 ESCRIBIR "Direcci¢n" EN 7,4 ESCRIBIR "------------------------------------------------------------------------" fi <- 9 pag <- pag + 1 FINSUBPROGRAMA -------------------------------------------------------------------------47.-En el fichero secuencial VENTAS.DAT, est n almacenadas las ventas de los productos durante el d¡a, cuyos campos son: NART y VENTAS. Se desea hacer un programa que liste por impresora todas las ventas realizadas durante el d¡a. PROGRAMA ventas ENTORNO: total <- 0 uno <- 0 fi <- 55 sw <- 0 aux <- 0

117


pag <- 1 ALGORITMO: Borrar_pantalla( ) Activar_impresora( ) ABRIR "VENTAS.DAT" MIENTRAS NO Eof( ) HACER SI fi = 55 ENTONCES HACER Cabecera FINSI SI sw = 0 ENTONCES aux <- nart sw <- 1 FINSI SI nart = aux ENTONCES uno <- uno + ventas SINO HACER Imprimir uno <- 0 aux <- nart uno <- ventas FINSI Siguiente_registro( ) FINMIENTRAS HACER Imprimir EN fi + 2,20 ESCRIBIR "Unidades vendidas: " EN fi + 2,39 ESCRIBIR total Activar_pantalla( ) CERRAR "VENTAS.DAT" FINPROGRAMA -----------------------------SUBPROGRAMA Imprimir EN fi,32 ESCRIBIR aux EN fi,42 ESCRIBIR total fi <- fi + 1 total <- total + uno FINSUBPROGRAMA -----------------------------SUBPROGRAMA Cabecera Salto_pagina( ) EN 2,65 ESCRIBIR "P g.: "

118


EN 2,71 ESCRIBIR pag EN 4,20 ESCRIBIR "LISTADO DE LAS VENTAS DE LOS PRODUCTOS AL DIA: " EN 4,68 ESCRIBIR Fecha_sistema( ) EN 6,30 ESCRIBIR "N£mero" EN 6,40 ESCRIBIR "Cantidad" EN 7,18 ESCRIBIR "-----------------------------------------------------" fi <- 9 pag <- pag + 1 FINSUBPROGRAMA -------------------------------------------------------------------------48.-Dado el fichero secuencial ARTICULOS.DAT, cuyos campos son: NART, ARTICULO, PVP, STOCK y MINIMO. En otro fichero VENTAS.DAT, est n almacenadas las modificaciones de los productos durante el d¡a, cuyos campos son: NART2, VENTAS y TIPO. El campo TIPO puede tomar los valores 0 (venta) y 1 (compra). Se desea hacer un programa que realice una actualizaci¢n del fichero de ARTICULOS y un listado por impresora de las entradas y salidas de los art¡culos. PROGRAMA modifica ENTORNO: entra <- 0 sale <- 0 total <- 0 fi <- 55 sw <- 0 aux <- 0 pag <- 1 ALGORITMO: Borrar_pantalla( ) Activar_impresora( ) ABRIR "ARTICULOS.DAT" Primer_registro( ) ABRIR "SALIDAS.DAT" Primer_registro( ) ABRIR "VENTAS.DAT" Primer_registro( ) SELECCIONAR "VENTAS.DAT"

119


MIENTRAS NO Eof( ) HACER SI fi = 55 ENTONCES HACER Cabecompras FINSI SI sw = 0 ENTONCES aux <- nart2 HACER Buscar sw <- 1 FINSI SI nart2 = aux ENTONCES HACER Calculos SINO HACER Grabar HACER Compra entra <- 0 sale <- 0 aux <- nart2 HACER Buscar HACER Calculos FINSI Siguiente_registro( ) FINMIENTRAS HACER Grabar HACER Compra SELECCIONAR "SALIDAS.DAT" fi <- 55 MIENTRAS NO Eof( ) HACER SI fi = 55 ENTONCES HACER Cabesal FINSI MIENTRAS nart3 <> nart HACER SELECCIONAR "ARTICULOS.DAT" Siguiente_registro( ) FINMIENTRAS aux <- nart3 HACER Buscar HACER Sale SELECCIONAR "SALIDAS.DAT" Siguiente_registro( ) FINMIENTRAS

120


EN fi + 4,55 ESCRIBIR "Total: " EN fi + 4,62 ESCRIBIR total Activar_pantalla( ) Cerrar_ficheros( ) BORRAR "SALIDAS.DAT" FINPROGRAMA -----------------------------SUBPROGRAMA Calculos SI tipo = 0 ENTONCES entra <- entra + ventas SINO sale <- sale + ventas FINSI FINSUBPROGRAMA -----------------------------SUBPROGRAMA Grabar stock <- stock + entra - sale SELECCIONAR "ARTICULOS.DAT" Escribir_registro( ) nart3 <- aux ventas3 <- sale SELECCIONAR "SALIDAS.DAT" Final_fichero( ) Escribir_registro( ) FINSUBPROGRAMA -----------------------------SUBPROGRAMA Cabecompras Salto_pagina( ) EN 2,65 ESCRIBIR "P g.: " EN 2,71 ESCRIBIR pag EN 4,20 ESCRIBIR "LISTADO DE LAS ENTRADAS DE ARTICULOS AL DIA: " EN 4,66 ESCRIBIR Fecha_sistema( ) EN 6,18 ESCRIBIR "Nยฃmero" EN 6,35 ESCRIBIR "Artยกculo" EN 6,65 ESCRIBIR "Cantidad" EN 7,15 ESCRIBIR "----------------------------------------------------------------" fi <- 9 pag <- pag + 1 FINSUBPROGRAMA ------------------------------

121


SUBPROGRAMA Compra EN fi,16 ESCRIBIR aux EN fi,30 ESCRIBIR articulo EN fi,67 ESCRIBIR entra fi <- fi + 1 FINSUBPROGRAMA -----------------------------SUBPROGRAMA Cabesal Salto_pagina( ) EN 2,65 ESCRIBIR "P g.: " EN 2,71 ESCRIBIR pag EN 4,20 ESCRIBIR "LISTADO DE SALIDAS DE ARTICULOS AL DIA: " EN 4,60 ESCRIBIR Fecha_sistema( ) EN 6,8 ESCRIBIR "Nยฃmero" EN 6,16 ESCRIBIR "Artยกculo" EN 6,40 ESCRIBIR "Cantidad" EN 6,54 ESCRIBIR "PVP" EN 6,64 ESCRIBIR "Importe" EN 7,6 ESCRIBIR "------------------------------------------------------------------------------" fi <- 9 pag <- pag + 1 FINSUBPROGRAMA -----------------------------SUBPROGRAMA Sale Salto_pagina( ) SI stock < minimo ENTONCES EN fi,4 ESCRIBIR "*" FINSI EN fi,6 ESCRIBIR nart3 EN fi,14 ESCRIBIR articulo EN fi,40 ESCRIBIR ventas EN fi,54 ESCRIBIR pvp EN fi,65 ESCRIBIR ventas * pvp total <- total + ventas * pvp fi <- fi + 1 FINSUBPROGRAMA -----------------------------SUBPROGRAMA Buscar MIENTRAS nart <> aux HACER SELECCIONAR "ARTICULOS.DAT"

122


Siguiente_registro( ) FINMIENTRAS FINSUBPROGRAMA -------------------------------------------------------------------------TEMA 9 -------------------------------------------------------------------------Organizaci¢n aleatoria y secuencial -------------------------------------------------------------------------49.-Hacer un pseudocodigo que nos permita dar altas en el fichero DATOS.DAT de organizaci¢n directa, controlando las altas duplicadas. Los campos son: DNI, NOMBRE, APELLIDOS Y PUNTERO para ambos archivos. Algoritmo( dn ) = - Blanco: grabamos el registro en esa posici¢n y ponemos el puntero a cero. - Cero: comprobamos cu l es el valor del campo puntero. Si es cero, grabamos el registro en esa posici¢n (no hay sinonimos) y si es distinto de cero, comparamos el valor con el campo DNI, si son iguales, alta duplicada y dejamos de leer, y si no son iguales, introducimos el resto de la informacion. - Distinto de cero: hay un registro grabado en esa posicion. Si es igual al dato introducido, alta duplicada, y si no son iguales, comprobamos el valor del puntero, si es cero grabamos el registro, y si no es cero, si es igual al campo DNI, alta duplicada y sino se graba la informacion en el archivo SINONIMOS.DAT. -----------------------------PROGRAMA altas ENTORNO: res <- "S" ALGORITMO: ABRIR "DATOS.DAT" ABRIR "SINONIMOS.DAT" MIENTRAS res = "S" HACER dn <- 0

123


nom <- Espacios( 15 ) ape <- Espacios( 30 ) dir <- Espacios( 35 ) aux <- Espacios( 2 ) hueco <- Espacios( 2 ) swh <- 0 sw <- 0 num <- 0 donde <- 0 i <- 0 Borrar_pantalla( ) EN 10,20 ESCRIBIR "D.N.I.: " EN 10,29 LEER dn num <- Algoritmo( dn ) SELECCIONAR "DATOS.DAT" LEER num SI dni = Str( dn ) ENTONCES HACER Alta_duplicada SINO SI Val( dni ) = 0 O dni = Espacios( ) ENTONCES swh <- 1 FINSI SI Val( puntero ) = 0 O puntero = Espacios( ) ENTONCES HACER Introducir puntero <- Str( 0 ) GRABAR num SINO HACER Buscar SI sw = 0 ENTONCES HACER Introducir SI swh = 1 ENTONCES GRABAR num SINO HACER Encontrar_sitio SELECCIONAR "SINONIMOS.DAT" GRABAR 1 puntero <- Str( donde ) SI i = 0 ENTONCES SELECCIONAR "DATOS.DAT" GRABAR num

124


SINO SELECCIONAR "SINONIMOS.DAT" GRABAR Val( aux ) FINSI puntero <- Str( 0 ) SELECCIONAR "SINONIMOS.DAT" GRABAR donde FINSI SINO HACER Alta_duplicada( ) FINSI FINSI FINSI HACER Mas FINMIENTRAS Cerrar_ficheros( ) FINPROGRAMA -----------------------------SUBPROGRAMA Introducir EN 12,20 ESCRIBIR "Nombre: " EN 14,20 ESCRIBIR "Apellidos: " EN 16,20 ESCRIBIR "Direcci¢n: " EN 12,29 LEER nom EN 14,32 LEER ape EN 16,32 LEER dir FINSUBPROGRAMA -----------------------------SUBPROGRAMA Encontrar_sitio SELECCIONAR "SINONIMOS.DAT" LEER 1 SI Val( nombre ) <> 0 Y nombre <> Espacios( ) ENTONCES donde <- Val( nombre ) LEER donde hueco <- Val( nombre ) nombre <- Str( hueco ) SINO donde <- Val( dni ) + 1 dni <- Str( donde ) FINSI FINSUBPROGRAMA

125


-----------------------------SUBPROGRAMA Buscar aux <- puntero i <- 0 MIENTRAS Val( puntero ) <> 0 Y sw = 0 HACER SELECCIONAR "SINONIMOS.DAT" LEER Val( puntero ) SI dni = Str( dn ) ENTONCES EN 20,10 ESCRIBIR "Alta duplicada" Pausa( ) sw <- 1 SINO SI Val( puntero ) <> 0 ENTONCES i <- i + 1 aux <- puntero FINSI FINSI FINMIENTRAS FINSUBPROGRAMA -----------------------------SUBPROGRAMA Alta_duplicada EN 20,10 ESCRIBIR "Alta duplicada" Pausa( ) FINSUBPROGRAMA -------------------------------------------------------------------------50.-Tenemos el fichero DATOS.DAT, que est indexado por el campo APELLIDOS, cuyos campos son: DNI, NOMBRE, APELLIDOS, DIRECCION y PROVINCIA. Hacer un programa que nos permita listar por pantalla todos los registros del fichero, controlando el salto de p gina cuando llegue a la lยกnea veinte. PROGRAMA listar ENTORNO: fi <- 22 ALGORITMO: ABRIR "DATOS.DAT" INDICE "APELLIDO" MIENTRAS NO Eof( ) HACER

126


SI fi = 22 ENTONCES HACER Cabecera FINSI EN fi,2 ESCRIBIR dni EN fi,12 ESCRIBIR nombre EN fi,28 ESCRIBIR apellidos EN fi,55 ESCRIBIR direccion EN fi,69 ESCRIBIR provincia fi <- fi + 1 SI fi = 20 ENTONCES EN 22,20 ESCRIBIR "Pulse INTRO para continuar" Pausa( ) fi <- 22 FINSI Siguiente_registro( ) FINMIENTRAS CERRAR "DATOS.DAT" Cerrar_indices( ) FINPROGRAMA -----------------------------SUBPROGRAMA Cabecera Borrar_pantalla( ) EN 3,4 ESCRIBIR "D.N.I." EN 3,20 ESCRIBIR "NOMBRE" EN 3,35 ESCRIBIR "APELLIDOS" EN 3,60 ESCRIBIR "DIRECCION" EN 3,70 ESCRIBIR "PROVINCIA" fi <- 5 FINSUBPROGRAMA -------------------------------------------------------------------------52.-Tenemos el fichero DATOS.DAT con la misma estructura anterior, que esta indexado por el campo DNI. Crear un programa que nos permita consultar un registro siempre que queramos. PROGRAMA consulta ENTORNO: res <- "S" ALGORITMO:

127


ABRIR "DATOS.DAT" INDICE "DNI" MIENTRAS res = "S" HACER num <- 0 Borrar_pantalla( ) EN 8,20 ESCRIBIR "D.N.I. a buscar: " EN 8,38 LEER num BUSCAR num SI Encontrado( ) ENTONCES EN 10,12 ESCRIBIR "Nombre: ", nombre EN 12,28 ESCRIBIR "Apellidos: ", apellidos EN 14,55 ESCRIBIR "Direcci¢n: ", direccion EN 16,69 ESCRIBIR "Provincia: ", provincia SINO EN 12,20 ESCRIBIR "No est " EN 16,20 ESCRIBIR "Pulse INTRO para continuar" Pausa( ) FINSI res <- Espacios( 1 ) HACER Mas FINMIENTRAS CERRAR "DATOS.DAT" Cerrar_indices( ) FINPROGRAMA

128


REFERENCIAS LINKOGRテ:ICAS http://www.freelibros.org/programacion/manual-de-analisis-y-diseno.html http://www.uap.edu.pe/pregrado1/02/trabajos/02119/prob_varios.htm http://www.desarrolloweb.com/articulos/2143.php fhttp://es.slideshare.net/lhernandezc04/algoritmos-22022980?related=1 Erick D. Flores Ojeda Luis Rolando Guarneros Nolasco Gonzalo Malagテウn Gonzテ。lez Septiembre 2012

129


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.