91539311 Fundamentos de Programacion Algoritmos JB

128
Fundamentos de Programación – Algoritmos Universidad Central del Ecuador Ing. Jéfferson Beltrán M. Msc. 1 FUNDAMENTOS DE PROGRAMACIÓN ALGORITMOS OBJETIVO. Mostrar los fundamentos de la programación, de modo que al final del curso, el estudiante será capaz de diseñar algoritmos mediante ejercicios prácticos utilizados cotidianamente en el desarrollo de aplicaciones de software, con ayuda de las diferentes técnicas algorítmicas, con la finalidad de formarse una mentalidad de programador. INTRODUCCIÓN. Todos tenemos conciencia de que el éxito de una empresa depende de la rapidez, calidad, control de los recursos, exactitud y otros muchos factores. Hace tiempo, las empresas ya sean grandes o pequeñas, tenían que hacer sus procesos manualmente o con ayuda de máquinas. Pero a raíz de la aparición de las primeras computadoras, las grandes empresas obtuvieron unas de estas y comenzaron a tener mayor ventaja sobre las demás organizaciones. Con el paso del tiempo, se crearon computadoras más pequeñas, de menos costo, más rápidas, lo cual ha provocado que cualquier persona o empresa pueda adquirir una o más de estas computadoras. En la actualidad, muchas empresas realizan sus operaciones por medio de computadoras, por ejemplo en las fábricas ensambladoras de autos se utilizan robots programados, los cuales se encargan de montar y soldar las partes que forman el carro; en los supermercados, se utilizan las computadoras junto con un programa para registrar rápidamente las compras de los clientes, además de que les ayuda para llevar el control de su inventario y de sus ingresos entre otras cosas; en los hospitales, se están utilizando pequeños robots programados, los cuales se introducen en el cuerpo del paciente para realizar incisiones, cauterizar, saturar, etc.; este manual, fue elaborado en un editor de textos llamado Microsoft Word, el cual es un programa de aplicación diseñado específicamente para poder crear y dar formato a documentos de texto. En fin, podríamos continuar enumerando en donde se utilizan las computadoras y nunca terminaríamos, lo cual da un amplio campo de trabajo para los programadores. Este manual, tiene la finalidad de mostrarte los fundamentos de la programación y formarte una mentalidad de programador, mediante la elaboración de algoritmos utilizando diferentes técnicas algorítmicas y herramientas de software para escribir y entender de manera más sencilla el fascinante mundo de la programación. Ya que un programador es decir, la persona que diseña sistemas computacionales o

Transcript of 91539311 Fundamentos de Programacion Algoritmos JB

Page 1: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 1

FUNDAMENTOS DE PROGRAMACIÓN – ALGORITMOS

OBJETIVO.

Mostrar los fundamentos de la programación, de modo que al final del curso, el

estudiante será capaz de diseñar algoritmos mediante ejercicios prácticos

utilizados cotidianamente en el desarrollo de aplicaciones de software, con ayuda

de las diferentes técnicas algorítmicas, con la finalidad de formarse una

mentalidad de programador.

INTRODUCCIÓN.

Todos tenemos conciencia de que el éxito de una empresa depende de la rapidez,

calidad, control de los recursos, exactitud y otros muchos factores.

Hace tiempo, las empresas ya sean grandes o pequeñas, tenían que hacer sus

procesos manualmente o con ayuda de máquinas. Pero a raíz de la aparición de

las primeras computadoras, las grandes empresas obtuvieron unas de estas y

comenzaron a tener mayor ventaja sobre las demás organizaciones. Con el paso

del tiempo, se crearon computadoras más pequeñas, de menos costo, más

rápidas, lo cual ha provocado que cualquier persona o empresa pueda adquirir

una o más de estas computadoras.

En la actualidad, muchas empresas realizan sus operaciones por medio de

computadoras, por ejemplo en las fábricas ensambladoras de autos se utilizan

robots programados, los cuales se encargan de montar y soldar las partes que

forman el carro; en los supermercados, se utilizan las computadoras junto con un

programa para registrar rápidamente las compras de los clientes, además de que

les ayuda para llevar el control de su inventario y de sus ingresos entre otras

cosas; en los hospitales, se están utilizando pequeños robots programados, los

cuales se introducen en el cuerpo del paciente para realizar incisiones, cauterizar,

saturar, etc.; este manual, fue elaborado en un editor de textos llamado Microsoft

Word, el cual es un programa de aplicación diseñado específicamente para poder

crear y dar formato a documentos de texto. En fin, podríamos continuar

enumerando en donde se utilizan las computadoras y nunca terminaríamos, lo

cual da un amplio campo de trabajo para los programadores.

Este manual, tiene la finalidad de mostrarte los fundamentos de la programación y

formarte una mentalidad de programador, mediante la elaboración de algoritmos

utilizando diferentes técnicas algorítmicas y herramientas de software para escribir

y entender de manera más sencilla el fascinante mundo de la programación. Ya

que un programador es decir, la persona que diseña sistemas computacionales o

Page 2: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 2

aplicaciones de software, antes de comenzar a interactuar con la computadora

tiene que tener una manera de pensar diferente a las demás personas para poder

analizar y resolver problemas mediante aplicaciones de software, los cuales

primero debe plasmarlos en papel o en alguna herramienta de software específica

para ello y luego en un lenguaje de programación.

ÍNDICE.

El ordenador.

El software.

Sistema binario y representación binaria de datos.

Algoritmos y elementos que lo conforman.

Conceptos básicos de programación.

Resolución de problemas con computadora – Desarrollo de Software

Tipos y Paradigmas de Programación.

Lenguajes de programación.

La lógica como aspecto fundamental de la programación.

Representación gráfica de los algoritmos.

Entorno de programación integrado (IDE).

Programación Estructurada.

Estructura de datos y Arreglos.

Modularidad.

Recursividad.

Estilos de Programación

Page 3: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 3

1. EL ORDENADOR.

Un ordenador es una máquina programable. Las dos características principales de un ordenador son:

Responde a un sistema específico de instrucciones de una manera bien definida.

Puede ejecutar una lista de instrucciones pregrabadas (un programa).

Los ordenadores modernos son electrónicos y digitales. La maquinaria real, cables, transistores, y circuitos, se llaman hardware; las instrucciones y los datos se llaman software.

Todos los ordenadores de uso general requieren los siguientes componentes de hardware:

Dispositivos de Entrada: Como su nombre lo indica, sirven para introducir datos (información) en el ordenador para su proceso. Ejemplo: teclado, ratón, scanner, etc.

Dispositivos de Salida: Regresan los datos procesados que sirven de información al usuario. Los más comunes son el monitor y la impresora.

La Unidad Central de Procesamiento (CPU). Aunque generalmente al gabinete se le denomina CPU, el CPU es el microprocesador del ordenador y es el encargado de hacer todos los cálculos y operaciones (es cerebro del ordenador). El CPU a su vez se divide en las siguientes partes:

Unidad de Control: Coordina las actividades del ordenador y determina que operaciones se deben realizar y en qué orden; así mismo controla todo el proceso del ordenador.

Unidad Aritmética - Lógica: Realiza operaciones aritméticas y lógicas, tales como suma, resta, multiplicación, división y comparaciones.

La Memoria. Es una parte del ordenador en donde se almacenan los datos a procesar y la información resultante. Esta puede ser de dos tipos:

Memoria Primaria: Es el espacio en que se almacenan los datos a procesar o calcular en este momento.

Memoria Secundaria: Es el espacio en el que se almacena la información resultante para su futura consulta o manejo. Por ejemplo: discos duros, unidades de almacenamiento magnético (CD-DVD), etc.

Page 4: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 4

Además de estos componentes, muchos otros hacen posible que los componentes básicos trabajen juntos eficientemente. Por ejemplo, cada ordenador requiere un bus que transmita datos de una parte del ordenador a otra.

Generalmente, los ordenadores se pueden clasificar por tamaño y potencia de la siguiente forma, aunque hoy un solapamiento considerable:

Ordenador personal (personal computer): Un ordenador pequeño, para un sólo usuario basado en un microprocesador. Además del microprocesador, un ordenador personal tiene un teclado para introducir datos, un monitor para mostrar la información, y un dispositivo de almacenamiento para guardar datos.

Estación de trabajo (workstation): Una computadora de gran potencia para un sólo usuario. Una estación de trabajo es como un ordenador personal, pero tiene un microprocesador más potente y un monitor de mejor calidad.

Miniordenador (minicomputer): Un ordenador para varios usuarios capaz de soportar centenares de usuarios simultáneamente.

Chasis (mainframe): Una computadora multiusuario de gran potencia capaz de soportar miles de usuarios simultáneamente.

Superordenador (supercomputer): Un ordenador extremadamente rápido que puede realizar cientos de millones de instrucciones por segundo.

DISPOSITIVOS

DE ENTRADA

DISPOSITIVOS

DE SALIDA

UNIDAD DE

CONTROL

UNIDAD DE

ARITMÉTICA

Y LÓGICA

C.P.U.

MEMORIA

Page 5: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 5

Nota: No se dará más detalle sobre los ordenadores pues nos tomaría todo el semestre y no es el objetivo del curso.

2. EL SOFTWARE.

Las operaciones que debe realizar el hardware son especificadas con una lista de

instrucciones, llamadas programas, o software. El software se divide en dos

grandes grupos:

Software del sistema, y Software de aplicaciones.

El software del sistema es el conjunto de programas indispensables para

que la máquina funcione. Estos programas son, básicamente, el Sistema

Operativo, los editores de texto (Word, Writer, etc), los compiladores de

lenguajes de programación y los utilitarios (Microsoft Office, OpenOffice,

antivirus, navegadores, correo electrónico, etc).

o El Sistema Operativo es el software básico de una computadora,

que provee una interfaz entre el resto de programas del ordenador,

los dispositivos de hardware y el usuario. Dirige las operaciones

globales de la computadora, instruye a la computadora para ejecutar

otros programas, administra los recursos de la máquina, coordina el

hardware y organiza archivos y directorios en dispositivos de

almacenamiento de una forma sencilla y transparente para el

usuario. Los principales sistemas operativos son: MS-DOS, Microsoft

Windows, Unix, Mac OS, Solaris, Linux, Android, iOS, etc.

Page 6: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 6

Los programas que realizan tareas concretas (por ejemplo facturación,

contabilidad, análisis estadístico, gestión de negocios, sistemas bancarios,

etc.) se denominan programas de aplicación o software de

aplicaciones.

3. SISTEMA BINARIO Y REPRESENTACIÓN BINARIA DE DATOS.

3.1. SISTEMAS DE NUMERACIÓN.

Sistema de Numeración es el conjunto de elementos o símbolos, operaciones y relaciones que, a través de reglas propias, permite establecer el papel de tales relaciones y operaciones. El más conocido y usado es el sistema de numeración decimal, no es el único y por el contrario los más utilizados en los circuitos digitales son el octal, el hexadecimal y sobre todo el binario. Las computadoras suelen efectuar las operaciones aritméticas utilizando una representación para los datos numéricos basada en el sistema de numeración de base dos conocido como binario natural o simplemente binario. Se utilizan los sistemas octal y hexadecimal (bases 8 y 16) respectivamente para obtener códigos intermedios. A nivel electrónico, utilizar códigos intermedios resulta más favorable que transformar directamente decimales en binarios y al revés.

3.2. El SISTEMA BINARIO.

El sistema de numeración binario es el conjunto de elementos {0, 1} con las operaciones aritméticas (suma, resta, multiplicación) y lógicas (OR, AND y NOT). Los elementos del conjunto o alfabeto binario se denominan cifras binarias o bits. El bit del extremo de la derecha es el bit menos significativo o de menor peso.

Page 7: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 7

El bit del extremo de la izquierda es el bit más significativo o de mayor peso. 3.2.1. TRANSFORMACIÓN DE BINARIO A DECIMAL (ENTEROS). Consiste en multiplicar cada uno de los términos por potencias crecientes de 2 a partir de la coma decimal y hacia la izquierda, y realizar la suma de las operaciones.

Ejemplo: convertir a decimal 101011102

3.2.2. TRANSFORMACIÓN DE DECIMAL (ENTEROS) A BINARIO. Se va dividiendo la cantidad decimal por 2, apuntando los restos, hasta obtener cociente cero. El último resto obtenido es el bit más significativo (MSB) y el primero es el bit menos significativo (LSB).

Page 8: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 8

3.2.3. OPERACIONES BÁSICAS Y LÓGICAS. Las operaciones más básicas con el sistema binario son la suma, la resta, la multiplicación y la división. Estas operaciones son similares a las del sistema decimal, ya que el sistema binario también es un sistema posicional

Las operaciones binarias lógicas básicas son OR, XOR, AND y NOT, de aquí surgen otras como la NOR, la NAND, la XOR y la XNOR.

Page 9: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 9

La OR responde a la unión entre conjuntos, La AND a la intersección y la NOT al complemento. A continuación se muestra la tabla de verdad de las principales operaciones lógicas binarias.

3.3. REPRESENTACIÓN BINARIA DE DATOS.

El bit es la unidad mínima de almacenamiento empleado en informática, en

cualquier dispositivo digital o en la teoría de la información; con él podemos

represe4ntar dos valores (0 y 1), los ordenadores trabajan internamente con dos

niveles de voltaje: ―apagado‖ (0) y ―encendido‖ (1), por los que su sistema de

numeración natural es el sistema binario.

Cuando se almacena la información no se trabaja a nivel de bit, sino que se

trabaja a nivel de carácter (letras, caracteres especiales, números, etc), que ocupa

un byte, que se compone de 8 bits. El ordenador trabaja con agrupaciones de bits

fáciles de manipular y suelen ser múltiplos de 2, la base del sistema binario. Los

tamaños más comunes son:

Octeto, carácter o byte. Es la agrupación de 8 bits, es el tamaño más

común de información; con él se puede codificar un alfabeto completo

(ASCII estándar).

Palabra. Es el tamaño de información manejada en paralelo por los

componentes del sistema, como la memoria y los buses. Son comunes

palabras de 8, 32, 64, 128, 256 y 512 bits, es decir, 1 byte, 4, 8, 16, 32 y 64

bytes. A mayor tamaño de palabra, mayor es la precisión y la potencia de

cálculo del ordenador.

Lo normal es utilizar los múltiplos del byte: kilobyte (kb), megabyte (Mb), gigabyte

(Gb), etc.

Page 10: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 10

Cualquier información escrita, cualquier texto se puede representar por medio de caracteres. Los caracteres utilizados en informática se suelen clasificar en cinco categorías:

Caracteres alfabéticos: letras mayúsculas y minúsculas del alfabeto

Caracteres numéricos: constituidos por las diez cifras decimales.

Caracteres especiales: símbolos ortográficos y matemáticos no incluidos en los grupos anteriores.

Caracteres geométricos y gráficos: símbolos con los que se representan formas geométricas o iconos elementales:

Caracteres de control: representan órdenes de control, como salto de línea (NL), comienzo de línea (CR), sincronización de una transmisión (SYN), pitido (BEL), etc.

Cuando se introducen textos en un ordenador a través del periférico que corresponda, los caracteres se codifican con un código de entrada/salida, asociando a cada carácter una determinada combinación de n bits. Los elementos del conjunto de caracteres, así como su número m, dependerán del código de E/S utilizado por el programa que interprete el texto introducido así como del periférico que lo codifique. Si utilizamos n bits para codificar m símbolos, el número mínimo de bits necesarios para codificar un conjunto de símbolos depende del cardinal de este conjunto:

Con 2 bits (n=2) podemos hacer 2^2=4 combinaciones, es decir, se podrían codificar 4 símbolos distintos (m=4).

Page 11: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 11

Con 3 bits (n=3) serían 2^3=8 combinaciones, 8 símbolos (m=8), y así sucesivamente.

Con n bits se podrían codificar m=2^n símbolos distintos.

Dicho de otra forma, para codificar m símbolos distintos se necesitan n bits,

siendo n el menor número natural que verifica:

Los principales códigos de E/S son:

El código ASCII (American Standard Code for Information Interchange)

básico utiliza 7 bits y es uno de los más utilizados actualmente. El código

ASCII extendido usa 8 bits por carácter por lo que se tienen 256 caracteres

diferentes. El problema es que los símbolos codificados son insuficientes

para representar caracteres especiales de idiomas de diversas culturas

como china, japonesa, coreana, etc.

Unicode es un código de E/S propuesto por un consorcio de empresas y entidades que trata de crear aplicaciones capaces de procesar texto de muy diferentes sistemas de escritura. Las características principales son:

o Está reconocido como estándar ISO/IEC 10646. o Cubre la mayoría de los lenguajes actuales. o A cada carácter se le asigna un único código. Todos los símbolos se

representan con un número fijo de bits, 16 concretamente. o Cada carácter está formado por una cadena de 16 bits, pudiendo

codificarse en total 216 = 65356 símbolos diferentes. o No contempla la codificación de caracteres de control. o Incluye caracteres combinados, símbolos como ä, ñ, etc. o No determina la forma o imagen concreta de cada carácter (fuente).

Se puede también representar también sonidos, imágenes, videos, etc., y

cualquier información que se almacene en un computador.

4. ALGORITMOS Y ELEMENTOS QUE LO CONFORMAN.

Un algoritmo es un método para resolver un problema mediante una serie de

pasos precisos, definidos y finitos. Es un conjunto de reglas para resolver

determinado problema describiendo de forma lógica su solución. Cada una de las

acciones de que consta un algoritmo es denominada sentencia (o instrucciones) y

éstas deben ser escritas en términos de cierto lenguaje comprensible para el

computador, que es el lenguaje de programación.

Page 12: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 12

4.1. CARACTERÍSTICAS DE LOS ALGORITMOS.

Los criterios que debe satisfacer un algoritmo (características) son:

o Entrada. Son cero o más parámetros (datos) los cuales son

externamente sustituidas.

o Salida. Al menos un dato es producido.

o Exactitud/precisión. Cada instrucción debe ser clara y sin ambigüedad

(hacen lo que deben hacer).

o Finito. Terminará después de un número finito de pasos.

o Eficiente. Cada instrucción puede ser verificada por una persona con

una prueba manual que satisfaga los requerimientos planteados por el

problema.

o Repetible. Dada una misma entrada, siempre debe dar la misma salida.

