Curso de Algoritmia

70
Universidad Tecnológica Nacional - U.A Reconquista Bienvenido al curso de Algoritmia. Este es un curso inicial que cubre únicamente los aspectos básicos de la algoritmia y por lo mismo esta pensado para personas que se inician en la programación de computadoras. Este curso está en constante mejora : periódicamente reviso los contenidos, añado más ejercicios, reformulo algunos ejercicios existentes y quito los inadecuados. Por ahora el curso es para leerse en línea sin restricciones de ningún tipo y espero que para seguir así me hagan llegar sus comentarios y sugerencias, para saber si el curso es de utilidad. Capítulo 1: Introducción a los Sistemas de Cómputo 1.1 Definición de Computadora 1.2 Hardware 1.2.1 Procesador o Unidad Central de Proceso 1.2.2 Memoria Principal 1.2.3 Dispositivos de Entrada/Salida 1.2.4 Memoria Auxiliar 1.3 Software 1.3.1 Software de Específico o de Aplicación 1.3.2 Software de Sistema 1.4 Lenguajes de Programación 1.4.1 Lenguajes Máquina 1.4.2 Lenguajes de Bajo Nivel 1.4.3 Lenguajes de Alto Nivel Capítulo 2: Algoritmos, Programas y Conceptos Fundamentales 2.1 1

description

Algoritmos

Transcript of Curso de Algoritmia

Page 1: Curso de Algoritmia

Universidad Tecnológica Nacional - U.A Reconquista

Bienvenido al curso de Algoritmia. Este es un curso inicial que cubre únicamente los aspectos básicos de la algoritmia y por lo mismo esta pensado para personas que se inician en la programación de computadoras. Este curso está en constante mejora :periódicamente reviso los contenidos, añado más ejercicios, reformulo algunos ejercicios existentes y quito los inadecuados.Por ahora el curso es para leerse en línea sin restricciones de ningún tipo y espero que para seguir así me hagan llegar sus comentarios y sugerencias, para saber si el curso es de utilidad.

Capítulo 1: Introducción a los Sistemas de Cómputo 1.1 Definición de Computadora1.2 Hardware 1.2.1 Procesador o Unidad Central de Proceso 1.2.2 Memoria Principal 1.2.3 Dispositivos de Entrada/Salida 1.2.4 Memoria Auxiliar1.3 Software 1.3.1 Software de Específico o de Aplicación 1.3.2 Software de Sistema1.4 Lenguajes de Programación 1.4.1 Lenguajes Máquina 1.4.2 Lenguajes de Bajo Nivel 1.4.3 Lenguajes de Alto Nivel

Capítulo 2: Algoritmos, Programas y Conceptos Fundamentales

2.1 Algoritmo vs Programa2.2 El Pseudocódigo2.3 Conceptos Fundamentales 2.3.1 Identificadores 2.3.2 Tipos de Datos 2.3.3 Variables 2.3.4

1

Page 2: Curso de Algoritmia

Universidad Tecnológica Nacional - U.A Reconquista

Constantes 2.3.5 Instrucciones Básicas de Programación2.4 Expresiones Aritméticas2.5 Expresiones Lógicas2.6 Ejercicios 2.1 2.2

Capítulo 3: Solución de Problemas con la Computadora

3.1 Introduccíon3.2 Análisis del Problema3.3 Diseño del Algoritmo3.4 Implementación del Algoritmo en la Computadora

Capítulo 4: Estructuras de Secuencia

4.1 Concepto4.2 Ejercicios

Capítulo 5: Estructuras de Selección

5.1 Introducción5.2 Estructura de Selección Simple SI5.3 Estructura de Selección Doble SI-SINO 5.4 Estructura de Selección Múltiple EN CASO-SEA5.5 Ejercicios

2

Page 3: Curso de Algoritmia

Universidad Tecnológica Nacional - U.A Reconquista

CAPITULO 1

INTRODUCCIÓN A LOS SISTEMAS DE COMPUTO

1.1 Definición de computadora

Una computadora es una máquina electrónica digital capaz de procesar información y producir datos de salida para lo cual requiere de ciertos datos de entrada. El término digital alude al hecho de que la información almacenada y procesada por la computadora esta representada mediante códigos numéricos binarios formados por ceros y unos ( 0 y 1 ) conocidos como bits.

Lo sorprendente de las computadoras es que pueden realizar operaciones complejas cuando sus circuitos electrónicos solo pueden comparar dos bits o cambiar un bit de 0 a 1. ¿Como es esto posible?, pues debido a las altas velocidades con que se ejecutan estas operaciones sencillas.

Para los informáticos hay una diferencia entre datos e información. Dato vendría a ser la representación de algún hecho, concepto o entidad real, es la materia prima de la información. Información vendría a ser el resultado del procesamiento de los datos. Para este curso no haremos distinción entre dato e información sino que hablaremos de datos de entrada y datos de salida.

Un sistema de procesamiento de la información involucra tres componentes: datos de entrada, procesador y datos de salida, como se muestra en la Fig.1.1. El procesador transforma los datos de entrada en datos de salida ejecutando instrucciones precisas y detalladas que se denominan programas.

Figura 1.1 Proceso de información en una computadora

Una computadora esta compuesta por dos elementos fundamentales: Hardware y Software.

El Hardware es la parte física de la computadora. Es aquello que podemos ver y tocar. Esta formado por el monitor, el teclado, el mouse, la unidad del sistema, la impresora, etc.

El Software es la parte lógica de la computadora y esta formado por el conjunto de programas que controlan el funcionamiento de la computadora.

3

Page 4: Curso de Algoritmia

Universidad Tecnológica Nacional - U.A Reconquista

1.2 El hardware

Daremos aquí una breve descripción de las partes fundamentales del hardware sin entrar en detalles internos. Sin hacer distinción de tamaños, cualquier computadora, puede descomponerse físicamente en cuatro partes fundamentales:

Procesador (llamado también Unidad Central de Proceso o CPU, del inglés, Central Processing Unit). Memoria principal. Dispositivos de entrada y salida E/S. Memoria auxiliar.

1.2.1 Procesador o Unidad Central de Proceso

El procesador es el cerebro de la computadora, el responsable de mantener en funcionamiento coordinado todas las partes de la computadora ejecutando instrucciones precisas y detalladas que son los programas. El procesador esta compuesto de dos partes fundamentales que son: La Unidad Aritmética-Lógica y la Unidad de Control.

La Unidad Aritmética-Lógica, es la responsable de efectuar operaciones aritméticas (suma, resta, multiplicación y división) y operaciones lógicas (comparaciones booleanas).

La Unidad de Control, es la responsable de la sincronización de todas las actividades de la computadora. Decide cuando se obtendrán datos de los dispositivos de entrada para ser llevados a la memoria, cuando se efectuarán cálculos con los datos almacenados en la memoria y cuando se llevarán datos de la memoria a los dispositivos de salida.

1.2.2 Memoria principal

La memoria principal es el espacio donde se almacenan los datos e instrucciones que se requieren para la realización de un proceso. En caso que los datos e instrucciones no quepan íntegramente en la memoria principal, entonces serán cargados hacia ella por etapas, pero en todo caso, cualquier operación se realiza en base al contenido actual de la memoria principal. A la memoria principal se la conoce también como memoria RAM (Random Access Memory, Memoria de Acceso Aleatorio).

Las características más relevantes de la memoria principal son las siguientes:

La memoria principal es un espacio de almacenamiento temporal por lo que los datos no guardados en un medio de almacenamiento permanente se pierden al apagar la computadora o al salir un programa de la memoria. Esta íntimamente ligada al procesador por lo que el acceso a la memoria principal es muy rápido lo que le permite al procesador acceder a la memoria principal millones de veces por segundo. Es de tamaño reducido en comparación a la memoria secundaria

4

Page 5: Curso de Algoritmia

Universidad Tecnológica Nacional - U.A Reconquista

La unidad más pequeña de memoria es el bit. Un bit puede almacenar un sólo dígito binario, 0 ó 1. Le sigue a esto el byte, que esta compuesto de 8 bits. Un byte tiene la capacidad de almacenar un carácter de información. En cambio para almacenar información numérica se requiere de mayor memoria que puede ser 2, 4 e incluso 8 bytes consecutivos, dependiendo del tipo de dato numérico.

Con cada byte de memoria se asocian dos cosas: dirección y contenido (la combinación de ceros y unos que puede almacenar). El procesador accede a una posición de memoria en base a su dirección.

Siempre que una nueva información se almacene en una posición de memoria, se destruye la información actual almacenada en esa posición y no se puede recuperar.

La memoria principal puede subdividirse en: memoria ROM, EPROM, RAM, DRAM, CMOS y CACHE. La memoria a que se hizo referencia en la descripción anterior se denomina memoria RAM (Random Access Memory, Memoria de Acceso Aleatorio). Para una descripción sobre los otros tipos de memoria puede recurrir a cualquier literatura técnica al respecto.

1.2.3 Dispositivos de entrada/salida (E/S)

También conocidos como periféricos de E/S. Estos dispositivos permiten comunicar la computadora con el usuario permitiendo el ingreso de datos a la computadora (dispositivos de entrada) y la salida de información de la computadora (dispositivos de salida). Es decir, los dispositivos de E/S son una interfaz entre el usuario y la computadora.

Entre los dispositivos de entrada más comunes se cuentan el teclado y el mouse. Existen otros dispositivos de entrada como el scanner, el lápiz óptico, etc.

Entre los dispositivos de salida más comunes tenemos: la pantalla y la impresora. Existen otros dispositivos de salida como los trazadores de gráficos, plotters, etc.

1.2.4 Memoria auxiliar

Son dispositivos en los que se puede almacenar datos y programas de forma permanente. Entre los dispositivos más comunes de este tipo tenemos: los discos duros y los discos flexibles. Existen otros dispositivos de almacenamiento permanente como las unidades de cinta magnética, los discos compactos, los discos ópticos, etc.

Las características más relevantes de la memoria secundaria son las siguientes:

Es un espacio de almacenamiento permanente. Un disco duro tiene un espacio de almacenamiento muchísimo mas grande que el proporcionado por la memoria principal. Así un disco duro de 8 gigabytes es 250 veces la capacidad de almacenamiento de la memoria principal (asumiendo una memoria principal típica de 32 megabytes de RAM). El procesador no actúa directamente con la memoria secundaria por lo que el acceso a la memoria secundaria es lento.