4.2. PARTES DE UN ALGORITMO.

Los algoritmos se construyen utilizando elementos simples para que el lenguaje se

parezca más a los lenguajes de programación de alto nivel. Entre ellos se tienen:

4.2.1. TIPOS DE DATOS.

Las diferencias piezas de información con las que un programa trabaja se conocen

colectivamente como “datos”. Todos los datos tienen un “tipo” asociado con

ellos, que determina la naturaleza del conjunto de valores que aquel puede tomar.

Por ejemplo, un dato puede ser un simple caracter, tal como ‗B‘, un valor entero

como 36, un número real como 5.75, una cadena de caracteres como ―Hola

Mundo‖, un valor de verdad como Verdadero o Falso, entre otros.

4.2.2. CONSTANTES Y VARIABLES.

Todos los programas necesitan almacenar datos temporalmente para poder

procesarlos y generar así la salida esperada. Estos datos, a grandes rasgos,

pueden clasificarse en dos grupos:

A un dato cuyo valor no puede cambiar (se mantiene constante) durante la

ejecución de un programa se lo denomina Constante. Las constantes

deben ser declaradas y asignadas un valor antes de su utilización.

Por su parte, los datos de un programa cuyo valor puede cambiar durante la

ejecución del mismo se conocen como Variables. Una variable es, en

Page 13: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 13

realidad, una posición de memoria con nombre (Nombre de la Variable), y

que contiene un valor (Valor de la Variable). Las variables se asemejan a

cajas o buzones, donde cada una de las cuales tiene un número y contiene

un valor. Existen tantos tipos de variables como tipos de datos diferentes.

4.2.3. SENTENCIAS O INSTRUCCIONES.

Las sentencias describen acciones algorítmicas que pueden ser ejecutadas. En

general, las sentencias se clasifican en ejecutables (especifican, por ejemplo,

operaciones de cálculos aritméticos y entradas/salidas de datos) y no ejecutables

(no realizan acciones concretas ni afectan a la ejecución del programa, sino que

ayudan a su legibilidad) como la declaración de variables.

Las sentencias se clasifican, según su tipo y número, en:

Sentencias Simples: Son sentencias que no contiene ninguna otra

sentencia. El ejemplo más típico de sentencia simple es la sentencia de

asignación, la cual se utiliza para almacenar un valor en una variable. La

operación de asignación se suele representar en pseudocódigo con el

símbolo ‗‘, para denotar que el valor situado a su derecha se almacena en

la variable situada a la izquierda:

o variable Valor

o Ejemplo: suma0 (la asignación sólo será válida si el valor es

válido para el tipo de dato definido para la variable).

Otros ejemplos de sentencias simples son las de entrada/salida.

Sentencias estructuradas: Son sentencias compuestas de otras

sentencias que se ejecutan en secuencia, condicionalmente o

repetidamente.

4.2.4. OPERADORES Y EXPRESIONES.

Las variables y constantes se pueden procesar utilizando operaciones y funciones

adecuadas para sus tipos.

Se denomina expresión a un conjunto de variables y / o constantes unidas por

operadores.

Un operador es un símbolo o palabra que significa que se ha de realizar cierta

acción entre uno o dos valores que son llamados operandos.

Page 14: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 14

Si en una expresión existe más de una operación debe tenerse en cuenta que

existen una serie de reglas para definir la prioridad en la que éstas se realizarán.

Por este motivo es que se suelen utilizar los paréntesis para establecer la prioridad

de aplicación de los operandos.

Existen diversos tipos de operadores, por ejemplo:

Aritméticos: Son apropiados únicamente para tipos numéricos. Ejemplos

de operadores aritméticos son ― + ‖, ― - ‖, ― * ‖ y ― / ‖, etc., los cuales permiten

obtener el resultado de la suma, la resta, la multiplicación y la división de

dos datos respectivamente. Su resultado es un número.

De relación: Los operadores de relación (o relacionales) se utilizan para

expresar condiciones y describen una relación entre dos valores. Ejemplos

de operadores relacionales son ― < ‖ (Menor que), ― >‖ (Mayor que), ― = ‖

(Igual a) y ― <> ‖ (Distinto a), etc. Su resultado es un valor de verdad.

Los operadores aritméticos y los relacionales se utilizan de la siguiente

forma: variable o constante operador variable o constante. Por ejemplo: a +

b, c/d, a<b, c<>d, etc.

Lógicos: Estos operadores se utilizan con constantes lógicas de forma

similar al modo en que los operadores aritméticos se utilizan con las

constantes numéricas. Estos operadores trabajan con operandos que son

expresiones lógicas. La operación and (y) combina dos condiciones simples

y produce un resultado verdadero sólo si los dos operandos son

verdaderos. La operación or (o) es verdadera si uno de los dos operandos

es verdadero. La operación not (no) actúa sobre una sola condición simple

u operando y simplemente niega (o invierte) su valor. Su resultado en es

valor de verdad. Existen otros operadores lógicos además de los

mencionados.

Ejemplo de expresión: Cos (2*pi * X) + 7.69 * X

4.2.5. ESTRUCTURAS DE CONTROL.

El concepto de flujo de control a través de un algoritmo y luego del programa se

refiere al orden en que se ejecutan las acciones individuales del mismo. Aunque

un flujo normal de un programa estructurado es lineal, existen métodos que

Page 15: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 15

permiten salir del flujo lineal a través del uso de las llamadas estructuras de

control.

Las estructuras de control de un lenguaje de programación son métodos para

especificar el orden en que las instrucciones de un algoritmo se ejecutarán. Estas

estructuras son, por consiguiente, fundamentales en los lenguajes de

programación y en los diseños de los algoritmos.

Las estructuras de control son:

Secuencia: Sucesión simple de dos o más operaciones (una tras otra).

De Selección/Condicionales: Bifurcación condicional de una o más

operaciones.

De Repetición o Iteración: Repetición de una operación mientras se

cumple una condición.

4.3. PASOS PARA CREAR UN ALGORITMO.

Para diseñar un algoritmo se debe comenzar por identificar las tareas más

importantes para resolver el problema y disponerlas en el orden en que han de ser

ejecutadas. Los pasos para crear un algoritmo son:

Análisis del problema. Para resolver cualquier problema, se debe

comprenderlo completamente.

Diseño del algoritmo. Se describen los pasos para resolver el problema. Es

mejor solucionar problemas pequeños.

Prueba del algoritmo. Se realiza las pruebas manuales necesarias para

comprobar que el algoritmo arroje los resultados deseados.

En general, los algoritmos reciben datos de entrada, los procesa y genera la

salida.

El proceso se refiere a los cálculos que se deben hacer para obtener la salida

deseada. A partir de los datos de entrada se consigue la salida.

Page 16: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 16

Los algoritmos generalmente se escriben en diagramas de flujo y pseudocódigo.

El primero trabaja con representaciones gráficas, el segundo con un lenguaje

especial (más adelante se describirá a detalle éstos conceptos).

5. CONCEPTOS BÁSICOS DE PROGRAMACIÓN.

Es un proceso para convertir especificaciones generales de un sistema en

instrucciones utilizables por la máquina, que produzcan los resultados deseados.

Se le conoce también como desarrollo de software.

5.1. PROGRAMA.

Es una lista de instrucciones que la computadora debe seguir para procesar datos

y convertirlos en información. Las instrucciones se componen de enunciados

usados en lenguajes de programación como Pascal, Java, C, C#, etc.

5.1.1. CARACTERÍSTICAS DEL PROGRAMA.

Debe ser confiable y funcional.

Advertir errores de entrada obvios y comunes.

Documentado adecuadamente.

Ser comprensible.

Codificado en el lenguaje apropiado.

5.2. APLICACIÓN INFORMÁTICA.

Es el conjunto de uno a varios programas.

5.3. SISTEMA INFORMÁTICO.

En el conjunto de elementos necesarios (computadora, terminales, impresoras,

etc.) para la realización y explotación de aplicaciones informáticas.

5.4. DATOS.

Son las características propias de cualquier entidad. Por ejemplo: los datos de una

persona como su edad, fecha de nacimiento, domicilio, número de teléfono, etc.

5.5. INFORMACIÓN.

Page 17: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 17

Es el conocimiento relevante producido como resultado del procesamiento de

datos y adquirido por la gente para realzar el entendimiento y cumplir ciertos

propósitos.

5.6. PROCESAMIENTO DE DATOS.

Consiste en la recolección de datos de entrada que son evaluados y ordenados

para ser colocados de manera que produzcan información útil.

5.6.1. ACTIVIDADES DEL PROCESAMIENTO DE DATOS.

Captura de datos de entrada

Manejo de los datos (incluye clasificación, ordenación, transformación,

cálculos, etc)

Administración de la salida resultante.

6. RESOLUCIÓN DE PROBLEMAS CON COMPUTADORA - DESARROLLO

DE SOFTWARE.

El proceso de resolución de un problema con una computadora conduce a la

escritura de un programa, y a su ejecución en la misma. Aunque el proceso de

diseñar programas es, esencialmente, un proceso creativo, se pueden considerar

una serie de fases o pasos comunes que generalmente deben seguir todos los

programadores. Las fases de resolución de un problema con computadoras son:

- Análisis del problema

- Diseño del algoritmo solución

- Codificación

- Compilación y Ejecución

- Verificación

- Depuración

- Documentación

- Mantenimiento

El proceso de crear y mantener programas de computación se denomina

Desarrollo de Software o Ciclo de Vida de Desarrollo de Software.

Las dos primeras fases conducen a un diseño detallado escrito en forma de

algoritmo. Como habíamos mencionado, un algoritmo es un método para resolver

un problema mediante una serie de pasos (instrucciones) precisos, definidos y

Page 18: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 18

finitos. Durante la tercer etapa (codificación) se implementa (poner en

funcionamiento) el algoritmo en un código escrito en un lenguaje de programación,

reflejando las ideas desarrolladas en la fase de análisis y diseño.

La fase de compilación y ejecución traduce y ejecuta el programa. En las fases de

verificación y depuración el programador busca errores de las etapas anteriores y

los elimina. Cuanto más tiempo se invierta en la fase de análisis y diseño, menor

será el tiempo necesario para depurar el programa. Por último, debe realizarse la

documentación del mismo.

Los programas son mantenidos en el tiempo, pues se realizan mejoras o se

aumenta funcionalidad a los mismos.

6.1. PASOS DEL DESARROLLO DE SOFTWARE.

6.1.1. ANÁLISIS DEL PROBLEMA.

Se conoce también como especificación, definición o análisis del problema. En

este paso se determinan la información inicial para la elaboración del programa.

Es donde se determina qué es lo que debe resolverse con el computador, de qué

presupuestos se debe partir... en definitiva, el planteamiento del problema.

Se requieren de cinco tareas:

1. Determinación de objetivos del programa. Debe definirse claramente los

problemas particulares que deberán ser resueltos o las tareas que hay que

realizar, esto nos permitirá saber qué es lo que se pretende solucionar y nos

proporcionará información útil para el planeamiento de la solución.

2. Determinación de la salida deseada. Los datos seleccionados deben ser

arreglados en una forma ordenada para producir información. Esta salida

podría ser una salida de impresión, de presentación en el monitor, etc.

3. Determinación de los datos de entrada. Una vez identificada la salida que se

desea, se pueden determinar los datos de entrada y la fuente de estos datos.

Los datos deben ser recolectados y analizados.

4. Determinación de los requerimientos de procesamiento. Aquí se definen

las tareas de procesamiento que deben desempeñarse para que los datos de

entrada se conviertan en una salida.

5. Documentación de las especificaciones del programa. Es importante

disponer de documentación permanente. Deben registrarse todos los datos

necesarios para el procesamiento requerido. Esto conduce al siguiente paso

del diseño del programa.

Page 19: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 19

6.1.2. DISEÑO DEL ALGORITMO SOLUCIÓN.

Es diseñar cualquier sistema nuevo o las aplicaciones que se requieren para

satisfacer las necesidades. Esta actividad se debe dividir en:

Operaciones de entrada/salida.

Cálculos.

Lógica/ comparación.

Almacenamiento/ consulta.

En este paso se genera una solución con técnicas de programación como diseño

descendente de programas, pseudocódigos, diagramas de flujo y estructuras

lógicas.

6.1.3. CODIFICACIÓN DEL PROGRAMA.

Es la generación real del programa con un lenguaje de programación. En esta

etapa se hace uso de la lógica que desarrolló en el paso del diseño del programa

para efectivamente generar un programa. Se debe seleccionar el lenguaje

apropiado para resolver el problema.

6.1.4. COMPILACIÓN Y EJECUCIÓN.

En la fase de compilación y ejecución, el compilador comprueba la sintaxis y

semántica del programa, lo traduce y se ejecuta el programa.

6.1.5. PRUEBAS - VERIFICACIÓN.

Consiste en verificar la funcionalidad del programa a través de varios métodos

para detectar errores posibles.

Chequeo de Escritorio. El programador se sienta frente a un escritorio y

corrige una impresión del programa. Revisa el listado línea por línea en busca

de errores de sintaxis y lógica.

Prueba manual de datos de muestra. Se corre el programa en forma manual

aplicando datos tanto correctos como incorrectos para comprobar que funciona

correctamente.

Intento de Traducción. El programa corre en una computadora usando un

programa traductor para convertirlo a lenguaje de máquina. Para ello debe

Page 20: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 20

estar ya libre de errores de sintaxis, de lo contrario serán identificados por el

programa de traducción.

Prueba de datos de muestra en la computadora. Después del intento de

traducción y corregidos los errores de sintaxis, se procede a buscar errores de

lógica utilizando diferentes datos de muestra.

Prueba por un grupo selecto de usuarios potenciales. Esto se conoce

como prueba beta. Se trata por lo general del paso final en la prueba de un

programa. Usuarios potenciales ponen a prueba el programa y ofrecen

retroalimentación.

6.1.6. DEPURACIÓN.

Depurar es correr el programa en una computadora y corregir las partes que no

funcionan. En esta fase se comprueba el funcionamiento de cada programa y esto

se hace con datos reales o ficticios. Cuando los programas están depurados, se

prueban. Cuando los programas se depuran, se pueden encontrar los siguientes

errores:

Errores de sintaxis o de compilación. Es una violación de las reglas del

lenguaje de programación. Son más fáciles de corregir, ya que son detectados

por el compilador (posible error de escritura), el cual dará información sobre el

lugar donde está y la naturaleza de cada uno de ellos mediante un mensaje de

error.

Errores de Ejecución. Se deben generalmente a operaciones no permitidas

como dividir por cero, leer un dato no numérico en una variable numérica,

exceder un rango de valores permitidos, etc. Se detectan porque se produce

una parada anormal del programa durante su ejecución.

Errores de Lógica. Corresponden a la obtención de resultados que no son

correctos y la única manera de detectarlos es realizando suficientes pruebas

del programa. Son los más difíciles de corregir, no sólo por la dificultad de

detectarlos, sino porque se deben a la propia concepción y diseño del

programa.

Errores de Especificación. Es el peor tipo de error y el más difícil de corregir.

Se deben a mal diseño del programa posiblemente por mala comunicación

usuario-programador y se detectan cuando ya se ha concluido el diseño e

incluso cuando el programa está en producción (funcionando), lo cual puede

implicar repetir gran parte del trabajo realizado.

6.1.7. DOCUMENTACIÓN DE PROGRAMA.

Page 21: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 21

Consiste en describir por escrito a nivel técnico los procedimientos relacionados

con el programa y su modo de uso. También se debe documentar el programa

para que sea más entendible.

¿Para quiénes es la documentación?

Los documentos que deben elaborarse son: Manual de Usuario y Manual Técnico.

A los usuarios se les elabora un manual de referencia o de usuario para que

aprendan a utilizar el programa. Esto se hace a través de capacitaciones y revisión

de la documentación del manual de usuario. El manual del usuario no está escrito

a nivel técnico sino al de los distintos usuarios previstos y explica en detalle cómo

usar el programa: descripción de las tareas que realiza el programa, instrucciones

necesarias para su instalación puesta en marcha y funcionamiento,

recomendaciones de uso, menús de opciones, método de entrada y salida de

datos, mensajes de error, recuperación de errores, etc.

A los operadores por si se presentan mensajes de error, sepan cómo responder a

ellos. Además que se encargan de darle soporte técnico al programa.

A los programadores a través del manual técnico para que recuerden aspectos

de la elaboración del programa o en caso que otras personas puedan actualizarlo

o modificarlo (darle mantenimiento) y no son necesariamente las personas que lo

diseñaron. Es por ello, que la documentación debe contener algoritmos y

diagramas de flujo de los diferentes módulos que lo constituyen y las relaciones

que se establecen entre ellos; listados del programa, corridas, descripción de

variables que se emplean en cada módulo, cuáles son comunes a diferentes

módulos y cuáles locales; descripción de los ficheros de cada módulo y todo lo

que sea de importancia para un programador. También se documenta

técnicamente mediante diagramas UML (Unified Modeling Language).

A los analistas de sistemas que son las personas que deberán proporcionar toda

la información al programador. Estos se encargan de hacer una investigación

previa de cómo realizar el programa y documentar con las herramientas

necesarias para que el programador pueda desarrollar el sistema en algún

lenguaje de programación adecuado.

6.1.8. MANTENIMIENTO DEL PROGRAMA.

Es el paso final del desarrollo del software. Alrededor del 75% del costo total del

ciclo de vida de un programa se destina al mantenimiento. El propósito del

Page 22: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 22

mantenimiento es garantizar que los programas en uso estén libres de errores de

operación y sean eficientes y efectivos, además que los sistemas evolucionan en

el tiempo y su funcionalidad es aumentada o mejorada de acuerdo a las

necesidades de los usuarios.

7. TIPOS Y PARADIGMAS DE PROGRAMACIÓN.

Existen varios tipos o técnicas de programación, en la mayoría de casos, las

técnicas se centran en programación estructurada, modular y orientada a objetos.

A continuación, se presenta brevemente las principales técnicas de programación:

7.1. PROGRAMACIÓN ESTRUCTURADA.

Programación Estructurada es una técnica en la cual la estructura de un

programa, esto es, la interpelación de sus partes se realiza tan claramente como

es posible mediante el uso de tres estructuras de control:

Secuencia: Sucesión simple de dos o más operaciones (una tras otra).

Selección/Condicional: Bifurcación condicional de una o más

operaciones.

Repetición: Repetición de una operación mientras se cumple una

condición.

Estos tres tipos de estructuras lógicas de control pueden ser combinados para

producir programas que manejen cualquier tarea de procesamiento de

información.

Una característica importante en un programa estructurado es que puede ser leído

en secuencia, desde el comienzo hasta el final sin perder la continuidad de la

tarea que cumple el programa, de esta manera la comprensión y lectura de un

programa es muy sencilla y se torna fácil el encontrar errores.

7.2. PROGRAMACIÓN MODULAR.

La programación modular consta de varias secciones dividas de forma que

interactúan a través de llamadas a funciones o procedimientos, que integran el

programa en su totalidad.

En la programación modular, el programa principal coordina las llamadas a los

módulos secundarios (subprogramas) y pasa los datos necesarios en forma de

parámetros.

Page 23: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 23

A su vez, cada módulo puede contener sus propios datos y llamar a otros módulos

o funciones.

7.3. PROGRAMACIÓN FUNCIONAL.

Se caracteriza principalmente por permitir declarar y llamar a funciones dentro de

otras funciones.

7.4. PROGRAMACIÓN ORIENTADA A OBJETOS (POO).

La programación orientada a objetos o POO (OOP según sus siglas en inglés)

es un paradigma de programación que usa objetos y sus interacciones, para

diseñar aplicaciones y programas informáticos. Está basado en varias técnicas,

incluyendo herencia, abstracción, polimorfismo y encapsulamiento

Los objetos son entidades que tienen un determinado estado (atributos), comportamiento (método) e identidad:

El estado está compuesto de datos, será uno o varios atributos a los que se habrán asignado unos valores concretos (datos).

El comportamiento está definido por los métodos o mensajes a los que sabe responder dicho objeto, es decir, qué operaciones se pueden realizar con él.

La identidad es una propiedad de un objeto que lo diferencia del resto, dicho con otras palabras, es su identificador (concepto análogo al de identificador de una variable o una constante).

Un objeto contiene toda la información que permite definirlo e identificarlo frente a otros objetos pertenecientes a otras clases e incluso frente a objetos de una misma clase, al poder tener valores bien diferenciados en sus atributos. A su vez, los objetos disponen de mecanismos de interacción llamados métodos, que favorecen la comunicación entre ellos. Esta comunicación favorece a su vez el cambio de estado en los propios objetos. Esta característica lleva a tratarlos como unidades indivisibles, en las que no se separa el estado y el comportamiento.

Los métodos (comportamiento) y atributos (estado) están estrechamente relacionados por la propiedad de conjunto. Esta propiedad destaca que una clase requiere de métodos para poder tratar los atributos con los que cuenta. De esta manera se estaría realizando una programación estructurada camuflada en un lenguaje de programación orientado a objetos.

La POO difiere de la programación estructurada tradicional, en la que los datos y los procedimientos están separados y sin relación, ya que lo único que se busca es el procesamiento de unos datos de entrada para obtener otros de salida. La

Page 24: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 24

programación estructurada anima al programador a pensar sobre todo en términos de procedimientos o funciones, y en segundo lugar en las estructuras de datos que esos procedimientos manejan. En la programación estructurada solo se escriben funciones que procesan datos. Los programadores que emplean POO, en cambio, primero definen objetos para luego enviarles mensajes solicitándoles que realicen sus métodos por sí mismos.

7.5. PROGRAMACIÓN DIRIGIDA POR EVENTOS.

La programación dirigida por eventos es un paradigma de programación en el que tanto la estructura como la ejecución de los programas van determinados por los sucesos que ocurran en el sistema, definidos por el usuario o que ellos mismos provoquen.

Mientras en la programación estructurada (o secuencial) es el programador el que define cuál va a ser el flujo del programa, en la programación dirigida por eventos será el propio usuario —o lo que sea que esté accionando el programa— el que dirija el flujo del programa. Aunque en la programación secuencial puede haber intervención de un agente externo al programa, estas intervenciones ocurrirán cuando el programador lo haya determinado, y no en cualquier momento como puede ser en el caso de la programación dirigida por eventos.

El creador de un programa dirigido por eventos debe definir los eventos que manejarán su programa y las acciones que se realizarán al producirse cada uno de ellos, lo que se conoce como el administrador de evento.

En la programación dirigida por eventos, al ejecutarse el programa esperará hasta que se produzca algún evento. Cuando alguno de los eventos esperados por el programa tenga lugar, el programa pasará a ejecutar el código del correspondiente administrador de evento. Por ejemplo, si el evento consiste en que el usuario ha hecho click en el botón de play de un reproductor de películas, se ejecutará el código del administrador de evento, que será el que haga que la película se muestre por pantalla.

7.6. PROGRAMACIÓN DE SCRIPTS.

Un script es un programa que se escribe con una sintaxis particular generalmente

en un archivo de texto plano que permanece en su forma original, para que sea

interpretado comando por comando cada vez que se ejecuta por un intérprete o un

shell.

Page 25: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 25

Un script es básicamente un programa que llama a otros programas, con la

posibilidad de hacer algún tipo de procesamiento propio (como control de flujo,

operaciones matemáticas simples, etc).

7.7. PROGRAMACIÓN CONCURRENTE Y PARALELA.

La programación paralela es una técnica de programación en la que muchas

instrucciones se ejecutan simultáneamente. Se basa en el principio de que los

problemas grandes se pueden dividir en partes más pequeñas que pueden

resolverse de forma concurrente ("en paralelo").

Se suele utilizar para controlar los accesos de usuarios y programas a un recurso

de forma simultánea. Se trata de una programación más lenta y laboriosa.

La computación paralela emplea elementos de procesamiento múltiple

simultáneamente para resolver un problema. Esto se logra dividiendo el problema

en partes independientes de tal manera que cada elemento de procesamiento

pueda ejecutar su parte del algoritmo a la misma vez que los demás. Los

elementos de procesamiento pueden ser diversos e incluir recursos tales como un

único ordenador con muchos procesadores, varios ordenadores en red, hardware

especializado o una combinación de los anteriores.

7.8. PROGRAMACIÓN LÓGICA.

Se suele utilizar en la inteligencia artificial, principalmente en juegos y en sistemas

expertos. Se trata de una programación basada en el cálculo de predicados (una

teoría matemática que permite lograr que un ordenador basándose en hecho y

reglas lógicas, pueda dar soluciones inteligentes).

7.9. PROGRAMACIÓN DISTRIBUIDA.

La programación distribuida es un paradigma de programación enfocado en desarrollar sistemas distribuidos, abiertos, escalables, transparentes y tolerantes a fallos. Este paradigma es el resultado natural del uso de las computadoras y las redes.

Casi cualquier lenguaje de programación que tenga acceso al máximo al hardware del sistema puede manejar la programación distribuida, considerando una buena cantidad de tiempo y código.

Page 26: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 26

La programación distribuida típicamente cae en alguna de las varias arquitecturas básicas o arquitecturas: cliente-servidor, 3-tier, n-tier, objetos distribuidos, entre otras además.

7.10. PROGRAMACIÓN WEB.

La programación web permite la creación de sitios dinámicos en Internet. Esto se consigue generando los contenidos del sitio a través de una base de datos mediante lenguajes de script. Con la programación web podemos desarrollar sitios dinámicos como periódicos digitales o tiendas virtuales.

La programación web, parte de las siglas WWW, que significan World Wide Web o telaraña mundial.

Para realizar una página con la programación web, se deben tener claros, tres conceptos fundamentales:

El URL (Uniform Resource Locators), es un sistema con el cual se localiza un recurso dentro de la red, este recurso puede ser una página web, un servicio o cualquier otra cosa. En resumen, el URL no es más que un nombre, que identifica una computadora, dentro de esa computadora un archivo que indica el camino al recurso que se solicita.

HTTP (Hypertext Transfer Protocol), que es el protocolo encargado de llevar la información que contiene una página Web por toda la red de internet.

HTML (Hypertext Markup Language), es el lenguaje necesario cuya funcionalidad es la de representar cualquier clase de información que se encuentre almacenada en una página Web.

En la programación web, el HTML es el lenguaje que permite codificar o preparar documentos de hipertexto, que viene a ser el lenguaje común para la construcción de una página Web.

Las aplicaciones web residen en un servidor web como Apache, Internet Information Server (IIS), etc., en cambio el cliente es un navegador web como Internet Explorer, Google Chrome, Apple Safari, Mozilla Firefox, etc.

8. LENGUAJES DE PROGRAMACIÓN.

Es un conjunto de símbolos junto a un conjunto de reglas para combinar dichos

símbolos que se usan para escribir programas de computadoras que pueden ser

entendidos por ellas. Constan de un léxico, una sintaxis y una semántica.

Page 27: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 27

Léxico: Conjunto de símbolos permitidos o vocabulario.

Sintaxis: Reglas que indican cómo realizar las construcciones del lenguaje.

Semántica: Reglas que permiten determinar el significado de cualquier

construcción del lenguaje.

Éstos se clasifican en tres grandes categorías: máquina, bajo nivel (ensamblador,

o assembler) y alto nivel.

8.1. LENGUAJES DE MAQUINA.

Los lenguajes de máquina son aquellos cuyas instrucciones son directamente

entendibles por la computadora, y no necesitan traducción posterior para que el

CPU pueda comprender y ejecutar el programa. La programación en lenguaje de

máquina es difícil, ya que implica escribir directamente en un sistema binario

(ceros y unos), por eso se necesitan lenguajes que permitan simplificar ese

proceso.

8.2. LENGUAJES DE BAJO NIVEL.

Los lenguajes de bajo nivel fueron diseñados con ese fin. Éstos son dependientes

de la arquitectura física de la computadora y de un conjunto específico de

instrucciones para el CPU, y los programas escritos en ellos deben ser traducidos

a lenguaje máquina para poder ser ejecutados. Un lenguaje típico de bajo nivel es

el lenguaje ensamblador (Assembler).

8.3. LENGUAJES DE ALTO NIVEL.

Los lenguajes de programación de alto nivel son aquellos en los que las

instrucciones o sentencias a la computadora son escritas con palabras similares a

los lenguajes humanos – en general lenguaje inglés – lo que facilita la escritura y

comprensión por parte del programador. Una propiedad de los lenguajes de alto

nivel es que son independientes de la máquina, esto es, las sentencias del

programa no dependen del diseño de hardware de una computadora específica.

Los programas escritos en lenguajes de alto nivel, al igual que los escritos en

lenguajes de bajo nivel, no son entendibles directamente por la máquina, sino que

necesitan ser traducidos a instrucciones en lenguaje máquina que entiendan las

computadoras. Los programas escritos en un lenguaje de alto nivel se llaman

Programas Fuente.

Existen diversos tipos de lenguajes de programación de alto nivel, según su

evolución temporal y el uso que se les quiera dar. Algunos ejemplos de tipos de

lenguajes de alto nivel son:

Page 28: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 28

Estructurados - procedimentales: Basic, C, Pascal, Cobol, Fortran, etc.

Orientados a Objetos: SmallTalk, C#, Visual Basic.NET, C++, Java,

Objetive-C, etc.

Declarativos: Lisp, Prolog, etc.

Funcionales: AML, CAML, etc.

Dirigidos por eventos: Visual Basic, etc

De scripting:

o Lenguaje de control de tareas y shells: cmd.exe, csh, AppleScript,

sh, etc.

o GUI Scripting: AutoHotkey, AutoIt, Expect, Automator, etc.

o Lenguaje scripting de aplicaciones específicas: ActionScript en

Flash, MATLAB, mIRC, etc.

De programación web: Del lado del servidor se tiene ASP

(Active Server Pages), JSP (JavaServer Pages), etc., y del

lado del cliente lenguajes como JavaScript, JScript, VBScript,

etc.

o Lenguajes de procesamiento de textos: AWK, Perl, sed, XSLT.

o Lenguajes dinámicos de propósito general: Groovy, Lisp, Perl, PHP,

Python, Ruby, etc.

Multiparadigma: Java, C#, Visual Basic.NET, C++, Delphi, PHP, Visual

Basic, etc.

8.4. COMPILACIÓN, COMPILADORES E INTÉRPRETES.

Los compiladores son programas se encargan de traducir lo que haya escrito en

lenguaje de alto nivel (código o programa fuente) y lo convierten en un programa

llamado código o programa objeto (casi ejecutable). El proceso de traducción de

un programa fuente a un programa objeto se denomina Compilación.

Page 29: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 29

8.4.1. COMPILADOR E INTÉRPRETE.

Compilador un programa que traduce un programa escrito en un lenguaje de alto

nivel, por ejemplo C++, en un programa en lenguaje de máquina que la

computadora es capaz de entender y ejecutar directamente. Un compilador es un

tipo especial de programa, en cuanto a que sus entradas o datos son algún

programa y su salida es otro programa. Para evitar confusiones, solemos llamar

programa fuente o código fuente al programa de entrada, y programa objeto o

código objeto a la versión traducida que el compilador produce. Código se usa

frecuentemente para referirse a un programa o a una parte de él, sobre todo

cuando se habla de programas objeto.

El compilador, informa al usuario de la presencia de errores en el programa fuente,

pasándose a crear el programa objeto cuando está libre de errores. El código

objeto puede ser ejecutado posteriormente. Una vez traducido un programa, su

ejecución es independiente de su compilación. Involucra dos pasos en su

operación:

Convertir código fuente a objeto.

Ejecutar el código objeto.

Al tener el código objeto, el programa se ejecuta más rápido.

En cambio, un intérprete permite que un programa fuente escrito en un lenguaje

vaya traduciéndose y ejecutándose directamente sentencia a sentencia por la

computadora. Convierte uno por uno los enunciados del código fuente a código

objeto antes de ser ejecutados. Convierte y ejecuta el programa en línea al mismo

tiempo. Ejemplo: Basic estándar y JavaScript.

Las ventajas de los intérpretes son:

Page 30: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 30

Resulta más fácil localizar y corregir errores (depuración de programas)

Son más pedagógicos para aprender a programar.

El programa es más fácil de desarrollar.

Para cada una de las líneas se ejecuta el siguiente proceso:

Análisis de la instrucción de esa línea.

Traducción de esa línea (si ya está correcta) a código objeto.

Ejecución de esa línea.

Con el intérprete, cada vez que necesitamos ejecutar el programa tenemos que

volver a analizarlo porque no hay código objeto.

Con el compilador, aunque más lenta la traducción, sólo se realiza una vez.

9. LA LÓGICA COMO ASPECTO FUNDAMENTAL DE LA PROGRAMACIÓN.

Es la capacidad de pensar racionalmente acerca de soluciones alternativas y los

resultados de aplicarlas, y por lo tanto, de hacer elecciones inteligentes.

Es el estudio crítico del razonamiento y tiene un valor teórico y práctico.

Es el estudio de los métodos y principios usados al distinguir entre los

argumentos correctos (buenos) y los argumentos incorrectos (malos).

En un sentido amplio, es el estudio del correcto razonamiento.

La lógica se remonta a la época de Aristóteles en el siglo IV antes de Cristo. En

lógica, Aristóteles desarrolló reglas para establecer un razonamiento encadenado

que, si se respetaban, no producirían nunca falsas conclusiones si la reflexión

partía de premisas verdaderas (reglas de validez). En el ejemplo más famoso,

"Todos los humanos son mortales" y "Todos los griegos son humanos", se llega a

la conclusión válida de que "Todos los griegos son mortales"

9.1. ¿QUÉ ES LÓGICA?

Lógica Deductiva. Es la que se encarga de determinar la validez o invalidez

de los argumentos. Permite proporcionar la simbología que nos servirá para

facilitar el desarrollo de la capacidad de análisis de problemas, para obtener

una solución posible.

Argumentos. Cuando el razonamiento se expresa con palabras, recibe el

nombre de "argumento". Un argumento es un grupo cualquiera de

Page 31: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 31

proposiciones o enunciados que forman premisas y conclusiones. Este puede

constar de varias premisas pero de una sola conclusión.

Premisas y Conclusión. Las premisas de un argumento son proposiciones

afirmadas como fundamento o razones para aceptar una conclusión. La

conclusión es la proposición afirmada que se basa en las otras proposiciones o

premisas. Una proposición puede ser premisa en un argumento y conclusión

en otro.

Por ejemplo: "Todos los hombres son mortales". Aparece como premisa en el

siguiente argumento:

"Todos los hombres son mortales"

"Sócrates es un hombre"

"Por lo tanto, Sócrates es mortal".

Y como conclusión en el siguiente argumento:

" Todos los animales son mortales"

"Todos los hombres son animales"

"Luego, todos los hombres son mortales"

Expresiones como "por tanto", "por lo cual", "de ello se deduce", sirven para

introducir la conclusión de un argumento, en tanto que "pues" y "porque" se

emplean para introducir las premisas.

Otro Ejemplo:

"Todos se aburren en la conferencia".

"Ninguno de los que se aburren presta atención".

"Por consiguiente, ninguno de los asistentes está prestando atención".

Hay dos condiciones que debe satisfacer un argumento para establecer la

verdad de su conclusión: Debe ser válido y todas sus premisas deben ser

verdaderas.

Enunciado Simple: Es el que no contiene otro enunciado como parte

componente. Ej. "Las rosas son rojas"

Enunciado compuesto. Es el que se compone de varios enunciados. Ej.

"Las rosas son rojas y las violetas son azules". Cuando los enunciados

se unen por la conjunción ―Y‖, se denominan Enunciados conyuntos.

Page 32: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 32

Cuando los enunciados se unen por el conector ―O‖, se denominan

Enunciados disyuntos. De aquí surgen las siguientes tablas de verdad:

Ejemplos de aplicación de estas tablas de verdad:

Si A y B son valores verdaderos y P y Q son falsos, cuál es el valor de

verdad de la siguiente expresión: not (A or B) and (P and not Q)

Solución: Evaluamos primero los paréntesis, comenzando con el primero.

En la tabla OR buscamos a qué equivalen Verdadero or Verdadero (porque

A y B son verdaderos según el enunciado). Obtenemos que es Verdadero.

Como la expresión está negada, su valor opuesto es Falso. Al evaluar el