5

Page 6: Curso de Algoritmia

Universidad Tecnológica Nacional - U.A Reconquista

Figura 1.2 Organización física de una computadora

1.3 El software

El Software es el conjunto de datos y programas que usa la computadora y se guardan en algún dispositivo del hardware como, por ejemplo, un disco duro. El software es intangible (usted no lo puede tocar). Suponga que tiene un disco flexible conteniendo un programa, cuando usted borra el programa los átomos y moléculas del disco son los mismos que antes, pero ahora el programa ya no está. Se ha removido algo intangible sin alterar el medio tangible en el que estaba almacenado.

Un programa es un conjunto detallado de instrucciones que instruyen al procesador para realizar determinados procesos. Los datos pueden ser cualquier información que necesite el programa: carácteres, números, imágenes, etc. Para efectos de la memoria de la computadora (principal y secundaria) no hay ninguna distinción entre programas y datos.

1.3.1 Software específico o de aplicación

Son programas que tienen una aplicación específica tales como la preparación de nóminas, procesamiento de texto, procesamiento de imágenes, procesamiento de audio, etc.

Es decir, son programas que responden a una necesidad concreta y que ayudan a las persona a realizar sus trabajos. El mercado del software esta lleno de software de aplicación. Algunos programas de aplicación conocidos son: Microsoft Word, Microsoft Excel, Microsoft Power Point, Adobe Photoshop, Corel Draw, WinZip, Internet Explorer, etc.

1.3.2 Software de sistema

Son programas indispensables para el funcionamiento de la computadora. Estos programas son, básicamente, el sistema operativo, los compiladores e intérpretes y los programas de utilidad.

6

Page 7: Curso de Algoritmia

Universidad Tecnológica Nacional - U.A Reconquista

El software de sistema más importante es el sistema operativo. El sistema operativo es una colección compleja de muchos programas y es el encargado de coordinar el funcionamiento de los componentes hardware y software de un sistema de cómputo. El sistema operativo es responsable de iniciar la ejecución de otros programas proporcionando los recursos necesarios. Cuando un programa esta en ejecución, el sistema operativo maneja los detalles del hardware para dicho programa. Por ejemplo, cuando desde un programa procesador de textos, como Microsoft Word, usted decide guardar el documento que ha elaborado, es el sistema operativo el encargado de almacenar el documento como un archivo en el disco duro o disco flexible, según haya elegido. Así pues, entre muchas otras cosas, el sistema operativo se encarga del almacenamiento y recuperación de archivos. Los sistemas operativos pueden ser: monousuarios (un sólo usuario) y multiusuarios (diferentes usuarios), atendiendo al número de usuarios y monocarga (una sóla tarea) o multitarea (múltiples tareas), atendiendo al número de tareas (procesos) que puede realizar simultáneamente

Los sistemas operativos modernos normalmente vienen con una interfaz gráfica de usuario que permite a los usuarios interactuar fácilmente con el sistema operativo mediante menús, íconos, el mouse y el teclado. Como ejemplos de sistemas operativos tienen los siguientes: Unix, Windows 98, Windows NT, Linux, Solaris y System7.

Los compiladores e intérpretes son programas traductores que traducen un programa escrito en un determinado lenguaje de programación al lenguaje máquina que es el lenguaje del procesador. Cada lenguaje de programación tiene su propio compilador o intérprete.

1.4 Los Lenguajes de Programación

Los lenguajes de programación, como el nombre lo indica, sirven para escribir programas (instrucciones). Las instrucciones escritas en la mayoría de los lenguajes de programación no son entendibles directamente por el procesador sino que requieren de pasos intermedios de traducción para convertir estas instrucciones al lenguaje del procesador, conocido como lenguaje máquina. Este proceso de traducción puede hacerse mediante un compilador, un intérprete o con una combinación de los dos.

Existen cientos de lenguajes de programación los cuales pueden dividirse en tres tipos generales:

Lenguajes máquina. Lenguajes de bajo nivel. Lenguajes de alto nivel.

1.4.1 Lenguajes máquina

Los lenguajes máquina permiten escribir instrucciones directamente entendibles por el procesador. Una instrucción máquina consiste en una secuencia de dígitos binarios (0 y 1) en la memoria principal, que le indica al procesador que operación máquina debe realizar. Una colección de instrucciones máquina en la memoria principal se denomina programa en lenguaje máquina o (más comumemente) programa ejecutable. Un programa ejecutable tiene, normalmente, millones de instrucciones máquina.

Por otro lado, cada tipo de procesador tiene su propio lenguaje máquina (su propio juego de instrucciones). De manera que un programama ejecutable que corre en una computadora

7

Page 8: Curso de Algoritmia

Universidad Tecnológica Nacional - U.A Reconquista

equipada con un procesador Pentium II no podría correr, por ejemplo, en una Apple Power Macintosh.

Como ejemplo, observe la siguiente instrucción escrita en lenguaje máquina.

1001 1111 1011 1101

1.4.2 Lenguajes de bajo nivel

Los lenguajes de bajo nivel representan un paso hacia la humanización de los lenguajes de programación, son más fáciles que los lenguajes máquina pero al igual que ellos son dependientes de la máquina. Los lenguajes de bajo nivel son lenguajes simbólicos siendo el más importante el lenguaje ensamblador. En el lenguaje ensamblador las instrucciones se expresan utilizando nemotécnicos. Por ejemplo, ADD para la suma, SUB para la resta, etc.

Como ejemplo, observe la siguientes instrucciones escritas en el lenguaje ensamblador:

MOV AX, A ADD AX, B MOV C, AX

Este conjunto de instrucciones se interpreta como "Sumar el contenido almacenado en las posiciones de memoria A y B, y almacenar el resultado en la posición de memoria C". Un programa escrito en ensamblador es posteriormente traducido al lenguaje máquina utilizando un programa denominado ensamblador simbólico.

1.4.3 Lenguajes de alto nivel

Los lenguajes de alto nivel son lenguajes humanizados en los que las instrucciones se escriben utilizando frases del inglés cotidiano (o una mezcla de inglés y otro idioma) y contienen notaciones matemáticas de uso común, facilitando así el aprendizaje del lenguaje y la escritura de programas. Cada instrucción en un lenguaje de alto nivel equivale a muchas instrucciones en lenguaje máquina.

Por ejemplo, la instrucción:

C = A + B;

Es el equivalente, en Java, de las tres instrucciones escritas en ensamblador en el punto 1.3.2. Note la reducción en el número de instrucciones y el parecido con una expresión matemática común.

Existen muchos lenguajes de alto nivel entre los que podemos mencionar los siguientes: C, C++, Java, Pascal, Eiffel, Clipper, Ada, Smalltalk, Visual Basic, etc.

Al programa escrito en un lenguaje de programación de alto nivel se conoce como código fuente o programa fuente. Por ejemplo, aquí tiene el código fuente completo de un programa simple escrito en Java:

8

Page 9: Curso de Algoritmia

Universidad Tecnológica Nacional - U.A Reconquista

Import java.io. *; public class Bienvenida{ public static void main( String args[] ) throws IOException { System.print.out( "Bienvenido a Java" ); }}

El código fuente de un programa no puede ser ejecutado por el procesador sino que se requiere de un proceso previo de traducción al lenguaje máquina. Este proceso de traducción puede llevarse a cabo de una de las siguientes formas enunciadas a continuación, dependiendo del lenguaje de programación:

Traduciendo previamente todo el código fuente a código máquina obteniéndose un código denominado código ejecutable o programa ejecutable. Este programa ejecutable puede cargarse a la memoria y ejecutarse sin requerir ya del código fuente. Este proceso de traducción lo realiza un programa especializado denominado compilador, que es propio del lenguaje de programación que se está utilizando. Así, existen compiladores para el lenguaje C, compiladores para el lenguaje C++, compiladores para el lenguaje Pascal, compiladores para el lenguaje Ada, etc. Desde el punto de vista de la forma de ejecución, a este tipo de lenguajes se denominan lenguajes compilados.

Leyendo el código fuente instrucción por instrucción y convirtiéndolo a código máquina cada vez que se vaya a ejecutar el programa. Este proceso de traducción lo realiza un programa especializado denominado intérprete, que es propio del lenguaje de programación que se está utilizando. Un ejemplo de lenguaje interpretado es el lenguaje Basic. Desde el punto de vista de la forma de ejecución, aA este tipo de lenguajes se denominan lenguajes interpretados. Cuando se usa un intérprete humano como intermediario la conversación es más lenta que cuando se conversa directamente. El mismo es verdad para los programas intérpretes de computadora. Esto contrasta con un programa ejecutable (en los lenguajes compilados) que pueden ser ejecutados directamente sin necesidad de intermediarios. Una tercera forma es una forma híbrida y usa tanto un compilador como un intérprete. En esta, el código fuente se compila generándose un cierto código intermedio (p-code en Visual Basic, bytecode en Java). Luego, el código intermedio generado es ejecutado por el intérprete. Desde el punto de vista de la forma de ejecución, a este tipo de lenguajes se denominan lenguajes híbridos.

9

Page 10: Curso de Algoritmia

Universidad Tecnológica Nacional - U.A Reconquista

10

Page 11: Curso de Algoritmia

Universidad Tecnológica Nacional - U.A Reconquista

CAPITULO 2

ALGORITMOS, PROGRAMAS Y CONCEPTOS FUNDAMENTALES

2.1 Algoritmo vs Programas

Un Algoritmo es un conjunto ordenado y finito de pasos o instrucciones que conducen a la solución de un problema. La naturaleza de los problemas varían con el ámbito o con el contexto donde están planteados; así, existen problemasMatemáticos, químicos, filosóficos, etc. Según esto la naturaleza de los algoritmos también es variada y no todos ellos pueden ser ejecutados por la computadora. En este curso consideramos aquellos algoritmos que expresan soluciones usando reglas cuantitativas cuyas instrucciones pueden ser introducidas en la computadora, a este tipo de algoritmos se denominanAlgoritmos Computacionales.