segundo paréntesis, Q es falso y al negarlo nos queda verdadero. Luego, si

P es falso nos queda Falso and Verdadero, y esto es igual a Falso.

10. REPRESENTACIÓN GRÁFICA DE LOS ALGORITMOS.

10.1. DESCRIPCIÓN NARRADA.

Este algoritmo es caracterizado porque sigue un proceso de ejecución común y

lógico, describiendo textualmente paso a paso cada una de las actividades a

realizar dentro de una actividad determinada.

Ejemplo: Algoritmo para asistir a clases:

1. Levantarse

2. Bañarse

Page 33: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 33

3. Vestirse

4. Desayunar

5. Cepillarse los dientes

6. Salir de casa

7. Tomar el autobús

8. Llegar a la Universidad

9. Buscar el aula

10. Ubicarse en un asiento

10.2. PSEUDOCÓDIGO.

Pseudo = falso. El pseudo código no es realmente un código sino una imitación y

una versión abreviada de instrucciones reales para las computadoras. Es una

técnica para diseño de programas que permite definir las estructuras de datos, las

operaciones que se aplicarán a los datos y la lógica que tendrá el programa de

computadora para solucionar un determinado problema. Utiliza un pseudolenguaje

muy parecido a nuestro idioma, pero que respeta las directrices y los elementos de

los lenguajes de programación. Se concibió para superar las dos principales

desventajas de los diagramas de flujo: lento de crear y difícil de modificar sin un

nuevo redibujo.

Ejemplo: Escribir un algoritmo que imprima en pantalla ―Hola Mundo‖.

Proceso HolaMundo

Escribir "Hola Mundo‖;

FinProceso

10.3. DIAGRAMAS DE FLUJO O FLUJOGRAMAS.

Son la representación gráfica de la solución algorítmica de un problema. Para

diseñarlos se utilizan determinados símbolos o figuras que representan una

acción dentro del procedimiento. Utilizan unos símbolos normalizados, con los

pasos del algoritmo escritos en el símbolo adecuado y los símbolos unidos con

flechas, denominadas líneas de flujo, que indican el orden en que los pasos deben

ser ejecutados.

Para su elaboración se sigue las siguientes reglas:

Page 34: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 34

1. Se escribe de arriba hacia abajo y de izquierda a derecha.

2. Siempre se usan flechas verticales u horizontales, jamás curvas.

3. Evitar cruce de flujos.

4. En cada paso expresar una acción concreta.

La secuencia de un flujo normal en una solución de un problema es:

1. Tiene un inicio.

2. Una lectura o entrada de datos.

3. El proceso de datos.

4. Una salida de información.

5. Un final

Ejemplo: Dibujar un diagrama de flujo que imprima en pantalla ―Hola Mundo‖.

Entre las ventajas de usar diagrama de flujos se tiene:

o Rápida comprensión de las relaciones.

o Análisis efectivo de las diferentes secciones del programa.

o Pueden usarse como modelos de trabajo en el diseño de nuevos

programas o sistemas.

o Comunicación con el usuario.

o Documentación adecuada de los programas.

o Codificación eficaz de los programas.

o Depuración y pruebas ordenadas de programas

Page 35: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 35

Entre las desventajas podemos anotar:

o Diagramas complejos y detallados suelen ser laboriosos en su

planteamiento y diseño.

o Acciones a seguir tras la salida de un símbolo de decisión, pueden ser

difíciles de seguir si existen diferentes caminos.

o No existen normas fijas para la elaboración de los diagramas de flujo que

permitan incluir todos los detalles que el usuario desee introducir.

10.4. INTRODUCCIÒN A UML (Unified Modeling Language).

UML es el lenguaje de modelado de sistemas de software más conocido y utilizado en la actualidad; está respaldado por el OMG (Object Management Group). Es un lenguaje gráfico para visualizar, especificar, construir y documentar un sistema. UML ofrece un estándar para describir un "plano" del sistema (modelo), incluyendo aspectos conceptuales tales como procesos de negocio, funciones del sistema, y aspectos concretos como expresiones de lenguajes de programación, esquemas de bases de datos y componentes reutilizables.

Es importante resaltar que UML es un "lenguaje de modelado" para especificar o para describir métodos o procesos. Se utiliza para definir un sistema, para detallar los artefactos en el sistema y para documentar y construir. En otras palabras, es el lenguaje en el que está descrito el modelo.

Hay que tener en cuenta que el estándar UML no define un proceso de desarrollo específico, tan solo se trata de una notación, es decir, no es una metodología de desarrollo de software.

UML cuenta con varios tipos de diagramas, los cuales muestran diferentes aspectos de las entidades representadas. Estos diagramas son:

10.4.1. DIAGRAMAS UML.

Diagramas de comportamiento. Permiten exhibir comportamientos de un

sistema o de los procesos de las organizaciones.

o Diagrama de caso de uso.

o Diagrama de actividad.

o Diagrama de estado.

o Diagrama de interacción.

Page 36: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 36

Diagramas de Interacción. Es un subconjunto de los diagramas de

comportamiento que permiten enfatizar las interacciones entre los objetos.

o Diagrama de comunicaciones

o Diagrama de secuencia

o Diagrama de tiempo.

Diagramas de estructura. Muestran los elementos de una especificación que

sean independientes del tiempo.

o Diagrama de clases.

o Diagrama de estructura.

o Diagrama de componentes.

o Diagrama despliegue.

o Diagrama de objeto

o Diagrama de paquetes.

11. ENTORNO DE PROGRAMACIÓN INTEGRADO (IDE).

Un entorno de programación es un programa que contiene, además del

compilador, utilitarios y herramientas. Estos elementos están integrados, de modo

que pueden llamarse fácilmente uno a otros durante el proceso de programación.

Por este motivo, a los entornos de programación frecuentemente se los identifica

con la sigla IDE (en inglés, Integrated Development Environment, o Entorne de

programación integrado).

Un entorno de programación típico contiene:

Un editor, que proporciona el medio para introducir el texto y los símbolos que constituyen el código fuente

Un intérprete o un compilador, que convierte el código fuente en instrucciones que la computadora puede comprender y ejecutar.

Un depurador (o debugger), que ayuda a analizar y corregir errores en tiempo de ejecución.

Ayuda (manuales, tutoriales, ejemplos, etc.) integrada.

El proceso de diseño, codificación, depuración y ejecución de un programa es mucho más fácil y rápido cuando se utiliza un buen entorno de programación.

Ejemplos de entorno de programación son: Microsoft Visual Studio, Eclipse, NetBeans.

Nuestro objetivo ahora es escribir algoritmos en pseudocódigo y en diagramas de flujo, para ello usaremos las herramientas PSeInt y JTraductor aunque no son propiamente IDEs. PSeInt es una herramienta en donde se escribe algoritmos en

Page 37: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 37

pseudocódigo, genera un diagrama de flujo y lo convierte en un programa C++, permite ejecutar el algoritmo paso a paso controlando la velocidad e inspeccionando expresiones, en cambio, JTraductor genera un programa Java. PSeInt es un software con varios años de creación, en cambio JTraductor se basa en PSeInt pero es de reciente creación. 12. PROGRAMACIÓN ESTRUCTURADA.

Recordemos que Programación Estructurada es una técnica en la cual la

estructura de un programa se lo realiza tan claramente como es posible mediante

el uso de tres estructuras de control:

Secuenciales: Sucesión simple de dos o más operaciones (una tras otra).

Selectivas o Condicionales: Bifurcación condicional de una o más

operaciones.

Repetitivas o Iterativas: Repetición de una operación mientras se cumple

una condición.

Escribiremos los algoritmos bajo el paradigma de la programación estructurada, para ello usaremos un pseudolenguaje cuyas características son:

Sintaxis sencilla (sin la complejidad de los lenguajes de programación). Manejo de las estructuras básicas de control. Sólo 3 tipos de datos básicos:

o Numérico: Números, tanto enteros como reales. Para separar decimales se utiliza el punto. Ejemplos: 12 23 0 -2.3 3.14

o Lógico: Sólo puede tomar dos valores: VERDADERO o FALSO.

o Caracter: Caracteres o cadenas de caracteres encerrados entre comillas (pueden ser dobles o simples). Ejemplos 'hola' "hola mundo" '123' 'FALSO' 'etc'. (generalmente se usa comillas simples para un carácter y dobles para cadena de caracteres o texto)

Estructuras de datos: Arreglos.

Todo algoritmo en pseudocógido tiene la siguiente estructura general:

Proceso <NombrePrograma>

<acción 1>;

<acción 2>;

. .

Page 38: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 38

. <acción n>;

FinProceso