En la resolución de un problema con la computadora la parte pensante esta en el algoritmo. Así pues la eficacia de un programador no esta en conocer la herramienta de programación, cosa necesaria, sino en saber resolver problemas con la computadora para lo cual se requiere conocer un concepto conocido como metodología de la programación cuyo eje central es el algoritmo.Una vez que la solución de un problema ha sido expresada mediante un algoritmo el paso siguiente es convertirlo a programa para lo cual se elige un lenguaje de programación. De modo que un programa resulta ser la implementación de un algoritmo en un determinado lenguaje de programación. Esto significa, por otro lado, que un algoritmo es independiente del lenguaje deProgramación.

Figura 2.1 Problema, algoritmo y programa

2.2 El Pseudocódigo

El pseudocódigo es una herramienta algorítmica que permite escribir pseudoprogramas (una imitación de un programa real) utilizando un lenguaje de pseudoprogramación que es una imitación de los lenguajes de programación de alto nivel. Así, un pseudocódigo es una combinación de símbolos (+, -, *, /, %, >, >=, <, <=,!=, ==, y, o, no), términos (Leer, Imprimir, Abrir, Cerrar, Hacer... Mientras, Mientras... Hacer, Para... Mientras, etc.) y otras características comúnmente utilizadas en uno o más lenguajes de alto nivel.

No existen reglas que determinen que es o no es un pseudocódigo, sino que varía de un programador a otro. El objetivo del pseudocódigo es permitir al programador centrarse en los aspectos lógicos de la solución evitando las reglas de sintáxis de un lenguaje de programación. Posteriormente el pseudocódigo debe ser traducido a programa usando un lenguaje de programación de alto nivel como Java, C++, C, etc.

11

Page 12: Curso de Algoritmia

Universidad Tecnológica Nacional - U.A Reconquista

Ejemplo 2.1: - Diseñe un algoritmo para preparar una limonada.

INICIO Llenar una jarra con un litro de agua Echar el jugo de tres limones Echar cuatro cucharadas de azucar Remover el agua hasta disolver completamente el azucarFIN

Ejemplo 2.2 :- Diseñe un algoritmo que permita hallar la suma y el promedio de tres números.

INICIO LEER numero1, numero2, numero3 suma = numero1 + numero2 + numero3 promedio = suma / 3 IMPRIMIR suma, promedioFIN

Notas:-

El término LEER significa obtener un dato de algún dispositivo de entrada, como el teclado, y almacenarlo en una variable.

Una variable es una localización en la memoria que tiene un nombre y cuyo contenido puede cambiar a lo largo de la ejecución de un programa. Así numero1, numero2 y numero3 son variables.

El término IMPRIMIR significa mostrar el valor de una variable en algún dispositivo de salida, como la pantalla.

Para una explicación más detallada de estos conceptos vea Variables e Instrucciones Básicas de Programación más adelante en este mismo capítulo.

2.3 Conceptos Fundamentales

El recurso fundamental utilizado por un programa es la memoria. Es en la memoria donde un programa almacena sus datos e instrucciones. Los datos se almacenan en localizaciones en la memoria denominadas variables. Cada variable puede almacenar un solo tipo de dato (entero, real, carácter, booleano, etc) y requiere de un identificador para poder tener acceso a su contenido. En esta parte del curso veremos este y otros aspectos fundamentales.

2.3.1 Identificadores

Un identificador es un nombre que puede darse a una variable, a una constante y en general a cualquier elemento de un programa que necesite nombrarse.

Los lenguajes de programación imponen ciertas reglas para la creación de identificadores. Así, por ejemplo, en el lenguaje Java, existen dos reglas:

El primer carácter debe ser una letra, el símbolo de subrayado o el símbolo de dólar. Los demás caracteres pueden ser letras, símbolos de subrayado, símbolos de dólar o dígitos. No puede ser ninguna palabra reservada del lenguaje Java.

12

Page 13: Curso de Algoritmia

Universidad Tecnológica Nacional - U.A Reconquista

Así, por ejemplo, son válidos los siguientes identificadores:

sueldoBruto Sueldo bruto de un empleado edad Edad de una persona numero_hijos Número de hijos de un empleado DIA Nombre de un día de la semana

2.3.2 Tipos de Datos

Los datos son los objetos de información sobre los que actúa un programa. Un dato puede ser un simple carácter como 'a', un valor entero tal como 35, un número real tal como 2.345 o una cadena tal como "algoritmia".

A nivel máquina los datos se representan internamente como una secuencia de bits (dígitos 0 y 1). Los lenguajes de alto nivel evitan estos manejos internos mediante el concepto de tipo de dato. En la mayoría de los lenguajes de programación los tipos de datos simples o primitivos se pueden clasificar como:

Enteros (dato numérico sin componente decimal y puede ser positivo o negativo). Reales (dato numérico con componente decimal y puede ser positivo o negativo). carácter (un sólo carácter) booleanos (verdadero o falso)

Así, en el lenguaje Java, existen los siguientes tipos de datos:

Tabla 2.2 - Tipos de Datos Primitivos del Lenguaje Java

Clasificación Nombre del Tipo Rango de Valores Permitidos Carácter char 0 a 65535 Entero byte -128 a 127

Short -32768 a 32767 Int 2147483648 a 2147483647 Long -9223372036854775808 a 9223372036854775807 Real float -3.4 x 1038 a 3.4 x 1038

Double Booleano boolean true, false

También la mayoría de los lenguajes de programación permiten crear tipos compuestos conocidos también como tipos abstractos de datos. Estos son tipos de datos creados por el programador para responder a un problema específico o general, usando para ello los tipos simples u otros tipos abstractos.

13

Page 14: Curso de Algoritmia

Universidad Tecnológica Nacional - U.A Reconquista

2.3.3 Variables

Una variable es una localización en la memoria principal que almacena un dato que puede cambiar a lo largo de la ejecución del programa.

Una variable tiene asociada dos cosas fundamentales: un identificador y un tipo de dato. El nombre identifica de manera única la localización de memoria donde se almacena el dato. El tipo de dato especifica la naturaleza de dato que puede almacenar la variable. Según el tipo de dato de la variable podemos tener variables enteras, variables reales, variables de carácter, variables booleanas, etc.

En el gráfico siguiente se muestran dos variables con sus contenidos en memoria. La variable llamada Edad (de tipo entero) cuyo contenido es 27 y la variable llamada Descuento (de tipo real) cuyo contenido es 23.57.

Edad 301

Descuento 23.57

2.3.4 Constantes

Se denominan constantes a todos aquellos valores que no cambian durante la ejecución de un programa. Según el tipo de dato podemos tener constantes enteras, constantes reales, constantes de carácter y constantes de cadena.

Constantes enteras

12, 20300, 15, etc.

Constantes reales

3.1416, 2345.456, etc.

Constantes de carácter

'A', 'B', ';', '<', '+', etc.

Constantes de cadena

"Hola", "Algoritmos Computacionales", etc.

Constantes lógicas

verdadero, falso

14

Page 15: Curso de Algoritmia

Universidad Tecnológica Nacional - U.A Reconquista

Normalmente los lenguajes de programación permiten dar nombres a determinadas constantes. Por ejemplo, el número de días de la semana (7) es un valor constante y puede recibir el nombre NUMDIAS.

2.3.5 Instrucciones Básicas de Programación

Las principales instrucciones básicas de programación son las siguientes: asignación, entrada y salida.

Instrucción de asignación: consiste en dar a una variable el valor de una expresión, el valor de otra variable o el valor de una constante. La asignación tiene efecto destructivo en el sentido que destruye el valor previo de la variable que recibe la asignación.

Instrucción de entrada: consiste en obtener un dato de un dispositivo de entrada, como el teclado, y almacenarlo en una variable.

Instrucción de salida: consiste en mostrar el valor de una variable en un dispositivo de salida como la pantalla.

Tabla 2.3 Instrucciones básicas de programación

Instrucción Tipo de Instrucción

LEER variable Entrada

variable = expresion Asignación

IMPRIMIR variable Salida

Ejemplo 2.3:- Instrucciones de entrada y de salida

La siguiente instrucción de entrada, obtiene la edad de una persona desde un dispositivo de entrada, como el teclado, y lo almacena en la variable llamada edad:

LEER edad

La siguiente instrucción de entrada, obtiene tres números desde un dispositivo de entrada, como el teclado, y los almacena en las variables num1, num2 y num3:

LEER num1, num2, num3

La siguiente instrucción de salida, muestra el contenido de la variable sueldoNeto en un dispositivo de salida como la pantalla:

IMPRIMIR sueldoNeto

La siguiente instrucción de salida, muestra el contenido de las variables montoPag y montoDes en un dispositivo de salida como la pantalla:

IMPRIMIR montoPag, montoDes

15

Page 16: Curso de Algoritmia

Universidad Tecnológica Nacional - U.A Reconquista

Ejemplo 2.4:- Instrucción de asignación.

La siguiente instrucción de asignación, asigna el valor constante 25 a la variable kilometros:

kilometros = 25

Antes de la asignación

Si asuminos que es la primera vez que la variable kilometros recibe una asignación, entonces su valor actual es desconocido: kilometros ?

Después de la asignación: Kilometros 25

La siguiente instrucción de asignación, asigna a la variable vara el valor de la variable varb:

vara = varb

Luego de esto, ambas variables tienen el mismo valor.

Antes de la asignación Asumamos que vara y varb tienen actualmente los valores mostrados

Varb 12

Vara 15

Después de la asignación

Vara toma el valor de varb, luego de lo cual ambas variables tienen el mismo valor. Note que el valor anterior de vara se destruye de forma irrecuperable.

Varb 12

Vara 12

16

Page 17: Curso de Algoritmia

Universidad Tecnológica Nacional - U.A Reconquista

La siguiente instrucción de asignación, calcula el valor de la expresión del lado derecho y lo asigna a la variable montoPag:

montoPag = montoBru - montoDes

Antes de la asignación

Asumamos que actualmente montoBru y montoDes tienen los valores mostrados y que montoPag tiene un valor desconocido al no haber recibido ninguna asignación anterior:

montoBru 1350

montoDes 150

montoPag ?

Después de la asignación

MontoBru 1350

MontoDes 150

MontoDes 1200

2.4 Expresiones Aritméticas

Una expresión aritmética es un conjunto de variables y/o constantes unidas o relacionadas por paréntesis y operadores aritméticos.

Los operadores aritméticos son los siguientes:

Tabla 2.4 Operadores aritméticos

Operador Significado + Suma - Resta * Multiplicación / División % Residuo de división entera

17

Page 18: Curso de Algoritmia

Universidad Tecnológica Nacional - U.A Reconquista

En todos los lenguajes existen los operadores +, -. * y /, mientras que el operador % es propio de C, C++ y Java.

Notas

1.Si en una operación ambos operandos son enteros, entonces el resultado de la operación es un entero. 2.Si en una operación uno o ambos operandos son reales, entonces el resultado de la operación es un real. 3.El operador / produce un cociente entero si los dos operandos son enteros. Esto significa que se pierde la parte decimal si la división no es exacta. Esta es una consecuencia de la nota 1. 4.El operador / produce un cociente real si uno o los dos operandos son reales. Esta es una consecuencia de la nota 2.

Por ejemplo

7 / 2 es igual a 3 y no 3.5 como lo es matemáticamente. Esto debido a que 7 y 2 son enteros y al dividir dos enteros se pierde la parte fraccionaria, no se redondea.

En cambio:

7.0 / 2 es igual a 3.5 ya que si uno o los dos operandos son reales, entonces el resultado es real. En este caso 7.0 es real.

Ejemplo 2.5:- Expresiones aritméticas. sueldoBru = sueldoBas + 0.15*montoVen numero = centenas*100 + decenas*10 + unidades e = a*b*b / 3 + (a*a + b) / (b + c)

Ejemplo 2.6:- Diseñe un algoritmo que determine el cociente y el residuo de una división entera.

VARIABLES ENTERO m, m

INICIO LEER m, n cociente = m/n residuo = m%n IMPRIMIR residuo, cocienteFIN

Nota:- Observe que m/n es entero debido a que amnbas variables son enteras.

2.5 Expresiones Lógicas

Una expresión lógica o booleana es un conjunto de variables y/o constantes unidas mediante operadores lógicos y operadores relacionales.

Una expresión lógica solo puede tomar uno de dos valores: verdadero o falso. Las expresiones lógicas son ampliamente utilizadas en las estructuras selectivas y las estructuras repetitivas.

18

Page 19: Curso de Algoritmia

Universidad Tecnológica Nacional - U.A Reconquista

En la tabla 2.4 se muestran los operadores relacionales y en la tabla 2.5 se muestran los operadores lógicos:

Tabla 2.4 Operadores relacionales

Operador Significado > mayor >= mayor o igual que < menor <= menor o igual que == igual a != diferente de

Tabla 2.5 Operadores lógicos

Operador Significado no (not) negación y (and) conjunción o (or) disyunción

Ejemplo 2.7:- Expresar las siguientes condiciones como expresiones lógicas:

a. B es mayor que 2.b. M es menor ó igual que 5 pero mayor que 25.c. P es igual a 6 ó mayor que Q.d. N es par menor que 50.e. M es mayor que A, B y C.f. Z esta en el intervalo de 4 a 100.g. T es igual a 2, 3 ó 4.

a. B > 2 b. ( M <= 5 ) y ( M > 25 ) c. ( P == 6 ) o ( P > Q ) d. ( ( N % 2 ) == 0 ) y ( N < 50 ) e. (M > A ) y ( M > B ) y ( M > C ) f. (Z >= 4 ) y ( Z <= 100 ) g. (T == 2 ) o ( T == 3 ) o ( T== 4 )

2.6 Ejercicios

Ejercicio 2.1:-Considere dos variables A y B, cuyos valores se muestran en el gráfico, determine que valores tendrán A y B luego de las siguientes instrucciones de asignación:

A 12

B 13

19

Page 20: Curso de Algoritmia

Universidad Tecnológica Nacional - U.A Reconquista

A = B + AB = B + A

Solución:

A = B + A

A 25

B 13

B = B + A

A 25

B 38

Ejercicio 2.2:- ¿Cuáles son los valores de A y B luego de las siguientes instrucciones?

A = 3B = 4C = 2*A*BA = A+2B = C-A

Solución:

A = 3 asigna a A el valor 3B = 4 asigna a B el valor 4C = 2*A*B asigna a C el valor 24 (resultado de calcular 2*3*4)A = A+2 asigna a A el valor 5 (resultado de calcular 3+2), esto borra el valor 3 que tenía anteriormenteB = C-A asigna a B el valor 19 (resultado de calcular 24-5), esto borra el valor 4 que tenía anteriormente

20

Page 21: Curso de Algoritmia

Universidad Tecnológica Nacional - U.A Reconquista

CAPITULO 3

SOLUCION DE PROBLEMAS CON LA COMPUTADORA

3.1 Introducción

Etimológicamente, la palabra problema deriva del griego proballein y significa algo lanzado hacia delante. Un problema es un asunto o un conjunto de cuestiones que se plantean para ser resueltas. La naturaleza de los problemas varía con el ámbito o con el contexto donde están planteados; así, existen problemas matemáticos, químicos, filosóficos, etc. Consideramos aquí sólo aquellos problemas cuya solución se puede calcular utilizando una serie de reglas introducidas en la computadora.

No existe un método universal que permita resolver cualquier problema. En general, la resolución de problemas es un proceso creativo donde el conocimiento, la habilidad y la experiencia tienen un papel importante. El proceder de manera sistemática (sobre todo si se trata de problemas complejos) puede ayudar en la solución.

En general, la solución de problemas con la computadora se puede dividir en tres etapas:

Análisis del problema Diseño del algoritmo Implementación del algoritmo en la computadora

3.2 Análisis del Problema

El análisis del problema es la primera fase en la resolución de un problema con la computadora. El objetivo del análisis es comprender y definir claramente la naturaleza del problema. En esta etapa es fundamental establecer con claridad que hará el programa que se pretende construir. No se puede abordar una solución mientras no se sepa a donde se quiere llegar.

Para poder definir el problema con precisión se requiere especificar con detalle cuales serán los datos de entrada y cuales los datos de salida. La forma como se procesará la información de entrada para producir los datos de salida es tarea de la etapa del diseño del algoritmo; pero, en esta etapa puede establecerse un esbozo de la solución.

Así pues, el análisis del problema comprende los siguientes aspectos:

Definición del problema. Especificaciones de entrada. Especificaciones de salida.

3.3 Diseño del Algoritmo

En esta etapa se construye un algoritmo que resuelva el problema analizado utilizando una herramienta algorítmica como el pseudocódigo. Aquí se decide como hará el algoritmo para producir los datos de salida sobre la base de los datos de entrada.Esto puede requerir de acciones secuenciales, tomas de decisiones y repeticiones de procesos.

21

Page 22: Curso de Algoritmia

Universidad Tecnológica Nacional - U.A Reconquista

Para un diseño eficiente del algoritmo es importante abordar la solución mediante una metodología de diseño. Una estrategia popular consiste en aplicar el dicho romano "divide y vencerás". Este método consiste en dividir el problema en subproblemas más simples, para facilitar la comprensión y solución del problema. Si algún subproblema todavía es complejo puede a su vez subdivirse en otros subproblemas. Este proceso de subdivisión puede continuar hasta obetener subproblemas simples de resolver. A esta metodología de diseño se conoce como el método del diseño modular descendente, debido a que cada subproblema puede resolverse mediante un módulo de programa.

Figura 2.1 Diseño descendente

3.4 Implementación del Algoritmo en la Computadora

Esta etapa es relativamente mecánica y consiste en codificar el algoritmo siguiendo las reglas sintácticas y semánticas de un determinado lenguaje de programación. Al resultado de la codificación se denomina código fuente o programa fuente. Luego de ello el programa fuente debe ser ejecutado y probado para verificar si los resultados obtenidos son los esperados.

La verificación del programa se efectúa con una amplia variedad de datos de entrada, llamados datos de test o datos de prueba, que determinarán si el programa tiene errores ("bugs"). Los datos de prueba comprenden: valores normales de entrada, valores extremos de entrada que comprueben los límites del programa y valores de entrada que comprueben aspectos especiales del programa. Si los resultados obtenidos no son los esperados se procede a depurar el programa. La depuración consiste en encontrar los errores del programa para efectuar las correcciones pertinentes.

Así pues, la implementación de un algoritmo en la computadora comprende los siguientes aspectos:

Codificación del algoritmo. Verificación y depuración de la solución.

Ejemplo 3.1:- Se desea un programa para calcular el monto bruto, el monto del impuesto y el monto a pagar por la compra de cierta cantidad de unidades de un mismo tipo de producto cuyo costo por unidad (libre de impuestos) es de S/.25.45. Lacompra esta sujeta a un impuesto del 18%.

Análisis del problema

De la lectura del problema encontramos los siguientes datos de entrada y datos de salida:

22

Page 23: Curso de Algoritmia

Universidad Tecnológica Nacional - U.A Reconquista

Datos de entrada

Número de unidades adquiridas: unidades Costo del producto: S/. 25.45 Impuesto: 18%

Datos de salida

Monto bruto: montobruto Monto del impuesto: montoimpuesto Monto a pagar: montopagar

Observe que el costo del producto y el porcentaje del impuesto ya tienen valores preestablecidos. Según esto, estos datos no requerirán ser ingresados.

Diseño del algoritmo

Primer diseño descendente

En un primer momento el problema puede descomponerse de manera bastante general. En este caso se ha descompuesto en tres pasos.

Inicio 1. Leer unidades 2. Cálculo de montos 3. Imprimir montoBruto, montoImpuesto, montoPagarFin

Primer refinamiento

Luego de un refinamiento en el subproblema Cálculo de montos llegamos al siguiente diseño:

Inicio 1. Leer unidades 2. Cálculo de montos 2.1 Calcular el monto bruto 2.2 Calcular el monto del impuesto 2.3 Calcular el monto a pagar 3. Imprimir montoBruto, montoImpuesto, montoPagarFin

Segundo refinamiento

Finalmente llegamos al algoritmo definitvo:

Inicio // Ingreso de datos Leer unidades // Cálculo de montos montobruto = unidades * 25.45 montoimpuesto = montobruto * 0.18 montopagar = montobruto + montoimpuesto

// Salida de resultados

23

Page 24: Curso de Algoritmia

Universidad Tecnológica Nacional - U.A Reconquista

Imprimir montoimpuesto, montobruto, montopagarFin

Codificación del algoritmo