Se inicia con la palabra clave Proceso seguida del nombre del programa, luego le sigue una secuencia de instrucciones (acciones) y finaliza con la palabra FinProceso. Una secuencia de instrucciones es una lista de una o más instrucciones, cada una terminada en punto y coma. No puede haber instrucciones fuera del proceso, aunque si comentarios. Las acciones incluyen operaciones de entrada y salida, asignaciones de variables, condicionales si-entonces o de selección múltiple y/o lazos mientras, repetir o para. Se pueden introducir comentarios luego de una instrucción, o en líneas separadas, mediante el uso de la doble barra ( // ). Todo lo que precede a //, hasta el fin de la línea, no será tomado en cuenta al interpretar el algoritmo. No puede haber instrucciones fuera del programa, aunque si comentarios. Las estructuras no secuenciales pueden anidarse. Es decir, pueden contener otras adentro, pero la estructura contenida debe comenzar y finalizar dentro de la contenedora.

Constantes e identificadores. o Los identificadores deben constar sólo de letras y números,

comenzando siempre con una letra.

o Las constantes de tipo carácter se escriben entre comillas ( " ).

o En las constantes numéricas, el punto ( . ) es el separador decimal.

o Las constates lógicas son Verdadero y Falso.

Definición de variables. La instrucción Definir permite explicitar el tipo de una o más variables. Esta definición puede ser opcional u obligatoria, aunque la asignación de tipos a los datos tiene dos objetivos principales:

1- Detectar errores de operaciones en los programas durante la fase de codificación.

2- Determinar cómo se ejecutarán las operaciones entre datos.

Page 39: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 39

Una operación de suma no tiene sentido con caracteres de texto, sólo con

números. Por consiguiente, si el compilador detecta una operación de suma de

dos caracteres normalmente producirá un error. Incluso entre tipos numéricos

la operación de suma se almacena de modo distinto, ya que los números

enteros y los reales se almacenan de formas distintas en memoria. A menos

que el programa conozca los tipos de datos no puede ejecutar correctamente

la operación de suma.

A los lenguajes que exigen que todos los datos utilizados deban tener sus tipos declarados explícitamente se los conoce como “fuertemente tipados”.

El tipo de un dato puede ser convertido bajo ciertas condiciones a otro tipo. Este mecanismo explícito de conversión de tipos de datos se suele denominar “CAST”.

La sintaxis es:

Definir <var1> , <var2> , … , <varN> Como [Real/Entero/Logico/Caracter] ;

Una variable debe ser definida antes de ser utilizada por primera vez.

Ejemplo: Definir var Como Real; // se define la variable var como Real

Definir acumulador Como Entero; // acumulador es una variable Entero

Asignación.

La instrucción de asignación permite almacenar un valor en una variable.

<variable> <- <expresión> ;

Al ejecutarse la asignación, primero se evalúa la expresión de la derecha y luego se asigna el resultado a la variable de la izquierda. El tipo de la variable y el de la expresión deben coincidir.

Ejemplo:

var<-1.0; // asigna 1.0 a var acumulador<-acumulador +1; // incrementa en 1 el acumulador

Page 40: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 40

Entradas.

La instrucción Leer permite ingresar información desde el ambiente.

Leer <variablel> , <variable2> , ... ,<variableN> ;

Esta instrucción lee N valores desde el ambiente (en este caso el teclado) y los asigna a las N variables mencionadas. Pueden incluirse una o más variables, por lo tanto el comando leerá uno o más valores.

Ejemplo:

Leer cantidad; Leer valor1, valor2, valor3;

Salidas.

La instrucción Escribir permite mostrar valores al ambiente.

Escribir <exprl> , <expr2> , ... , <exprN> ;

Esta instrucción imprime al ambiente (en este caso en la pantalla) los valores obtenidos de evaluar N expresiones. Dado que puede incluir una o más expresiones, mostrará uno o más valores.

Ejemplo:

Escribir ―Ingrese el nombre: ‖; Escribir ―El Resultado es: ‖ , resp*2 ;

Arreglos.

Los arreglos son estructuras de datos homogéneas (todos sus datos son del mismo tipo) que permiten almacenar un determinado número de datos bajo un mismo identificador, para luego referirse a los mismos utilizando uno o más subíndices.

Page 41: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 41

Para utilizar un arreglo, primero es obligatorio su dimensionamiento, es decir, definirlo declarando los rangos de sus subíndices, lo cual determina cuantos elementos se almacenarán y como se accederá a los mismos,

Dimensionamiento.

La instrucción Dimension permite definir un arreglo, indicando sus dimensiones.

Dimesion <identificador> (<max1>,...,<maxN>);

Esta instrucción define un arreglo con el nombre indicado en <indentificador> y N dimensiones. Los N parámetros indican la cantidad de dimensiones y el valor máximo de cada una de ellas. La cantidad de dimensiones puede ser una o más, y la máxima cantidad de elementos debe ser una expresión numérica positiva. Se pueden definir más de un arreglo en una misma instrucción, separándolos con una coma (,).

Dimension <ident1> (<max11>,..,<max1N>),..,<identM>(<maxM1>,..,<maxMN>);

Es importante notar que es necesario definir un arreglo antes de utilizarlo. Ejemplo:

Definir vector, matriz Como Entero; Dimension vector[100], matriz[10,20];

Operadores y Funciones.

Este pseudolenguaje dispone de un conjunto básico de operadores y funciones que pueden ser utilizados para la construcción de expresiones más o menos complejas. Las siguientes tablas exhiben la totalidad de los operadores de este lenguaje reducido:

Operador Significado Ejemplo

Relacionales

> Mayor que 3>2

< Menor que 'ABC'<'abc'

= Igual que 4=3

Page 42: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 42

<> Diferente que 4<>3

<= Menor o igual que 'a'<='b'

>= Mayor o igual que 4>=5

Lógicos

& Conjunción (y / and). (7>4) & (2=1) //falso

| Disyunción (o / or). (1=1 | 2=1) //verdadero

~ Negación (no / not). ~(2<5) //falso

Algebraicos

+ Suma

* Multiplicación

/ División

^ Potenciación

La jerarquía de los operadores matemáticos es igual a la del álgebra, aunque puede alterarse mediante el uso de paréntesis.

A continuación se listan las funciones integradas disponibles:

Función Significado

RC(X) Raíz Cuadrada de X

ABS(X) Valor Absoluto de X

LN(X) Logaritmo Natural de X

EXP(X) Función Exponencial de X

SEN(X) Seno de X

COS(X) Coseno de X

ATAN(X) Arcotangente de X

TRUNC(X) Parte entera de X

REDON(X) Entero más cercano a X

Como habíamos mencionado anteriormente, un problema se puede dividir en

acciones elementales o instrucciones, usando un número limitado de estructuras

de control (básicas) y sus combinaciones que pueden servir para resolver dicho

problema

12.1. ESTRUCTURA SECUENCIAL.

Page 43: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 43

Se caracteriza porque una acción se ejecuta detrás de otra. El flujo del programa

coincide con el orden físico en el que se han ido poniendo las instrucciones.

Dentro de este tipo podemos encontrar operaciones de inicio/fin, inicialización de

variables, operaciones de asignación, cálculo, sumarización, etc. Este tipo de

estructura se basa en las 5 fases de que consta todo algoritmo o programa:

1. Definición de variables (Declaración)

2. Inicialización de variables.

3. Lectura de datos.

4. Cálculo.

5. Salida.

Ejemplo 1: Se desea encontrar la longitud y el área de un círculo de radio

ingresado por teclado.

Solución. El objetivo del ejercicio es encontrar la longitud y el área de un círculo

con un radio ingresado por teclado. Las salidas serán entonces la longitud y el

área. (Fase 5 del algoritmo) Sabemos que la longitud de un círculo viene dada por

la fórmula 2 * pi * radio y que el área viene dada por pi * radio al cuadrado. (Fase 4

del algoritmo) Si definimos las variables como: (fase 1 del algoritmo)

long = Longitud, area = área, radio = radio, pi = 3.1416, hagamos el

algoritmo:

Pseudocódigo:

Proceso Algoritmo1

//este algoritmo calcula el área y la longitud de un círculo de radio ingresado por teclado

Definir pi, radio, area, long Como Real; //definición de variables

pi <- 3.1416; //definición de un valor constante

Escribir "Ingrese el radio: "; //despliega en pantalla

Leer radio; //Ingresa por teclado el radio

area <- pi * radio ^ 2; //asignación del valor del área

Page 44: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 44

long <- 2 * pi * radio ;//asignación del valor de la longitud

Escribir "Area: ", area, " Longitud: ", long; //salida del algoritmo

FinProceso

Diagrama de Flujo:

Ejemplo 2. Leer el sueldo de tres empleados y aplicarles un aumento del 10, 12 y

15% respectivamente. Desplegar el resultado.

Solución.

Page 45: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 45

Salidas: Sueldos finales.

Entradas: Salarios de los empleados.

Datos adicionales: aumentos del 10, 12 y 15%

Cálculos:

Sueldo final = sueldo inicial * (1+porcentaje/100)

Definición de variables:

sueldoFinal1, sueldoFinal2, sueldoFinal3 = los sueldos finales

sueldo1, sueldo2, sueldo3 = salarios de los empleados

Pseudocódigo:

Proceso Algoritmo2

//Leer el sueldo de tres empleados y aplica un aumento del 10, 12 y

//15% respectivamente

Definir sueldo1,sueldo2,sueldo3 Como Real; //definición de variables

Definir sueldoFinal1, sueldoFinal2, sueldoFinal3 Como Real;

sueldo1 <- 0; //inicializamos variables

sueldo2 <- 0;

sueldo3 <- 0;

sueldoFinal1 <- 0;

sueldoFinal2 <- 0;

sueldoFinal3 <- 0;

Escribir "Ingrese el sueldo de los 3 empleados";

Leer sueldo1,sueldo2,sueldo3; //lee los sueldos

sueldoFinal1 <- sueldo1 * 1.10; //incrementa el 10% al sueldo original //y lo asigna en sueldoFinal1

sueldoFinal2 <- sueldo2 * 1.12; //incrementa el 12% al sueldo original

//y lo asigna en sueldoFinal2

Page 46: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 46

sueldoFinal3 <- sueldo3 * 1.15; //incrementa el 15% al sueldo original

//y lo asigna en sueldoFinal3

Escribir "Sueldos incrementados: ",sueldoFinal1," ",sueldoFinal2," ",sueldoFinal3;

FinProceso

Diagrama de flujo:

Page 47: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 47

Otras Acciones Secuenciales.

Page 48: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 48

En PSeInt, La instrucción "Borrar Pantalla" (o "Limpiar Pantalla") permite, como su nombre lo indica, borrar la pantalla y colocar el cursor en la esquina superior izquierda.

Ejemplo:

Borrar Pantalla;

La instrucción "Esperar Tecla" detiene su algoritmo hasta que el usuario presione una tecla cualquiera de su teclado.

Ejemplo:

Esperar Tecla;

La instrucción "Esperar" también puede utilizarse para pausar el algoritmo durante un intervalo de tiempo predefinido, indicando a continuación de la palabra clave la longitud y unidad de dicho intervalo. Las unidades válidas son Segundos y Milisegundos.

Ejemplo:

Esperar 3 Segundos;

12.2. ESTRUCTURAS SELECTIVAS O CONDICIONALES.

Con frecuencia nos enfrentamos a situaciones en las que se deben proporcionar

instrucciones alternativas que pueden o no ejecutarse dependiendo de los datos

de entrada, reflejando el cumplimiento o no de una determinada condición. La

realización de acciones alternativas o decisiones se especifican utilizando

condiciones que son verdaderas o falsas. Estas condiciones se llaman

expresiones lógicas, o booleanas. Dado que las expresiones lógicas toman el

valor verdadero o falso, se necesita una sentencia de control que dirija a la

computadora a ejecutar una sentencia si la expresión es verdadera, y otra

sentencia en caso de que sea falsa.

12.2.1. ESTRUCTURA SELECTIVA “SI-ENTONCES” (“IF-THEN”).

La siguiente figura muestra el diagrama de flujo de la estructura ―Si-Entonces‖:

Page 49: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 49

EL pseudocódigo es:

Si <condición>

Entonces

<instrucciones>

Sino

<instrucciones>

FinSi

La estructura ―Si‖ funciona de la siguiente manera:

1. Se evalúa la expresión lógica.

2. Si la expresión toma el valor verdadero (true), se ejecutará la sentencia A y

el control pasará a la sentencia inmediatamente siguiente.

3. Si la expresión toma el valor falso (false), entonces sólo se ejecutará la sentencia B y el control pasa de nuevo inmediatamente a la siguiente sentencia del programa. La cláusula sino (else) es optativa, en ese caso, si la condición es falsa no se ejecuta ninguna instrucción y la ejecución del programa continúa con la instrucción siguiente.

.

Ejemplo 3. Construir un algoritmo que lea la calificación de un alumno en un

examen, escriba "Aprobado" en caso que esa calificación fuese mayor o igual

que 7.

Solución.

Salidas: Mensaje de aprobado si se cumple la condición.

Entradas: Calificación.

Datos adicionales: Un alumno aprueba si la calificación es mayor o igual

que 7.

Variables:

Page 50: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 50

Cal = calificación

Pseudocódigo:

Proceso Algoritmo3

//lee la calificación de un alumno y escribe "Aprobado" si es mayor o

//igual que 7

Definir cal Como Real; //declaro la variable

Escribir "Ingrese la calificación del alumno: ";

Leer cal;

Si cal>=7 Entonces

Escribir "Aprobado";

FinSi

FinProceso.

Diagrama de flujo:

Page 51: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 51

Ejemplo 4. Dada la calificación de un alumno en un examen, escriba "Aprobado"

si su calificación es mayor o igual que 7 y "Reprobado" en caso contrario.

Pseudocódigo:

Proceso Algoritmo3

//escribe "Aprobado" si es mayor o igual que 7 o "Reprobado" caso //contrario

Definir cal Como Real; //declaro la variable

Escribir "Ingrese la calificación del alumno: ";

Leer cal;

Si cal>=7 Entonces

Page 52: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 52

Escribir "Aprobado";

Sino

Escribir "Reprobado";

FinSi

FinProceso

Diagrama de flujo:

Ejemplo 5. Dado como dato el sueldo de un trabajador, aplicar un aumento del

15% si su sueldo es inferior a $1000 y 12% en caso contrario, luego imprimir

el nuevo sueldo del trabajador.

Page 53: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 53

Pseudocódigo:

Proceso Algoritmo5

//aumento el 15% si su sueldo es inferior a $1000 y 12% en caso //contrario

Definir sueldo, nuevoSueldo Como Real; //declaro la variable

Escribir "Ingrese el sueldo del trabajador: ";

Leer sueldo;

Si sueldo<1000 Entonces

NuevoSueldo <- sueldo*1.15;

Sino

NuevoSueldo <- sueldo*1.12;

FinSi

Escribir "El nuevo sueldo es: ", nuevoSueldo;

FinProceso

Diagrama de flujo:

Page 54: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 54

12.2.2. EXPRESIONES LÓGICAS.

Sirven para plantear alternativas o decisiones y dan como resultado un valor

booleano verdadero o falso, es decir, se cumple o no se cumple la condición. Se

pueden clasificar en simples y complejas. Las simples son las que usan

operadores relacionales y las complejas las que usan operadores lógicos.

Ejemplo 6: Operador lógico Y (―&‖): Una escuela aplica dos exámenes a sus

aspirantes, por lo que cada uno de ellos obtiene dos calificaciones denotadas

como calif1 y calif2. El aspirante que obtenga calificaciones mayores o iguales que

7 en ambos exámenes es aceptado; en caso contrario es rechazado.

Page 55: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 55

Pseudocódigo:

Proceso Algoritmo6

//escribe aceptado si las 2 calificaciones son >= que 7, caso contrario //es rechazado

Definir calif1, calif2 Como Real;

Escribir "Ingrese la nota 1: ";

Leer calif1;

Escribir "Ingrese la nota 2: ";

Leer calif2;

Si ((calif1>=7) & (calif2>=7)) Entonces

Escribir "Estudiante aceptado";

Sino

Escribir "Estudiante rechazado";

FinSi

FinProceso

Diagrama de flujo:

Page 56: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 56

En este ejemplo, nótese que también se usa operadores relacionales. Por lo

general cuando hay operadores lógicos, éstos van acompañados de operadores

relacionales.

Ejemplo 7: Operador lógico O (―|‖): Una escuela aplica dos exámenes a sus

aspirantes, por lo que cada uno de ellos obtiene dos calificaciones denotadas

como calif1 y calif2. El aspirante que obtenga una calificación mayor o igual que

9 en cualquiera de los exámenes es aceptado; en caso contrario es rechazado.

Pseudocódigo:

Proceso Algoritmo7

Page 57: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 57

//escribe aceptado si una de las 2 calificaciones es >= que 9, caso //contrario es rechazado

Definir calif1, calif2 Como Real;

Escribir "Ingrese la nota 1: ";

Leer calif1;

Escribir "Ingrese la nota 2: ";

Leer calif2;

Si ((calif1>=9) | (calif2>=9)) Entonces

Escribir "Estudiante aceptado";

Sino

Escribir "Estudiante rechazado";

FinSi

FinProceso

Diagrama de flujo:

Page 58: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 58

La instrucción del ejemplo 7 equivale a OR ya que nos dice que puede ser en

cualquiera de los exámenes no necesariamente en los dos. En ejemplo 6 la

palabra ambos equivale a seleccionar la instrucción AND. Si la instrucción nos

dijera que obtenga una nota en cualquiera de los exámenes pero no en ambos,

nos estaría indicando una instrucción XOR que es un tipo de OR pero exclusivo.

Es decir, no puede considerarse el caso en que tenga la misma nota en los dos

exámenes, solo en uno de los dos.

Page 59: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 59

12.2.3. ESTRUCTURAS ANIDADAS.

Recordemos que las estructuras no secuenciales se pueden anidar, es decir,

pueden contener otras adentro, pero la estructura contenida debe comenzar y

finalizar dentro de la contenedora.

En la solución de problemas encontramos numerosos casos en los que luego de

tomar una decisión y marcar el camino correspondiente a seguir, es necesario

tomar otra decisión. Dicho proceso puede repetirse numerosas veces. En los

problemas en donde un bloque condicional incluye otro bloque condicional se

dice que un bloque está anidado dentro del otro.

Ejemplo 8. Determinar la cantidad de dinero que recibirá un trabajador por

concepto de las horas extras trabajadas en una empresa, sabiendo que cuando

las horas de trabajo exceden de 40, el resto se consideran horas extras y que

éstas se pagan al doble de una hora normal cuando no exceden de 8; si las

horas extras exceden de 8 se pagan las primeras 8 al doble de lo que se paga por

una hora normal y el resto al triple.

Solución. Lo primero que hay que determinar es si el trabajador trabajó horas

extras o no. Encontrar las horas extras de la siguiente forma:

Horas extras = horas trabajadas - 40

En caso que sí trabajó horas extras:

Si horas extras > 8 entonces a horas extras excedentes de 8 = horas extras -8

y pago por horas extras = pago por hora normal * 2 * 8 + pago por hora normal

* 3 * horas extras excedentes de 8

De otra forma (sólo horas al doble) pago por horas extras = pago por hora

normal * 2 * horas extras.

Finalmente, pago total que recibirá el trabajador será:

Pago = pago * hora normal * 40 + pago por horas extras.

Si no trabajó horas extras tendremos:

Pago = pago por hora normal * horas trabajadas.

Datos de salida: Pago.

Datos de entrada: número de horas trabajadas y pago por hora normal.

Definición de variables:

ht = horas trabajadas

het = horas extras que exceden de 8

ph = pago por hora normal

Page 60: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 60

phe = pago por horas extras

he = horas extras

pt = pago que recibe el trabajador

Pseudocódigo:

Proceso Algoritmo8

Definir he, het, ht Como Entero; //variable de horas trabajadas

Definir ph, phe, pt Como Real; //variables para pago

Escribir "Ingrese las horas trabajadas: ";

Leer ht;

Escribir "Ingrese el valor por hora normal: ";

Leer ph;

Si ht > 40 entonces

//determinamos las horas extras

he <- ht - 40;

Si he > 8 entonces

//determinamos las horas a pagar al triple

het <- he - 8;

//las 8 se pagan al doble y el resto al triple

phe <- ph * 2 * 8 + ph * 3 * het;

Sino

//se pagan al doble

phe <- ph * 2 * he;

FinSi

//pago horas normales más horas extras

Page 61: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 61

pt <- ph * 40 + phe;

Sino

//no hay horas extras

pt <- ph * ht;

FinSi

Escribir "El valor a pagar es: ", pt;

FinProceso

Diagrama de flujo:

Page 62: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 62

Page 63: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 63

Ejemplo 9. Dados los datos A, B y C que representan números enteros diferentes,

construir un algoritmo para escribir estos números en forma descendente. Este es

un ejemplo de los algoritmos conocidos como de Lógica Pura, ya que poseen

muchas decisiones y muchas bifurcaciones.

Observación: Para ordenar números no es un algoritmo eficiente, pero nos sirve

para ejemplarizar estructuras anidadas.

Solución:

Salida: A, B y C ordenados descendentemente.

Entradas: A, B y C.

La dinámica del problema es comparar dos números a la vez para conocer

cuál es el mayor.

Pseudocódigo:

Proceso Algoritmo9

//ordenar 3 números de mayor a menor

Definir a,b,c Como Entero;

Escribir "Ingrese 3 números: ";

Leer a,b,c;

Escribir "Los números ordenados descendentemente son: ";

Si a>b Entonces

Si a>c Entonces

Si b>c Entonces

Escribir a," ",b," ",c;

Sino

Escribir a," ",c," ",b;

FinSi

Sino

Page 64: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 64

Escribir c," ",a," ",b;

FinSi

Sino

Si b>c Entonces

Si a>c Entonces

Escribir b," ",a," ",c;

Sino

Escribir b," ",c," ",a;

FinSi

Sino

Escribir c," ",b," ",a;

FinSi

FinSi

FinProceso

Diagrama de flujo:

Page 65: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 65

Page 66: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 66

12.2.4. ESTRUCTURA DE SELECCIÓN MÚLTIPLE “SEGÚN” (“CASE”).

Con frecuencia es necesario que existan más de dos elecciones posibles. Este

problema se podría resolver por estructuras selectivas anidadas o en cascada,

pero si el número de alternativas es grande puede plantear serios problemas de

escritura y de legibilidad.

Usando la estructura de decisión múltiple se evaluará una expresión que podrá

tomar n valores distintos, 1, 2, 3,…,n y según que elija uno de estos valores en la

condición, se realizará una de las n acciones o lo que es igual, el flujo del

algoritmo seguirá sólo un determinado camino entre los n posibles.

Esta estructura se representa por un selector el cual si toma el valor 1 ejecutará la

acción A, si toma el valor 2 ejecutará la acción B, si toma el valor N realizará la

acción N.

La estructura de selección múltiple se implementa con la sentencia Según, cuyo

diagrama de flujo y pseudocódigo son:

Diagrama de flujo:

Pseudocódigo:

Segun <variable> Hacer

<número1>: <instrucciones>

<número2>,<número3>: <instrucciones>

<...>

De Otro Modo: <instrucciones>

FinSegun

Page 67: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 67

Reglas:

Esta instrucción permite ejecutar opcionalmente varias acciones posibles

(distintas entre si), dependiendo del valor almacenado en una variable de tipo

numérico.

Al ejecutarse, se evalúa el contenido de la variable y se ejecuta la secuencia

de instrucciones asociada con dicho valor.

Cada opción está formada por uno o más números separados por comas, dos

puntos y una secuencia de instrucciones.

Si una opción incluye varios números, la secuencia de instrucciones asociada

se debe ejecutar cuando el valor de la variable es uno de esos números.

Opcionalmente, se puede agregar una opción final, denominada De Otro Modo,

cuya secuencia de instrucciones asociada se ejecutará sólo si el valor

almacenado en la variable no coincide con ninguna de las opciones anteriores.

Ejemplo 10: Escribir un algoritmo tal que si opc=1 realice la suma, si opc=2, el

producto, si opc=3, la división y 0 en cualquier otro caso, despliegue el resultado:

Pseudocódigo:

//Ejemplo de estructura Segun

Proceso Algoritmo10

Definir num1,num2, opc Como Entero;

Definir resp Como Real;

resp <-0;

Escribir "Ingrese una opción: 1 (Suma), 2 (Producto), 3 (División) :";

Leer opc;

Escribir "Ingrese los dos números a operar: ";

Leer num1,num2;

Segun opc Hacer

Page 68: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 68

1:

resp <- num1+num2;

2:

resp <- num1*num2;

3:

Si num2=0 Entonces

Escribir "El denominador no puede ser 0";

Sino

resp <- num1/num2;

FinSi

De Otro Modo:

resp <- 0;

FinSegun

Escribir "El resultado es : ",resp;

FinProceso

Diagrama de Flujo:

Page 69: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 69

Ejemplo 11. Dados como datos la categoría y el sueldo de un trabajador, calcule

el aumento correspondiente teniendo en cuenta la siguiente tabla. Imprimir la

categoría del trabajador y el nuevo sueldo.

Incrementos

Categoría Aumento

1 15%

2 10%

3 8%

Page 70: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 70

4 7%

Pseudocódigo:

Proceso Algoritmo11

//ejemplo de estructura Segun

Definir cat Como Entero;

Definir sueldo, inc, nuevoSueldo Como Real;

Escribir "Ingrese la categoría : ";

Leer cat;

Escribir "Ingrese el sueldo : ";

Leer sueldo;

Segun cat Hacer

1:

inc <- sueldo*0.15;

2:

inc <- sueldo*0.1;

3:

inc <- sueldo*0.08;

4:

inc <- sueldo*0.07;

De Otro Modo:

inc<- 0;

FinSegun

nuevoSueldo <- sueldo + inc;

Page 71: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 71

Escribir "Categoría : ",cat,", nuevo sueldo: ",nuevoSueldo;

FinProceso

Diagrama de Flujo:

Page 72: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 72

12.3. ESTRUCTURAS REPETITIVAS O ITERATIVAS.

Las computadoras están especialmente preparadas para ejecutar tareas

repetidamente. Los cálculos simples o la manipulación de pequeños conjuntos de

datos se pueden realizar fácilmente a mano, pero las tareas grandes o repetitivas

son realizadas con mayor eficiencia por una computadora. Las estructuras de

control repetitivas son aquellas en las que una sentencia o grupos de sentencias

se repiten muchas veces. Este conjunto de sentencias se denomina bucle, ciclo,

lazo, o loop. Las acciones que se repiten en un bucle constituyen el cuerpo del

bucle, y cada repetición del cuerpo del bucle se denomina iteración.

Las estructuras repetitivas básicas son:

Estructura Para.

Estructura Mientras.

Estructura Repetir.

12.3.1. ESTRUCTURA REPETITIVA “PARA” (“FOR”).

En numerosas ocasiones se puede necesitar un bucle que se ejecute un número

determinado de veces, y cuyo número se conozca por anticipado. Para

aplicaciones de este tipo se utiliza la sentencia Para (for). Esta sentencia requiere

que conozcamos por anticipado el número de veces que se ejecutarán las

sentencias del interior del bucle.

En la siguiente figura se muestra el diagrama de flujo de la estructura Para:

El pseudocódigo es:

Page 73: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 73

Para <variable> <- <inicial> Hasta <final> (Con Paso <paso>) Hacer

<instrucciones>

FinPara

Al ejecutarse la sentencia Para la primera vez, el valor <inicial> se asigna a la

variable <variable>, denominada variable de control, y a continuación se ejecuta

las sentencias de instrucciones que forman el cuerpo del bucle. Al llegar al final del

bucle (FinPara), se incrementa la variable <variable> en <paso> unidades y se

verifica si el valor almacenado en <variable> es mayor que el valor <final>; en

caso negativo se vuelve a ejecutar todas las sentencias del interior del bucle hasta

que la variable de control <variable> sea mayor que el valor final <final>. Algunos

lenguajes permiten definir lo que se llama paso, que es la cantidad de unidades en

las que se incrementará o decrementará la variable de control en cada iteración. Si

se omite la cláusula Con Paso <paso>, la variable <variable> se incrementará en

uno.

Es común usar en las estructuras repetitivas los contadores y acumuladores que los describimos a continuación: 12.3.1.1. CONTADOR.

Un contador es una variable cuyo valor se incrementa o decrementa en una

cantidad constante cada vez que se produce un determinado suceso o acción. Los

contadores se utilizan con la finalidad de contar sucesos o acciones internas de un

bucle; deben realizar una operación de inicialización y posteriormente las

sucesivas de incremento o decremento del mismo. La inicialización consiste en

asignarle al contador un valor. Se situará antes y fuera del bucle.

Representación:

<nombre del contador> <- <nombre del contador> + <valor constante>;

Si en vez de incremento es decremento se coloca un menos en lugar del más.

Ejemplo:

i <- i + 1;

12.3.1.2. ACUMULADOR O TOTALIZADOR.

Page 74: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 74

Es una variable que suma sobre sí misma un conjunto de valores para de esta

manera tener la suma de todos ellos en una sola variable. La diferencia entre un

contador y un acumulador es que mientras el primero va aumentando un valor

constante, el acumulador va aumentando en una cantidad variable.

Representación:

<Nombre del acumulador> <- <nombre del acumulador> + <valor variable>;

Ejemplo 12. Calcular la suma de los cuadrados de los primeros 100 enteros y

escribir el resultado. Se desea resolver el problema usando estructura Para.

Pseudocódigo:

Proceso Algoritmo12

//Ejemplo estructura Para

Definir i,suma Como Entero;

//inicializo el acumulador

suma <- 0;

Para i<-1 Hasta 100 Con Paso 1 Hacer

suma <- suma + i*i;

FinPara

Escribir "La suma de los 100 primeros enteros es: ",suma;

FinProceso

Diagrama de flujo:

Page 75: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 75

Ejemplo 13. Calcular la promedio de N números enteros y escribir el resultado.

Pseudocódigo:

// Calcula el promedio de una lista de N datos

Proceso Algoritmo13

Definir i, numDatos Como Entero;

Definir acum, promedio, dato Como Real;

acum <- 0;

Escribir "Ingrese la cantidad de datos:";

Leer numDatos;

Page 76: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 76

Para i<-1 Hasta numDatos Hacer

Escribir "Ingrese el dato ",i,": ";

Leer dato;

acum <- acum + dato;

FinPara

promedio <- acum / numDatos;

Escribir "El promedio es: ",promedio;

FinProceso

Diagrama de flujo:

Page 77: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 77

12.3.2. ESTRUCTURA ITERATIVA “MIENTRAS” (“WHILE”).

La estructura iterativa Mientras es aquella en la que el número de iteraciones no

se conoce por anticipado y el cuerpo del bucle se repite mientras se cumple una

determinada condición. Por esta razón, se lo conoce como bucle condicional.

El diagrama de flujo y pseudocódigo de la estructura iterativa mientras son:

Page 78: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 78

Diagrama de flujo:

Pseudocódigo:

Mientras <condición> Hacer

<instrucciones>

FinMientras

Cuando la sentencia mientras se ejecuta, lo primero que sucede es la evaluación

de la expresión lógica <condición>. Si se evalúa como falsa, ninguna acción se

realiza y el programa sigue en la siguiente sentencia después del bucle. Si la

expresión lógica se evalúa como verdadera, entonces se ejecuta el cuerpo del

bucle y se evalúa de nuevo la expresión lógica <condición>, es decir, se puede

ejecutar el bucle, cero o más veces. Este proceso se repite mientras la expresión

lógica sea verdadera. Después de cada iteración la expresión lógica se evalúa y

se verifica de nuevo; si cambia de verdadera a falsa la sentencia mientras finaliza.

Mientras que la condición sea verdadera el bucle se ejecutará. Esto significa que

el bucle se ejecutará indefinidamente a menos que algo en el interior del mismo

modifique la condición haciendo que su valor pase a falso. Si la expresión nunca

cambia de valor, entonces el bucle no termina nunca y se denomina bucle o loop

infinito (en general, esta situación no es deseable), a fin de evitarlo, las

instrucciones del cuerpo del bucle deben contener alguna instrucción que

modifique la o las variables involucradas en la expresión lógica <condición>, de

modo que sea falsa en algún momento y así finalice la ejecución del ciclo.

Page 79: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 79

Ejemplo 14. Calcular la suma de los cuadrados de los primeros 100 números

enteros y escribir el resultado.

Solución. Como recordarás, resolvimos este ejercicio en la lección anterior pero

utilizando la estructura Para. Ahora lo haremos con la estructura Mientras.

En este caso, se necesita un contador (un índice), para llevar la cuenta de las

veces que entramos al cuerpo del bucle. También es importante notar que esta

variable se debe inicializar antes de entrar al cuerpo del ciclo y dentro del cuerpo

se incrementará en uno cada vez que ingrese a él.

Esta variable además nos sirve para compararla con el valor dado en la condición,

cuando no se cumple la condición, se sale del ciclo.

Pseudocódigo:

//Ejemplo estructura Mientras

Proceso Algoritmo14

Definir i,suma Como Entero;

//inicializo el acumulador y el contador

suma <- 0;

i <- 1;

Mientras i<=100 Hacer

//sumo al acumulador

suma <- suma + i*i;

//incremento el contador

i <- i+1;

Page 80: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 80

FinMientras

Escribir "La suma de los 100 primeros enteros es: ",suma;

FinProceso

Diagrama de flujo:

Page 81: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 81

En las estructuras cíclicas condicionales es común controlar los ciclos con

centinelas y banderas.

12.3.2.1. CENTINELAS.

En un bucle mientras controlado por tarea, la condición mientras especifica que el

cuerpo del bucle debe continuar ejecutándose mientras la tarea no haya sido

completada, esto puede ser controlado por centinelas.

Centinelas son variables que toman valores adecuados para suspender el ingreso

a un bucle.

Por ejemplo, si se tienen las calificaciones de un test (comprendida entre 0 y 100);

un valor centinela en esta lista puede ser -1, ya que nunca será una calificación

válida y cuando aparezca este valor se terminará de ejecutar el bucle. Si la lista

de datos son números positivos, un valor centinela puede ser un número negativo.

Ejemplo 15. Suponga que debemos obtener la suma de los gastos que hicimos en

nuestro último viaje, pero no sabemos exactamente cuántos fueron.

Solución: Si definimos gasto1, gasto2, gasto3, ...., -1 donde gastoi es el gasto

número i y sumaGasto es el acumulador de gastos efectuados. -1 es el centinela

de fin de datos.

Pseudocódigo:

//Ejemplo de centinelas

Proceso Algoritmo15

Definir gasto, sumaGasto Como Real;

sumaGasto <- 0;

Escribir "Ingrese -1 para salir";

Escribir "Ingrese el gasto realizado: ";

//leemos gasto fuera del bucle mientras

Leer gasto;

Page 82: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 82

Mientras gasto <> -1 Hacer

sumaGasto <- sumaGasto + gasto;

Escribir "Ingrese el gasto realizado: ";

Leer gasto;

FinMientras

Escribir "El gasto total es: ",sumaGasto;

FinProceso

Diagrama de flujo:

Page 83: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 83

12.3.2.2. BANDERAS.

Conocidas también como interruptores, switch, flags o conmutadores, son

variables que pueden tomar solamente dos valores durante la ejecución del

programa, los cuales pueden ser 0 ó 1, o bien los valores booleanos True o False.

Se les suele llamar interruptores porque cuando toman los valores 0 ó 1 están

simulando un interruptor abierto/cerrado o encendido/apagado.

Page 84: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 84

Ejemplo 16: Leer un número entero N y calcular el resultado de la siguiente serie:

1 - 1/2+ 1/3 - 1/4+.... +/- 1/N.

Pseudocódigo:

//Ejemplo de banderas

Proceso Algoritmo16

Definir bandera Como Logico;

Definir serie Como Real;

Definir i, num Como Entero;

serie <- 0;

i <- 1;

Escribir "Ingrese el valor de N: ";

Leer num;

//inicializamos la bandera

bandera <- Verdadero;

Mientras i <= num Hacer

Si bandera = Verdadero Entonces

serie <- serie + 1/i;

bandera <- Falso;

Sino

serie <- serie - 1/i;

bandera <- Verdadero;

FinSi

i <- i+1;

Page 85: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 85

FinMientras

Escribir "La suma de la serie es: ",serie;

FinProceso

Diagrama de flujo:

Page 86: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 86

Page 87: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 87

12.3.3. ESTRUCTURA ITERATIVA “REPETIR” (“REPEAT”).

La estructura iterativa Repetir es una bucle condicional como lo es también la

estructura Mientras. Se usa cuando el número de iteraciones no se conoce por

anticipado (lo cual si se conoce en la estructura Para).

La diferencia entre ambas es que la condición se sitúa al inicio (Mientras) o al final

(Repetir) de la secuencia de instrucciones. Entonces, en el primero, el bucle

continúa mientras la condición es verdadera (la cual se comprueba antes de

ejecutar la acción, es decir se ejecuta cero o más veces) y en el segundo, el bucle

continúa hasta que la condición se hace verdadera (la condición se comprueba

después de ejecutar la acción, es decir, se ejecutará al menos una vez).

El diagrama de flujo de la estructura Repetir es el siguiente:

El pseudocódigo de la estructura Repetir es:

Repetir <instrucciones> Hasta Que <condición>

Al ejecutarse esta instrucción, la secuencia de instrucciones que forma el cuerpo del ciclo se ejecuta una vez y luego se evalúa la condición <condición>. Si la condición es falsa, el cuerpo del ciclo se ejecuta nuevamente y se vuelve a evaluar la condición. Esto se repite hasta que la condición sea verdadera. Note que, dado que la condición se evalúa al final, las instrucciones del cuerpo del ciclo serán ejecutadas al menos una vez. Además, a fin de evitar ciclos infinitos, el cuerpo del ciclo debe contener alguna instrucción que modifique la o las variables involucradas en la condición de modo

Page 88: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 88

que en algún momento la condición sea verdadera y se finalice la ejecución del ciclo.

Un ciclo Repetir controlado por centinela, por ejemplo es cuando el usuario digita

una letra para salir como ‗S‘ o ‗N‘ para indicar si desea continuar o no. El bucle

debe repetirse hasta que la respuesta del usuario sea ‗n‘ o ‗N‘. (Observe que los

centinelas solamente pueden usarse con las estructuras Mientras y Repetir, no

con estructuras Para).

Ejemplo 17: Calcular la suma de los cuadrados de los primeros 100 números

enteros y escribir el resultado.

Solución. Nuevamente resolveremos el ejercicio de las dos lecciones anteriores,

ahora utilizando la estructura Repetir.

Como sabemos, en los bucles condicionales podemos usar una variable contador

que debe inicializarse antes del ciclo e incrementarse dentro del bucle para

controlar el número de veces que se ingresará al mismo. A diferencia de la

estructura Mientras, la condición ahora estará colocada al final del bucle para que

primero se ejecute la instrucción y luego se verifique si la condición se cumple.

Esto quiere decir, que en esta estructura el bucle se realizará por lo menos una

vez. También podrás observar que la condición está al revés, porque el bucle se

repite hasta que la condición se cumpla. En el bucle Mientras, la condición se

evaluaba mientras era verdadera.

Pseudocódigo:

//Ejemplo estructura Repetir

Proceso Algoritmo17

Definir i,suma Como Entero;

//inicializo el acumulador y el contador

suma <- 0;

i <- 1;

Repetir

Page 89: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 89

//sumo al acumulador

suma <- suma + i*i;

//incremento el contador

i <- i+1;

Hasta Que i>100

Escribir "La suma de los 100 primeros enteros es: ",suma;

FinProceso

Diagrama de flujo:

Page 90: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 90

Ejemplo 18. Se desea calcular la suma de N números ingresados por el usuario,

hasta que él decida no ingresar más números.

Pseudocódigo:

//Ejemplo estructura Repetir con centinelas

Proceso Algoritmo18

Definir suma, num Como Real;;

Definir resp Como Caracter;

Page 91: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 91

//inicializo acumulador

suma <- 0;

//inicializo la centinela

Repetir

Escribir "Ingrese un número: ";

Leer num;

//sumo al acumulador

suma <- suma + num;

//pregunto se desea continuar

Escribir "Desea ingresar otro número (S/N): ";

// leo la respuesta

Leer resp;

Hasta Que (resp='N' | resp='n')

Escribir "La suma es: ",suma;

FinProceso

Diagrama de flujo:

Page 92: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 92

13. ESTRUCTURA DE DATOS Y ARREGLOS.

13.1. INTRODUCCIÓN.

Page 93: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 93

Todas las variables que se han considerado hasta ahora son de tipo simple. Una

variable de tipo simple consiste de una sola localidad o ―caja‖ de memoria y sólo

puede contener un valor a la vez. Una variable de tipo estructurado consiste en

toda una colección de casillas de memoria. Los tipos de datos estudiados: entero,

real, carácter, lógico son considerados como datos de tipo simple, puesto que una

variable que se define con alguno de estos tipos sólo puede almacenar un valor a

la vez, es decir, existe una relación de uno a uno entre la variable y el número de

elementos (valores) que es capaz de almacenar. En cambio un dato de tipo

estructurado, puede almacenar más de un elemento (valor) a la vez, con la

condición de que todos los elementos deben ser del mismo tipo, es decir, que se

puede tener un conjunto de datos enteros, reales, etc.

13.2. ESTRUCTURA DE DATOS.

Estructura de Datos es una colección de datos que se caracterizan por su

organización y las operaciones que se definen en ella. Las estructuras de datos

tienen en común que un identificador o nombre, puede representar a múltiples

datos individuales.

Los datos de tipo estándar pueden ser organizados en diferentes estructuras de

datos: estáticas y dinámicas.

Estructura de Datos Estáticas. Son aquellas en las que se asigna una

cantidad fija de memoria cuando se declara la variable y no puede ser

modificada durante la ejecución del programa. Corresponden a este tipo los

arreglos y registros.

Estructuras de Datos Dinámicas. Son aquellas en las que el espacio

ocupado en memoria puede ser modificado en tiempo de ejecución.

Corresponden a este tipo las listas, árboles y grafos. Estas estructuras no

son soportadas en todos los lenguajes. La elección de la estructura de

datos idónea dependerá de la naturaleza del problema a resolver y, en

menor medida, del lenguaje.

13.3. ARREGLOS.

Un arreglo (o array) es una estructura de datos en la que se almacena una

colección de datos del mismo tipo (por ejemplo, los sueldos de los empleados de

Page 94: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 94

una empresa). Dicho de otra forma, un arreglo y es una lista de un número finito n

de elementos del mismo tipo que se caracteriza por:

- Almacenar sus elementos en posiciones de memoria contiguas

- Tener un único nombre de variable (por ejemplo salarios) que

representa a todos los elementos

- Permitir acceso directo o aleatorio a sus elementos individuales, para

ello se utiliza un índice que especifique la posición relativa en el

arreglo.

En resumen, un arreglo es una colección finita, homogénea y ordenada de

elementos.

Finita. Todo arreglo tiene un límite, es decir, debe determinarse cuál será el

número máximo de elementos que podrán formar parte del arreglo.

Homogénea. Todos los elementos del arreglo deben ser del mismo tipo.

Ordenada: Se puede determinar cuál es el primer elemento, el segundo, el

tercero,.... y el n-ésimo elemento.

Los arreglos se clasifican de acuerdo con el número de dimensiones que tienen.

Así se tienen los arreglos:

Unidimensionales (vectores).

Bidimensionales (tablas o matrices).

Multidimensionales (tres o más dimensiones).

Page 95: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 95

Ejemplo.

Suponga que se desea desarrollar un programa para:

1. Leer una lista de calificaciones de un examen.

2. Encontrar su media.

3. Escribir una lista de las calificaciones mayores que la media.

4. Ordenar la lista de las calificaciones en orden ascendente.

Supongamos también que hay 100 calificaciones. Con lo estudiado hasta el

momento, deberíamos utilizar 100 variables diferentes nota1, nota2, ...., nota100,

de ese modo son 100 direcciones diferentes de memoria para almacenar las

calificaciones del examen. Se imagina declarar las 100 variables, ¿cuántas

instrucciones involucra?

Definir nota1, nota2, nota3,.........nota100 Como Entero;

(En la declaración real de un algoritmo en pseudocódigo no pueden usarse puntos

suspensivos, por lo tanto serán 100 veces). En la fase de lectura de datos, serán

también 100 veces las instrucciones para ir leyendo cada valor.

Leer nota1, nota2, nota3,........., nota100;

Para calcular la media:

media (nota1+nota2+.......+nota100)/100;

Page 96: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 96

Para la lista de calificaciones mayores que la media, deberá también compararse

una por una:

Si nota1 > media Entonces

Escribir nota1;

FinSi

Si nota2 > media Entonces

Escribir nota2;

FinSi

Si nota100 > media Entonces

Escribir nota100;

FinSi

Y después de muchísimas líneas de código..... ¡Todavía falta ordenar la lista de

calificaciones en orden ascendente!

Los arreglos nos permiten ahorrar instrucciones, porque es fácil recorrer toda la

lista de notas con unas pocas instrucciones. En el caso anterior, cuando el acceso

a la información es secuencial, sólo se puede acceder a un elemento buscando

desde el principio de la lista, y esto es algo lento. Lo que se necesita es una

estructura de acceso directo que permita almacenar y recuperar los datos

directamente especificando su posición en la estructura, de esa manera se

requerirá el mismo tiempo para acceder al elemento de la posición 100 que el de

la posición 5.

Queremos también que esta estructura se almacene en memoria principal para

que su almacenaje y recuperación sea más rápida. Es por ello que existen los

arreglos, que están organizados en una secuencia de elementos, todos del mismo

tipo y se puede acceder a cada elemento directamente especificando su posición

en esta secuencia.

Para poder utilizar un arreglo, debemos indicar su tipo, un nombre único y su

dimensionamiento, es decir, declarar los rangos de sus índices, lo cual determina

cuantos elementos se almacenarán y como se accederá a los mismos. Al declarar

un arreglo, se debe inicializar sus elementos antes de utilizarlos

Definición y Dimensionamiento.

Page 97: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 97

La instrucción Dimension permite declarar un arreglo, indicando sus dimensiones.

Dimesion <identificador> (<max1>,...,<maxN>);

Esta instrucción define un arreglo con el nombre indicado en <indentificador> y N dimensiones. Los N parámetros indican la cantidad de dimensiones y el valor máximo de cada una de ellas. La cantidad de dimensiones puede ser una o más, y la máxima cantidad de elementos debe ser una expresión numérica positiva.

Se pueden definir más de un arreglo en una misma instrucción, separándolos con una coma (,).

Dimension <ident1> (<max11>,..,<max1N>),..,<identM>(<maxM1>,..,<maxMN>);

Es importante notar que es necesario definir un arreglo antes de utilizarlo.

Ejemplo:

Definir vector, matriz Como Entero; Dimension vector[100], matriz[10,20];

13.3.1. ARREGLO UNIDIMENSIONAL.

Un arreglo de una dimensión (también conocido como vector) es un tipo de datos

estructurado compuesto de un número de elementos finitos, tamaño fijo y

elementos homogéneos que se almacenan bajo un mismo nombre, y se

diferencian por la posición que tiene cada elemento dentro del arreglo de datos.

Finitos indica que hay un último elemento, tamaño fijo significa que el tamaño del

arreglo debe ser conocido en tiempo de compilación y homogéneo significa que

todos sus elementos son del mismo tipo.

Los elementos del arreglo se almacenan en posiciones contiguas de memoria, a

cada una de las cuales se puede acceder directamente mediante un número

entero denominado índice del arreglo, que identifica la posición del elemento

dentro del conjunto.

Generalmente los índices de los elementos de los arreglos inician en 0, es decir, si

declaramos un arreglo de 100 elementos, los índices de elementos válidos van de

0 a 99 (aunque existen lenguajes que inician los índices de los arreglos en 1).

vector[0]

vector[1]

vector[2]

Page 98: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 98

………..

vector[97]

vector[98]

vector[99]

13.3.1.1. PARTES DE UN ARREGLO.

Los componentes. Hacen referencia a los elementos que forman el arreglo,

es decir, a los valores que se almacenan en cada una de las casillas del

mismo.

Los índices. Permiten hacer referencia a los componentes del arreglo en

forma individual, especifican cuántos elementos tendrá el arreglo y además, de

qué modo podrán accederse esos componentes.

valoro

valor1

valor2

………...

valor97

valor98

valor99

Definición y Dimensionamiento.

Ejemplo. Definir un arreglo llamado vector de 100 elementos de tipo Real.

Definir vector Como Real; Dimension vector[100];

13.3.1.2. OPERACIONES CON ARREGLOS.

Las operaciones que se pueden realizar con vectores durante el proceso de

resolución de un problema son:

Componentes

Índice

vector[0]

vector[1]

vector[2]

………..

vector[97]

vector[98]

vector[99]

Page 99: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 99

Lectura/ Escritura,

Asignación.

Actualización (inserción, eliminación, modificación).

Recorrido (acceso secuencial).

Ordenación.

Búsqueda.

Lectura. El proceso de lectura de un arreglo consiste en leer y asignar un valor

a cada uno de sus elementos. Normalmente se realizan con estructuras

repetitivas. Usamos los índices para recorrer los elementos del arreglo.

Ejemplo:

Para i <- 0 Hasta 99 Con Paso 1 Hacer

Leer vector[i];

FinPara

Escritura. Es similar al caso de lectura, sólo que en lugar de leer el

componente del arreglo, lo escribimos.

Ejemplo:

Para i <- 0 Hasta 99 Con Paso 1 Hacer

Escribir vector[i];

FinPara

Asignación. No es posible asignar directamente un valor a todo el arreglo;

sino que se debe asignar el valor deseado en cada componente. Podemos

recorrer el arreglo con una estructura repetitiva y asignar un valor a todos los

elementos del arreglo.

Ejemplo:

vector[1] <- 5; //asigna el valor 5 a la posición 1 del arreglo vector

vector[10] <- vector[1] / 2; //asigna una operación al arreglo vector

//Se puede asignar un valor constante a todos los elementos del vector

Para i <- 0 Hasta 99 Con Paso 1 Hacer

Page 100: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 100

vector[i] <- 10;

FinPara

Inicialización. Siempre es importante inicializar las variables y por lo tanto

también los arreglos. Por ejemplo, inicializar con 0 cada elemento del arreglo.

Ejemplo:

Para i <- 0 Hasta 99 Con Paso 1 Hacer

vector[i] <- 0;

FinPara

Acceso Secuencial. (Recorrido). El acceso a los elementos de un vector

puede ser para leer en él o para escribir (visualizar su contenido). Recorrido del

vector es la acción de efectuar una acción general sobre todos los elementos

de ese vector.

Actualización. Incluye añadir (insertar), borrar o modificar algunos de los ya

existentes. Se debe tener en cuenta si el arreglo está o no ordenado. Añadir

datos a un vector consiste en agregar un nuevo elemento al final del vector,

siempre que haya espacio en memoria (recordemos que el tamaño de un

arreglo es fijo).

Observación. Las partes de un arreglo unidimensional y las operaciones son las

mismas que en los arreglos multidimensionales (pueden extenderse), salvo que se

trata de varias dimensiones y no sólo de una.

Ejemplo19. Se desea ingresar una lista de 10 valores numéricos y calcular la

suma, el promedio, los números mayor y menor de dicha lista

Pseudocódigo:

//Ejemplo de arreglos

Proceso Algoritmo19

Definir lista, i, mayor, menor, suma, promedio Como Entero;

//defino el arreglo y su tamaño

Page 101: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 101

Dimension lista[10];

//inicializo variables

suma <- 0;

//inicializo el arreglo

Para i <- 0 Hasta 9 Con Paso 1 Hacer

lista[i] <- 0;

FinPara

//leo los elementos del arreglo

Para i <- 0 Hasta 9 Con Paso 1 Hacer

Escribir "Ingrese el valor ",(i+1)," de la lista: ";

Leer lista[i];

FinPara

//inicializo los números mayor y menor con el primer

//elemento del arreglo

mayor <- lista[0];

menor <- mayor;

//calculo la suma recorriendo el arreglo

Para i <- 0 Hasta 9 Con Paso 1 Hacer

suma <- suma + lista[i];

FinPara

//calculo el promedio

promedio <- suma / 9;

//calculo los números mayor y menor de la lista

Page 102: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 102

Para i <- 1 Hasta 9 Con Paso 1 Hacer

Si lista[i] > mayor Entonces

mayor <- lista[i];

FinSi

Si lista[i] < menor Entonces

menor <- lista[i];

FinSi

FinPara

//presento los resultados

Escribir "Suma: ", suma, ", Promedio: ", promedio;

Escribir "Número mayor: ", mayor, ", Número menor: ", menor;

FinProceso

Diagrama de flujo:

Page 103: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 103

Page 104: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 104

Ejemplo 20. Ingresar una lista de nombres (la lista termina cuando se ingresa un nombre en blanco), no se permite ingresar nombres repetidos y luego ordenar y presentar la lista.

Pseudocódigo:

//Ordenamiento de un arreglo

Proceso Algoritmo20

Definir nombre,lista,aux Como Cadenas;

Definir seRepite Como Logico;

Definir cant,i,j,posMenor Como Enteros;

Dimension lista[200];

Escribir "Ingrese un nombre (enter en blanco para terminar):";

// leer la lista

cant <- 0;

Leer nombre;

Mientras nombre<>"" Hacer

Escribir "Ingrese un nombre: ";

lista[cant] <- nombre;

cant <- cant+1;

Repetir // leer un nombre y ver que no esté ya en la lista

Leer nombre;

seRepite <- Falso;

//no es "" el nombre no se necesita buscar un repetido

Si nombre<>"" Entonces

Para i <- 0 Hasta cant-1 Hacer

Page 105: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 105

Si nombre=lista[i] Entonces

seRepite <- Verdadero;

//salgo del bucle pues es ya //repetido y no necesito seguir buscando

i <- cant;

Escribir "Nombre repetido";

Escribir "Ingrese un nombre: ";

FinSi

FinPara

FinSi

Hasta Que ~ seRepite

FinMientras

// ordenamos la lista

Para i <- 0 Hasta cant-2 Hacer

// busca el menor entre i y cant

posMenor <- i;

Para j <- i+1 Hasta cant-1 Hacer

Si lista[j] < lista[posMenor] Entonces

posMenor <- j;

FinSi

FinPara

// intercambia el que estaba en i con el menor que encontró

aux <- lista[i];

Page 106: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 106

lista[i] <- lista[posMenor];

lista[posMenor] <- aux;

FinPara

// mostrar como queda la lista

Escribir "La lista ordenada en forma ascendente es:";

Para i <- 0 Hasta cant-1 Hacer

Escribir " ",lista[i];

FinPara

FinProceso

Diagrama de flujo:

Page 107: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 107

Page 108: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 108

13.3.2. ARREGLO BIDIMENSIONAL.

Hasta ahora hemos visto como se puede manipular información con una sola

columna o lista de entrada con los llamados vectores, o arreglos de una

dimensión. Sin embargo, en numerosas ocasiones es necesario trabajar con datos

que tengan más de una dimensión (se representan por ejemplo como tablas de

doble entradas, cubos, etc.).

Un arreglo bidimensional (matriz o tabla) es un arreglo con dos índices. Para

localizar o almacenar un valor en el arreglo se deben especificar dos posiciones

(dos subíndices), uno para la fila y otro para la columna. Internamente en memoria

se reservan MxN posiciones consecutivas para almacenar todos los elementos del

arreglo.

Declaración de una matriz.

Ejemplo: Definir una arreglo bidimensional de 10 filas y 20 columnas de números

enteros llamado matriz.

Definir matriz Como Entero; Dimension matriz[10,20];

Una matriz se representa como una tabla, donde: 1<=I<=M y 1<=J<=N (observe

que al igual que en los vectores, las filas y columnas de las matrices inician en 0).

1 2

J N

1 matriz[0,0] matriz[0,1] ….. matriz[0,j] matriz[0,n-1]

2 matriz[1,0] matriz[1,1] ….. matriz[1,j] matriz[1,n-1]

…..

I matriz[i,0] matriz[i,1] ….. matriz[i,j] matriz[i,n-1]

M matriz[m-1,0] matriz[m-1,1] ….. matriz[m-1,j] matriz[m-1,n-1]

Ejemplo 21. Se desea realizar la suma de dos matrices, ingresar las dimensiones

por teclado.

Pseudocódigo:

//Ejemplo de matrices

Page 109: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 109

Proceso Algoritmo21

Definir i, j, m, n, matriz1, matriz2, matriz3 Como Entero;

Escribir "Ingrese el número de filas: ";

Leer m;

Escribir "Ingrese el número de columnas: ";

Leer n;

//defino la dimension de las matrices

Dimension matriz1[m,n], matriz2[m,n], matriz3[m,n];

Limpiar Pantalla;

//ingreso la primera matriz

Escribir "Ingrese la matriz A:";

Para i <- 0 Hasta m-1 Con Paso 1 Hacer

Para j <- 0 Hasta n-1 Con Paso 1 Hacer

Escribir "Ingrese el valor A[",i+1,",",j+1,"]";

Leer matriz1[i,j];

FinPara

FinPara

Limpiar Pantalla;

//ingreso la segunda matriz

Escribir "Ingrese la matriz B:";

Para i <- 0 Hasta m-1 Con Paso 1 Hacer

Para j <- 0 Hasta n-1 Con Paso 1 Hacer

Escribir "Ingrese el valor B[",i+1,",",j+1,"]";

Page 110: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 110

Leer matriz2[i,j];

FinPara

FinPara

Escribir "Presione enter...";

Esperar Tecla;

Limpiar Pantalla;

//sumo las matrices y las presento en pantalla

Escribir "La suma de A+B es:";

Para i <- 0 Hasta m-1 Con Paso 1 Hacer

Para j <- 0 Hasta n-1 Con Paso 1 Hacer

matriz3[i,j] <- matriz1[i,j] + matriz2[i,j];

Escribir "C[",i+1,",",j+1,"]=",matriz3[i,j];

FinPara

FinPara

FinProceso

Diagrama de flujo:

Page 111: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 111

Page 112: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 112

14. MODULARIDAD.

Una estrategia para la resolución de problemas complejos con computadoras es la

división o descomposición del problema en otros problemas más pequeños y

fáciles de resolver. Estos subproblemas se implementan mediante módulos o

subprogramas. Los subprogramas son una herramienta importante para el

desarrollo de algoritmos y programas, de modo que normalmente un proyecto de

programación se compone de un programa principal y un conjunto de

subprogramas, con las llamadas a los mismos dentro del programa principal. Un

subprograma realiza una tarea concreta que se describe con una serie de

instrucciones y que, idealmente, debería ser independiente de otros

subprogramas. El descomponer un programa en módulos independientes más

simples se conoce también como el método de "Divide y vencerás".

¿Cuándo es útil la modularización?

Este enfoque de segmentación o modularización es útil en dos casos:

1. Cuando existe un grupo de instrucciones o una tarea específica que

deba ejecutarse en más de una ocasión.

2. Cuando un problema es complejo o extenso, la solución se divide o

segmenta en módulos que ejecutan partes o tareas específicas.

Ventajas de la Programación Modular.

Las ventajas más sobresalientes de utilizar subprogramas o módulos son:

El uso de subprogramas facilita el diseño descendente y modular, que permite

descomponer un problema complejo en subproblemas hasta que éstos sean

concretos y fáciles de resolver.

Los procedimientos se pueden ejecutar más de una vez en un programa y en

diferentes programas, ahorrando en consecuencia tiempo de programación. Un

subprograma, en esencia, se puede ver como una caja negra

(encapsulamiento) que ejecuta una tarea en particular en un programa, acepta

entradas y produce ciertas salidas. Una vez que el módulo se ha escrito y

comprobado, se puede utilizar en otros programas eliminando la duplicación

innecesaria de código (reutilización de código).

Aumenta la facilidad de depuración y búsqueda de errores en un programa ya

que éstos se pueden aislar fácilmente depurándose sus errores

Page 113: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 113

individualmente antes de su inclusión en bibliotecas independientes y de ser

llamados en el programa principal.

El uso de subprogramas facilita la división de tareas de programación entre un

equipo de programadores.

El uso de módulos facilita la proyección y la comprensión de la lógica

subyacente para el programador y el usuario.

14.1. PROCEDIMIENTOS Y FUNCIONES.

Los subprogramas en programación estructurada se clasifican en procedimientos

y funciones, que son unidades de programas diseñados para ejecutar una tarea

específica.

Las funciones normalmente devuelven un sólo valor a la unidad de programa

(programa principal u otro subprograma) que los referencia (que los llama o

invoca). Los procedimientos pueden devolver cero, uno o varios valores.

Las funciones se dividen en estándares y definidas por el usuario.

Estándar. Son funciones proporcionadas por lenguaje de programación.

Definidas por el usuario. Son funciones definidas el programador con el

propósito de ejecutar alguna función específica, y que por lo general se usan

cuando se trata de hacer algún cálculo que será requerido en varias ocasiones

en la parte principal del algoritmo.

Las funciones y procedimientos están compuestos por un grupo de sentencias a

las que se asigna un nombre (identificador) y constituyen una unidad de programa

a la que se puede invocar desde el programa principal u otra función o

procedimiento.

Una de las características importantes y diferenciadoras de los subprogramas es

la posibilidad de comunicación entre el programa principal y los subprogramas (o

entre dos subprogramas). Esta comunicación se realiza a través de una lista de

parámetros. Un parámetro es un medio para pasar información – valores a

variables – del programa principal a un subprograma y viceversa. No es obligatorio

que un subprograma utilice parámetros, ya que éstos no siempre son necesarios.

Un parámetro es, prácticamente, una variable cuyo valor debe ser o bien

proporcionado por el programa principal al subprogramas o ser devuelto desde el

Page 114: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 114

subprogramas al programa principal. Por consiguiente, hay dos tipos de

parámetros: parámetros de entrada y parámetros de salida. Los de entrada son

aquellos cuyos valores deben ser proporcionados por el programa principal,

mientras que los de salida son aquellos cuyos valores se calcularán en el

subprograma y se deben devolver al programa principal para su proceso posterior.

Visibilidad de las variables.

Las variables que intervienen en un programa con subprogramas pueden ser de

dos tipos: variables locales y variables globales.

Una variable local es una variable que está declarada dentro de un subprograma,

y se dice que es local al subprograma. Una variable local sólo está disponible

durante el funcionamiento del mismo, y su valor se pierde una vez que el

subprograma termina. Dos variables locales pueden tener el mismo nombre

siempre que estén declaradas en funciones o procedimientos diferentes.

Las variables declaradas en el programa principal se denominan variables

globales. A diferencia de las variables locales, cuyos valores se pueden utilizar

sólo dentro del subprograma en el que están declaradas, las variables globales

pueden ser utilizadas en el programa principal y en todos los subprogramas,

permanecen activas durante toda la ejecución del programa.

Hay que tener especial precaución al trabajar con variables globales, ya que al ser

recursos compartidos todos los subprogramas pueden tener acceso simultáneo a

ellas y se pueden producir errores lógicos debidos a la concurrencia. Por lo

general, es una buena práctica evitar el uso de variables globales desde

subprogramas a menos que sea estrictamente necesario.

Las variables también pueden ser declaradas dentro de un bloque o estructura de

control, y se comportarán como variables locales únicamente dentro de dicho

bloque o estructura.

Si dos variables, una global y una local, tienen el mismo nombre, la local

prevalecerá sobre la global dentro del módulo en que ha sido declarada.

14.1.1. IMPLEMENTACIÓN DE PROCEDIMIENTOS Y FUNCIONES.

La implementación de procedimientos y funciones lo haremos en la herramienta

JTraductor, pues en PSeInt no es posible realizarlo (al momento de escribir estas

líneas), además que es muy común para un programador aprender varios

lenguajes de programación, si están muy claros del algoritmo, básicamente es

Page 115: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 115

cuestión de aprender un nuevo léxico, sintaxis y semántica y saber las

semejanzas y diferencias entre un lenguaje y otro.

La siguiente tabla muestra un comparativo entre PSeInt (v20120418 ) y JTraductor

(v0.8.0).

PSeInt JTraductor

Inicio /Fin del Algoritmo

Proceso <NombrePrograma>

<acción 1>;

<acción 2>;

. .

.

<acción n>;

FinProceso

Proceso Principal

<acción 1>;

<acción 2>;

. .

.

<acción n>;

Fin

Comentarios

//esto es un comentario No existe forma de definir comentarios

Tipos de Variables

Real/Entero/Logico/Caracter Real/Entero/Logico/Cadena

Declaración de Variables

Definir <var1> , <var2> , … , <varN>

Como [Real/Entero/Logico/Caracter] ;

<Tipo variable> <variable> <- <valor>

Operadores

>, <, =, ,<>, >=, <=, &, |, ~, +, -, *, /, ^ >, <, =, !=, >=, <=, &&, ||, +, -, *, /

Asignación

<variable> <- <expresión> ; <variable> <- <expresión>

Lectura

Leer <var1> , <var2> , ... ,<varN> ; Leer <variable>

Escritura

Escribir <exprl> , <expr2> ,..., <exprN> ; Escribir <exprl> , <expr2> ,..., <exprN>

Estructura Si-Entonces

Si <condición> Entonces

<instrucciones>

Sino

Si <condición> Entonces

<instrucciones>

Sino

Page 116: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 116

<instrucciones>

FinSi

<instrucciones>

FinSi

Estructura Según

Segun <variable> Hacer

<num>: <instrucciones>

<num>,<num>: <instrucciones>

<...>

De Otro Modo: <instrucciones>

FinSegun

No es soportado la estructura Según

Estructura Para

Para <variable> <- <inicial> Hasta

<final> (Con Paso <paso>) Hacer

<instrucciones>

FinPara

Para <Tipo Var> <variable> <- <inicial>

Hasta <final> Con Paso <paso> Hacer

<instrucciones>

FinPara

Estructura Mientras

Mientras <condición> Hacer

<instrucciones>

FinMientras

Mientras <condición> Hacer

<instrucciones>

FinMientras

Estructura Repetir

Repetir

<instrucciones>

Hasta Que <condición>

No es soportado la estructura repetir

Arreglos

Dimension <ident1>

(<max11>,..,<max1N>),..,<identM>(<m

axM1>,..,<maxMN>);

No es soportado los arreglos

Declaración de Funciones.

El pseudocódigo para declarar funciones es:

Funcion <Tipo Var> <nombreFuncion> (<TipoVar> <Var1>, <TipoVar> <Var2>,...)

<instrucciones>

Retornar <Variable/Valor>

Page 117: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 117

FinFuncion

Las funciones siempre deben retornar una variable o valor <Variable/Valor> del

mismo tipo del que fue declarada la función <Tipo Var> a través de la palabra

reservada Retornar.

Pueden tener cero o más parámetros (<TipoVar> <VarN>) que deben ser pasados

al momento de llamar a la función, si no se tienen parámetros, debe ir el

paréntesis vacío.

El nombre de la función <nombreFuncion> debe iniciar con un carácter válido.

Ejemplo 21. Realizar una función que acepte dos números como parámetros y

devuelva la suma de dichos números.

Solución. Crearemos una función llamada sumarNumeros que será llamada en el

programa principal.

Pseudocódigo:

Funcion Real sumarNumeros (Real parametro1, Real parametro2)

Real suma

suma <- parametro1 + parametro2

Retornar suma

FinFuncion

Proceso principal

Real suma <- 0, num1, num2

Escribir "Ingrese el primer número"

Leer num1

Escribir "Ingrese el segundo número"

Leer num2

Page 118: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 118

suma <- sumarNumeros(num1,num2)

Escribir "La suma es: ", suma

Fin

En este ejemplo vemos la definición (declaración) de una función en pseudocódigo

para calcular la suma de dos números reales, los cuales son pasados al

subprograma como parámetros de entrada. La función calcula la suma y la

devuelve como un parámetro de salida.

Esta función la podemos invocar desde el programa principal u otra función o

procedimiento. Nótese que los nombres de los parámetros en la definición

(parametro1 y parametro2) no necesariamente tienen que ser los mismos que los

utilizados en la invocación (num1 y num2). Nótese también que el compilador

chequeará previamente que el tipo de dato del parámetro de salida de la función

(en este caso un número real) pueda ser asignado a la variable suma según su

tipo.

Al nombre de la función junto con la lista ordenada de sus parámetros de entrada

se lo conoce como firma de la función. En general, no puede haber dentro del

mismo programa dos funciones con la misma firma.

A primera vista, los procedimientos parecen dificultar la escritura de un programa.

Sin embargo, no sólo no es así, sino que la organización de un programa en

funciones y/o procedimientos lo hace más fácil de escribir y depurar.

Declaración de Procedimientos.

El pseudocódigo para declarar procedimientos es:

Procedimiento <nomProcedimiento> (<TipoVar> <Var1>, <TipoVar> <Var2>,...) <instrucciones>

FinProcedimiento

Los procedimientos, a diferencia de las funciones no devuelven ningún valor.

Page 119: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 119

Pueden tener cero o más parámetros (<TipoVar> <VarN>) que deben ser pasados

al momento de llamar al procedimientos, si no se tienen parámetros, debe ir el

paréntesis vacío.

El nombre del procedimiento <nomProcedimiento> debe iniciar con un carácter

válido.

Ejemplo 22. Se desea crear un procedimiento que de la bienvenida al usuario que

ingresa al programa.

Procedimiento bienvenida (Cadena nombre)

Escribir "\n\t Bienvenido: ", nombre

FinProcedimiento

Proceso principal

Cadena nombre

Escribir "Ingrese su nombre: "

Leer nombre

bienvenida(nombre)

Fin

Al nombre de la función junto con la lista ordenada de sus parámetros de entrada

se lo conoce como firma del procedimiento. En general, no puede haber dentro

del mismo programa dos procedimientos con la misma firma.

A primera vista, los procedimientos parecen dificultar la escritura de un programa.

Sin embargo, no sólo no es así, sino que la organización de un programa en

funciones y/o procedimientos lo hace más fácil de escribir y depurar.

Ejemplo 23. Realizar un algoritmo que calcule las operaciones matemáticas

básicas (suma, resta, multiplicación y división) de dos números. Use funciones y

procedimientos.

Pseudocódigo:

Page 120: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 120

Funcion Real sumar (Real num1, Real num2)

Retornar (num1 + num2)

FinFuncion

Funcion Real multiplicar (Real num1, Real num2)

Retornar (num1 * num2)

FinFuncion

Funcion Real restar (Real num1, Real num2)

Retornar (num1 - num2)

FinFuncion

Funcion Real dividir (Real num1, Real num2)

Retornar (num1 / num2)

FinFuncion

Procedimiento calculadora (Real num1, Real num2)

Escribir "El resultado de la suma es: ", sumar(num1,num2)

Escribir "El resultado de la resta es: ", restar(num1,num2)

Escribir "El resultado del producto es: ", multiplicar(num1,num2)

Si num2!=0 Entonces

Escribir "El resultado de la división es: ", dividir(num1,num2)

Sino

Page 121: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 121

Escribir "El resultado de la división es: Denominador igual a 0"

FinSi

FinProcedimiento

Proceso principal

Real num1<-0,num2<-0

Escribir " \tCALCULADORA\n"

Escribir "Ingrese el primer número: "

Leer num1

Escribir "Ingrese el segundo número: "

Leer num2

calculadora(num1,num2)

Fin

Se puede observar que en programa principal se orquesta (invoca) al resto de

funciones o procedimientos, armando de esta manera el programa deseado; el

procedimiento calculadora imprime en pantalla el resultado de las operaciones

matemáticas básicas calculadas con funciones.

14.2. BIBLIOTECAS.

En la mayoría de los lenguajes de programación de alto nivel es posible guardar

un subprograma o un conjunto de subprogramas como un archivo independiente

al cual se denomina genéricamente biblioteca (del inglés library). Las bibliotecas

pueden luego ser referenciadas dentro de múltiples programas para que éstos

puedan hacer uso de los subprogramas incluidos en aquella.

Recordemos que la salida del proceso de compilación de un código fuente se

denomina Programa Objeto, que es ni más ni menos que el código de máquina

generado a partir del código fuente (SIN INCLUIR EL CODIGO DE LAS

Page 122: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 122

BIBLIOTECAS UTILIZADAS). El Programa Objeto es luego utilizado como entrada

para que otro componente de software, llamado linker, lo asocie con los

subprogramas que se encuentran en las bibliotecas referenciadas y produzca el

llamado Programa Ejecutable. Este proceso se conoce comúnmente como Link-

Edición.

Observación. Tanto PSeInt como en JTraductor no es posible el uso de

bibliotecas.

15. RECURSIVIDAD.

Recursividad, es el proceso de resolver un problema reduciéndolo a uno o más subproblemas que son idénticos en su estructura al problema original y más simples de resolver.

Una vez que se ha subdividido el problema original, se utiliza la misma técnica de descomposición para subdividir cada uno de estos subproblemas en otros que son menos complejos, hasta que los subproblemas llegan a ser tan simples que se pueden resolver sin realizar más subdivisiones, y la solución general del problema se obtiene juntando todos los componentes resueltos. Se dice que un proceso es recursivo si forma parte de sí mismo, es decir, que se define en función de sí mismo. En otras palabras, un método es recursivo si contiene invocaciones a sí mismo.

La recursión aparece en la vida diaria, en problemas matemáticos, en estructuras de datos y en muchos otros problemas. Es un proceso extremadamente potente, por lo que hay que saber cuándo y cómo aplicarla. Es una poderosa herramienta de programación como alternativa a algoritmos iterativos (cuando es ―casi‖ imposible resolver con estructuras iterativas).

En resumen, la recursividad consiste en:

En el cuerpo de sentencias del subalgoritmo se invoca al propio subalgoritmo para resolver ―una versión más pequeña‖ del problema original.

Habrá un caso (o varios) tan simple que pueda resolverse directamente sin necesidad de hacer otra llamada recursiva.

En general el pseudocódigo de un algoritmo recursivo es el siguiente:

Funcion <Tipo Var> recursivo (<TipoVar> <Var1>, <TipoVar> <Var2>,...)

<Tipo Var> valor

Page 123: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 123

<instrucciones>

valor <- recursivo(<Var1>, <Var2>,...)

<instrucciones>

Retornar valor

FinFuncion

Las condiciones que debe cumplir un algoritmo recursivo son:

Asegurar que existe una condición de salida, en la que no se producen llamadas recursivas (caso base).

Asegurar que se cubren todos los posibles casos entre el base y los no base.

Cada llamada, en el caso no base, conduce a problemas cada vez más pequeños que terminarán en el caso base.

Ejemplo 24. Calcular el factorial de un número entero usando un algoritmo recursivo. Solución. Recordemos la definición recursiva del factorial:

n! = n * (n-1)! , si n > 1 1! = 1

Por lo tanto, tenemos los casos:

Si n = 1 (caso base) Retornar 1 Si n > 1 Retornar n * factorial(n – 1)

Sea factorial(n) la función que calcula el factorial de un número entero n, sea n=4, entonces:

factorial (4) = 4 * factorial (3) = 4 * 6 = 24 factorial (3) = 3 * factorial (2) = 3 *2 = 6 factorial (2) = 2 * factorial (1) = 2 * 1 = 2 factorial (1) = 1

Pseudocódigo: Funcion Entero factorial (Entero n)

Entero temp

Page 124: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 124

Si n>1 Entonces

temp <- n*factorial(n-1)

Sino

temp <- 1

FinSi

Retornar temp

FinFuncion

Proceso principal

Entero n<-0

Escribir "Factorial de un número entero\t\n"

Escribir "Ingrese en valor de n: "

Leer n

Escribir "El factorial de ",n," es ", factorial(n)

Fin

A veces, podemos encontrar una solución iterativa simple, que haga que el algoritmo sea más eficiente.

Ejemplo 25. Calcular el factorial de un número entero usando un algoritmo iterativo. Solución. Se define el factorial como:

n! = n * (n-1)! , si n > 1 1! = 1

De acuerdo con esta definición, se tiene que:

n! = n * (n-1)!, si n>1 (n-1)! = (n-1) * (n-2)! (n-2)! = (n-2) * (n-3)! ……. (2)! = (2) * (1)!

Page 125: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 125

De donde: n!=n*(n-1)*(n-2)*…*1, que es la definición iterativa de factorial. Sea factorial(n) la función que calcula el factorial de un número entero n, sea n=4, entonces:

factorial (4) = 4*3*2*1 = 24

Pseudocódigo:

Funcion Entero factorial (Entero n)

Entero fact<-1

Para Entero i <- 1 Hasta n Con Paso 1 Hacer

fact <- fact*i

FinPara

Retornar fact

FinFuncion

Proceso principal

Entero n<-0

Escribir "Factorial de un número entero\t\n"

Escribir "Ingrese en valor de n: "

Leer n

Escribir "El factorial de ",n," es ", factorial(n)

Fin

Ventajas.

La principal ventaja es la simplicidad de comprensión y su gran potencia, favoreciendo la resolución de problemas complejos de manera natural, sencilla y elegante; y facilidad para comprobar y convencerse de que la solución del

Page 126: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 126

problema es correcta. El valor de la recursividad reside en el hecho de que se puede usar para resolver problemas sin fácil solución iterativa.

Desventajas. El principal inconveniente es la ineficiencia tanto en tiempo como en memoria, dado que para permitir su uso es necesario transformar el programa recursivo en otro iterativo, que utiliza bucles y pilas para almacenar las variables. Una simple llamada puede generar un gran número de llamadas recursivas. (factorial(n) genera n llamadas recursivas). Observación. La recursividad se debe usar cuando sea realmente necesaria, es decir, cuando no exista una solución iterativa simple.

16. ESTILO DE PROGRAMACIÓN.

El buen estilo de programación es, sin lugar a dudas, una de las características

más importantes que debe tener un buen programador. Un programa con buen

estilo es más fácil de leer, de corregir y de mantener. Aunque la experiencia

proporciona el estilo, existen una serie de reglas que se recomiendan seguir desde

el principio del aprendizaje de la programación.

Comentarios. La legibilidad de los programas aumenta considerablemente

utilizando comentarios. Un comentario es un texto explicativo más o menos

largo, situado en el programa e ignorado por el compilador. Los comentarios

son considerados parte del código fuente por más que sean ignorados en las

etapas de compilación y ejecución, y tienen importancia primordial en las fases

de análisis, puesta a punto y mantenimiento. Los comentarios son una parte

fundamental de la documentación de un programa, ya que ayudan al

programador y a otras personas a la comprensión del mismo. No es raro

encontrar programas en los cuales los comentarios ocupan más lugar, incluso,

que las propias instrucciones.

Elección de nombres significativos para variables, funciones y

procedimientos. Las variables, constantes, nombres de subprogramas y

nombres de programas deben ser significativos para orientar al usuario o a

otros programadores sobre lo que representan: X, Y, JJ no son identificadores

significativos.

Identación. Aunque no suele ser requerido por los compiladores de los

lenguajes de alto nivel, es una práctica habitual realizar una identación (o

tabulación) en cada uno de los bloques y unidades de programas

fundamentales para mejorar la legibilidad del código fuente.

Page 127: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 127

Espacios y Líneas en Blanco. Con el mismo fin de mejorar le legibilidad y

comprensibilidad del programa es recomendado utilizar espacios en blanco

antes y después de un operador, así como también dejar una línea en blanco

entre partes importantes o que estén lógicamente separadas.

Validación. Los programas no pueden considerarse correctos hasta que han

sido validados utilizando un rango amplio de datos de prueba para contemplar

todas las posibles direcciones que el flujo de control puede tomar en tiempo de

ejecución.

17. BIBLIOGRAFÍA.

―Fundamentos de Informática‖

Luis A. Ureña y otros. 1999 Editorial Alfaomega ra-ma

―Fundamentos de Programación‖. Libro de Problemas

Luis Joyanes Aguilar, Rodríguez Baena y Fernández Azuela. 1996

―Fundamentos de Programación‖. Algoritmos y estructuras de datos. 2ª Edición

―Pascal y Turbo Pascal enfoque práctico‖. Luis Joyanes Aguilar 1996. Editorial Mc

Graw Hill

―Lógica Simbólica‖. Luis Joyanes Aguilar y Angel Hermoso. Editorial Mc Graw Hill

Irving M. Copi. Editorial C.E.C.S.A.

―Programación en Pascal‖. 4ª Edición

Sanford Leestma y Larry Nyhoff. Editorial Prentice Hall 1999

―Cómo programar en C/C++‖

Deitel/Deitel. Editorial Prentice Hall

―Introducción a la Ciencia de las Computadoras‖.

―Aprenda Visual C++ Ya‖.

Mark Andrews. Editorial Mc Graw Hill

―Visual C++ 6.0 Manual de Referencia‖.

Chris Pappas y William H. Murray. Editorial Mc Graw Hill

Page 128: 91539311 Fundamentos de Programacion Algoritmos JB

Fundamentos de Programación – Algoritmos Universidad Central del Ecuador

Ing. Jéfferson Beltrán M. Msc. 128

―Computación. Metodología, Lógica Computacional y Programación‖.

Ma. del Rosario Bores Rangel y Román Rosales Becerril. 1ª Edición Editorial Mc

Graw Hill 1993

―Programación en C‖. 1ª Edición

Byron S. Gottfried. Editorial Mc Graw Hill 1991

―Metodología de la Programación. Algoritmos, Diagramas de Flujo y programas‖

Tomos I y II. Osvaldo Cairó battistutti. 1a Edición

Editorial Alfaomega 1995

―Enciclopedia del Lenguaje C‖. 1ª Edición

Francisco Javier Ceballos. Editorial Alfaomega ra-ma 1999

http://pseint.sourceforge.net/

http://jtraductor.sourceforge.net/