A continuación se muestra la codificación del algoritmo en el lenguaje de programación Java.

package Secuencia;

import java.applet.*;import java.awt.*;

public class Tienda extends Applet{ private Button BtnCalcular; private Label LblUnidades; private TextArea TxtRes; private TextField TxtUnidades;

public boolean action( Event evento, Object objeto ) { // Declaración de variables int unidades; double montoBruto, montoImpuesto, montoPagar;

// Declaración de constantes final double PRECIO = 25.45; final double IGV = 0.18;

// Ingreso de datos unidades = Integer.valueOf(TxtUnidades.getText()).intValue();

// Cálculo de montos montoBruto = unidades * PRECIO; montoImpuesto = montoBruto * IGV; montoPagar = montoBruto + montoImpuesto;

// Salida de resultados TxtRes.setText(""); TxtRes.append("Monto bruto : S/." + montoBruto + "\n"); TxtRes.append("Monto del impuesto : S/." + montoImpuesto + "\n"); TxtRes.append("Monto a pagar : S/." + montoPagar);

return false; }

public void init() { setLayout(null); setSize(382, 215);

LblUnidades = new Label("Unidades"); LblUnidades.setBounds(22, 28, 55, 27); TxtUnidades = new TextField();

24

Page 25: Curso de Algoritmia

Universidad Tecnológica Nacional - U.A Reconquista

TxtUnidades.setBounds(88, 26, 125, 30); BtnCalcular = new Button("Calcular"); BtnCalcular.setBounds(232, 26, 125, 30); TxtRes = new TextArea(); TxtRes.setFont(new Font("courier", 0, 12)); TxtRes.setBounds(22, 70, 335, 124);

add(LblUnidades); add(TxtUnidades); add(BtnCalcular); add(TxtRes); }}

Así los valores finales de A y B son 5 y 19, respectivamente.

25

Page 26: Curso de Algoritmia

Universidad Tecnológica Nacional - U.A Reconquista

26

Page 27: Curso de Algoritmia

Universidad Tecnológica Nacional - U.A Reconquista

CAPITULO 4

ESTRUCTURAS DE SECUENCIAS

4.1 Concepto

Una estructura secuencial es aquella en la que las instrucciones estan una a continuación de la otra siguiendo una secuencia única, sin cambios de ruta. La estructura secuencial tiene una entrada y una salida.

En la Figura 3.1 se muestra el pseudocódigo de una estructura secuencial.

inicio acción 1 acción 2 acción 3 . . . fin

Figura 3.1 Pseudocódigo de una estructura secuencial

4.2 Ejercicios

Ejercicio 4.1:- Diseñe un pseudocódigo que halle el área y el perímetro de un rectángulo. Considere las siguientes fórmulas:area = base x altura, perimetro = 2 x (base+altura).

Análisis

Datos de entrada

Base del rectángulo ( base ) Altura del rectángulo ( altura )

Datos de salida

Area del rectángulo ( area ) Perímetro del rectángulo ( perimetro )

Algoritmo

VARIABLES REAL base, altura, area, perimetro

27

Page 28: Curso de Algoritmia

Universidad Tecnológica Nacional - U.A Reconquista

INICIO LEER base, altura area = base*altura perimetro = 2*(base+altura) IMPRIMIR area, perimetroFIN

Ejercicio 4.2:- Diseñe un pseudocódigo para convertir una longitud dada en centímetros a pies. Considere que: 1 pie = 30.48 centímetros.

Análisis

Datos de entrada

Cantidad en centímetros ( cantCent)

Datos de salida

Cantidad en pies ( cantPies )

Consideraciones

Para convertir cantPies a cantCent debemos buscar una fórmula que relacione estas dos variables, para esto podemos recurrir a la regla de tres simple como se muestra a continuación:

pies centímetros 1 30.48cantPies cantCent

Obtenemos: 1 x cantCent = 30.48 x cantPies ===> cantPies = cantCent/30.48

Algoritmo

VARIABLES REAL cantPies, cantCent

INICIO LEER cantCent cantPies = cantCent/30.48 IMPRIMIR cantPiesFIN

Ejercicio 4.3:- Diseñe un pseudocódigo para convertir una longitud dada en pies a centímetros. Considere que: 1 pie = 30.48 centímetros.

Análisis

Datos de entrada

28

Page 29: Curso de Algoritmia

Universidad Tecnológica Nacional - U.A Reconquista

Cantidad en centímetros ( cantCent )

Datos de salida

Cantidad en pies ( cantPies )

Consideraciones

De la regla de tres simple del problema anterior encontramos que: cantCent = 30.48 x cantPies

Algoritmo

VARIABLES REAL cantPies, cantCent

INICIO LEER cantPies cantCent = cantPies*30.48 IMPRIMIR cantCentFIN

Ejercicio 4.4:- Diseñe un algoritmo para determinar el área de un terreno rectangular en metros cuadrados y en hectáreasconsiderando que las dimensiones del terreno se dan en metros. Considere que: 1 Hectárea = 10000 m² y que: area = largo xancho.

Análisis

Datos de entrada

Largo del terreno en metros ( largo ) Ancho del terreno en metros (ancho )

Datos de salida

Area en hectáreas ( areahect ) Area en metros cuadrados ( areametc )

Algoritmo

VARIABLES REAL largo, ancho, areahect, areametc

INICIO LEER largo, ancho areametc = largo x ancho areahect = areametc/10000 IMPRIMIR areahectFIN

Ejercicio 4.5:- En una competencia de velocidad el espacio recorrido se mide en metros, el tiempo en segundos; pero, la velocidad se da en km/hr. Diseñe un algoritmo para determinar la velocidad promedio de un atleta. Considere que: velocidad promedio = espacio / tiempo, 1 km = 1000 m, 1hr = 3600 seg.

29

Page 30: Curso de Algoritmia

Universidad Tecnológica Nacional - U.A Reconquista

Análisis

Datos de entrada

Espacio recorrido en metros ( espacioMet ) Tiempo empleado en segundos ( tiempoSeg )

Datos de salida

Velocidad en km/hr ( velocidadKmHr )

Consideraciones

De la fórmula de la velocidad obtenemos:

velocidadKmHr = espacio en kilómetros / tiempo en horas

Tomando en cuenta las variables del problema:

velocidadKmHr = (espacioMet/1000) / (tiempoSeg/3600)

Simplificando:

velocidadKmHr = (espacioMet*18)/(tiempoHr*5)

Algoritmo

VARIABLES REAL espacioMet, tiempoSeg, velocidadKmHr

INICIO LEER espacioMet, tiempoSeg velocidadKmHr = (espacioMet*18)/(tiempoHr*5) IMPRIMIR velocidadKmHrFIN

Ejercicio 4.6:- En una competencia atlética el tiempo se mide en minutos, segundos y centésimas de segundo. Diseñe un algoritmo para determinar el tiempo total empleado por un atleta, en segundos.

Análisis

Datos de entrada

Cantidad de minutos ( cantMin ) Cantidad de segundos ( cantSeg ) Cantidad de centésimas de segundo ( cantCen )

Datos de salida

Cantidad total de segundos

Consideraciones

30

Page 31: Curso de Algoritmia

Universidad Tecnológica Nacional - U.A Reconquista

Para obtener la cantidad total de segundos efectuamos la siguiente suma:

canTotSeg = segundos de cantMin + cantSeg + segundos de cantCen

Que equivale a:

cantTotSeg = cantMin*60 + cantSeg + cantCen/100

Algoritmo

VARIABLES ENTERO cantMin, cantSeg, cantCen REAL cantTotSeg

INICIO LEER cantMin, cantSeg, cantCen cantTotSeg = catMin*60 + cantSeg + cantCen/100 IMPRIMIR cantTotSegFIN

Ejercicio 4.7:- Diseñe un algoritmo que lea un número y determine la suma de sus cifras. Asuma que el número es entero y que tiene 4 cifras.

Análisis

Datos de entrada

El número de cuatro cifras ( N )

Datos de salida

Suma de las cifras del número ( suma )

Datos auxilires

Cifras del número ( unidades, decenas, centenas, millares ) Residuos obtenidos en la descomposición del número ( R )

Consideraciones

Para comprender el proceso de descomposición de un número en sus cifras tomemos, por ejemplo, el caso de un número N igual a 3245:

3245 1000 245 3 245 100 45 2 45 10 5 4

31

Page 32: Curso de Algoritmia

Universidad Tecnológica Nacional - U.A Reconquista

Observe que para la segunda y tercera división se requiere el residuo de la división anterior, el que almacenaremos en la variable R. Así, el proceso puede expresarse como:

millares = cociente de N ÷ 1000 R = residuo de N ÷ 1000 centenas = cociente de R ÷ 100 R = residuo de R ÷ 100 decenas = cociente de R ÷ 10 R = residuo de R ÷ 10 unidades = R

Para obtener el cociente de una división entera simplemente aplicamos el operador cociente / puesto que el cociente de dos cantidades enteras es un valor entero ( lo que en división entera se conoce simplemente como el cociente ). Así:

millares = cociente de N ÷ 1000

Se expresa como:

millares = N/1000

Ya que tanto N como 1000 son valores enteros.

Para calcular el residuo de una división entera usamos el operador porcentaje %. Así:

R = residuo de N ÷ 1000

Se expresa como:

R = N % 1000

Algoritmo

VARIABLES ENTERO N, suma, millares, centenas, decenas, unidades, R

INICIO LEER N millares = N/1000 R = N%1000 centenas = R/100 R = R%100 decenas = R/10 R = R%10 unidades = R suma = unidades + decenas + centenas + millares IMPRIMIR sumaFIN

Ejercicio 4.8:- Diseñe un algoritmo para cifrar claves numéricas para una empresa. Cada clave es un número entero de 4 dígitos. El proceso de cifrado es el siguiente: a cada dígito de la clave normal se suma 7 y se obtiene el residuo de dividir la suma entre 10, el resultado es el dígito correspondiente de la clave cifrada.

32

Page 33: Curso de Algoritmia

Universidad Tecnológica Nacional - U.A Reconquista

Análisis

Datos de entrada

Clave normal ( clavenorm )

Datos de salida

Clave cifrada ( clavecifr )

Datos auxiliares

Cifras de la clave normal y luego de la clave cifrada ( unidades, decenas, centenas, millares ) Residuos obtenidos en la descomposición de la clave normal ( resto )

Consideraciones

De acuerdo a la lectura del problema, el cifrado cumple la siguiente relación:

digitocifrado = (digitonormal+7)%10

Algoritmo

VARIABLES ENTERO clavenorm, clavecifr, millares, centenas, decenas, unidades, resto

INICIO LEER clavenorm

// Descomposición de la clave normal en dígitos millares = clavenorm/1000 resto = clavenorm%1000 centenas = resto/100 resto = resto%100 decenas = resto/10 unidades = resto%10

// Determinación de las cifras de la clave cifrada millares = (millares+7)%10 centenas = (centenas+7)%10 decenas = (decenas+7)%10 unidades = (unidades+7)%10

// Formación de la clave cifrada clavecifr = millares*1000 + centenas*100 + decenas*10 + unidades

IMPRIMIR clavecifrFIN

Ejercicio 4.9:- Se cuenta con tres cantidades de dinero en soles, dólares y marcos. Diseñe un algoritmo que determine el monto total del dinero en euros. Considere los siguientes tipos de cambio: 1 dólar = 3.48 soles, 1 dólar = 1.07 euros, 1 dólar = 2.08 marcos.

Análisis Datos de entrada

33

Page 34: Curso de Algoritmia

Universidad Tecnológica Nacional - U.A Reconquista

Cantidad de dinero en soles ( soles ) Cantidad de dinero en dólares ( dolares ) Cantdad de dinero en marcos ( marcos )

Datos de salida Cantidad total de dinero en euros ( totalEuros )

Datos auxiliares Cantidad en soles expresada en euros ( euros1 ) Cantidad en dólares expresada en euros ( euros2 ) Cantidad en marcos expresada en euros ( euros3 )

Algoritmo

VARIABLES REAL soles, dolares, marcos, euros1, euros2, euros3, totalEuros

INICIO LEER soles, dolares, marcos

euros1 = soles*1.07/3.48 euros2 = dolares*1.07 euros3 = marcos*1.07/2.08 totalEuros = euros1 + euros2 + euros3

IMPRIMIR totalEurosFIN

Ejercicio 4.10:- Diseñe un algoritmo que lea la hora actual del día HH:MM:SS y determine cuantas horas, minutos y segundos restan para culminar el día.

Análisis

Datos de entrada

Hora actual del día ( hor1, min1, seg1 )

Datos de salida

Tiempo que resta para culminar el día ( hor2, min2, seg2 )

Datos auxiliares

Cantidad de segundos que restan para culminar el día ( segres ) Residuo ( resto )

Algoritmo

VARIABLES ENTERO hor1, min1, seg1, hor2, min2, seg2, segres, resto

INICIO

34

Page 35: Curso de Algoritmia

Universidad Tecnológica Nacional - U.A Reconquista

LEER hor1, min1, seg1

// Determina la cantidad de segundos que restan para culminar el día segres = 86400 - (hor1*3600 + min1*60 + seg1) // Determina cuantas horas, minutos y segundos restan para culminar el día hor2 = segres/3600 resto = segres%3600 min2 = resto/60 seg2 = resto%60

IMPRIMIR hor2, min2, seg2FIN

Ejercicio 4.11:- Diseñe un algoritmo para sumar dos tiempos dados en horas, minutos y segundos.

Análisis

Datos de entrada

Primer tiempo ( hor1, min2, seg2 ) Segundo tiempo ( hor2, min2, seg2 )

Datos de salida

Tiempo total en horas, minutos y segundos ( hor3, min3, seg3 )

Datos auxiliares

Tiempo total en segundos ( totseg ) Residuo ( resto )

Algoritmo

VARIABLES ENTERO hor1, min1, seg1, hor2, min2, seg2, hor3, min3, seg3, totseg, resto

INICIO LEER hor1, min1, seg1, hor2, min2, seg2

// Determina la cantidad total de segundos entre los dos tiempos totseg = (hor1+hor2)*3600 + (min1+min2)*60 + (seg1+seg2) // Convierte totseg a horas, minutos y segundos hor3 = totseg/3600 resto = totseg%3600 min3 = resto/60 seg3 = resto%60

IMPRIMIR hor3, min3, seg3FIN

35

Page 36: Curso de Algoritmia

Universidad Tecnológica Nacional - U.A Reconquista

CAPITULO 5

36

Page 37: Curso de Algoritmia

Universidad Tecnológica Nacional - U.A Reconquista

ESTRUCTURAS DE SELECCION

5.1 Introducción

En el desarrollo de un algoritmo es frecuente la necesidad de tomar una decisión antes de efectuar una acción o un conjunto de acciones. Estas tomas de decisiones dependen de ciertas condiciones que hacen variar el flujo de control del programa, que debe seleccionar entre dos o más rutas posibles.

Para seleccionar una ruta posible, en el flujo de control de un programa, se requieren de estructuras de selección. En una estructura de selección se evalúa una condición y en función del resultado (verdadero ó falso) se elige una ruta u otra. Las condiciones se especifican usando expresiones lógicas.

Las estructuras selectivas o de selección se clasifican en:

Estructura de selección simple (SI).

Estructura de selección doble (SI - SINO).

Estructura de selección múltiple (EN CASO - SEA)

5.2 Estructura de Selección Simple SI

La estructura de selección simple SI evalúa una condición lógica y:

Si la condición es verdadera ejecuta la acción A1. La acción A1 puede ser una acción simple (una sola acción) o una acción compuesta (un conjunto de acciones). Si la condición es falsa, no hace nada.

En la Figura 5.1 se muestra el pseudocódigo de la estructura de selección simple.

SI( condición ) acción A1 FIN_SI

Figura 5.1 Estructura de selección simple: pseudocódigo

Ejemplo 5.1:- Diseñe un algoritmo que determine si una persona es mayor o menor de edad. Se consideran personas mayores de edad a partir de 18 años.

Vea el ejemplo 5.4 para una solución más eficiente usando selección doble.

Algoritmo 1

VARIABLES ENTERO edad // Edad de la persona CADENA mensaje // Mensaje de salida

INICIO

37

Page 38: Curso de Algoritmia

Universidad Tecnológica Nacional - U.A Reconquista

LEER edad // Asumimos que la persona es menor de edad mensaje = "menor de edad" // Pero si la persona es mayor de edad, cambiamos el mensaje SI( edad >= 18 ) mensaje = "mayor de edad" FIN_SI IMPRIMIR mensajeFIN

Algoritmo 2

VARIABLES ENTERO edad // Edad de la persona CADENA mensaje // Mensaje de salida

INICIO LEER edad // Si es menor de edad SI( edad < 18 ) mensaje = "menor de edad" FIN_SI

// Si es mayor de edad SI( edad >= 18 ) mensaje = "mayor de edad" FIN_SI IMPRIMIR mensajeFIN

Ejemplo 5.2:- Diseñe un algoritmo que determine el mayor de tres números. Considere que los tres números son diferentes entre si.

Algoritmo

VARIABLES REAL a, b, c, mayor // Los tres números y el mayor

INICIO LEER a, b, c // Asumimos que el primero es el mayor mayor = a // Pero si b supera al mayor, b pasa a ser el mayor SI( b > mayor ) mayor = b FIN_SI

// Pero si c supera al mayor, c pasa a ser el mayor

38

Page 39: Curso de Algoritmia

Universidad Tecnológica Nacional - U.A Reconquista

SI( c > mayor ) mayor = c FIN_SI IMPRIMIR mayorFIN

Ejemplo 5.3:- Diseñe un algoritmo que determine si un número es negativo, positivo o cero.

Vea el Ejemplo 5.6 para una solución más eficiente usando selección doble.

Algoritmo

VARIABLES REAL n // El número a analizar CADENA mensaje // Mensaje de salida

INICIO LEER n // Si el número es positivo SI( n > 0 ) mensaje = "Positivo" FIN_SI // Si el número es negativo SI( n < 0 ) mensaje = "Negativo" FIN_SI

// Si el número es 0 SI( n == 0 ) mensaje = "Cero" FIN_SI IMPRIMIR mensajeFIN

5.3 Estructura de Selección Doble SI - SINO

La estructura de selección doble SI - SINO evalúa una condición lógica y:

Si la condición es verdadera, ejecuta la acción A1 Si la condición es falsa, ejecuta la acción A2.

Tanto la acción A1 como A2 pueden ser acciones simples (una sóla acción) o acciones compuestas (un conjunto de acciones).

En la Figura 5.2 se muestra el pseudocódigo de la estructura de selección doble.

SI(condición) acción A1 SINO

39

Page 40: Curso de Algoritmia

Universidad Tecnológica Nacional - U.A Reconquista

acción A2 FIN_SI

Figura 5.2 Estructura de selección doble: pseudocódigo

Ejemplo 5.4:- Resuelva el ejemplo 5.1 usando selección doble.

Vea el ejemplo 5.1 para una solución usando selección simple.

Consideraciones

La ventaja de esta solución, comparándola con la solución dada en el ejemplo 5.1, es que es más eficiente dado que sólo se requiere evaluar una condición (edad < 18). En cambio en la solución con selección simple del ejemplo 5.1 se requieren evaluar necesariamente dos condiciones (edad<18 y edad>=18).

Algoritmo

VARIABLES ENTERO edad // Edad de la persona CADENA mensaje // Mensaje de salida

INICIO LEER edad SI( edad < 18 ) // Si es menor de edad mensaje = "menor de edad" SINO // Aquí queda implícito que es mayor de edad mensaje = "mayor de edad" FIN_SI IMPRIMIR mensajeFIN

Ejemplo 5.5:- Una tienda ha pueso en oferta la venta al por mayor de cierto producto, ofreciendo un descuento del 15% por la compra de un mínimo de tres docenas. El costo del producto es de S/.25 por docena. Diseñe un algoritmo que determine el monto de la compra, el monto del descuento y el monto a pagar por la compra de cierta cantidad de docenas del producto.Los precios ya incluyen el impuesto del IGV.

Algoritmo

VARIABLES REAL montopag, // Monto a pagar montocom, // Monto de la compra montodes // Monto del descuento ENTERO docenas // Número de docenas adquiridas

INICIO LEER docenas // Cálculo del monto de la compra montocom = docenas*25

40

Page 41: Curso de Algoritmia

Universidad Tecnológica Nacional - U.A Reconquista

// Cálculo del monto del descuento SI( docenas >= 3 ) montodes = 0.15*montocom SINO montodes = 0 FIN_SI

// Cálculo del monto a pagar montopag = montocom - montodes IMPRIMIR montocom, montodes, montopagFIN

5.3.1 Selección Doble en Cascada

Se dice que varias estructuras de selección doble están en cascada cuando la instrucción que sigue a un SINO es otro SI a excepción del último SINO. No hay límite en cuanto al número de estructuras de selección doble que pueden ponerse en cascada.

En las figuras 5.3 y 5.4 se muestran dos formas de selección doble en cascada.

Funcionamiento

Las condiciones se evalúan en orden descendente pasando de una a otra si la anterior resulta falsa. En el momento que se encuentra una condición verdadera, se efectúa la acción correspondiente a dicha condición y se corta el resto de la estructura.Si todas las condiciones resultan falsas se efectúa la acción correspondiente al último sino.

SI( condición C1 ) acción A1 SINO SI( condición C2 ) acción A2 SINO SI( condición C3 ) acción A3 . . . SINO acción An FIN_SI FIN_SI FIN_SI

Figura 5.3 Selección doble en cascada: Forma 1

SI( condición C1 ) acción A1

41

Page 42: Curso de Algoritmia

Universidad Tecnológica Nacional - U.A Reconquista

SINO SI( condición C2 ) acción A2 SINO SI( condición C3 ) acción A3 . . . SINO acción An FIN_SI

Figura 5.4 Selección doble en cascada: Forma 2

Ejemplo 5.6:- Resuelva el problema 5.3 usando selección doble.

Vea el Ejemplo 5.3 para una solución usando selección simple.

Consideraciones

La ventaja de esta solución, a comparación con la solución dada en el ejemplo 5.1, es que es más eficiente dado que en el peor de los casos se requerirán evaluar dos condiciones ( n > 0 y n < 0 ); pero, en el mejor de los casos sólo una ( n > 0 ). En cambio en la solución del ejemplo 5.1 se requieren evaluar necesariamente tres condiciones ( n > 0, n < 0 y n == 0 ).

Algoritmo 1

VARIABLES REAL n // El número a analizar CADENA mensaje // Mensaje de salida

INICIO LEER n

SI( n > 0 ) mensaje = "Positivo" SINO SI( n < 0 ) mensaje = "Negativo" SINO mensaje = "Cero" FIN_SI FIN_SI

IMPRIMIR mensajeFIN

Algoritmo 2

VARIABLES REAL n // El número a analizar CADENA mensaje // Mensaje de salida

42

Page 43: Curso de Algoritmia

Universidad Tecnológica Nacional - U.A Reconquista

INICIO LEER n

SI( n > 0 ) mensaje = "Positivo" SINO SI( n < 0 ) mensaje = "Negativo" SINO mensaje = "Cero" FIN_SI

IMPRIMIR mensajeFIN

Ejemplo 5.7:- Diseñe un algoritmo que lea un número entero en el intervalo de 1 a 7 e imprima el nombre del día correspondiente. Considere 1 para domingo, 2 para lunes, 3 para martes, etc.

Vea el Ejemplo 5.8 para una solución usando selección múltiple.

Algoritmo

VARIABLES ENTERO dia // Número del día de la semana CADENA mensaje // Nombre del día de la semana

INICIO LEER dia

SI( dia == 1 ) mensaje = "Domingo" SINO SI( dia == 2 ) mensaje = "Lunes" SINO SI( dia == 3 ) mensaje = "Martes" SINO SI ( dia == 4 ) mensaje = "Miércoles" SINO SI( dia == 5 ) mensaje = "Jueves" SINO SI ( dia == 6 ) mensaje = "Viernes" SINO mensaje = "Sábado" FIN_SI

IMPRIMIR mensajeFIN

5.4 Estructura de Selección Múltiple EN CASO-SEA

La estructura de selección múltiple EN CASO - SEA permite elegir una ruta de entre varias rutas posibles, usando para ello una variable denominada selector. El selector se compara con una lista de constantes enteras o de carácter C1, C2, ..., Cn para cada una de las cuales hay una acción A1, A2, ..., An y:

43

Page 44: Curso de Algoritmia

Universidad Tecnológica Nacional - U.A Reconquista

Si el selector coincide con una constante de la lista, se ejecuta la acción correspondiente a dicha constante. Si el selector no coincide con ninguna constante de la lista, se ejecuta la acción Df, si es que existe.

Las acciones A1, A2, A3, ..., An pueden ser acciones simples( una sola acción) o acciones compuestas (un conjunto de acciones).

En la Figura 5.3 se muestra el pseudocódigo de la estructura de selección múltiple.

EN CASO selector SEA C1 : acción A1 C2 : acción A2 C3 : acción A3 . . . Cn : acción An SINO : acción Df FIN_CASO

Figura 5.3 Estructura de selección múltiple: pseudocódigo

Ejemplo 5.8:- Resuelva el ejemplo 5.7 usando selección múltiple.

Vea el Ejemplo 5.7 para una solución usando selección doble.

Algoritmo

VARIABLES ENTERO dia // Número del día de la semana CADENA mensaje // Nombre del día de la semana

INICIO LEER dia

EN CASO dia SEA 1 : mensaje = "Domingo" 2 : mensaje = "Lunes" 3 : mensaje = "Martes" 4 : mensaje = "Miércoles" 5 : mensaje = "Jueves" 6 : mensaje = "Viernes" SINO : mensaje = "Sábado" FIN_CASO

IMPRIMIR mensajeFIN

5.5 Estructuras de Selección Anidadas

44

Page 45: Curso de Algoritmia

Universidad Tecnológica Nacional - U.A Reconquista

Se dice que una estructura SI ( o SI-SINO ) esta anidada cuando esta contenida dentro de otra estructura SI o dentro de otra estructura SI-SINO. No existe límite en cuanto al nivel de anidamiento.

Por ejemplo, una estructura SI con tres niveles de anidamiento tendría el siguiente formato:

SI( condición C1 ) acción A1 SI( condición C2 ) acción A2 SI( condición C3 ) acción A3 FIN_SI FIN_SIFIN_SI

En general, el anidamiento podría evitarse usando el operador lógico "y". Así, la anterior selección SI anidada puede descomponerse en tres estructuras de selección simple no anidadas, como se muestra a continuación.

SI( condición C1 ) acción A1FIN_SI

SI( condición C1 y condición C2 ) acción A2FIN_SI

SI( condición C1 y condición C2 y condición C3 ) acción A3FIN_SI

La estructura de selección doble en cascada es un caso especial de la estructura SI anidada.

Ejemplo 5.9:- Para ingresar a un cierto espectáculo se requiere ser varón mayor de 18 años. Diseñe un algoritmo que decida si una persona puede o no ingresar al espectáculo.

Algoritmo 1 : Sin usar el operador lógico "y"

VARIABLES ENTERO edad // Edad de la persona CADENA mensaje // Mensaje de salida CARACTER sexo // Sexo de la persona

INICIO LEER edad, sexo SI( edad > 18 ) SI( sexo == 'm' ) mensaje = "Puede ingresar" SINO mensaje = "No puede ingresar" FIN_SI SINO mensaje = "No puede ingresar"

45

Page 46: Curso de Algoritmia

Universidad Tecnológica Nacional - U.A Reconquista

FIN_SI IMPRIMIR mensajeFIN

Algoritmo 2 : Usando el operador lógico "y"

VARIABLES ENTERO edad // Edad de la persona CADENA mensaje // Mensaje de salida CARACTER sexo // Sexo de la persona

INICIO LEER edad, sexo SI( edad > 18 y sexo == 'm' ) mensaje = "Puede ingresar" SINO mensaje = "No puede ingresar" FIN_SI IMPRIMIR mensajeFIN

Ejemplo 5.10:- Una empresa ha decidido clasificar a sus empleados en cuatro grupos:

Grupo 1: Solteros con menos de 25 años.Grupo 2: Solteros con 25 años a mas.Grupo 3: Casados con menos de 34 años.Grupo 4: Casados con 34 años a mas.

Diseñe un algoritmo que determine el grupo que le corresponde a un empleado.

Algoritmo 1 : Sin usar el operador lógico "y"

VARIABLES ENTERO edad // Edad de la persona CARACTER estcivil // Estado civil del empleado ('s'=soltero, 'c'=casado) CADENA mensaje // Mensaje de salida

INICIO LEER edad, estcivil SI( estcivil == 's' ) SI( edad < 25 ) mensaje = "Grupo 1" SINO mensaje = "Grupo 2" FIN_SI SINO SI( edad < 34 ) mensaje = "Grupo 3" SINO mensaje = "Grupo 4" FIN_SI

46

Page 47: Curso de Algoritmia

Universidad Tecnológica Nacional - U.A Reconquista

FIN_SI

IMPRIMIR mensajeFIN

Algoritmo 2 : Usando el operador lógico "y"

VARIABLES ENTERO edad // Edad de la persona CARACTER estcivil // Estado civil del empleado ('s'=soltero, 'c'=casado) CADENA mensaje // Mensaje de salida

INICIO LEER edad, estcivil SI( estcivil == 's' y edad < 25 ) mensaje = "Grupo 1" SINO SI( estcivil == 's' y edad >= 25 ) mensaje = "Grupo 2" SINO SI( estcivil == 'c' y edad < 34 ) mensaje = "Grupo 3" SINO mensaje = "Grupo 4" FIN_SI

IMPRIMIR mensajeFIN

5.4 Ejercicios

Ejercicio 5.1:- Diseñe un algoritmo que determine el número de elementos que forman parte de la intersección de dos conjuntos de números enteros consecutivos. Así, el número de elementos de la intersección de los conjuntos: A = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11} y B = {8, 9, 10, 11, 12, 13, 14, 15, 16, 17 } es 4.

Algoritmo 1 : Sin usar el operador lógico "y"

VARIABLES ENTERO mina, maxa, // Elementos mínimo y máximo del conjunto A minb, maxb, // Elementos mínimo y máximo del conjunto B numelem // Número de elementos de la intersección

INICIO LEER mina, maxa, minb, maxb SI( minb <= maxa) SI( maxa <= maxb ) numelem = maxa-minb+1; SINO numelem = maxb-minb+1; FIN_SI SINO SI( mina <= maxb ) SI( maxb <= maxa ) numelem = maxb-mina+1; SINO numelem = maxa-mina+1

47

Page 48: Curso de Algoritmia

Universidad Tecnológica Nacional - U.A Reconquista

FIN_SI SINO numelem = 0 FIN_SIFIN

Algoritmo 2 : Usando el operador lógico "y"

VARIABLES ENTERO mina, maxa, // Elementos mínimo y máximo del conjunto A minb, maxb, // Elementos mínimo y máximo del conjunto B numelem // Número de elementos de la intersección

INICIO LEER mina, maxa, minb, maxb SI( minb <= maxa y maxa <= maxb ) numelem = maxa-minb+1; SINO SI( minb <= maxa y maxa > maxb ) numelem = maxb-minb+1; SINO SI( mina <= maxb y maxb <= maxa ) numelem = maxb-mina+1; SINO SI( mina <= maxb y maxb > maxa ) numelem = maxa-mina+1 SINO numelem = 0 FIN_SIFIN

Ejercicio 5.2:- Una compañía dedicada al alquiler de automoviles cobra $30 hasta un máximo de 300 km de distancia recorrida. Para más de 300 km y hasta 1000 km, cobra $30 más un monto adicional de $ 0.15 por cada kilómetro en exceso sobre 300. Para más de 1000 km cobra $30 más un monto adicional de $ 0.10 por cada kilómetro en exceso sobre 1000.Los precios ya incluyen el 18% del impuesto general a las ventas, IGV. Diseñe un algoritmo que determine el monto a pagar por el alquiler de un vehículo y el monto incluído del impuesto.

Algoritmo

CONSTANTES REAL IGV = 0.18 // Porcentaje del impuesto general a las ventas

VARIABLES REAL kilomIni, // Lectura inicial del contador de kilómetros kilomFin, // Lectura final del contador de kilómetros kilomRec, // Kilómetros recorridos montoFijo,// Monto fijo montoAdic,// Monto adicional montoPag, // Monto a pagar montoIgv // Monto del impuesto general a las ventas, IGV

INICIO LEER kilomIni, kilomFin kilomRec = kilomIni - kilomFin

// Cáculo el monto fijo, por el total de kilómetros recorridos

48

Page 49: Curso de Algoritmia

Universidad Tecnológica Nacional - U.A Reconquista

montoFijo = 30*kilomRec

// Cálculo del monto adicional, por los kilómetros excedidos SI( kilomRec <= 300 ) montoAdic = 0 SINO SI( kilomRec <= 1000 ) montoAdic = 0.15*(kilomRec-300) SINO montoAdic = 0.15*700 + 0.10*(kilomRec-1000) FIN_SI

// Cálculo del monto a pagar y del monto del impuesto montoPag = montoFijo + montoAdic montoIgv = IGV*montoPag /(1+IGV)

IMPRIMIR montoPag, montoIgvFIN

Ejercicio 5.3:- Diseñe un algoritmo que determine quien tiene la mayor edad entre Juan, Mario y Pedro. Considere que dos pueden tener la mayor edad o ser contemporáneos los tres.

Algoritmo

VARIABLES ENTERO edjuan, // Edad de Juan edmario, // Edad de Mario edpedro // Edad de Pedro CADENA mensaje // Mensaje de salida

INICIO LEER edjuan, edmario, edpedro

SI( edjuan > edmario y edjuan > edpedro ) mensaje = "Juan es el mayor" SINO SI( edmario > edjuan y edmario > edpedro ) mensaje = "Mario es el mayor" SINO SI( edpedro > edjuan y edpedro > edmario ) mensaje = "Pedro es el mayor" SINO SI( edjuan == edmario y edmario > edpedro ) mensaje = "Juan y Mario son los mayores" SINO SI( edjuan == edpedro y edpedro > edmario ) mensaje = "Juan y Pedro son los mayores" SINO SI( edmario == edpedro y edpedro > edjuan ) mensaje = "Mario y Pedro son los mayores" SINO mensaje = "Los tres son contemporáneos" FIN_SI

IMPRIMIR mensajeFIN

Ejercicio 5.4:- En una playa de estacionamiento de vehículos se cobra S/. 2.5 por hora o fracción. La medición del tiempo se efectúa anotando la hora de entrada y la hora de la salida, ambas en el formato HH:MM, según un reloj de 24 horas. Diseñe un algoritmo para determinar

49

Page 50: Curso de Algoritmia

Universidad Tecnológica Nacional - U.A Reconquista

el monto que debe pagar un cliente por el estacionamiento de su vehículo. Considere que tanto lahora de entrada como de salida corresponden al mismo día.

Algoritmo

VARIABLES ENTERO hore, mine, // Hora y minutos de entrada hors, mins, // Hora y minutos de salida tiempoMin // Tiempo de estacionamiento en minutos horPag, // Horas a pagar resMin // Residuo en minutos de tiempoMin entre 60 REAL montoPag, // Monto a pagar

INICIO LEER hore, mine, hors, mins

// Determina el tiempo empleado en minutos tiempoMin = (hors-hore)*60 + (mins-mine)

// Determina la cantidad entera de horas a pagar // Si sobran minutos, entonces se cobra como una hora adicional horPag = tiempoMin/60 // Cantidad entera de horas resMin = tiempoMin%60 // Minutos de sobra SI( residuo != 0 ) // Si sobran minutos horPag = horPag + 1 FIN

// Determina el monto a pagar montoPag = 2.5*horPag

IMPRIMIR montoPagFIN

Ejercicio 5.5:- El promedio de prácticas de un curso se calcula en base a cuatro prácticas calificadas de las cuales se promedian las tres notas más altas eliminándose la nota menor. Diseñe un algoritmo que determine el promedio de prácticas de un estudiante y la nota de práctica eliminada.

Algoritmo

VARIABLES ENTERO pc1, pc2, pc3, pc4 // Prácticas calificadas notaMenor // Nota de práctica eliminada REAL promPrac // Promedio de prácticas

INICIO LEER pc1, pc2, pc3, pc4

// Determina la nota menor notaMenor = pc1 SI( pc2 < notaMenor ) notaMenor = pc2 FIN_SI SI( pc3 < notaMenor )

50

Page 51: Curso de Algoritmia

Universidad Tecnológica Nacional - U.A Reconquista

notaMenor = pc3 FIN_SI SI( pc4 < notaMenor ) notaMenor = pc4 FIN_SI

// Determina el promedio de prácticas promPrac = (pc1 + pc2 + pc3 + pc4 - notaMenor )/3.0

IMPRIMIR promPrac, notaMenorFIN

Ejercicio 5.6:- Diseñe un algoritmo que lea tres longitudes y determine si forman o no un triángulo. Si es un triángulo determine de que tipo de triángulo se trata entre: equilátero (si tiene tres lados iguales), isósceles (si tiene dos lados iguales) o escaleno (si tiene tres lados desiguales). Considere que para formar un triángulo se requiere que: "el lado mayor sea menor que la suma de los otros dos".

Algoritmo 1 : usando operadores lógicos

VARIABLES REAL L1, L2, L3 // Las tres longitudes CADENA mensaje // Mensaje de salida

INICIO LEER L1, L2, L3

// Determina la mayor longitud mayor = L1 SI( L2 > mayor ) mayor = L2 FIN_SI SI( L3 > mayor ) mayor = L3 FIN_SI

// Determina la suma de los otros dos lados suma = L1 + L2 + L3 - mayor

// Determina si las longitudes forman o no un triángulo SI( mayor < suma ) SI( ( L1 == L2 ) y ( L2 == L3 ) ) mensaje = "Triángulo equilátero" SINO SI( ( L1 == L2 ) o ( L1 == L3 ) o ( L2 == L3 ) ) mensaje = "Triángulo isósceles" SINO mensaje = "Triángulo escaleno" FIN_SI SINO mensaje = "No es un triángulo" FIN_SI

IMPRIMIR mensajeFIN

51

Page 52: Curso de Algoritmia

Universidad Tecnológica Nacional - U.A Reconquista

Algoritmo 2: sin usar operadores lógicos

VARIABLES REAL L1, L2, L3 // Las tres longitudes CADENA mensaje // Mensaje indicando si se trata o no de un triángulo

INICIO LEER L1, L2, L3

// Determina la mayor longitud mayor = L1 SI( L2 > mayor ) mayor = L2 FIN_SI SI( L3 > mayor ) mayor = L3 FIN_SI

// Determina la suma de los otros dos lados suma = L1 + L2 + L3 - mayor

// Determina si las longitudes forman o no un triángulo SI( mayor < suma ) SI( L1 == L2 ) SI( L2 == L3 ) mensaje = "Triángulo equilátero" SINO mensaje = "Triángulo isósceles" FIN_SI SINO SI( L2 == L3 ) mensaje = "Triángulo isósceles" SINO SI( L1 == L3 ) mensaje = "Triángulo isósceles" SINO mensaje = "Triángulo escaleno" FIN_SI SINO mensaje = "No es un triángulo" FIN_SI

IMPRIMIR mensajeFIN

Ejercicio 5.7:- Diseñe un algoritmo que lea tres números enteros y determine el menor valor positivo. Si los números positivos son iguales, dar como menor a cualquiera de ellos.

VARIABLES ENTERO a, b, c // Los tres números enteros CADENA mensaje // Mensaje de salida

INICIO LEER a, b, c

mensaje = "El menor positivo es : "; SI( a > 0 )

52

Page 53: Curso de Algoritmia

Universidad Tecnológica Nacional - U.A Reconquista

menor = a SI( b > 0 y b < menor ) menor = b FIN_SI SI( c > 0 y c < menor ) menor = c FIN_SI mensaje = mensaje + menor SINO SI( b > 0 ) menor = b SI( a > 0 y a < menor ) menor = a FIN_SI SI( c > 0 y c < menor ) menor = c FIN_SI mensaje = mensaje + menor SINO SI( c > 0 ) menor = c SI( a > 0 y a < menor ) menor = a FIN_SI SI( b > 0 y b < menor ) menor = b FIN_SI mensaje = mensaje + menor SINO mensaje = "No hay ningún número positivo" FIN_SI

IMPRIMIR mensajeFIN

53