Sei sulla pagina 1di 419

Unidad I: Conceptos

Básicos de Programación
Digital

Prof. Eliana Guzmán U.


Semestre: A-2015
1 1 Introducción
1.1
En esta unidad se hace una introducción a
las computadoras y a los lenguajes de
programación como herramienta de
programación,
comunicación entre la máquina y el
usuario.
usuario
1.2 Definición de computadora
Una computadora (también llamada
ordenador o computador) es un sistema
digital con tecnología microelectrónica,
microelectrónica
capaz de recibir y procesar datos a partir
de un grupo de instrucciones
denominadas programas, y finalmente
transferir la información procesada o
guardarla en algún tipo de dispositivo o
unidad de almacenamiento
almacenamiento.
1.2 Definición de computadora
• Es decir
decir, la computadora procesa datos y
los convierte en información significativa.
• Diferencia entre datos e información: los
datos son hechos en bruto: números,
palabras figuras que por si mismos no
palabras,
dicen nada, mientras que la información
contiene datos significativos
significativos, es decir son
datos que han sido procesados.
1.2 Definición de computadora
Modelo fundamental de datos:

Datos Computadora Información


Entrada Proceso Salida
1.2 Definición de computadora
Una computadora
p necesita disponer
p de un conjunto
j de
funcionalidades y proporcionar la capacidad de:
• Aceptar la entrada.
• Visualizar o presentar la salida.
• Almacenar la información en un formato lógicamente
consistente (Binario).
(Binario)
• Ejecutar operaciones aritméticas o lógicas bien sobre
datos de entrada o bien sobre datos de salida.
• Monitorizar, controlar y dirigir las operaciones globales y
de secuencia del sistema.
1.3 Hardware y software de los sistemas
d procesamiento
de i t de
d la
l información
i f ió
Una computadora consta de dos partes bien
diferenciadas: hardware y software, por lo
tanto necesita de ambas partes para
poder ser utilizada en la práctica.
1 3 1 Hardware
1.3.1
• Consta de las partes físicas
físicas, tangibles de
la computadora.
• Cuando un usuario interactúa con una
computadora, proporciona una entrada, en
respuesta la computadora procesa la
respuesta,
entrada devolviendo una salida valiosa al
usuario.
usuario
Esquema básico del Hardware

Memoria Auxiliar

CPU

Procesador
Unidad de Control
+
Dispositivos Unidad Aritmético - Lógica Dispositivos
de Entrada de Salida
Memoria Principal
1 3 1 Hardware
1.3.1
Todas las funcionalidades de una
computadora son soportadas por los
siguientes componentes o unidades
fundamentales de la computadora:
1 3 1 Hardware
1.3.1
1 El procesador: es el dispositivo que
1.
ejecuta las instrucciones del programa,
sinónimos: UCP
UCP=CPUCPU.
El procesador solo puede ejecutar
instrucciones simples
simples, tales como cálculos
aritméticos sencillos o desplazamientos de
número por diferentes posiciones
posiciones,
comparaciones, etc.
1 3 1 Hardware
1.3.1
• Sin embargo la velocidad a la cual se
realizan estos cálculos es muy grande,
esta característica es la que permite
ejecutar instrucciones de este tipo.
• El procesador es quien dirige y controla el
procesamiento de la información realizado
por la computadora.
computadora
1 3 1 Hardware
1.3.1
• Puede recuperar información de la
memoria: datos o programas.
• También almacena resultados del
procesamiento en la memoria para su uso
posterior.
posterior
1 3 1 Hardware
1.3.1
El CPU consta de dos componentes:
• Unidad de Control: coordina las
actividades de la computadora y
determina qué operaciones se deben
realizar y en qué orden
orden, es decir
sincroniza y controla todo el proceso de la
computadora.
computadora
1 3 1 Hardware
1.3.1
• Unidad aritmética y lógica: realiza las
operaciones aritméticas y lógicas, tales
como suma
suma, resta
resta, multiplicación
multiplicación, división
y comparaciones.
1 3 1 Hardware
1.3.1
El microprocesador: es un chip (circuito
integrado) que controla y realiza las
funciones y operaciones con los datos
datos. En
realidad, el microprocesador representa al
CPU o procesador
procesador.
• La velocidad de un microprocesador se
mide en megahertz (MHz).
(MHz) Los fabricantes
más populares son Intel, AMD y Cyrix.
1 3 1 Hardware
1.3.1
2 Memoria: es quien se encarga de
2.
almacenar o guardar la información en un
formato lógico consistente
consistente. Normalmente
Normalmente,
tanto los datos como los programas (o
instrucciones) se almacenan en la
memoria, con frecuencia en áreas
distintas y separadas
separadas.
1 3 1 Hardware
1.3.1
La memoria se divide en dos categorías:
• Memoria principal (central).
• Memoria
M i auxiliar
ili o almacenamiento
l i t
secundario.
1 3 1 Hardware
1.3.1
Memoria principal (central): contiene los
programas que se están ejecutando y los
resultados de los cálculos intermedios de
la computadora. Por ejemplo, para que un
programa se pueda ejecutar debe ser
situado en la memoria central en una
operación denominada carga (load)
(load), al
igual que los datos que emplea dicho
programa.
programa
1 3 1 Hardware
1.3.1
• La memoria central se divide a su vez en
memoria RAM, memoria ROM y memoria
caché.
caché
• Memoria RAM (Random Access Memory)
es normalmente volátil
volátil, lo que significa
que todo cuanto se almacena o guarda en
ella se pierde cuando se apaga la
computadora.
1 3 1 Hardware
1.3.1
• En esta memoria es que se almacenan los
programas y datos mientras se está
utilizando la computadora
computadora.
1 3 1 Hardware
1.3.1
• Memoria ROM (Read Only Memory): memoria
de solo lectura. Contiene instrucciones
fundamentales que no se pueden alterar,
modificar o perder de forma accidental por el
usuario.
• Estas memorias incluyen aquellas instrucciones
que se requieren para cargar inicialmente el
software cuando se enciende la computadora
computadora,
(Sistema Operativo, especificaciones del
hardware) No es volátil,
hardware). volátil su contenido no se
pierde cuando se apaga.
1 3 1 Hardware
1.3.1
• Memoria caché: la mayoría de los
procesadores actuales utilizan con
frecuencia una memoria denominada
caché, que sirve para el almacenamiento
intermedio de datos entre el procesador y
la memoria principal, con el objetivo de
que el procesador pueda obtener los
datos de la memoria central de forma más
rápida.
rápida
1 3 1 Hardware
1.3.1
Direcciones de memoria:
• Existen dos conceptos importantes asociados a
cada celda o p
posición de memoria: su dirección
y su contenido.
• Cada celda tiene asociada una única dirección,,
que indica su posición relativa en la memoria y
mediante la cual se puede acceder a la posición
para almacenar
l o recuperar iinformación.
f ió L La
información almacenada en una posición de
memoria es su contenido
contenido.
1 3 1 Hardware
1.3.1
• La memoria central se divide en
posiciones numeradas denominadas
bytes: es la unidad elemental de
almacenamiento, se utilizan múltiplos para
definir el tamaño de la memoria central
central.
1 3 1 Hardware
1.3.1
1 3 1 Hardware
1.3.1
• Memoria auxiliar o almacenamiento
secundario: consta de dispositivos
utilizados para almacenar los datos de
forma permanente, permitiendo su
recuperación cuando se desee
desee, tanto de
datos como de programas.
1 3 1 Hardware
1.3.1
Las más utilizadas son:
• Cintas magnéticas: normalmente para
equipos de audio y video
video.
• Discos magnéticos: poseen componentes
electromagnéticos,
l t éti lla iinformación
f ió se
registra en la superficie del disco y se
acceded a ella
ll por medio
di d de cabezales
b l d de
lectura/escritura.
1 3 1 Hardware
1.3.1
Película de material magnetizable que permite
la grabación de datos Ej: discos duros
(actualmente con capacidades de 1 TB), discos
flexibles o disquetes ya en desuso.
• Discos ópticos: utilizan un haz de láser para
grabar la información. Ej:
– Discos compactos (CD): información que no necesita
ser actualizada con frecuencia
frecuencia. 650 a 700 MB
MB.
Existen de solo lectura y regrabables.
1 3 1 Hardware
1.3.1
– Discos versátiles digitales (DVD): nació en
1995 son dispositivos de alta capacidad de
almacenamiento. Sirve tanto en
computadoras como en equipos electrónicos.
Capacidad varía desde 4,7 GB hasta 17 GB.
• Unidades ZIP: capacidad 100 MB, 250 MB
y 700 MB.
• Pen drive.
1 3 1 Hardware
1.3.1
3 Dispositivos de entrada/salida: son los
3.
dispositivos que permiten la comunicación
directa del usuario con la computadora
computadora,
los más utilizados son el teclado y el
ratón.
ratón
1 3 1 Hardware
1.3.1
• Dispositivos de entrada: se usan para
introducir datos (información) para su
procesamiento convierten la información
procesamiento,
de entrada en señales eléctricas que se
almacenan en la memoria central:
teclados, lectores ópticos, lectores de
códigos de barras
barras, escáner
escáner, módem
módem,
micrófonos, cámaras, y el más popular el
ratón.
ratón
1 3 1 Hardware
1.3.1
• Dispositivos de salida: permiten presentar
o mostrar el resultado del procesamiento
de los datos
datos, es decir la información
información.
Pantallas, impresoras, plotters, cornetas,
reconocedores de vozvoz.
1 3 2 Software
1.3.2
• Consta de los programas
programas, también
llamados aplicaciones, que contienen
instrucciones que la computadora ejecuta
o corre.
• El software se divide en dos grandes
grupos: software del sistema y software de
aplicaciones.
aplicaciones
1 3 2 Software
1.3.2
• Software del sistema es el conjunto de
programas indispensables para que la
máquina funcione; se denominan también
programas del sistema.
• Estos programas son básicamente
básicamente, el
sistema operativo, los editores de texto,
los compiladores/intérpretes (lenguajes de
programación) y los programas de utilidad.
1 3 2 Software
1.3.2
• Uno de los programas más importantes es
el sistema operativo, que sirve,
esencialmente para facilitar la escritura y
uso de sus propios programas.
• Dirige las acciones globales de la
computadora, instruye a la computadora
para ejecutar otros programas y controla
el almacenamiento y recuperación de
archivos.
archivos
1 3 2 Software
1.3.2
• Los sistemas operativos pueden ser
monousuarios y multiusuarios.
• Los sistemas operativos más populares
son Windows, Linux, Macintosh: Mac OS
X MS-DOS.
X. MS DOS
1 3 2 Software
1.3.2
El sistema operativo consta de los
siguientes componentes:
• Kernel del sistema: componente central del
sistema.
• Sistema de administración de memoria: asigna
un área de memoria para cada programa que se
esté ejecutando.
j
• Administrador del sistema de archivos: organiza
y controla el uso del disco duro (DD).
1 3 2 Software
1.3.2
• Controladores de dispositivos: controla los
dispositivos de hardware conectados a la
computadora.
computadora
• Bibliotecas del sistema: contiene todos los
programas de utilidad que puede ser
llamados por los programas de usuario.
1 4 Programación
1.4
Es el proceso de escribir un programa
programa, por
lo que requiere conocer cuál es el
conjunto de instrucciones del lenguaje
lenguaje.
1 5 Programa
1.5
• Es un conjunto de instrucciones internas
utilizadas para ejecutarse en una
computadora y que producen un resultado
concreto.
• Cuando un programa se ejecuta
normalmente hay dos tipos de entrada a la
computadora: el programa y los datos
datos.
1.5.1 Instrucciones, sentencias o
proposiciones:
i i
• S
Son llos dif
diferentes
t pasos o acciones
i d
de un
programa o algoritmo, las cuales
especifican
ifi ciertas
i t iinstrucciones
t i que d
debe
b
ejecutar la computadora.
• Las instrucciones básicas que una
computadora es capaz de manipular y
ejecutar se pueden agrupar en cuatro
grupos:
Tipos de instrucciones
• Instrucciones de entrada/salida.
• Instrucciones aritmético/lógicas: ejecutan este
tipo
p de operaciones.
p
• Instrucciones de selección: permiten
seleccionar de alternativas múltiples
p según
g
una condición.
• Instrucciones de repetición: permiten la
repetición de secuencias de instrucciones un
número determinado de veces.
1 6 Lenguajes de Programación
1.6
• Es el conjunto de instrucciones que se
pueden utilizar para construir un
programa.
programa
• Sirven para escribir programas ya que
permiten la comunicación
usuario/máquina.
• Ejemplos:
Ej l T
Turbo
b PPascal,l C
C, C
C++, F
Fortran,
t
Visual Basic, PHP, …
1 6 Lenguajes de Programación
1.6
Los lenguajes de los humanos y los
lenguajes de la computadora son muy
diferentes ya que las características y
diferentes,
habilidades de las personas son muy
diferentes a las de las máquinas
máquinas.
Los lenguajes de programación permiten que
las personas escriban programas según su
propio lenguaje y luego se traducen al
lenguaje que las computadoras entienden
entienden.
1.6.1 Tipos de Lenguajes de
P
Programación

Los principales tipos de lenguajes utilizados


en la actualidad son tres:
• Lenguajes de máquina.
• Lenguajes de bajo nivel (ensamblador)
(ensamblador).
• Lenguajes de alto nivel.
Lenguajes de máquina
Son aquellos que están escritos en
lenguajes directamente inteligibles por la
computadora ya que sus instrucciones
computadora,
son cadenas binarias que especifican una
operación y las posiciones de memoria
implicadas.
Lenguajes de máquina
Las instrucciones en lenguaje de máquina
dependen del hardware de la
computadora y por lo tanto difieren de una
computadora a otra. El lenguaje de
máquina de un PC es diferente a la de
una computadora HP, Dell, Compaq o
IBM.
IBM
Lenguajes de máquina
Las ventajas de programar en lenguaje de
máquina se refieren a la posibilidad de
cargar el programa sin necesidad de un
traductor, lo que supone una velocidad
de ejecución superior a cualquier otro
lenguaje de programación.
Lenguajes de máquina
Los inconvenientes superan
p a las ventajas
j y
hacen que no sea un lenguaje muy utilizado
actualmente por los programadores, dichos
inconvenientes son:
• Dificultad y lentitud en la codificación..
• Poca fiabilidad
• Dificultad grande de verificar y poner a punto los
p og a as
programas.
• Los programas sólo son ejecutables en el
mismo procesador o CPU.
Conversión de Sistema Decimal a Binario

10 2
0 5 2
1 2 2
0 1 2
1 0

10(decimal) = 1010(binario)
Conversión de Sistema Binario a Decimal
… 26 25 24 23 22 21 20

10(decimal) = 1 0 1 0(binario)
23 22 21 20
8 + 0 + 2 + 0 = 10
Lenguajes de Programación
Existen otros lenguajes que permiten
escribir programas con instrucciones
similares al lenguaje humano (casi todos
en inglés). Estos lenguajes se denominan
de alto y bajo nivel
nivel.
Lenguajes de Bajo Nivel
Son más fáciles de utilizar que los lenguajes de
máquina, pero al igual que ellos dependen de la
máquina en particular (procesador).
El lenguaje de bajo nivel por excelencia es el
ensamblador. Las instrucciones en lenguaje
ensamblador son instrucciones como
nemotécnicos.
P ejemplo:
Por j l SUM (ADD)
(ADD), RES (SUB)
(SUB), DIV (DIV)
(DIV).
Lenguajes de Bajo Nivel
• Ejemplo: ADD
ADD, M
M, NN, P significa sumar el
número contenido en la posición de
memoria M al número almacenado en la
posición N y guardarlo en la posición de
memoria P P.
• Evidentemente es más fácil recordar esta
instrucción que su equivalente en código
de máquina → 0110 1001 1010 1011
Lenguajes de Bajo Nivel
• Un programa escrito en lenguaje
ensamblador no puede ser ejecutado
directamente por la computadora
computadora, sino
que requiere una fase de traducción a
lenguaje de máquina
máquina.
Lenguajes de Bajo Nivel
• El programa original escrito en lenguaje
ensamblador se denomina programa
fuente y el programa traducido en
lenguaje de máquina se conoce como
programa objeto,
objeto ya directamente
inteligible por la computadora.
Programa fuente Programa Programa objeto
escrito en lenguaje ensamblado en código de
ensamblador
(assembly)
(assembler) máquina
Lenguajes de Bajo Nivel
• La ventaja de los lenguajes
ensambladores frente a los lenguajes de
máquina es su mayor facilidad de
codificación y en general, su velocidad de
cálculo.
cálculo
Lenguajes de Bajo Nivel
Los inconvenientes más notables de los lenguajes
g j
ensambladores son:
• Dependencia total de la máquina, lo que impide
l transportabilidad
la bilid d d
de llos programas. El
lenguaje ensamblador del PC es diferente al
lenguaje ensamblador de la Macintosh
Macintosh.
• La formación de los programadores es más
compleja, ya que exige no sólo las técnicas de
programación sino también el conocimiento del
hardware de la máquina.
Lenguajes de Bajo Nivel
Hoy en día los ensambladores tienen sus
aplicaciones muy reducidas en la
programación de aplicaciones y se
centran en aplicaciones de tiempo real,
control de procesos y de dispositivos
electrónicos.
Lenguajes de Alto Nivel
Son los más utilizados por los
programadores. Están diseñados para que
las personas escriban y entiendan los
programas de un modo más fácil que los
lenguajes de máquina y ensambladores.
ensambladores
Lenguajes de Alto Nivel
Otra razón, es que los programas escritos con un
lenguaje de alto nivel son independientes de la
máquina, es decir, las instrucciones del
programa no dependen del diseño del hardware
o de una computadora en particular. En
consecuencia, i llos programas escritos
it usandod
lenguajes de alto nivel son portables, lo que
significa la posibilidad de poder ser ejecutados
con poca o ninguna modificación en diferentes
computadoras.
p
Lenguajes de Alto Nivel
Ventajas:
j
• El tiempo de formación de los programadores es
relativamente corto comparado con otros
lenguajes.
lenguajes
• La escritura de programas se basa en reglas
sintácticas similares a los lenguajes humanos.
Ej
Ejemplo:
l read,d write,
it bbegin,
i end.
d
• Las modificaciones y puestas a punto de los
programas
p og a as so
son másás fáciles.
ác es
• Reducción de los costos de los programas.
• Transportabilidad.
Lenguajes de Alto Nivel
Inconvenientes:
• No se aprovechan los recursos internos
de la máquina, que se explotan mucho
mejor en los lenguajes de máquina y
ensambladores.
• Aumento de la ocupación de memoria
RAM.
• El tiempo de ejecución de los programas
y
es mucho mayor.
Lenguajes de Alto Nivel
• Al igual que sucede con los lenguajes
ensambladores, los programas fuentes
tienen q
que ser traducidos a código
g de
máquina usando traductores llamados en
este caso compiladores e intérpretes.
• Lenguajes de alto nivel más utilizados
actualmente: C, C++, COBOL, FORTRAN,
TURBO PASCAL,
PASCAL VISUALBASIC
VISUALBASIC, JAVA,
JAVA
PROLOG, SQL, HTML, XML, PHP.
Lenguajes de Alto Nivel
Traductores de lenguaje: son programas
que traducen los programas fuente
escritos en lenguajes de alto nivel a
código de máquina. Los traductores se
dividen en:
• Intérpretes
• Compiladores
C il d
Lenguajes de Alto Nivel
• Intérpretes: es un traductor que toma un
programa fuente y realiza la traducción y
ejecución línea por línea. Prácticamente ya no
se utilizan.
• Compiladores: es un programa intérprete que
traduce un programa escrito en lenguaje de alto
nivel, en un programa escrito en lenguaje de
máquina de forma que la computadora lo pueda
comprender de forma directa.
Lenguajes de Alto Nivel

Programa fuente Programa fuente

Intérprete Compilador

Traducción y Programa objeto


ejecución línea a
línea
Unidad II
II. Metodología para la
construcción de programas

Prof. Eliana Guzmán U.


Semestre: A-2015
A 2015
Introducción

Resolver un problema con una computadora


conduce a la escritura de un programa y a
su ejecución
ejecución.
El proceso de diseñar un programa es
esencialmente creativo
creativo, pero se pueden
considerar una serie de fases o pasos
comunes que sirven de guía cuando se
comunes,
está aprendiendo a escribir programas.
Programación
Es el proceso de escribir un programa
programa, por
lo que requiere conocer cuál es el
conjunto de instrucciones del lenguaje de
programación, que se esté empleando.
Programa
• Es un conjunto de instrucciones internas
utilizadas para ejecutarse en una
computadora y que producen un resultado
concreto.
• Cuando un programa se ejecuta
normalmente hay dos tipos de entrada a la
computadora: el programa y los datos
datos.
Instrucciones, sentencias o
proposiciones:
i i
• S
Son llos dif
diferentes
t pasos o acciones
i d
de un
programa o algoritmo, las cuales
especifican
ifi ciertas
i t iinstrucciones
t i que d
debe
b
ejecutar la computadora.
• Las instrucciones básicas que una
computadora es capaz de manipular y
ejecutar, se pueden agrupar en cuatro
grupos:
Tipos de instrucciones
• Instrucciones de entrada/salida.
• Instrucciones aritmético/lógicas: ejecutan este
tipo
p de operaciones.
p
• Instrucciones de selección: permiten
seleccionar de alternativas múltiples
p según
g
una condición.
• Instrucciones de repetición: permiten la
repetición de secuencias de instrucciones, una
cantidad dada de veces.
Fases de resolución de un problema
a través
t é dde un programa (ciclo
( i l de
d
vida de un software)
• Análisis del problema.
• Diseño del algoritmo
algoritmo.
• Codificación.
• Compilación y Ejecución.
Ejecución
• Verificación y Depuración.
• Mantenimiento y Documentación.
Ciclo de vida de un software
• Análisis del problema
problema. El resultado
lt d dde estas
t d dos etapas,
t es
el diseño detallado del algoritmo
• Diseño del algoritmo.
• Codificación
C difi ió (i t ió ) → Se
(implementación)
l S
implementa el algoritmo en código.
• Compilación y Ejecución.
• Verificación y Depuración.
p
• Mantenimiento y Documentación.
Ciclo de vida de un software
1. Análisis del problema: Esta fase requiere una
clara definición, donde se exprese
exactamente lo que debe hacer el programa y
el resultado o solución deseada. Para definir
bien un problema, es conveniente responder
l siguientes
las i i t preguntas: t
• ¿Qué entradas se requieren? (tipo y cantidad)
• ¿QuéQ é método
é d produce
d lla salida
lid ddeseada?
d ?
• ¿Cuál es la salida deseada? (tipo y cantidad)
Ciclo de vida de un software
Ejemplo 1: Calcular la superficie de un
rectángulo.

Entradas: base
altura
Proceso: Cálculo de la superficie:
p
Superficie = base * altura
Salida: Superficie
Ciclo de vida de un software
Ejemplo 2: Calcular la superficie y la
longitud de la circunferencia, de un
círculo de radio r.
Entrada: Radio del círculo: r
Proceso: Cálculo de la superficie: πr2
Cálculo de la longitud de la
circunferencia: 2πr
Superficie del círculo
Salidas: Longitud de la circunferencia del
círculo
Definición de algoritmo
Antes de explicar
p la segunda
g fase, vamos a estudiar
algunas definiciones de algoritmo:
• es un método para resolver un problema mediante una
serie de pasos precisos, definidos y finitos.
• es un conjunto finito de instrucciones o pasos que sirven
para ejecutar una tarea o resolver un problema.

9 Preciso: indica el orden en que se ejecutan cada paso.


9 Definido: si se sigue dos veces, se obtiene el mismo
resultado.
9 Finito: tiene un número determinado de pasos.
Definición de algoritmo
Ejemplos de algoritmos son:
• Instrucciones para montar una bicicleta.
• Hacer
H una receta
t dde cocina.
i
• Hacer la suma de dos enteros.

Los algoritmos se pueden expresar por


fórmulas, diagramas de flujo y
pseudocódigo.
pseudocódigo
Ciclo de vida de un software
2. Diseño del algoritmo
g
Se determina cómo hace el programa la tarea
solicitada.
Los métodos más eficaces de diseño se basan en el
conocido divide y vencerás. Es decir, la
resolución de un problema complejo se realiza
di idi d ell problema
dividiendo bl en subproblemas,
b bl y a
continuación dividir estos subproblemas en otros
de nivel más bajo, hasta que pueda
i l
implementarse una solución
l ió en ell computador.
d
Este método se conoce como diseño
descendente o modular.
Ciclo de vida de un software
Cada subprograma se resuelve mediante un
módulo que tiene un solo punto de entrada y un
solo punto de salida.
Cualquier programa bien diseñado, consta de un
programa principal que llama a los
subprogramas.
Los programas estructurados de esta forma, se
di que tienen
dice i un di
diseño modular,
d l y ell método
é d
de descomponer el programa en módulos más
pequeños se llama programación modular
modular.
Ciclo de vida de un software

Conclusión: el diseño del algoritmo es el


proceso de convertir los resultados de la
etapa de análisis del problema, en un
diseño modular con refinamientos
sucesivos, que permitan una posterior
traducción a un lenguaje de programación
programación.
Ciclo de vida de un software
Las dos herramientas más utilizadas comúnmente
para diseñar algoritmos son: los diagramas de
flujo y los pseudocódigos.
a. Diagrama de flujo: es una representación
gráfica de un algoritmo. Utiliza símbolos
estándar que representan los pasos del
algoritmo unidos por flechas denominadas
líneas de flujo
flujo, que indican la secuencia en que
se deben ejecutar. Los símbolos empleados se
han establecido y los más utilizados son:
Ciclo de vida de un software
Línea de flujo Conector

Proceso Llamada a subrutina

Entrada/Salida Pantalla

Terminal, representa Impreso


el inicio y fin de un
programa

Decisión Teclado
Ciclo de vida de un software
Ejemplo de Diagrama de flujo
Inicio

Leer (base, altura)

superficie ← base * altura

Escribir (superficie)

Fin
Ciclo de vida de un software
b. Pseudocódigo: es un lenguaje de descripción
de algoritmos. Su uso hace el paso de
codificación final, relativamente fácil.
Nació como un lenguaje similar al inglés y era un
medio para representar básicamente las
estructuras de control de programación
estructurada, que se verán más adelante.
El pseudocódigo
d ódi no se puede d ejecutar
j en una
computadora.
Ciclo de vida de un software
Su ventaja radica que al utilizarlo, en la
planificación del programa, el programador se
puede concentrar en la lógica y en las
estructuras de control, y no preocuparse por las
reglas del lenguaje de programación.
Es también más fácil corregir errores de la lógica
de programación que si el programa está
codificado Puede traducirse fácilmente a
codificado.
lenguajes estructurados como el Pascal.
Ciclo de vida de un software
Ejemplo
j p de un algoritmo
g escrito en Pseudocódigo:
g

algoritmo
g superficie_de_un_rectangulo
p _ _ _ g
{declaración de variables y constantes}
Inicio
Leer(base, altura)
superficie ← base * altura
Escribir(‘La superficie del rectángulo es: ‘ ,
superficie)
Fin
Fi
Ciclo de vida de un software
3. Codificación de un programa
Codificación es la escritura de la
representación del algoritmo desarrollada
en las etapas precedentes, usando un
g j de p
lenguaje programación.
g
En esta etapa se traduce el algoritmo y
puede transcribirse en la computadora.
p p
Esta operación se realiza con el programa
editor de texto, para obtener el programa
f
fuente.
t
Ciclo de vida de un software

Para realizar la conversión del algoritmo en


programa, debe sustituir las palabras
reservadas en español por sus
homónimos en inglés, respetando la
sintaxis del lenguaje de programación
empleado.
Ciclo de vida de un software
PROGRAM Ejemplo1;
USES CRT;
VAR
lado1,lado2, area: REAL;
BEGIN {Este programa calcula el área de un rectángulo}
ClrScr;
WRITELN ('Escriba los lados del rectángulo');
READLN (lado1);
READLN (lado2);
area:=lado1*lado2;
WRITELN ('AREA DEL RECTANGULO: ', area);
END.
Ciclo de vida de un software
4 Compilación y ejecución de un
4.
programa
La compilación es el proceso de traducir
programas fuentes en programas objeto
(normalmente en código de máquina)
máquina),
haciendo uso de un compilador o
interprete.
interprete
Ciclo de vida de un software

Compiladores: es un programa intérprete


que traduce un programa escrito en
lenguaje de alto nivel, en un programa
escrito en lenguaje de máquina, de forma
que la computadora lo pueda comprender
directamente.
Ciclo de vida de un software
Intérpretes:
p es un traductor qque toma un
programa fuente y realiza la traducción y
j
ejecución línea p
por línea. Prácticamente
ya no se utilizan.
Programa fuente Programa fuente

Intérprete Compilador

Traducción y Programa objeto


ejecución línea a
línea

Intérprete Compilador
Ciclo de vida de un software
Fases de la compilación:
p
1. Escribir el programa fuente utilizando el editor de
texto del lenguaje y guardarlo en algún dispositivo
de almacenamiento, por ejemplo el DD.
2. Cargar el programa fuente en memoria.
3. Compilar el programa (por ejemplo en TP: Alt+F9).
4 Verificar y corregir los errores de compilación.
4. compilación
5. Obtener el programa objeto.
6. El enlazador (linker) obtiene el programa ejecutable
.EXE.
EXE
7. Se ejecuta el programa y se obtienen las salidas
(por ejemplo en TP: Ctrl+F9).
Ciclo de vida de un software
Si tras la compilación se presentan errores
en el programa fuente (.pas), es preciso
volver a editar el programa
programa, corregir los
errores y compilar de nuevo, este proceso
se repite hasta que no se producen
errores, obteniéndose el programa objeto
( psd) y el programa ejecutable ((.exe).
(.psd) exe)
Ciclo de vida de un software
Cuando se ejecuta un programa se pueden
producir tres tipos de errores:
1. Errores de compilación:
p se p
producen
normalmente por el uso incorrecto de las reglas
de programación y suelen ser errores de
sintaxis. Si existe un error de sintaxis, la
computadora no puede entender la instrucción,
no se obtendrá el programa objeto y el
compilador imprimirá la lista de errores.
Ciclo de vida de un software
2 Errores de ejecución: estos errores se
2.
producen por instrucciones que la
computadora puede entender pero no
ejecutar. Ejemplo típicos: división por
cero raíces cuadradas de números
cero,
negativos. En este caso se detiene la
ejecución del programa y se muestra un
mensaje de error.
Ciclo de vida de un software
3. Errores lógicos: se producen en la lógica
del programa y la fuente del error suele
g
ser el diseño del algoritmo. Estos errores
son los más difíciles de detectar porque el
programa compila y corre bien, pero no se
obtienen
bti llos resultados
lt d correctos.
t En
E este
t
caso debe volver a las etapas de análisis
y diseño
diseño, modificar el algoritmo y cambiar
el programa fuente, compilar y ejecutar
una vez más
más.
Ciclo de vida de un software
5. Verificación y depuración
p de un pprograma
g
La verificación es el proceso de ejecución del
programa con una amplia variedad de datos de
entrada llamados datos de test o prueba
entrada, prueba, que
determinarán si el programa tiene errores.
Se debe desarrollar una amplia gama de datos de
prueba:
b valores
l normales
l dde entrada,
t d valores
l
extremos de entrada que comprueben los
límites del programa y valores de entrada que
compruebenb aspectos especiales
i l ddell programa.
La depuración es el proceso de encontrar los
errores del programa y corregir o eliminar dichos
errores.
Ciclo de vida de un software
6. Documentación y mantenimiento
La documentación de un problema consta de la
descripción de los pasos a dar en el proceso de
resolución del mismo.
Programas pobremente documentados son difíciles de
leer, más difíciles de depurar y casi imposibles de
mantener y modificar.
La documentación puede ser interna y externa.
La documentación interna es la contenida en líneas de
comentario.
La documentación externa incluye análisis, diagramas de
flujo y/o pseudocódigo, manuales de usuario con
instrucciones para ejecutar el programa y para
i t
interpretar
t los
l resultados.
lt d
Ciclo de vida de un software
La documentación es vital cuando se desea
corregir posibles errores futuros o cambiar
el programa
programa. Tales cambios se denominan
mantenimiento del programa.
Después de cada cambio se debe actualizar
la documentación.
E común
Es ú usar llas versiones
i d
de llos
programas 1.0, 1.1, 2.0….
Programación modular
Es uno de los métodos de diseño más flexible y
potente para mejorar la productividad de un
programa.
El programa se divide en módulos (partes
independientes), cada una de las cuales ejecuta
una única actividad o tarea y se codifican
independientemente de otros módulos. Cada
uno de estos módulos se analizan
analizan, codifican y
ponen a punto por separado.
Programación modular
Cada p
programa
g tiene un módulo denominado
programa principal, que controla todo lo que
sucede. Se transfiere el control a cada
submódulo de modo que ellos puedan ejecutar
submódulo,
sus funciones y luego devuelve el control al
programa
p g p
principal
p cuando haya y completado
p sus
tareas. Cada módulo debe tener solamente una
tarea específica que ejecutar. Esta tarea puede
ser entrada
entrada, salida
salida, manipulación de datos
datos,
control de otros módulos o alguna combinación
de éstos.
Programación modular
Los módulos son independientes en el
sentido que ningún módulo puede tener
acceso directo a cualquier otro módulo
módulo,
excepto el módulo al que llama y sus
propios submódulos
submódulos.
Programación modular
Programación estructurada
Programación
g modular, pprogramación
g
descendente y programación estructurada, son
términos que a menudo se utilizan como
sinónimos aunqueq no significan
g lo mismo.
La programación estructurada significa escribir un
programa de acuerdo a las siguientes reglas:
• El programa tiene
ti un diseño
di ñ modular.
d l
• Los módulos son diseñados de modo
desce de te
descendente.
• Cada módulo se codifica utilizando las tres
estructuras de control básicas: secuenciales,
decisión y repetición
repetición.
Programación estructurada
La pprogramación
g estructurada, es un conjunto
j de técnicas
que:
• Aumentan considerablemente la productividad del
programa reduciendo el tiempo requerido para escribir,
verificar, depurar y mantener los programas.
• Utiliza una cantidad limitado de estructuras de control,
que minimizan la complejidad de los programas y por
consiguiente reducen los errores.
• Hace los programas más fáciles de escribir, verificar,
l
leer y mantener.
t
• Los programas están dotados de una estructura.
Programación estructurada
La programación estructurada es un conjunto de técnicas
que incorporan:
i
• Recursos abstractos: descomponer una acción compleja
en términos de acciones más simples que la
computadora
t d pueda
d ejecutar.
j t
• Diseño descendente (top-down): es el proceso mediante
el cual un problema se descompone en una serie de
niveles o pasos sucesivos de refinamiento
refinamiento.
• Estructuras básicas de control: son métodos de
especificar el orden en que las instrucciones de un
algoritmo se ejecutan
ejecutan, este orden se denomina flujo de
control. Las 3 estructuras básicas de control son:
secuenciales, decisión y repetición.
A continuación se retoma el
concepto de algoritmo y se
explica con mas detalle
Concepto y característica de
algoritmos
l i
• Metodología de la programación: es la
metodología necesaria para resolver
problemas mediante programas
programas.
• El eje central de esta metodología es el
concepto de algoritmo: método para
resolver un problema.
Problema Diseño del Programa de
algoritmo computadora
Concepto y característica de
algoritmos
l i
Los pasos para la resolución de un problema son:
• Diseño del algoritmo: describe la secuencia
ordenada de ppasos,, sin ambigüedades,
g ,q
que
conducen a la solución de un problema dado.
g
• Convertir el algoritmo a un p
programa
g usando
un lenguaje de programación.
• Ejecución y validación del programa por la
computadora.
Características de un algoritmo
• Preciso: indicando el orden exacto de
realización de cada paso.
• Definido: si se sigue el algoritmo dos veces
se debe obtener el mismo resultado.
• Finito:
Fi it d debe
b ttener una cantidad
tid d lilimitada
it d dde
pasos.
Ejemplo 1: Realizar la suma de todos los números pares
entre 2 y 1000.
El problema consiste en sumar 2 + 4 + 6 + … + 1000.

Algoritmo:
g
1. Inicio
2. Establecer suma en cero
3 Establecer
3. E bl número
ú en dos
d
4. Sumar número a suma. El resultado será el
nuevo valor de la suma (suma)
(suma).
5. Incrementar número en 2 unidades
6. Si número <= 1000 regresar al paso 4, en
caso contrario
i escribir
ibi ell úl
último
i valor
l d de suma
y terminar el proceso.
7 Fin
7.
Ejemplo 2: Un socio solicita el ingreso a un
club. Si está solvente, puede entrar sino se
le impide la entrada.
Algoritmo
1. Inicio
2 Solicitar
2. S li it su número
ú d
de acción

3. Examinar en la base de datos
4. Si el socio está solvente, dejarlo entrar;
j
en caso contrario no dejarlo entrar.
5. Fin
Diseño del algoritmo
• La información proporcionada al algoritmo
constituyen su entrada y la información
producida p
p por el algoritmo
g constituye
y su
salida.
• Método de descomponer:
p divide y
vencerás. Por ejemplo, en el problema de
encontrar la superficie y longitud de un
círculo
í l se puede d didividir
idi en cuatro
t
problemas más simples o subproblemas:
Ejemplo
j p
Ejemplo: Calcular la superficie y la longitud
de la circunferencia
circunferencia, de un círculo de
radio r.
Entrada: Radio del círculo
Proceso: Cálculo de la superficie (πr2)
Cálculo de la circunferencia (2 πr)
Salidas: Superficie
p del círculo
Longitud de la circunferencia del
círculo
Diseño del algoritmo
Diseño del algoritmo
Normalmente los p pasos diseñados en el p
primer
esbozo del algoritmo son incompletos e
indicarán solo unos pocos pasos (un máximo de
12 aproximadamente).
p ) Tras esta p
primera
descripción, estos pasos se amplían en una
descripción más detallada con pasos más
específicos Este proceso se denomina
específicos.
refinamiento del algoritmo.
Para problemas complejos se necesitan con
frecuencia diferentes niveles de refinamiento
refinamiento,
antes de que se pueda obtener un algoritmo
claro, preciso y completo.
Diseño del algoritmo
En el ejemplo:
Diseño del algoritmo
Las ventajas del diseño descendente son:
• El problema se comprende más fácilmente
al dividirse en partes más simples
denominadas módulos.
• Las
L modificaciones
difi i en llos módulos
ód l son
más fáciles.
• La comprobación del problema es más
sencilla.
Diseño del algoritmo
En resumen el diseño de un algoritmo se
descompone en:
• Diseño descendente
descendente.
• Refinamiento por casos.
• Uso de las herramientas de
programación: diagrama de flujo y/o
pseudocódigo.
Programación Digital

Unidad
U id d 3.
3 Elementos
El t básicos
bá i
de un programa
1 C
1. Concepto
t dde P
Programa
Es un conjunto de instrucciones (órdenes
dadas a la computadora),
p ), que
q p producirán
la ejecución de una determinada tarea.
En esencia
esencia, un programa es un medio para
conseguir un fin, probablemente dicho fin
sea solucionar un problema
problema.
2 Parte de un programa
2.
Las parte de un programa son:
„ una cabecera: es una acción simple que comienza con
la palabra program seguida del nombre asignado al
programa
p og a a cocompleto.
p eto
„ un bloque algoritmo: es el resto del programa, y a su vez
consta de dos componentes o secciones:
… las acciones de declaración: definen o declaran las variables,
variables
constantes y subprogramas.
… las acciones ejecutables: son las acciones que debe ejecutar la
computadora, cuando se codifica el algoritmo.

Entrada Salida
Algoritmo de resolución
3. Instrucciones y tipos de instrucciones

Las instrucciones son las acciones que


ejecuta
j un p
programa,
g , definidas en el
proceso de diseño de un algoritmo y su
codificación. Estas deben crearse en el
mismo orden que serán ejecutadas, es
decir,, en secuencia.
3. Instrucciones y tipos de instrucciones

Un programa puede ser:


„ Lineal: si las instrucciones se ejecutan
secuencialmente, sin bifurcaciones,
decisiones o comparaciones
comparaciones.
„ No lineal: cuando se interrumpe la
secuencia mediante instrucciones de
bifurcación.
3. Instrucciones y tipos de instrucciones

Tipos de instrucciones:
„ instrucciones de inicio/fin (begin/inicio)/(end/fin)
(begin/inicio)/(end/fin).
„ instrucciones de lectura (readln/leer).
„ instrucciones de escritura (writeln/escribir)
(writeln/escribir).
„ instrucciones de asignación (A←5, B←7).
„ instr cciones aritméticas y lógicas
instrucciones lógicas.
„ Instrucciones de decisión o selección.
„ I t
Instrucciones
i de
d repetición.
ti ió
3. Instrucciones y tipos de instrucciones

„ instrucciones de inicio/fin: indican el inicio y fin


del algoritmo de resolución del programa, es
decir donde se inicia y finaliza el conjunto de
decir,
instrucciones del programa. Palabras
reservadas ppara un algoritmo:
g inicio y fin.
„ Instrucciones de lectura de datos (entrada):
captura los datos usando un dispositivo de
entrada.
t d P Palabra
l b reservada d para un algoritmo:
l it
leer .
… Ej. Leer(nombre), Leer(horas, precio).
3. Instrucciones y tipos de instrucciones

„ Instrucciones de escritura de resultados


(salida): escribir los resultados en un
dispositivo de salida. Palabra reservada
para un algoritmo: escribir. Ejemplos:
… escribir(A)
ibi (A)
… escribir(B, C)
… escribir(´mensaje´)
ibi (´ j ´)
… escribir(´mensaje´,A)
3. Instrucciones y tipos de instrucciones

„ Instrucciones de asignación: se emplean


para asignar
p g un valor o resultado de una
operación a una variable.
„ Símbolo empleado: ←.← Ejemplos:
… A←5
… B←0 (inicializar variables)
… N ←N+1
3. Instrucciones y tipos de instrucciones

„ Instrucciones de decisión o selección: se


emplean para decidir qué instrucciones
del programa ejecutar,
ejecutar según el
cumplimiento de una condición lógica.
Palabras reservadas para un algoritmo: si,
si
entonces, sino, según_sea.
V F
Condición
lógica

Instrucciones 1 Instrucciones 2
3. Instrucciones y tipos de instrucciones

„ Instrucciones de repetición: permite, como


su nombre lo indica,, repetir
p un conjunto
j de
instrucciones una cantidad dada de veces.
Palabra reservada p para un algoritmo:
g
mientras, repetir, desde. Instrucción 1

Instrucción 2

V
Condición
lógica
F
4. Elementos básicos de un programa

„ Los lenguajes de programación tienen


elementos básicos que se utilizan como bloques
constructivos así como reglas utilizar dichos
constructivos,
elementos. Estas reglas se denominan sintaxis
del lenguaje.
g j
„ Solamente las instrucciones sintácticamente
correctas, pueden ser interpretadas por la
computadora.
t d Los
L programas que contengan
t
errores de sintaxis, son rechazados por la
máquina.
áqu a
4. Elementos básicos de un programa
Los elementos básicos constitutivos de un
programa o algoritmo son:
„ Palabras reservadas (inicio, fin, si-entonces, …).
„ Identificadores (nombre del programa, de las
variables, procedimientos, funciones, etc.)
„ Caracteres especiales ((, ´ * / : ; = <> > <)
<).
„ Constantes.
„ Variables.
„ Expresiones.
„ Instrucciones.
Ot
Otros elementos
l t ded un programa
Además de estos elementos básicos, existen otros
elementos que forman parte de los programas,
cuya comprensión y funcionamiento será vital
para el correcto diseño de un algoritmo y su
codificación. Estos elementos son:
„ bucles: en programación es una sentencia que
se realiza repetidas veces. Un bucle se utiliza
para hacer una acción repetida sin tener que
repetir
ti varias
i veces ell mismo
i código,
ódi lo
l que
ahorra tiempo, deja el código más claro y facilita
su modificación en el futuro.
Ot
Otros elementos
l t ded un programa
„ contadores: es una variable que cuenta la cantidad de
veces que se ejecuta. Se suele denominar contador
cuando el incremento de la variable es de 1 en 1, pero
no tiene por que ser así obligatoriamente.
obligatoriamente La sintaxis
genérica sería: variable = variable + 1.
„ acumuladores: La diferencia entre acumuladores y
contadores es que los acumuladores se incrementan
con cualquier cantidad, como por ejemplo el total de una
factura, mientras que los contadores se incrementan
siempre en la misma cantidad
cantidad, normalmente 1 1.
„ estructuras: secuenciales, selección y repetición.
5. Datos, tipos de datos y
operaciones primitivas
„ Un dato es la expresión general que describe
los objetos con los cuales opera una
computadora. La mayoría de las computadoras
pueden trabajar con varios tipos de datos.
„ En el proceso de resolución de problemas el
diseño de la estructura de datos es tan
importante como el diseño del algoritmo y del
programa.
„ A nivel de máquina, un dato es una secuencia
de bits (ceros y unos).
Ti
Tipos d
de d
datos
t
5 1 Ti
5.1 Tipos d
de d
datos
t
Existen
E i t dos
d tipos
ti d
de d
datos:
t simples
i l ((sin
i
estructura) y compuestos (estructurados).
„ Datos Simples: son datos que se
representan con un único valor.
„ Datos Estructurados: son datos que
pueden almacenar uno,, dos o n valores,,
p
bajo el mismo identificador.
5 1 Ti
5.1 Tipos d
de d
datos
t
„ Tipos de datos simples:
… Numéricos: entero (integer) y real (real).
… Lógicos (boolean).
… Carácter (char).
(char)
… Cadena de caracteres (string).
D t N
Datos Numéricos
éi
Es el conjunto de los valores numéricos y pueden
representarse en dos formas distintas:
„ Tipo numérico entero (integer): es un subconjunto finito
de los números enteros. Los enteros son números
completos, no tiene componentes fraccionarios o
decimales y pueden ser negativos o positivos
positivos. Los
números enteros máximos y mínimos de una
computadora suelen ser -32768 a +32767. Los números
enteros fuera de este rango no se suelen representar
como entero, sino como reales, aunque en algunos
lenguajes como Fortran o Turbo Pascal existe el tipo de
dato entero largo cuyo rango es -2.147.483.648
2 147 483 648 a
2.147.483.647.
D t N
Datos Numéricos
éi
„ Tipo numérico real (real): el tipo real consiste en
un subconjunto de los números reales y siempre
tiene un p
punto decimal y ppueden ser p positivos o
negativos.
Rango 2.9 x 10-39 a 1.7 x 1038.
En aplicaciones científicas se requiere de la
notación exponencial o científica para números
muy grandes o muy pequeños. Ejemplos:
367.520.100.000.000.000.000 se utiliza
3.675201 x 1020
0 0000000000302579 se utiliza 3
0.0000000000302579 02579 x 10-11
3.02579
D t ló
Datos lógicos:
i (b l
(booleano)
)
Es aquel dato que sólo puede tomar uno de
dos p posibles valores: verdadero ((true)) o
falso (false).
Se utiliza para representar las alternativas
si/no a determinadas condiciones. Por
ejemplo cuando se pide si un valor entero
ejemplo,
es par, la respuesta será verdadera o
falsa según sea el caso
caso.
D t ti
Datos tipo carácter
á t y ti
tipo cadena
d
El tipo carácter es el conjunto finito y ordenado de
caracteres que la computadora reconoce. Un
dato tipo carácter contiene un solo carácter
carácter. Los
caracteres que reconoce una computadora no
es estándar,, sin embargog la mayoría
y reconoce
los siguientes caracteres alfabéticos y
numéricos:
„ Caracteres
C t alfabéticos:
lf béti (A
(A,B,C,…Z)
B C Z) ((a,b,c,…,z)
b )
„ Caracteres numéricos: (0,1,2,3,….,9)
„ Caracteres especiales: (+ , - , * , / , ^ , . , ; , < , >
, $, …)
D t ti
Datos tipo carácter
á t y ti
tipo cadena
d

Una cadena de caracteres (string) es una


sucesión de caracteres qque se encuentran
delimitados por una comilla.
La longitud de una cadena de caracteres es
el número de ellos comprendidos entre los
limitadores Ej.
limitadores. Ej ´Esta
Esta es una clase de
programación digital´.
6 C
6. Constantes
t t yV Variables
i bl
„ Constantes: son los valores que no
cambian durante la ejecución
j del
programa.
„ Variables: son los valores que si cambian
en la ejecución del programa.
„ Tipos de constantes y variables:
numéricas (enteros y reales), caracteres,
lógicas y de cadenas
cadenas.
6 C
6. Constantes
t t yV Variables
i bl
„ Una variable que es de cierto tipo puede
tomar únicamente valores de ese tipo. Si
se intenta asignar un valor que no
corresponda al tipo de dato de la variable,
se prod
producirá
cirá un
n error de tipo
tipo.
„ Una variable se identifica por los
siguientes atributos: nombre que se le
asigna y tipo que describe el uso de la
variable.
variable
7 E
7. Expresiones
i
Las expresiones
L i con combinaciones
bi i d
de constantes,
t t
variables, símbolos de operación, paréntesis y
nombres de funciones especiales.
Constan de operandos y operadores.
g sea el tipo
Según p de objetos
j q
que manipula,
p , las
expresiones se clasifican en:
„ aritméticas: resultado es de tipo numérico.
„ lógicas: resultado de tipo lógico.
„ de relación: resultado de tipo lógico.
71E
7.1 Expresiones
i aritméticas
it éti

Son análogas a las fórmulas matemáticas.


Las variables y constantes son numéricas
(tipo real o entero) y las operaciones son
las aritméticas:
+ suma, - resta, * multiplicación, / división,
^ elevar a una ponencia
ponencia, DIV cociente de la
división entera, MOD módulo o resto de la
división entera
entera.
71E
7.1 Expresiones
i aritméticas
it éti

„ Operadores aritméticos: + - * / ^ y las


palabras reservadas DIV y MOD.
p
„ Los operadores se utilizan de igual forma
que en matemáticas: A*B
A B, C/8
C/8.
„ Al igual que en matemáticas el signo
menos juega un doble papel
papel, como resta
en A-B y como negación –A.
71E
7.1 Expresiones
i aritméticas
it éti
Operadores DIV y MOD
„ Solo se pueden usar cuando los operandos son
expresiones
p enteras.
… MOD: determina el resto de una división entera.
… DIV: determina el cociente de una división entera.

„ Ejemplo:
„ 15 MOD 6 toma el valor 3.
„ 15 DIV 6 toma el valor 2.
15 |6
resto→
t 3 2 ←cociente
i t
Reglas de prioridad
„ Las expresiones que tiene dos o más
operandos, requieren unas reglas
matemáticas que permitan determinar el
orden
d ded llas operaciones,
i di
dichas
h reglas
l
se denominan reglas de prioridad o
precedencia y son:
1. las operaciones que están encerradas
entre paréntesis se evalúan primero
primero. Si
existen diferentes paréntesis anidados,
las expresiones más internas se evalúan
primero.
R l d
Reglas de prioridad
i id d
2. Las operaciones aritméticas dentro de
una expresión,
p , suelen seguir
g el siguiente
g
orden de prioridad:
… operador de potencia (^)
( )
… operadores * , /
… operadores DIV y MOD
… operadores + , -
R l d
Reglas de prioridad
i id d
3. En caso de coincidir varios operadores
de igual
g p
prioridad en una expresión
p o
subexpresión encerrada entre paréntesis,
el orden de pprioridad en este caso es de
izquierda a derecha.
R l d
Reglas de prioridad
i id d
Ejemplos: Obtener el resultado de las siguientes
expresiones:
R l d
Reglas de prioridad
i id d
Convertir en expresiones aritméticas algorítmicas
las siguientes expresiones algebraicas:
7.2 Expresiones lógicas (booleanas)

„ Su valor siempre es verdadero o falso.


Recuerde que existen dos constantes
lógicas: verdadero (true) y falso (false) y
que las variables lógicas pueden tomar
sólo estos dos valores.
alores
„ En esencia una expresión lógica es una
expresión que solo puede tomar dos
valores: verdadero y falso.
7.2 Expresiones lógicas (booleanas)

„ Las expresiones lógicas se forman


combinando constantes lógicas,
g , variables
lógicas y otras expresiones lógicas, Se
utilizan los operadores
p lógicos
g not,, and y
or, y los operadores relacionales (de
p
relación o comparación) ) =,, <,, >,, <=,, >=,,
<>.
7.2 Expresiones lógicas (booleanas)

„ Operadores lógicos:
Los operadores lógicos o booleanos básicos
son not (no), and (y) y or (o).
En la siguiente tabla se resume el
funcionamiento de dichos operadores:
7.2 Expresiones lógicas (booleanas)

Operador lógico Expresión lógica Significado

no (not) no p (not p) Negación de p

y (and) p y q (p and q) Conjunción de p y q

o (or) p o q (p or q) Disyunción de p y q
7.2 Expresiones lógicas (booleanas)

„ Las definiciones de las operaciones no, y, o se


resumen en unas tablas conocidas como tablas
de la verdad.
„ NOT: not (3>8) se evalúa como verdadero, ya
que (3>8)
(3 8) se evalúa
lú como ffalso.
l
a not a

Verdadero Falso

Falso Verdadero
7.2 Expresiones lógicas (booleanas)

„ AND: (a y b) es
verdadera sólo si a y a b a and b
b son verdaderas.
Verdadero Verdadero Verdadero

Verdadero Falso Falso

Falso Verdadero Falso

F l
Falso F l
Falso F l
Falso
7.2 Expresiones lógicas (booleanas)

„ OR: (a o b) es
verdadera cuando a, a b a or b
b o ambas son
verdaderas Verdadero Verdadero Verdadero

Verdadero Falso Verdadero

Falso Verdadero Verdadero

Falso Falso Falso


7.2 Expresiones lógicas (booleanas)

„ En las expresiones lógicas se pueden


mezclar operadores
p de relación y lógicos.
g
Por ejemplo:
… (1
(1<5)
5) y (5<10)
(5 10) es verdadera
… (5 > 10) o (‘A’ < ‘B’) es verdadera
7.2 Expresiones lógicas (booleanas)

„ Prioridad de los Operadores Lógicos


Lenguaje Pascal:
Operador lógico Expresión lógica
no (not) Más alta (1ra. Ejecutada)
^ potencia
/, *, y (and)
div mod
div,
+, -, o (or)
<, >, =, <=, >=, <> Más baja (última ejecutada)

Al igual que en las expresiones aritméticas, los paréntesis se pueden


utilizar y tendrán prioridad sobre cualquier operación.
7.3 Expresiones de relación

„ Los operadores relacionales o de relación


se p
pueden aplicar
p a cualquiera
q de los
cuatro tipos de datos estándar: enteros,
real,, lógico,
g , carácter.
„ Los operadores de relación sirven para
expresar las condiciones lógicas en los
algoritmos.
7.3 Expresiones de relación

„ El formato general para las comparaciones es:

expresión 1 (operador de relación) expresión 2

y el resultado de la operación será verdadero o


falso.
Así por ejemplo, si A=10 y B = 7, entonces A > B
es verdadero, mientras que (A-1) < (B-4) es
falso.
7.3 Expresiones de relación

„ Los operadores de relación son:

Operador Significado
< Menor que
> M
Mayor que
= Igual que
<= g que
Menor o igual q
>= Mayor o igual que
<> Diferente que
7.3 Expresiones de relación

La aplicación a valores numéricos es


evidente:
Expresión lógica Resultado
„ 3<6 verdadero
„ 0>1 falso
„ 4=2
4 2 falso
„ 9>=9 verdadero
7.3 Expresiones de relación

„ Si se utilizan los operadores relacionales = y <>


para comparar cantidades numéricas, es
importante recordar que la mayoría de los
valores reales no pueden ser almacenados
exactamente. Ej: (1.0/3.0)*3.0 = 1.0
teóricamente es verdadera yy, sin embargo
embargo, al
realizar el cálculo en una computadora se puede
obtener 0.99999 y en consecuencia el resultado
es falso
falso, esto se debe a la precisión limitada de
la aritmética real en las computadoras.
7.3 Expresiones de relación

„ Comparaciones con datos tipo carácter: se


requiere una secuencia de ordenación de los
caracteres similar al orden creciente o
decreciente. Esta ordenación suele ser
alfabética,, tanto para
p mayúsculas
y como
minúsculas, y numéricas, considerándolas de
modo independiente. Pero si se consideran
caracteres mixtos
mixtos, se debe recurrir a un código
normalizado como es el ASCII.
http://www.ascii.cl/es/
7.3 Expresiones de relación

„ Estos códigos normalizados son:


… Los caracteres especiales #, %, $, (, ), +, -, /, exigen
la consulta del código de ordenación de su
computadora (normalmente es el ASCII).
… Los valores de los caracteres que representan a los
dígitos
g están en su orden natural. Esto es 0 < 1,, 1 <
2, 2 < 3, …, 8 < 9.
… Las letras mayúsculas A a Z siguen el orden
alfabético ((A < B,, C < F,, etc.).
)
… Si existen letras minúsculas siguen el mismo criterio
alfabético (a < b, c < h, etc.).
7.3 Expresiones de relación

„ Cuando se utilizan los operadores de


relación con valores lógicos,
g , la constante
false es menor que la constante true, por
definición: false < true;; true > false.
8 F
8. Funciones
i iinternas
t
„ Las funciones internas son operadores
especiales.
p
„ Por ejemplo, la función ln se puede utilizar
para determinar el logaritmo neperiano de
un número y la función SQRT calcula la
raíz cuadrada de un número positivo.
positivo
„ Funciones internas más usuales:
8 F
8. Funciones
i iinternas
t
Función Descripción Tipo de argumento Resultado
abs(x) Valor absoluto de x Entero o real Igual que argumento

arctan(x) Arco tangente de x Entero o real Real


cos(x) Coseno de x Entero o real Real
exp(x) Exponencial de x Entero o real Real
ln(x) Logaritmo neperiano de x Entero o real Real

log10(x) Logaritmo decimal de x Entero o real Real


round(x) Redondeo de x Real Entero

sin(x) Seno de x Entero o real Real


sqr(x) Cuadrado de x Entero o real Igual que argumento

sqrt(x) Raíz cuadrada de x Entero o real Real


trunc(x) Truncamiento de x Real Entero
9. Escritura de algoritmos/programas

Un algoritmo constará de dos componentes:


„ una cabecera: es una instrucción simple que comienza
con la palabra algoritmo
algoritmo, seguida del nombre asignado
al algoritmo completo.
„ un bloque algoritmo: es el resto del algoritmo y a su vez
constat d
de dos
d componentes t o secciones:
i
… las acciones de declaración: definen o declaran las variables y
constantes, además de los tipos de dato.
… las
l acciones
i ejecutables:
j t bl son llas acciones
i que d
debe
b ejecutar
j t lla
computadora cuando se convierta en programa al algoritmo.
Escriba los siguientes
algoritmos que:
1. Calcule la superficie de un círculo y la
longitud
g de su circunferencia.
2. Determine el salario neto semanal de un
trabajador si sabe que los impuestos
trabajador,
aplicados equivalen al 25% del salario
bruto Debe visualizar por pantalla el
bruto.
nombre del trabajador, la cantidad de
horas que trabajó en la semana
semana, los
impuestos a descontar y el salario neto.
3. Emita una factura correspondiente a la
compra
p de n unidades de un solo tipo p de
artículo. El IVA a aplicar es del 12%.
4
4. Intercambie los valores de dos variables
reales A y B.
5. Se desea determinar la cantidad de leche que produce una finca
mensualmente. Dicha cantidad depende de la edad de las vacas.
Si la vaca tiene entre 0 y 2 años produce 6 litros diarios, si tiene
entre 3 y 5 años produce 10 litros diarios, pero si tiene más de 5
años produce 4 litros diarios. La cantidad de vacas que tiene la
finca de cada tipo es un dato que varía. Escriba un algoritmo (en
pseudocódigo y diagrama de flujo), que calcule la cantidad de
leche total producida en la finca y discriminada por edad de la
vaca. Realice el análisis de entrada, proceso y salida.
6. El dueño de un galpón desea calcular la cantidad de
baldosas de 20x20 cm que debe comprar, para cubrir el
piso de su galpón rectangular y la cantidad de litros de
pintura para pintar las cuatro paredes internas, si un litro
de pintura alcanza para cubrir 3 m2. Escriba un algoritmo
que le permita a este señor hacer estos cálculos
cálculos.
Realice el análisis de entrada, proceso, salida y diseñe
el algoritmo correspondiente en pseudocódigo y
diagrama de flujo.
7. Debido a la inseguridad, en su casa deciden construir un
muro alrededor del terreno que tiene forma rectangular,
para instalar una cerca eléctrica en la parte superior del
mismo. Escriba un algoritmo que le permita a su familia
calcular: a) la longitud total del muro y b) la cantidad de
metros ded cable
bl que ddebe
b comprar, sii lla cerca consta d
de
tres líneas de cable. Realice el análisis de entrada,
proceso,, salida y diseñe el algoritmo
p g correspondiente
p en
pseudocódigo y diagrama de flujo.
Unidad 4. Lógica de
Programación
Prof. Eliana Guzmán U.
4 1 Programación Modular
4.1
Raíz

Módulo 1 Módulo 2 Módulo 3 Módulo 4

Módulo 11 Módulo 12 Módulo 31

Módulo 121 Módulo 122


4 2 Programación Estructurada
4.2
La programación estructurada significa
escribir un programa de acuerdo a las
g
siguientes reglas:
g
• El programa tiene un diseño modular.
• Los módulos son diseñados de modo
descendente.
• Cada módulo se codifica utilizando
únicamente, las tres estructuras básicas de
control: secuencial, decisión y repetición.
p
4 3 Estructuras básicas de control
4.3
El estilo de escritura de los programas es
una de las características más
sobresalientes en las técnicas de
programación.
La legibilidad de los algoritmos y
posteriormente de los programas, exige
que su diseño sea fácil de comprender y
su flujo lógico fácil de seguir.
4 3 Estructuras básicas de control
4.3
• La p
programación
g modular enseña la
descomposición de un programa en módulos
más simples de programar, y
• La
L programaciónió estructurada
d permitei lla
escritura de programas fáciles de leer y
modificar En un programa estructurado
modificar. estructurado, el flujo
lógico se gobierna por las estructuras de control
básicas:
– Secuenciales.
– Decisión (selección ó condición).
– Repetición
Repetición.
4.3.1 El flujo de control de un programa

El término flujo de control se refiere al


orden en que se ejecutan las sentencias
del programa
programa. A menos que se
especifique expresamente, el flujo normal
de control de todos los programas es el
secuencial. Este término significa que las
sentencias se ejecutan en secuencia
secuencia, una
después de la otra, en el orden en que se
sitúan dentro del programa
programa.
4.3.1 El flujo de control de un programa

Uno de los más importantes avances luego de la


aparición de los lenguajes de programación de
alto nivel a finales de los años sesenta, fue el
reconocimiento de que cualquier algoritmo, no
importa su complejidad, podía ser construido
utilizando
tili d combinaciones
bi i d
de ttres estructuras
t t d
de
control de flujo estandarizadas (secuenciales,
decisión y repetición) y una cuarta denominada
invocación o salto.
4.3.1 El flujo de control de un programa

• Las sentencias de selección se utilizan


para seleccionar cuáles sentencias se han
de ejecutar a continuación
continuación. Y son: si (if),
(if)
si-si_no (if-else) y según-sea (case-of).
• Las sentencias de repetición o iterativas
se utilizan para repetir un conjunto de
sentencias y son: mientras (while),
(while)
repita-hasta (repeat-until) y desde (for).
4.3.1 El flujo de control de un programa

• Las estructuras de decisión


decisión, repetición e
invocación de subprogramas, permiten
que el flujo secuencial del programa sea
modificado en un modo preciso y definido
con anterioridad
anterioridad.
4.3.1 El flujo de control de un programa

Hasta este momento todas las sentencias


se ejecutaban secuencialmente en el
orden en que estaban escritas en el
código fuente, es decir, en ejecución
secuencial.
secuencial
Un programa escrito de esta forma siempre
ejecutará exactamente las mismas
instrucciones o acciones.
4.3.1 El flujo de control de un programa

Normalmente los programas necesitan


alterar o modificar el flujo de control, así
en la solución de muchos problemas se
deben tomar acciones diferentes
dependiendo del valor de los datos
datos.
Ejemplos: cálculo de una superficie sólo si
las medidas de los lados son positivas
positivas, la
ejecución de una división solo si el divisor
no es cero
cero, etc
etc.
4.3.1 El flujo de control de un programa

Una bifurcación (se llama también


instrucciones de decisión, selección o de
) es un p
alternativas), punto del p
programa
g
donde el flujo de control se divide.
Se utiliza p
para decidir o seleccionar qqué
instrucciones se van a ejecutar o si no se
va a ejecutar nada, y continuar con el flujo
d control
de t l normall d
dell programa.
La decisión se realiza dependiendo de una
condición
di ió lógica
ló i dada.
d d
4 3 2 Estructura secuencial
4.3.2
Es aquella en la que una instrucción
(acción) sigue a otra en secuencia. Las
tareas se llevan a cabo de tal modo que la
salida de una es la entrada de la siguiente
y así sucesivamente hasta el final del
proceso. La estructura secuencial tiene
una sola entrada y una sola salida
salida. acción 1

acción 2

acción n
4.3.3 Estructuras de decisión,
selección
l ió o condición
di ió
• Los algoritmos tienen realmente utilidad cuando
se requiere una descripción más detallada que
una lista sencilla de instrucciones. Este es el
caso cuando existen un número de posibles
alternativas resultantes de la evaluación de una
determinada condición lógica.
• Las estructuras de decisión se utilizan para
tomar decisiones lógicas, de ahí que se suelan
denominar también estructuras de selección o
alternativas.
alternativas
4.3.3 Estructuras de decisión,
selección
l ió o condición
di ió
• En las estructuras de decisión se evalúa
una condición lógica y en función del
j
resultado de la misma, se ejecutará un
conjunto de instrucciones u otro(s).
• Las condiciones se especifican
p usando
expresiones lógicas. La representación de
una estructura de decisión se hace con
palabras
l b en pseudocódigo
d ódi ((si, i entonces,
t
si_no), o con una figura en forma de
rombo en los diagramas de flujo
flujo.
4.3.3 Estructuras de decisión,
selección
l ió o condición
di ió
Las estructuras de decisión pueden ser:
• simples:
– En pseudocódigo: si
si-entonces.
entonces.
– En Turbo Pascal: if-then.
• dobles:
– En pseudocódigo: si-entonces-sino.
– En Turbo Pascal: if-then-else.
• múltiples:
– En pseudocódigo: según-sea.
– En Turbo Pascal: Case-of.
4.3.3 Estructuras de decisión,
selección
l ió o condición
di ió
Decisión simple (si
(si-entonces
entonces / ifif-then)
then)
• La estructura de decisión simple, si-
entonces, ejecuta una determinada
acción cuando se cumple una condición
g
lógica. En esta estructura se evalúa la
condición y
– si la condición es verdadera, entonces
ejecuta
j una o varias
i acciones.
i
– si la condición es falsa, entonces no hace
nada.
nada
4.3.3 Estructuras de decisión,
selección
l ió o condición
di ió
• Pseudocódigo: Turbo Pascal:
si (condición) entonces if (condición) then
<acción 1> begin
<acción 2> sentencias
.
. end;
<acción n>
fin_si
4.3.3 Estructuras de decisión,
selección
l ió o condición
di ió
• Representación en Diagrama de Flujo:

falsa
condición
lógica

verdadera

acciones
4.3.3 Estructuras de decisión,
selección
l ió o condición
di ió
Decisión doble (si
(si-entonces-sino
entonces sino / if
if-then-else)
then else)
• La estructura de decisión simple es muy limitada
y normalmente se necesitará una estructura q que
permita elegir entre dos opciones o alternativas
posibles, en función del cumplimiento o no de
una determinada condición lógica. Si la
condición lógica es verdadera se ejecuta un
conjunto de acciones y si es falsa se ejecutará
otro conjunto diferente de acciones.
4.3.3 Estructuras de decisión,
selección
l ió o condición
di ió
Pseudocódigo:
g Turbo Pascal:
si (condición) entonces if (condición) then
acciones S1 g
begin
si_no acciones S1
acciones S2 end
fin_si else
begin
acciones
i S2
end;
4.3.3 Estructuras de decisión,
selección
l ió o condición
di ió
• Representación en Diagrama de Flujo:

verdadera falsa
condición
lógica

acciones S1 acciones S2
4.3.3 Estructuras de decisión,
selección o condición
Decisión múltiple (según_sea,
(según sea case)
En la práctica es posible que existan más de
dos alternativas posibles para elegir
elegir.
Cuando se tienen muchas alternativas
pueden existir serios problemas en la
escritura y legibilidad de los algoritmos
utilizando estructuras de decisión simples
simples,
dobles o anidadas.
4.3.3 Estructuras de decisión,
selección o condición
La estructura de decisión múltiple evaluará
una variable (tipo entero, caracter o
lógica) que podrá tomar n valores
distintos.
Según se elija uno de estos valores de la
variable, se realizará una de las n
acciones o lo que es igual
acciones, igual, el flujo de
control del algoritmo seguirá un
determinado camino entre los n posibles
posibles.
4.3.3 Estructuras de decisión,
selección o condición
• Dentro de cada opción se pueden ejecutar
una o varias acciones.
• Los valores que toma la variable E no
tienen porque ser consecutivos ni únicos,
se pueden considerar rangos de
constantes numéricas o de caracteres
(usando dos puntos
puntos. Ej: ‘A’
A .. ‘Z’
Z ó1
1..10).
10)
Pseudocódigo: Pascal:

según_sea E hacer case E of


e1: acción S11 e1: acción1
acción S12 e2: acción 2
. end;
. ó:
acción S1a case E of
e2: acción S21 e1: acción1
acción S22 e2: acción2
. else
. acción n
acción S2b end;
.
.
en: acción Sn1
acción Sn2
. donde:
. E: es una variable de tipo entero, carácter o lógico.
acción: son instrucciones sencillas o compuestas (uso de begin y end)
acción Snx
ei: son los posibles valores o rango de valores que puede tomar la variable E.
si_no
acción
ió S
fin_según_sea
Representación en Diagrama de Flujo:

si_no

e1 en
Variable

e2 e3

acciones 1 acciones 2 acciones 3 acciones n acciones n+1


4.3.4 Estructuras de decisión
anidadas
Las estructuras de decisión simple (si-entonces) y doble
(si-entonces-si_no), implican la selección de una de dos
alternativas.
Es posible utilizar la instrucción si para diseñar estructuras
de decisión que contengan más de dos alternativas. En
este caso, una estructura si-entonces
si entonces puede contener
otra estructura si-entonces, y esta estructura puede
contener a su vez a otra y así sucesivamente cualquier
cantidad de veces
veces, a su vez dentro de cada estructura
pueden existir diferentes acciones.
Las estructuras si interiores a otras estructuras si se
denominan anidadas.
4.3.4 Estructuras de decisión,
anidadas
Si <condición
condición lógica 1>
1 entonces
Si <condición lógica 2> entonces
Acciones
Fin_si
Fin si
Fin_si

Se recomienda usar indexación para que el


algoritmo sea más legible.
4.3.4 Estructuras de decisión,
anidadas
Una estructura de selección de decisiones múltiples puede ser construida utilizando una
estructura
t t sii con este
t formato:
f t

Si <condición lógica 1> entonces


<acciones>
si_no
Si <condición lógica 2> entonces
Acciones
Si_no
Si <condición lógica 3> entonces
Acciones
Si_no
Si
.
.
Fin si
Fin_si
Fin_si
Fin_si
Diagrama de Flujo de estructuras de decisión anidadas:

Cond. F
lógica
1

V
acciones Cond. F
lógica
2

V
acciones

Cond.
lógica
F
3

V
acciones

acciones
Ejemplos
Escriba los siguientes algoritmos que:
Ejemplo
j p 1: Determine si un número es entero o no.
Ejemplo 2: Lea dos caracteres e indique si están en orden
alfabético.
Ejemplo
j p 3: Lea un carácter e indiqueq si está o no
comprendido entre las letras I y M ambas inclusive.
Ejemplo 4: permita emitir una factura, correspondiente a la
compra de un artículo del que se adquieren una o varias
unidades. El IVA es del 12% y si el monto bruto de la
factura es mayor a Bs. 1000, se hará un descuento del
5%. Debe mostrar por pantalla los datos del cliente que
exige el SENIAT (Nombre, CI y dirección).
Ejemplo
j p 5: Escriba los nombres de los días de la semana
en función del valor de una variable DIA introducida por
teclado (usando una estructura de decisión múltiple).
Ejemplos
• Ejemplo
j p 6: Convierta las calificaciones alfabéticas A,, B,,
C, D, y E a calificaciones numéricas 8, 7, 6, 5 y 4
respectivamente (usando una estructura de decisión
múltiple).
múltiple)
• Ejemplo 7: Determine el precio del pasaje de ida y vuelta
en ferrocarril, el cual depende de la distancia a recorrer
y del número de días de estancia. Si la cantidad de días
es superior a 7 y la distancia superior a 800 km el billete
tiene un descuento del 30 por ciento
ciento. El precio por km es
de Bs. 50.
Además, a las personas de la tercera edad (65 o más
años), se les hará un descuento del 8%.
Ejemplos
Ejemplo
j p 8: Un ángulog se considera agudo
g si es menor de
90 grados, obtuso si es mayor de 90 grados y recto si es
igual a 90 grados. Utilizando esta información, escribir
un algoritmo que acepte un ángulo en grados e indique
el tipo de ángulo correspondiente a los grados
introducidos.
Ejemplo 9: Los empleados de una fábrica trabajan en dos
turnos: diurno y nocturno. Se desea calcular el salario
diario de acuerdo a las siguientes condiciones:
a. la tarifa de las horas diurnas es de Bs. 20.
b. la tarifa de las horas nocturnas es de Bs. 35.
c. los
l dídías ddomingo,
i lla ttarifa
if se iincrementará
t á en B
Bs. 10 ell tturno
diurno y Bs. 18 el turno nocturno.
Ejemplos
• Ejemplo 10: resuelva una ecuación de 2do.
Grado, incluyendo el caso de raíces imaginarias.
• Ejemplo 11: Lea tres números X, Y, Z y muestre
en pantalla el mayor valor, suponiendo que los
tres valores son diferentes
diferentes.
• Ejemplo 12: seleccione la operación aritmética a
ejecutar entre dos números dependiendo del valor
de una variable denominada selecc_op de tipo
caracter.
• Ejemplo 13: determine si tres puntos en el plano
XY forman un triángulo.
4 3 4 Estructuras de Repetición
4.3.4
• Las computadoras están especialmente
diseñadas para todas aquellas
aplicaciones que requieren una operación
o conjunto de ellas que deban repetirse
varias veces.
veces
• Un tipo muy importante de estructura, es
el algoritmo necesario para repetir una o
varias acciones, un número determinado
de veces.
veces
4 3 4 Estructuras de Repetición
4.3.4
• Bucles: son las estructuras que repiten
una secuencia de instrucciones, una
cantidad determinada de veces
veces.

• It
Iteración:
ió es la
l acción
ió dde repetir
ti una vez,
la ejecución de una instrucción.
4 3 4 Estructuras de Repetición
4.3.4
Las dos principales preguntas a realizarse
en el diseño de un bucle son:
1 ¿qué instrucciones se quieren repetir?
1.¿qué
2.¿cuántas veces se deben repetir?
4 3 4 Estructuras de Repetición
4.3.4
Para detener la ejecución de los bucles se
utiliza una condición lógica de parada.
Dicha condición puede estar al final o al
principio del bucle, y siempre debe existir
en el interior del bucle una instrucción que
modifique dicha condición en cada
repetición que se realice
realice.
Tipos de estructuras de repetición

Las estructuras de repetición


p pueden ser de
p
dos tipos:
1 Condicionales:
1.
1. Mientras (while).
2 Repetir (repeat).
2. (repeat)
2. Indexadas o indizadas:
1 Desde
1. D d (f
(for).
)
Estructuras de repetición condicionales

Las estructuras de repetición condicionales,


condicionales
dependen de la evaluación de una
condición lógica de parada
parada. La cual se
evalúa tan pronto se encuentra en el
algoritmo puede estar al inicio de la
algoritmo,
estructura (mientras) o al final (repetir).
Estructuras de repetición indexadas o
i di d
indizadas
Las estructuras de repetición indexadas o
indizadas, dependen de un índice, el cual
es una variable tipo entero que controla la
cantidad de veces que se repite el bucle.
Para usarlas se debe conocer de antemano
antemano,
la cantidad de veces que se quiere repetir
el bucle
bucle.
Estructura de Repetición: Mientras
• Es aquella en la que el cuerpo del bucle se
repite, siempre y cuando, se evalúe la condición
lógica de parada como verdadera.
• En esta estructura la condición lógica de parada
se encuentra al inicio.
Estructura de Repetición: Mientras
• Cuando se ejecuta la estructura mientras, lo
primero que sucede es que se evalúa la
condición lógica, si es falsa no se toma ninguna
acción y el programa continúa ejecutando la
siguiente instrucción, pero si es verdadera, se
ejecuta
j t ell cuerpo d
dell b
bucle,
l d después
é dde llo cuall
se evalúa de nuevo la condición lógica. Este
proceso de ejecuta una y otra vez mientras la
condición lógica sea verdadera.
Estructura de Repetición: Mientras
• En resumen
resumen, se repite el bucle cuando la
condición lógica es verdadera, por lo
tanto finaliza la repetición cuando la
tanto,
condición se hace falsa.
Estructura de Repetición: Mientras
Pseudocódigo:
mientras (condición lógica) hacer
acción
ió 1
acción 2
. Bucle
.
acción n
fi
fin_mientras
i t
Estructura de Repetición: Mientras
Diagrama de flujo:

F
Condición
lógica

acciones
Estructura de Repetición: Mientras
Una estructura de repetición mientras puede
generar un:
• Bucle de Repetición Cero:
Como en esta estructura lo primero que se
h
hace es lla evaluación
l ió dde lla condición
di ió
lógica, si se evalúa falsa, entonces el
cuerpo del
d lb bucle
l nunca se ejecuta.
j t
Estructura de Repetición: Mientras
Bucle infinito:
• Algunos bucles no finalizan la repetición, por
error en su diseño. Esto q quiere decir q
que un
bucle no se termina nunca, porque la condición
lógica siempre se evalúa como verdadera y no
se detiene su ejecución.
• Un bucle que nunca se termina se denomina
b l iinfinito
bucle fi i o sin
i fifin. L
Los b
bucles
l sini fifin no
intencionados son perjudiciales para la
programación y deben evitarse siempre
siempre.
Estructura de Repetición: Mientras
Por ejemplo,
j p , el siguiente
g bucle q que visualiza el interés
producido por un capital a las tasas de interés
comprendidas entre 10% y 20%.
l
leer (
(capital)
it l)
tasa ← 10
mientras (tasa <> 20) hacer
interés ← (tasa*capital)/100
escribir(‘interés
( producido’,, interés))
p
tasa ← tasa + 2
fin_mientras
escribir(capital)
Estructura de Repetición: Mientras
Los valores sucesivos de la variable tasa serán
10, 12, 14, 16, 18, 20 de modo que al tomar tasa
el valor 20 se detendrá el bucle y se escribirá el
mensaje continuación. Si se usa la siguiente
sentencia:
tasa ← tasa + 3
La variable tasa nunca tomará el valor de 20 y el
b l sería
bucle í iinfinito,
fi i lla sentencia
i correcta para
terminar el bucle sería: tasa < 20 ó tasa <= 20
Estructura de Repetición: Mientras
Regla Práctica:
Las condiciones lógicas en las estructuras
de repetición,
repetición es conveniente que sean
del tipo mayor que o menor que, en lugar
de pruebas de igualdad o desigualdad
desigualdad.
Estructura de Repetición: Mientras
Formas de terminar la repetición de un
bucle:
Si el algoritmo está leyendo una lista de
valores con un bucle mientras, se debe
incluir algún tipo de mecanismo para
terminar el bucle. Existen tres métodos
típicos para terminar un bucle de entrada
de datos:
Estructura de Repetición: Mientras
1 Conocer de antemano la cantidad de
1.
veces que se va a repetir el bucle
(cantidad de datos de entrada)
entrada).
2. Preguntar antes de cada repetición.
3 Usar
3. U un valor
l centinela
ti l dde entrada.
t d
1. Conocer de antemano la cantidad de veces que se va a
repetir el bucle (cantidad de datos de entrada)
entrada).
Pseudocódigo:

escribir(‘Introduzca la cantidad de números que desea sumar: ’)


leer(n)
total ← n
suma ← 0
mientras (total > 0) hacer
escribir (‘Introduzca el número que desea sumar: ‘)
leer(numero)
suma ← suma + numero
total ← total - 1
fin_mientras
escribir(‘La
escribir( La suma de los ’,N,
N ‘números
números es: ‘,suma)
suma)
2. Preguntar antes de cada repetición: este método no es
el más apropiado para gran cantidad de datos de
entrada, pero es útil cuando no se conoce la cantidad de
veces que desea repetir el bucle.
Pseudocódigo:
Suma ← 0
resp ← ‘s’
mientras (resp=’S’) ó (resp=’s’) hacer
escribir(‘Introduzca
escribir( Introduzca un número: ‘))
leer(numero)
suma ← suma + numero
escribir(‘Existen más números s/n: ’)
leer(resp)
fin_mientras
Este método a veces es aceptable y es muy
útil en ciertas ocasiones, pero suele ser
tedioso para listas grandes
grandes, es este caso
es preferible incluir una señal de parada.
3. Usar un valor centinela de entrada: es el
método más correcto para terminar un bucle
que lee una lista de valores.
Un valor centinela es un valor especial usado
para indicar el final de una lista de datos.
Un valor centinela no es un valor válido de
entrada, por eso termina la ejecución del
bucle.
Si la lista de datos son números positivos, un
valor centinela puede ser un número
negativo que indique el final de la lista:
Pseudocódigo:

suma ← 0
escribir(‘Introduzca un número: ‘)
leer(numero)
mientras (numero >= 0) hacer
suma ← suma + numero
escribir(‘Introduzca un número: ‘)
leer(numero)
fin_mientras
escribir(suma)
Observe que el último número leído de la
lista no se añade a la suma si es negativo,
ya que se sale del bucle
bucle, además cuando
se usa un valor centinela, éste debe
leerse al final del bucle y se invierte el
orden de las instrucciones de lectura y
suma para evitar realizar la suma del valor
centinela.
Ejemplos
1. Un profesor de cálculo 10 tiene las notas del
primer parcial de los n estudiantes que
presentaron
t dicho
di h examen. E Escriba
ib un
algoritmo que le permita a este profesor
conocer:
a) La cantidad y el porcentaje de estudiantes que
aprobaron el examen.
b) La cantidad de estudiantes que sacaron más de 16
puntos.
c)) La
L mayor notat obtenida
bt id en estet examen.
d) El promedio de las notas obtenidas en este examen.
2 Escriba un algoritmo que calcule cuántos
2.
años tarda en duplicarse un capital
depositado en un banco al 5% de interés
anual.
3. Escriba un algoritmo que calcule el
aumento t de
d sueldo
ld mensual,l dde cada
d uno
de los empleados de una empresa y el
t t l de
total d la
l nómina
ó i d de ese mes con ell
aumento.
Si un empleado gana menos de Bs. 2600
el aumento será del 15% y si gana Bs.
2600 ó más el aumento es del 12%.
Debe mostrar p por p
pantalla el nombre y el
sueldo con aumento de cada trabajador.
4. En la aduana del aeropuerto de
M i
Maiquetía,
tí se quiere
i tener
t un sistema
i t de
d
control para un vuelo que aterriza con
pasajeros.
j E
Escriba
ib un algoritmo
l it que lle
indique al agente de aduana:
a) La cantidad de extranjeros que viajaban en
dicho vuelo.
b) La edad promedio de los pasajeros
extranjeros y la de los venezolanos.
c)) La
L cantidad
tid d d
de niños
iñ ((menores dde 12 años)
ñ )
que viajaban en dicho vuelo.
d) La
L cantidad
tid d d
de pasajeros
j que viajaban
i j b con
una mascota.
5 Se realiza una encuesta a n personas
5.
que viven en la ciudad de Mérida. Escriba
un algoritmo que le permita determinar:
a) El peso y estatura promedio de la muestra.
b) El peso promedio
di d
de llas mujeres
j
encuestadas.
c) Cantidad de hombres que miden 1 1.70
70 m
m. y
tienen un peso mayor a 80 Kgr.
d) El menor registro de estatura de la muestra
muestra.
Hasta aquí es la materia del 2do examen
parcial.
Estructura de Repetición: Repetir
En la estructura mientras si el valor de la
condición lógica es inicialmente falso, el
cuerpo del bucle no se ejecutará
ejecutará, por ello
se necesitan otros tipos de estructuras de
repetición.
repetición
Existen muchas situaciones en las que se
desea que un bucle se ejecute al menos
una vez, antes de comprobar la condición
lógica de repetición
repetición.
Estructura de Repetición: Repetir
La estructura repetir (repeat) se ejecuta hasta
que se cumpla una condición determinada
que se comprueba
q p al final del bucle.
El bucle repetir-hasta_que, se repite cuando la
condición lógica se evalúa como falsa, justo
lo opuesto a la sentencia mientras, por lo
tanto,, se detiene la repetición
p cuando la
condición lógica se hace verdadera.
Estructura de Repetición: Repetir
Pseudocódigo:
repetir
acción 1
acción 2
.
.
acción n
hasta_que (condición lógica)
Estructura de Repetición: Repetir
Diagrama de flujo:
acciones

falsa
condición 
ló i
lógica

verdadera

Con una estructura repetir el cuerpo del bucle se ejecuta siempre por lo menos
una vez, a continuación se evalúa la condición lógica, si es falsa el cuerpo
del bucle se repite, se evalúa de nuevo la condición, si es verdadera el
bucle termina y el programa sigue en la siguiente instrucción.
Diferencias entre las estructuras
mientras
i t y repetir
ti
• En la estructura mientras la condición
lógica se evalúa al inicio, en la estructura
repetir dicha condición se encuentra al
final.
• La estructura mientras termina cuando la
condición es falsa, en cambio la estructura
repetir termina cuando la condición es
verdadera.
Diferencias entre las estructuras
mientras
i t y repetir
ti
• En la estructura repetir el cuerpo del bucle
se ejecuta siempre al menos una vez, por
el contrario
contrario, la estructura mientras es más
general y permite la posibilidad de que el
bucle no se ejecute nunca
nunca.
• Para usar la estructura repetir tiene que
estar seguro de que el cuerpo del bucle
bucle,
bajo cualquier circunstancia, se ejecutará
al menos una vezvez.
Ejemplo 1: Escribir los números del 1 al 100.

algoritmo
g escribir_numeros
var
entero: num
inicio
num ← 1
repetir
escribir(num)
num ← num + 1
hasta que num > 100
hasta_que
fin
Ejemplo 2: Validación de entrada de datos. Leer
los números correspondientes a los meses del
año, entradas válidas 1-12, rechazar cualquier
otra entrada.
algoritmo validar_mes
var
entero: mes
inicio
repetir
escribir(‘Introduzca el número correspondiente a un mes: ’)
leer(mes)
si ((mes < 1)) o ((mes > 12)) entonces
escribir(‘Introdujo un valor que no es válido para un mes’)
fin_si
hasta que (mes >= 1) y (mes <= 12)
hasta_que
fin
Estructura de Repetición: Desde
Esta estructura de repetición
repetición, es del tipo
indexada o indizada.
En muchas ocasiones se conoce de
antemano el número de veces que se
desean ejecutar las acciones de un bucle bucle.
En estos casos, en el que el número de
iteraciones es fijo
fijo, se debe usar la
estructura desde ó para (for).
Estructura de Repetición: Desde
La estructura desde ejecuta las acciones del
cuerpo del bucle un número dado de
veces y de modo automático controla el
veces,
número de iteraciones o pasos a través
del cuerpo del bucle
bucle.
Estructura de Repetición: Desde
La estructura desde comienza con un valor inicial
de la variable índice y las acciones del bucle se
ejecutan, a menos que el valor inicial sea mayor
que el valor final.
La variable índice se incrementa en uno y si este
nuevo valor no excede al final, se ejecutan de
nuevo las acciones. Por consiguiente, las
acciones específicas en el bucle se ejecutan
para cada valor de la variable índice desde el
valor inicial hasta el valor final con el incremento
de uno en uno.
Estructura de Repetición: Desde
Pseudocódigo:
desde i ← vi hasta vf hacer
acciones
i
.
.
fin desde
fin_desde
Estructura de Repetición: Desde
Diagrama de flujo:
Calcular valor 
inicial y final

Fijar la variable 
índice al valor 
inicial

variable índice  verdadero
> valor final

falso

acciones

Incrementar 
variable índice
Estructura de Repetición: Desde
El incremento de la variable índice siempre
es 1 si no se indica expresamente lo
contrario.
contrario
Turbo Pascal solo admite incrementos de 1:
tanto negativos como positivos
positivos.
La variable índice o de control normalmente
seráádde titipo entero
t y es normall emplear
l
letras como I, J, K.
Estructura de Repetición: Desde
Si el valor inicial de la variable índice es
menor que el valor final, los incrementos
deben ser positivos,
positivos ya que en caso
contrario la secuencia de acciones no se
ejecutaría.
ejecutaría
De igual modo si el valor inicial es mayor
que el valor final
final, el incremento es
negativo, es decir un decremento.
Estructura de Repetición: Desde
desde i ← 20 hasta 10 hacer desde i ← 20 hasta 10 decremento 1 hacer
acciones acciones
fin_desde fin_desde

El pseudocódigo de la izquierda
izquierda, no se ejecutaría ya que el valor inicial es mayor que el
valor final, se supone un incremento positivo de 1 y se producirá un error. El
pseudocódigo correcto sería el de la derecha.
Estructuras de repetición anidadas
Las reglas para construir estructuras de
repetición anidadas son:
• La estructura interna debe estar incluida
totalmente dentro de la estructura externa
y,
• No puede existir solapamiento.
Estructuras de repetición anidadas
Las variables índice o de control de los
bucles, toman valores de modo tal que por
cada valor de la variable índice del ciclo
externo, se debe ejecutar totalmente el
bucle interno
interno.
Es posible anidar cualquier tipo de
estructura repetitiva
repetitiva, siempre y cuando
cuando, se
cumplan las 2 reglas anteriores.
Estructuras de repetición anidadas

Correcto Correcto Incorrecto


Unidad 5. Arreglos:
g
Vectores y Matrices

Prof. Eliana Guzmán U.


S
Semestret A-2015
A 2015
Estructuras de datos
• Los arreglos son un tipo de estructura de
datos.
• Una estructura de datos es una colección de
datos que se caracteriza por su organización
y las operaciones
p q
que se definen en ella.
• Las estructuras de datos son muy
importantes en los sistemas de computadora
computadora.
• Los tipos de datos más frecuentes utilizados
en los diferentes lenguajes de programación
son:
Tipos de datos
Estructuras de datos
Las estructuras de datos estáticas son
aquellas en las que el tamaño ocupado en
memoria se define antes de q que el
programa se ejecute y no puede
modificarse durante la ejecución del
programa. Estas
E t estructuras
t t están

implementadas en casi todos los
lenguajes de programación: arreglos
(vector/matriz), registros, ficheros o
archivos conjuntos (Pascal)
archivos, (Pascal).
Estructuras de datos
Las estructuras de datos dinámicas no tienen
las limitaciones o restricciones en el tamaño de
memoria ocupada, que son propias de las
estructuras estáticas. Mediante el uso de un tipo
de dato específico denominado puntero, es
posible
ibl construir
t i estructuras
t t d
de d
datos
t
dinámicas, que son soportadas por la mayoría
de los lenguajes
lenguajes. Las estructuras de datos
dinámicas por excelencia son: las listas
((enlazadas,, pilas
p y colas),
), árboles (binarios,
( ,
árbol-b) y grafos.
Arreglos
Un arreglo (matriz o vector) es un conjunto
finito y ordenado de elementos
g
homogéneos. La ppropiedad
p ordenados
significa que el elemento primero,
segundo, tercero,…, n-ésimo de un
arreglol puede
d ser id
identificado.
tifi d
Los elementos de un arreglo son
h
homogéneos,
é es ddecir,
i ttodos
d son ddell
mismo tipo de dato (cadena, carácter,
lógico entero o real)
lógico, real).
Arreglos unidimensionales:
vectores
• El tipo
p más simple
p de arreglo
g es el unidimensional o
vector. Por ejemplo, un vector de una dimensión
denominado NOTAS[i], que consta de n elementos se
puede representar
p p así:

• El subíndice
bí di o ííndice
di d de un elemento
l t [1
[1,2,3,…,i,…,n]
23 i ]
designa la posición que ocupa cada elemento del
vector.
• Solo el vector global tiene nombre (NOTAS). Los
elementos del vector se referencian por su subíndice o
índice, es decir, su p
posición relativa en el vector.
Arreglos unidimensionales:
vectores
Notación algorítmica para declarar vectores:
tipo
ti
<nombre del tipo arreglo> = arreglo [dimensiones] de <tipo de dato>
var
identificador de la variable: <nombre del tipo arreglo>

Ejemplos:
tipo tipo
nombres= arreglo [1..10] de caracter número=arreglo [1..100] de entero
var var
N,M: nombres NUM: número

se están declarando dos vectores se está declarando un vector


N y M de 10 elementos cada uno NUM de 100 elementos de tipo
de tipo carácter. entero.
Arreglos unidimensionales:
O
Operaciones
i con Vectores
V
Las operaciones que se pueden realizar con
vectores durante el proceso de resolución de un
problema usando la programación son:
• Recorrido (acceso secuencial).
• Lectura/escritura.
• Asignación.
ctua ac ó (a
• Actualización (añadir,
ad , bo
borrar,
a , insertar).
se ta )
• Ordenación.
• Búsqueda
Búsqueda.
1. Recorrido (acceso secuencial)
• Se puede acceder a cada elemento de un
vector para introducir datos en él (leer) ó
bien para visualizar su contenido
(escribir).
• A la operación de efectuar una acción
general sobre todos los elementos de un
vector se le denomina recorrido
vector,
secuencial del vector.
1. Recorrido (acceso secuencial)
• Estas operaciones se realizan utilizando
estructuras repetitivas, cuyas variables de
control por ejemplo ii, se utilizan como
control,
subíndices del vector (por ejemplo S[i]).
• El incremento del contador del bucle
producirá el acceso sucesivo a cada
elemento del vector.
vector
1. Recorrido (acceso secuencial)
Normalmente se utiliza la estructura de repetición
desde, ya que se conoce de antemano la cantidad
de veces que se desea repetir el bucle. Por
ejemplo para un vector de 20 elementos:

desde i ← 1 hasta 20 hacer


escribir(‘Introduzca el elemento ‘ ,i, ‘del vector F: ’)
leer(F[i])
_
fin_desde
1. Recorrido (acceso secuencial)
También se p pueden utilizar las estructuras de
repetición mientras y repetir:
i←1
mientras (i <= 20) hacer
escribir(‘Introduzca el elemento ‘ ,i, ‘del
vector F: ’)
leer(F[i])
i←i+1
fin_mientras
1. Recorrido (acceso secuencial)
i←1
repetir
escribir(‘Introduzca
ibi (‘I t d ell elemento
l t ‘ ,i,i ‘d
‘dell
vector F: ’)
leer(F[i])
i←i+1
hasta_que (i > 20)
2 Lectura/escritura
2.
La lectura/escritura de datos en arreglos
normalmente se realiza con estructuras
repetitivas (usando un recorrido secuencial).
Las instrucciones simples de lectura/escritura se
representarán como:
• leer(A[5]) lectura del elemento 5 del vector A
• escribir(A[8]) escribir el elemento 8 del vector A
2 Lectura/escritura
2.
Generalmente se desea leer o escribir el vector
completo, para lo cual se debe hacer un
recorrido del vector:

desde i←1 hasta n hacer


escribir(‘Introduzca
( el elemento ‘ ,i,
, , ‘del
vector F: ’)
leer(F[i])
fi d d
fin_desde
2 Lectura/escritura
2.
Para escribir el vector F:

desde
d d i←1
i 1 hasta
h t n hacer
h
escribir(F[i])
fin_desde
2 Lectura/escritura
2.
Para facilitar futuras operaciones con el
vector, se recomienda inicializar el vector
antes de operar con él él. Puede usarse
cualquier valor que respete el tipo de dato
del vector y que no sea una entrada válida
de la variable involucrada:
desde i ← 1 hasta n hacer
nombre[i] ← ‘*’
fin desde
fin_desde
3 Asignación
3.
La asignación de valores a un elemento del
vector se realizará con la instrucción de
asignación:
• A[29] ← 5 asigna el valor 5 al elemento
29 del vector A
• Suma ← A[1] + A[3]
• A[3] ← A[3] + 10.8
[ ] ← A[4]
• A[1] [ ] + A[5]
[ ]
3 Asignación
3.
• Si se desea asignar valores a todos los
elementos de un vector, se debe recurrir a
p
estructuras repetitivas e incluso selectivas.
• Ejemplo: si se desea dar el mismo valor a
p
todos los elementos del vector A de tipo
entero:
desde i ← 1 hasta 5 hacer
A[i] ← 8
fin_desde
Ejemplos de vectores
1 Escribir un algoritmo que determine el
1.
mayor valor de una lista de 50 números
reales e indique la posición que ocupa
ocupa.
Ejemplos de vectores
2 Escribir un algoritmo que permita calcular
2.
la desviación estándar de una lista de N
números El valor de N no puede ser
números.
mayor a 15.
n

∑ i
( x − media ) 2

desviación = i =1

n −1
Ejemplos de vectores
3 Escribir un algoritmo que determine:
3.
a) el promedio de N números enteros e indique
cuáles elementos son mayores a dicho
promedio.
b) la suma de los números pares e impares.
4. Escriba un algoritmo que determine si
dos vectores de treinta caracteres son
iguales.
4 Actualización
4.
La operación de actualización de un vector
consta a su vez de tres operaciones más
elementales:
• Añadir elementos.
• Insertar
I t elementos.
l t
• Borrar elementos.
4 Actualización
4.
Añadir elementos: es la operación de
agregar un nuevo elemento al final del
vector La única condición necesaria para
vector.
esta operación consistirá en la
comprobación de que existe espacio
suficiente para el nuevo elemento, dicho
de otra manera
manera, que el vector no contenga
todos los elementos con que fue definido.
4 Actualización
4.
Ejemplo: se tiene un vector de edades definido
para 7 elementos, pero ya tiene almacenado 5
elementos EDADES[1], EDADES[2],
EDADES[3], EDADES[4] y EDADES[5]. Se
podrán añadir dos elementos más al final del
vector
t con una simple
i l operaciónió d
de asignación:
i ió
• EDADES[6] ← 23
EDADES[ ] ← 20
• EDADES[7]
(Si conoce los espacio del vector que están libres.)
4 Actualización
4.
Si no se sabe si el vector tiene espacios disponibles,
primero debe determinarse esto antes de intentar añadir
elementos al vector:
desde i ← 1 hasta n hacer
si (edades[i]=-1)
(edades[i] 1) entonces
escribir(‘Introduzca una edad:’)
leer(edades[i])
si no
si_no
cont ← cont + 1
fin_si
fin desde
fin_desde
si (cont=n) entonces
escribir(‘El vector no tiene espacio para añadir más elementos’)
fin si
fin_si
4 Actualización
4.
Insertar elementos: consiste en introducir un
elemento en el interior de un vector ordenado.
En este caso se necesita un desplazamiento
previo hacia abajo, para colocar el nuevo
elemento en su posición relativa.
Ejemplo: se tiene un vector de 8 elementos que
contiene nombres ordenados alfabéticamente y
se desea insertar dos nuevos nombres:
Fernando y Luis.
4 Actualización
4.

Como Fernando está entre Carlos y Gerardo se deben desplazar hacia


abajo los elementos 3, 4 y 5 que pasarán a ocupar las posiciones relativas
4, 5 y 6.
P t i
Posteriormente
t debe
d b realizarse
li lla misma
i operación
ió con ell nombre
b L Luis
i
que ocupará la posición 6.
El algoritmo que realiza esta operación para un vector de n
elementos es el siguiente, suponiendo que hay espacio
suficiente en el vector:
algoritmo insertar_elemento escribir(‘Introduzca el elemento:’)
const leer(nuevo)
n=500 desde i ← 1 hasta n hacer
si (NOMBRES[i]<nuevo) entonces
tipo cont ← cont + 1
vector=arreglo [1 .. n] de cadena[50] fin_si
var fin desde
fin_desde
NOMBRES: vector Pos ← cont + 1
nuevo: cadena[50] i ←ocupada
Pos, ocupada, cont: entero mientras (i >= Pos) hacer
inicio NOMBRES[i+1] ← NOMBRES[i]
i←i-1
desde i ← 1 hasta n hacer fin_mientras
si (NOMBRES[i]<>’vacio’) entonces NOMBRES[Pos] ← nuevo
ocupada ← ocupada + 1 ocupada ← ocupada + 1
fin_si fin_si
fin_desde fin
si (ocupada=n) entonces
escribir(‘No se pueden insertar elementos’)
si_no
4 Actualización
4.
Borrar elementos: la operación de borrar el
último elemento de un vector no
representa ningún problema
problema.
El borrado de un elemento del interior del
vector provoca el movimiento hacia arriba
de los elementos inferiores a él para
reorganizar el vector.
vector
4 Actualización
4.

Si desea borrar elemento


3 (Gerardo)
(Gerardo), debe desplazar
hacia arriba los elementos
de las posiciones 4 (Lorena)
y 5 (Marcos)
(Marcos).
4. Actualización
Ejemplo: en el vector del ejemplo anterior NOMBRES,
borrar el elemento q
que el usuario desee.
algoritmo borrar_elemento
const
N=500
tipo
vector = arreglo [1 .. N] de cadena[50]
var
NOMBRES: vector
j,ocupada: entero
nom: cadena[50]
Inicio
escribir(‘Introduzca
escribir( Introduzca el nombre a borrar:’)
borrar: )
leer(nom)
4 Actualización
4.
desde i ← 1 hasta N hacer
si (NOMBRES[i]=nom) entonces
j←i
fi
fin_si
i
fin_desde
desde i ← j hasta N-1
N 1 hacer
NOMBRES[i] ← NOMBRES[i+1]
fin_desde
desde
ocupada ← ocupada -1
fin
5 Métodos de ordenamiento
5.
Ordenación (clasificación)
• Es la operación de organizar un conjunto
de datos en algún orden o secuencia
p
específica, tal como creciente o
decreciente para datos numéricos o
alfabéticamente para datos de tipo
carácter
á t o cadenad d
de caracteres.
t
• Operaciones típicas de ordenación son:
li t d
lista de números,
ú archivos
hi d
de clientes
li t d de
banco, nombres en una agenda telefónica,
entre otras
otras.
Ordenación (clasificación)
• En síntesis
síntesis, la ordenación significa poner
objetos en orden ascendente o
descendente.
descendente
• El propósito final de la ordenación es
facilitar la manipulación de datos en un
vector.
Ordenación (clasificación)
Los métodos directos son los que se
realizan en el espacio ocupado por el
arreglo Los que vamos a estudiar son:
arreglo.
• Método de intercambio o burbuja.
• Ordenación
Od ió por SSelección.
l ió
• Ordenación por Inserción.
Método de intercambio o de
b b j
burbuja

Se basa en el principio de comparar pares


de elementos adyacentes e
intercambiarlos entre sí hasta que estén
todos ordenados.
Método de intercambio o de
b b j
burbuja
El elemento cuyo valor es mayor sube posición a
posición hacia el final de la lista, al igual que las
burbujas de aire en un depósito (si se ordena de
forma ascendente).
Tras realizar un recorrido completo por todo el
vector, el elemento mencionado habrá subido
en la lista y ocupará la última posición.
E ell segundo
En d recorrido,
id ell segundo d elemento
l
llegará a la penúltima posición, y así
sucesivamente.
sucesivamente
Método de intercambio o de
b b j
burbuja
Los ppasos a dar son:
1. Comparar A[1] y A[2], si están en orden, se
mantienen como están, en caso contrario se
i
intercambian
bi entre si. i
2. A continuación se comparan los elementos 2 y
3 de nuevo se intercambian si es necesario
3, necesario.
3. El proceso continúa hasta que cada elemento
del vector
de ecto haa ssido
do co
comparado
pa ado co
con sus
elementos adyacentes y se han realizado los
intercambios necesarios.
Método de intercambio o de
b b j
burbuja
La acción de intercambiar entre sí los
valores de dos elementos A[i], A[i+1] es
una acción compuesta que contiene las
siguientes acciones, utilizando una
variable auxiliar:
2
A[i] A[i+1]

1 3
AUX
Método de intercambio o de
b b j
burbuja
En pseudocódigo:
AUX ← A[i]
A[i] ← A[i+1]
A[i+1] ← AUX
Método de intercambio o de
burbuja
algoritmo burbuja1 algoritmo burbuja2
const const
N=200 N=200
tipo tipo
vector=arreglo [1..N] de entero vector =arreglo [1..N] de entero
Var var
X: vector X: vector
i, j, aux: entero i, j,aux: entero
inicio inicio
desde i ← 1 hasta N hacer desde i ← 1 hasta N hacer
leer(X[i]) leer(X[i])
fin desde
fin_desde fin desde
fin_desde
desde i ← 1 hasta N-1 hacer desde i ← 1 hasta N-1 hacer
desde j ← 1 hasta N-1 hacer desde j ← 1 hasta N-i hacer
si (X[j] > X[j+1]) entonces si (X[j] > X[j+1]) entonces
AUX ← X[j] [j] AUX ← X[j] [j]
X[j] ← X[j+1] X[j] ← X[j+1]
X[j+1] ← AUX X[j+1] ← AUX
fin_si fin_si
fin_desde fin_desde
fin desde
fin_desde fin desde
fin_desde
desde i ← 1 hasta N hacer desde i ← 1 hasta N hacer
escribir(X[i]) escribir(X[i])
fin_desde fin_desde
fin fin
Método de ordenación por
selección
l ió
Este método se basa en buscar el menor
elemento del vector y colocarlo en la
primera posición.
posición Luego se busca el
segundo elemento más pequeño y se
coloca en la segunda posición
posición, y así
sucesivamente.
Método de ordenación por
selección
l ió
Los pasos sucesivos a dar son:
1. Seleccionar el menor elemento del vector de
n elementos
elementos.
2. Intercambiar dicho elemento con el primero.
3 Repetir estas operaciones con los n-1
3.
elementos restantes, seleccionando el
segundo
g elemento,, continuar con los n-2
elementos restantes hasta que sólo quede
el mayor.
Método de ordenación por
selección
l ió
Pseudocódigo con estructura desde
iinicio
i i
desde i hasta N-1 hacer
AUX ← X[i]
K←i
desde j ← i+1 hasta N hacer
si (X[j] < AUX) entonces
AUX ← X[j]
K←j
fin_si
_
fin_desde
X[K] ← X[i]
X[i] ← AUX
fin_desde
fin
Método de ordenación por
i
inserción

El método se basa en comparaciones y
desplazamientos sucesivos. El algoritmo
de ordenación de un vector X de N
elementos, se realiza con un recorrido de
todo el vector y la selección e inserción
del elemento correspondiente en el lugar
adecuado.
adecuado
Método de ordenación por
i
inserción

Por usar la misma lógica con las que se
ordenan las cartas, también se conoce
con el nombre de método de la baraja
baraja.
Método de ordenación por
algoritmo método_inserción
inserción
tipo
vector = arreglo [1..10] de entero
var
X: vector
i, j, k, aux: entero
sw: lógico
inicio
desde i ← 2 hasta 10 hacer
AUX ← X[i]
K←i–1
sw ← falso
mientras no(sw) y (K>=1) hacer
si (aux<x[k]) entonces
X[K+1] ← X[K]
K←K–1
si_no
sw ←verdadero
fin_si
fin_mientras
X[K+1] ← AUX
fin_desde
fin.
Métodos de búsqueda en
vectores
Métodos de Búsqueda
• La recuperación
p de información,, como ya
y se ha
comentado, es una de las aplicaciones más
importantes de las computadoras.
• La
L búsqueda
bú d se refiere
fi a la
l operación
ió dde
encontrar la posición de un elemento entre un
conjunto de elementos dados: lista,
lista tabla o
fichero.
• Existen diferentes algoritmos de búsqueda. El
algoritmo elegido depende de la forma en que
se encuentren organizados los datos.
Métodos de Búsqueda
La operación de búsqueda de un elemento
X en un conjunto de elementos consiste
en:
1. Determinar si X pertenece al conjunto y,
en ese caso
caso, indicar su posición en él
él.
2. Determinar si X no pertenece al
conjunto.
j t
Métodos de Búsqueda
Los métodos más usuales de búsqueda
son:
• Búsqueda secuencial o lineal
lineal.
• Búsqueda binaria.
• Búsqueda por transformación de claves
(hash).
Búsqueda secuencial o lineal
El método más sencillo de buscar un
elemento en un vector es explorar
secuencialmente el vector (recorrer el
vector), desde el primer elemento hasta el
último Si se encuentra el elemento
último.
buscado visualizar un mensaje similar a
Elemento encontrado en la posición x’
‘Elemento x , en
caso contrario visualizar un mensaje
similar a ‘Elemento
Elemento no existe en el vector’
vector .
Búsqueda secuencial o lineal
• En otras palabras
palabras, la búsqueda secuencial
compara cada elemento del vector con el
valor deseado
deseado, hasta que se encuentra y
termina de recorrer el vector completo.
• La búsqueda secuencial no requiere
ningún registro por parte del vector por
consiguiente no requiere que el vector
esté ordenado.
Búsqueda secuencial o lineal
Este método tiene el inconveniente del
consumo excesivo de tiempo en la
localización del elemento buscado
buscado.
Cuando el elemento buscado no se
encuentra en el vector,
vector se verifican o
comprueban sus n elementos. Por esto no
es el método más adecuado para vectores
con un gran número de elementos.
Búsqueda
q secuencial o lineal
algoritmo búsqueda_secuencial
const
N=1000 si (cont=N) entonces
tipo escribir(‘El elemento ‘,t,’ no se 
vector=arreglo [1..N] de entero encuentra en este vector’)
var fin_si
X: vector
fin.
i, t, cont: entero
inicio
desde i ← 1 hasta N hacer
leer(X[i])
fin_desde
escribir(‘Introduzca el elemento a buscar: ‘)
leer(t)
desde i ← 1 hasta N hacer
si (X[i] = t) entonces
escribir(‘Elemento encontrado en la posición ‘,i)
si_no
cont ← cont + 1
fin_si
fin_desde
algoritmo búsqueda_secuencial2
tipo
vector =arreglo [1..20] de entero
var
X: vector
i,j,t: entero
encontrado: lógica
i i i
inicio
desde i ← 1 hasta N hacer
leer(X[i])
fin_desde
escribir(‘Introduzca
ibi (‘I t d ell elemento
l t ab
buscar: ‘)
leer(t)
encontrado ← falso
desde i ← 1 hasta N hacer
sii (X[i] = t) entonces
t
encontrado ← verdadero
j←i
fin_si
fi d d
fin_desde
si encontrado entonces
escribir(‘Elemento encontrado en la posición ‘,j)
si_no
escribir(‘Elemento
ibi (‘El t no encontrado’)
t d ’)
fin_si
fin.
Búsqueda binaria
Presupone una ordenación previa de los
elementos del vector.
Este método se basa en la división
sucesiva del vector en dos partes, y seguir
dividiendo cada mitad hasta encontrar el
elemento buscado.
Búsqueda binaria
Utiliza un método de divide y vencerás p para
localizar el valor deseado.
Con este método se examina primero el elemento
centrall d
dell vector, sii este es ell elemento
l
buscado, entonces la búsqueda ha terminado.
En caso contrario se determina si el elemento
buscado está en la primera o segunda mitad del
vector, y a continuación se repite este proceso,
utilizando el elemento central de esa parte del
vector.
Búsqueda binaria
Es un método eficiente siempre que el
vector esté ordenado.
En la práctica esto suele suceder
suceder, pero no
siempre es así. Por esta razón la
búsqueda binaria exige una ordenación
previa del vector.
algoritmo búsqueda_binaria
tipo
vector=arreglo [1..500] de entero
var
X: vector
i,j,t,k,primero,ultimo,central: entero
encontrado: lógica
I i i
Inicio
escribir(‘Introduzca el valor a buscar: ‘)
leer(k)
primero ← 1
últi
último ←N
central ← trunc((primero+último)/2)
mientras (primero <= último) y (X[central] <> K) hacer
si (K < X[central]) entonces
últi
último ← central
t l-1
si_no
primero ← central + 1
fin_si
t l ← trunc((primero+último)/2)
central t (( i últi )/2)
fin_mientras
si K = X[central] entonces
escribir(‘Elemento encontrado en la posición ‘,central)
si_no
i
escribir(‘Elemento no encontrado’)
fin_si
fin.
Ejemplo 5: Un viajero conoce todos los
gastos
t que hizo
hi en su últi
último viaje
i j con lla
tarjeta de crédito, fueron 18 en total, los
cuales
l se puedend clasificar
l ifi en cuatro
t
tipos: comida, hospedaje, transporte y
ropa. Escriba
E ib un algoritmo,
l it que hhaga uso
de vectores, y le permita al viajero
d t
determinar:
i
– Gastos totales discriminados por tipo.
– Cantidad de gastos que realizó en comida.
– Tipo de gasto en el que más invirtió dinero en
el viaje.
Ejemplo 6: Escriba un algoritmo que
h i d uso d
haciendo de un arreglo
l
unidimensional de 100 elementos
d
denominado
i d CEDULA
CEDULA, permita:it
– Leer los 100 elementos por teclado.
– Ordenar los números de cédula de forma
ascendente.
– Buscar si el número de cédula 19144473 se
encuentra en el arreglo CEDULA e indicar la
posición que ocupa
ocupa.
– Determinar cuántos números de cédula son
mayores a 19145954
19145954.
Ejemplo 7: Se han registrado las notas definitivas
de 58 estudiantes de Programación Digital en
un arreglo unidimensional llamado NOTAS.
Cada calificación es un número entero entre 1 y
20. Construya un algoritmo que le permita al
profesor de esta asignatura obtener la siguiente
información:
– La nota promedio de la clase.
– Las notas ordenadas de menor a mayor
mayor.
– Nota más alta y más baja obtenida en esta sección de
Programación Digital, e indicar los nombres de los estudiantes
que las obtuvieron.
obtuvieron
– Cuántos estudiantes obtuvieron notas de 18, 19 ó 20.
– Las notas que fueron mayores al promedio.
– El porcentaje
t j dde estudiantes
t di t aprobados
b d y ell porcentaje
t j d
de llos
reprobados.
Arreglos Multidimensionales

Los arreglos de varias dimensiones se


dividen en dos grandes grupos:
• Arreglos bidimensionales: tablas o
matrices.
• Arreglos
A l multidimensionales.
ltidi i l
Arreglos multidimensionales
Un arreglo multidimensional, se puede
definir de tres, cuatro y hasta n
dimensiones.
Se manejan los mismos conceptos para los
subíndices q que en los vectores.
Cada elemento del arreglo se puede
identificar usando la cantidad de
subíndices necesarios, por ejemplo en un
arreglo de n dimensiones se escribirá:
A[I1, I2, I3, …, In]
Arreglos multidimensionales
Ejemplo: Un arreglo de tres dimensiones
puede ser uno que contenga los datos
relativos a la cantidad de estudiantes de una
universidad de acuerdo a los siguientes
criterios:
– año (primero a quinto).
– género (femenino/masculino)
(femenino/masculino).
– facultad (medicina, farmacia, ingeniería, derecho
y educación)
educación).
Arreglos multidimensionales:

1
Año 2
E
3 D
4 I Facultad
5 F
M Cantidad de estudiantes que cursan el
M F
tercer año, de género femenino (F)

Género de la facultad de medicina.
Arreglos Bidimensionales: Matrices
Es un tipo de arreglo, cuyos elementos se
pueden referenciar por dos subíndices.
Existen grupos de datos que se representan
mejor en forma de tabla o matriz con dos
j p
subíndices. Ejemplos típicos
p de tablas o
matrices son:
• Distancias entre ciudades.
• Horarios.
• Informes de ventas periódicas.
Arreglos Bidimensionales: matrices
Un arreglo bidimensional se puede
considerar como un vector de vectores.
Es un conjunto de elementos
elementos, todos del
mismo tipo, en el cual el orden de los
componentes es significativo
significativo, y en el que
se necesitan especificar dos subíndices
para poder identificar cada elemento del
arreglo.
Arreglos Bidimensionales: matrices
Un arreglo bidimensional almacena la
información que relaciona dos variables,
características o factores.
factores
Las filas representan una de las variables y
las columnas la otra variable
variable.
Arreglos bidimensionales: matrices
Matriz A:

Fila 1 fila 1, columna 1


(1,1)

Fila 2 30

Fila 3

Fila 4

Fila 5 150

C l
Columna 1 Columna
C l 2 C l
Columna 6
Arreglos bidimensionales: matrices
Subíndice j A[2,5]
Matriz A: para las columnas

30
Subíndice i
para las filas

150

A[5,2]
Arreglos bidimensionales: matrices

Notación algorítmica para declarar matrices:


tipo
<nombre del tipo arreglo> =arreglo [1..F,1..C] de <tipo de dato>
var
identificador de la variable de este tipo: <nombre del tipo arreglo>:

Ejemplo:
Ej l
tipo
notas = arreglo [1..5, 1..6] de entero
var
A, B: notas (*Se están declarando dos matrices de números enteros
que tiene 5 filas y 6 columnas*)
Arreglos bidimensionales: matrices

Un arreglo bidimensional se dice que tiene


F*C elementos,
l t d
donde
d F es ell número
ú d
de
filas y C el número de columnas.
Arreglos bidimensionales: matrices
Operaciones con matrices:
1. Asignación.
2 Lectura/escritura.
2. L t / it
3. Recorrido secuencial: Por fila
Por columna
Arreglos bidimensionales: matrices
1. Asignación:
g consiste en asignar
g directamente
un valor a cualquier elemento de la matriz.
Ejemplo: A[1,1] ← 3
N
Normalmente
l se requiere
i asignar
i valores
l a
varios o todos los elementos de una matriz,
para lo cual se usa un recorrido secuencial
secuencial.
2. Lectura/escritura: normalmente se realiza
usando un recorrido secuencial. Pero una
instrucción simple de lectura/escritura podría
ser:
leer(A[2 3]) lectura del elemento en la fila 2
leer(A[2,3])
columna 3 de la matriz A.
Arreglos bidimensionales: matrices
3. Recorrido secuencial: Se p puede acceder a los
elementos de una matriz para introducir datos
(leer) en ella, o bien para visualizar su contenido
(escribir) realizar comparaciones
(escribir), comparaciones, búsquedas
de elementos o cualquier otro tipo de operación.
• Esta operación se realiza usando estructuras de
repetición, cuyas variables de control se utilizan
como subíndices de la matriz (por ejemplo i, j).
• El incremento del contador del bucle producirá
el tratamiento sucesivo de los elementos de la
matriz.
matriz
Arreglos bidimensionales: matrices
El recorrido secuencial se puede hacer por filas o
por columnas.
Recorrido secuencial ppor filas:

desde i ← 1 hasta 3 hacer


desde j ← 1 hasta 4 hacer
leer(A[i,j])
fin_desde
fin desde
fin_desde
Arreglos bidimensionales: matrices
Recorrido secuencial por columnas:

desde j ← 1 hasta 4 hacer


desde i ← 1 hasta 3 hacer
leer(A[i,j])
fin desde
fin_desde
fin_desde
Ejemplo 1: Inicializar la matriz A de 10 filas y
4 columnas con un valor constante dado por
el usuario.
algoritmo
l it i i i li
inicialización_matriz
ió ti
const
F=10
C=4
tipo
ti
matriz =arreglo [1..F, 1..C] de entero
var
A:matriz
i,i j,j kk:entero
t
Inicio
escribir(‘Introduzca el valor con el que desea inicializar la matriz: ‘)
leer(k)
d d i ← 1 hasta
desde h t F hacer
h
desde j ← 1 hasta C hacer
A[i,j] ← k
fin_desde
fi d d
fin_desde
fin.
Ejemplos de matrices
Ejemplo 2: Escribir un algoritmo que permita
obtener la suma de los elementos positivos y la
suma de los elementos negativos de una matriz
T, que tiene 2 filas y 10 columnas.
Ejemplo 3: Escribir un algoritmo que obtenga la
suma de los elementos de cada una de las filas
y de cada una de las columnas de una matriz de
3 filas y 2 columnas
columnas.
Ejemplos de matrices
Ejemplo 4: Escriba un algoritmo que realice
la suma de todos los elementos de una
matriz B de 5 filas y 5 columnas.
Ejemplo 5: El jefe de recursos humanos de
p
una tienda de 8 departamentos, desea
registrar la asistencia de los trabajadores
cada día de la semana en cada
d
departamento,
t t para obtener
bt la
l siguiente
i i t
información:
Ejemplos de matrices
a)) La cantidad de trabajadores
j q
que
laboraron cada día de la semana.
b) El departamento al que más asistieron
sus trabajadores durante la semana.
c) La cantidad de trabajadores que
asistieron el día sábado y el día
domingo.
domingo
d) A cuál departamento asistieron la menor
cantidad
tid d d
de ttrabajadores
b j d d
durante
t lla
semana.
Ejemplo 6: En Mérida existen 4 estaciones metereológicas,
cada una de ellas registra la temperatura promedio
mensual (temperatura mínima medida: 8°C y
temperatura máxima medida: 32°C). Si a Ud. le
proporcionan dicha información para el año 2011.
Escriba un algoritmo que determine:
– La temperatura promedio en el año 2011, registrada por las 4
estaciones.
– La temperatura promedio en el año 2011, registrada por las
estaciones 2 y 4.
– Los meses del año que tuvieron una temperatura promedio
superior a la temperatura promedio en el año 2011, registrada
por las 4 estaciones.
Debe Validar las entradas y dibujar las estructuras de datos que
emplee en la solución del problema.
Ejemplo 7: Se van a registrar los votos de 50 personas
para las elecciones de alcalde de la ciudad de Mérida,,
p
en la cual participan cuatro candidatos. Cada persona
puede votar por un solo candidato el cual se registra con
un uno,
uno y por los candidatos que no votó con un cero
cero.
Haciendo uso de una matriz para registrar los votos,
escriba un algoritmo que permita determinar:
a) La cantidad de votos que obtuvo cada uno de los
cuatro candidatos.
b) La posición final ocupada por cada candidato
candidato.
c) El candidato ganador.
d) El candidato por el que menos votaron estas 50
personas.
e) Por cuál candidato votó el votante 5.
Ejemplo 8: En una zapatería se conocen las ventas
mensualesl d de di
diez modelos
d l dde zapatos
t d desded enero
hasta junio del 2012, cuyo inventario inicial fue de 30
pares de cada modelo. Escriba un algoritmo
p g q
que
proporcione la información que necesita el dueño para
realizar los pedidos del segundo semestre del año:
a) ¿Cuáles modelos de zapatos debe pedir porque ya
no tiene existencia?
b)) ¿
¿Cuál modelo fue el menos vendido?
c) ¿En qué mes se vendieron más zapatos?
d) ¿Cuál es el mes en que más se vendieron zapatos
de los modelos 3 y 6?
e) ¿Total de pares de zapatos vendidos en estos 6
meses en dicha zapatería?
meses,
Unidad 6

Subprogramas: Funciones 
y Procedimientos
Prof. Eliana Guzmán U.
Semestre: A‐2015
Introducción
Un método ya citado para solucionar problemas 
complejos es dividirlo en subproblemas
(problemas más sencillos), y a continuación 
dividir estos subproblemas en otros más 
simples, hasta que los problemas más 
pequeños sean fáciles de resolver. Esta 
técnica se suele denominar “divide y 
vencerás”.
Introducción
Este método de diseñar la solución de un 
problema principal, obteniendo las soluciones 
de sus subproblemas, se conoce como diseño 
modular y descendente. 
Se denomina descendente, ya que se inicia en la 
parte superior con un problema general, y el 
diseño específico de las soluciones de los 
subproblemas (módulos). 
Introducción
Normalmente las partes en que se divide un 
programa deben desarrollarse 
independientemente entre si. Estas partes 
independientes se denominan subprogramas.
Problema  Algoritmo 
principal principal

Subproble- Subproble‐ Subproble‐ Subalgorit‐ Subalgorit‐ Subalgorit‐


ma 1 ma 2 ma 3 mo 1 mo 2 mo 3

Diseño descendente
Introducción
El problema principal se soluciona con el programa 
o algoritmo principal, y la solución de los 
subproblemas mediante subprogramas 
conocidos como funciones y procedimientos 
(subrutinas).

Un subprograma puede realizar las mismas 
acciones que un programa:
• leer datos,
• realizar cálculos, y
• devolver resultados al programa principal.
Introducción
Un subprograma es usado en un programa 
principal para un propósito específico. El 
subprograma recibe datos desde el programa 
principal y le devuelve resultados a este. 
Se dice que el programa principal llama o invoca
al subprograma.
Introducción
El subprograma ejecuta una tarea, y a 
continuación devuelve el control al programa 
principal, justo al lugar desde donde fue 
hecha la llamada. Un subprograma a su vez 
puede llamar a sus propios subprogramas.
Subprograma 1 Subprograma 1.1

Programa

Principal
Subprograma 2
Tipos de Subprogramas
Existen dos tipos de subprogramas:
1)Funciones.
2)Procedimientos.
Funciones
Matemáticamente una función es una operación 
que toma uno o más valores llamados 
argumentos, y produce un valor denominado 
resultado. Así por ejemplo: 
x
f ( x) =
1+ x2
donde ƒ es el nombre de la función y x es el 
argumento. Para evaluar ƒ se debe dar un valor a 
x para poder calcular el resultado. 
Por ejemplo,  con x=3 se obtiene el valor 0.3 para ƒ.
Funciones
Una función puede tener varios argumentos. 
Por consiguiente:
x− y
f ( x, y ) =
x− y

es una función de varios argumentos, sin 
embargo solo proporciona como resultado un 
único valor.
Tipos de funciones
Se pueden diferenciar dos tipos de funciones:
1)Funciones internas o intrínsecas: son las 
funciones incorporadas al lenguaje de 
programación.
2)Funciones externas: son las funciones 
definidas por el usuario, las cuales son creadas 
por el usuario cuando las funciones internas 
no permiten realizar el tipo de cálculo 
deseado.
Funciones Internas
Cada  lenguaje  de  programación  tiene  sus 
propias  funciones  incorporadas,  que  se 
utilizan  escribiendo  sus  nombres  con  los 
argumentos adecuados en expresiones como:
f ← sqrt(A+cos(x))
Funciones Internas
Funciones internas más usuales:
Función Descripción Tipo de argumento Resultado
abs(x) Valor absoluto de x Entero o real Igual que argumento

arctan(x) Arco tangente de x Entero o real Real


cos(x) Coseno de x Entero o real Real
exp(x) Exponencial de x Entero o real Real
ln(x) Logaritmo neperiano de x Entero o real Real

log10(x) Logaritmo decimal de x Entero o real Real


redondeo (x), round(x) Redondeo de x Real Entero

seno(x), sin(x) Seno de x Entero o real Real


cuadrado(x), sqr(x) Cuadrado de x Entero o real Igual que argumento

raiz2(x), sqrt(x) Raíz cuadrada de x Entero o real Real


trunc(x) Truncamiento de x Real Entero
Funciones externas
Declaración de funciones
La declaración de una función requiere de una serie de pasos 
que la definen. 
Una función al ser un subprograma tiene una forma similar a 
los programas, por consiguiente constará de una cabecera 
que comenzará con la palabra Función, seguida del nombre 
y argumentos de dicha función encerrados entre paréntesis 
y finalmente el tipo de dato simple que devuelve dicha 
función. 
A continuación irá el bloque declarativo y el cuerpo de la 
función, que serán las acciones o instrucciones cuya 
ejecución hará que se asigne un resultado al nombre de la 
función.
Funciones externas
La declaración de la función en algoritmo será:

función <nombre de la función> (lista de argumentos): <tipo de datos 
simple>
var
[declaraciones de las variables que usa la función]
inicio
<instrucciones> //cuerpo de la función
nombre de la función ← resultado de final de los cálculos
fin_función
Parámetros
Son las variables, de tipo simple o estructurado, 
que se utilizan para realizar la comunicación 
entre el programa principal y los subprogramas.
Subprograma 1 Subprograma 1.1

Programa

Principal
Subprograma 2

La comunicación se hace a través de Parámetros
Tipos de Parámetros
• Formales, ficticios o mudos: son los que se 
utilizan en la declaración de la función y pueden 
ser: nombres de variables, de otras funciones o 
procedimientos. Estos parámetros sólo se utilizan 
dentro del cuerpo de la función.
• Actuales: son los que se utilizan en la llamada o 
invocación de la función, desde el programa 
principal, y pueden ser: constantes, variables o 
expresiones aritméticas.
Clases de parámetros
• (E) Entrada: esta clase de parámetros se usa para 
recibir información desde el programa principal. En las 
funciones, los parámetros son sólo de entrada.
• (S) Salida: estos parámetros almacenan la información 
de salida, es decir, los resultados del subprograma. En 
las funciones no existe este tipo de parámetro, 
mientras que en los procedimientos pueden existir 0, 
1, 2 ó n.
• (E/S) Entrada/Salida: un solo parámetro se utiliza para 
enviar y recibir la información desde procedimientos.
Invocación de Funciones
Cada función se invoca o llama utilizando su 
nombre y los argumentos encerrados entre 
paréntesis (parámetros actuales).
A una función no se le llama explícitamente, sino 
que se le invoca o referencia mediante un 
nombre y una lista de argumentos. 
El programa principal llama o invoca a la función 
con su nombre en una expresión que debe ir 
seguida de una lista de argumentos que deben 
coincidir en cantidad, tipo y orden con los de la 
función que fue definida. 
Invocación de Funciones
Una función puede ser invocada de la siguiente 
forma:
Variable ← nombre de la función (parámetros actuales)

Cada vez que se llama a una función desde el algoritmo principal, 
se establece automáticamente una correspondencia entre los 
parámetros  actuales  y  los  parámetros  ficticios.  Debe  haber 
exactamente  el  mismo  número  de  parámetros  actuales,  que 
de ficticios en la declaración de la función, y se presupone una 
correspondencia uno a uno de izquierda a derecha.
Invocación de Funciones: 
Parámetros
Una llamada a una función implica los siguientes 
pasos:
1.A cada parámetro ficticio se le asigna el valor 
real de su correspondiente parámetro actual.
2.Se ejecuta el cuerpo de acciones de la función.
3.Se devuelve el resultado final en el nombre de 
la función y se retorna al punto de llamada. 
Ejemplo 1: Diseñar un algoritmo para calcular el factorial de un número 
cualquiera leído por teclado y el factorial de 10, usando una función.
algoritmo cálculo_factorial; Función factorial (E n:entero): entero
var Var
x, y, numero: entero i, f: entero
inicio inicio
escribir(‘Introduzca un número entero   f ← 1
positivo: ‘) desde i ← 1 hasta n hacer
leer(numero) f ← f*i
si (numero>0) entonces fin_desde
x ← factorial(numero) factorial ← f
y ← factorial(10) fin_función
escribir(‘El factorial de ‘,numero, ‘es: 
‘,x)
escribir(‘El factorial de 10 es: ‘,y) En este caso los parámetros actuales son: 
si_no una variable número y una constante 
escribir(‘El número debe ser positivo’) 10 y el parámetro ficticio es n.
fin_si
si (numero=0) entonces
escribir(‘El factorial de 0 es 1’)
fin_si
fin.
Ejemplo 2: Diseñar un algoritmo para calcular la potencia 
entera n de x (y = xn), usando una función.

algoritmo cálculo_potencia;
var
poten: entero
resultado, numero: real
inicio
escribir(‘Introduzca el número (base) al que se desea calcular la 
potencia: ‘)
leer(numero)
escribir(‘Introduzca la potencia: ‘)
leer(poten)
resultado ← potencia(numero, poten)
escribir(‘La potencia de ‘,numero, ‘elevado a ‘,poten, ‘ es: ‘,resultado)
fin.
función potencia (E base:real, E exponente:entero): real
var
i: entero
z:real
inicio
si (exponente = 0) then
potencia ← 1
si_no
si (exponente = 1) then
potencia ← base
si_no
z ← 1
desde i ← 1 hasta abs(exponente) hacer
z ← z * base
fin_desde
si (exponente < 0) entonces
z ← 1/z
fin_si
potencia ← z
fin_si
fin_si
fin_función
Procedimientos
Las funciones pueden tener muchos parámetros 
de entrada, pero solamente un resultado: el 
valor de la función. Esto limita su uso, aunque 
se usan con frecuencia en cálculos científicos.
Un concepto más potente es el proporcionado 
por los subprogramas de tipo procedimiento.
Procedimientos
Con frecuencia se requieren subprogramas que calculen 
varios resultados en vez de uno solo, o que realicen la 
búsqueda u ordenamiento de una serie de números en 
un vector, etc. En estas situaciones la función no es 
apropiada y se necesita disponer del otro tipo de 
subprograma: el procedimiento.

Un procedimiento es un subprograma que ejecuta un 
proceso específico. Ningún valor está asociado con el 
nombre del procedimiento, por consiguiente no se 
puede utilizar en una expresión o instrucción. 
Procedimientos
Un procedimiento se invoca escribiendo su 
nombre, por ejemplo, BUSQUEDA, para 
indicar que dicho procedimiento se va a 
utilizar y la lista de los parámetros actuales. 
Cuando se invoca el procedimiento, los pasos 
que lo definen se ejecutan y a continuación se 
devuelve el control al programa que le llamó.
Diferencias entre los procedimientos y 
las funciones
1. Las funciones devuelven un valor, los 
procedimientos pueden devolver 0, 1 ó n 
valores y en forma de lista de parámetros.
2. El procedimiento se declara igual que una 
función, pero su nombre no está asociado a 
ninguno de los resultados que obtiene.
3. Las funciones solo tienen parámetros de 
entrada, en cambio los procedimientos pueden 
tener de entrada, salida y/o entrada/salida.
Declaración de un Procedimiento
procedimiento <nombre del procedimiento> (lista de parámetros ficticios)
var
[declaraciones de las variables que usa el procedimiento]
inicio
<instrucciones> //cuerpo del procedimiento
fin_procedimiento
Cuando se llama o invoca al procedimiento, cada parámetro ficticio toma como valor 
inicial el valor del correspondiente parámetro actual. Ej:

algoritmo demo
var
entero: años
real: número, tasa
inicio

CALCULO(número, años, tasa)

fin.

procedimiento CALCULO (E p1: real; E p2: entero; S p3:real)


inicio
<acciones>
fin_procedimiento
Ejecución de un Procedimiento
Las acciones sucesivas a realizar son las 
siguientes:
1.Los parámetros actuales sustituyen a los 
parámetros ficticios.
2.El cuerpo de la declaración  del procedimiento 
se sustituye por la llamada del procedimiento.
3.Por último, se ejecutan las instrucciones 
escritas en el cuerpo del procedimiento.
Ejemplo donde se ilustra el uso de un procedimiento, para 
realizar la división de dos números enteros y obtener el cociente 
y el resto.
Algoritmo Principal:
Algoritmo aritmética
Var
M, N, P, Q, S, T: entero
Inicio
escribir(‘Introduzca dos números enteros:’)
leer(M,N)
DIVISION(M,N,P,Q)
DIVISION(M*N‐4, N+1, S, T)
escribir(‘De la división entera entre ‘,M,’ y ‘,N,’ el cociente es ‘,P,’y el resto’, 
Q)
escribir(‘De la división entera entre ‘,M,’*’,N,’ y ‘,N,’+1 el cociente es ‘,S,’ y el 
resto’, T)
fin.
procedimiento DIVISION (E dividendo, divisor: 
entero ; S cociente, resto: entero)
inicio
cociente ← dividendo DIV divisor
resto ← dividendo – cociente*divisor
fin_procedimiento.
Ámbito: variables locales y variables globales

Ámbito de un variable: es la parte del programa 
donde se conoce el identificador de una 
variable.
Las variables utilizadas en los programas 
principales y subprogramas se clasifican en 
dos tipos, según el ámbito:
1.Variables locales.
2.Variables globales.
Variables locales
Son aquellas variables que se declaran y definen 
dentro de un subprograma, y son distintas de 
las variables con el mismo nombre declaradas 
en cualquier parte del programa principal. 
El significado de una variable se confina, al 
subprograma en el que está declarada. 
Variables locales
Cuando otro subprograma utiliza una variable 
con el mismo nombre se refiere a una 
posición diferente de memoria. 
Una variable local no tiene ningún significado en 
otros subprogramas.
Variables globales
Son aquellas variables que están declaradas en 
el programa principal, del que dependen 
todos los subprogramas. 
Tienen la ventaja de compartir información de 
diferentes subprogramas, sin una 
correspondiente entrada en la lista de 
parámetros.
Ámbito de las variables
En la siguiente figura se muestra un esquema de un programa 
con diferentes subprogramas, algunas variables son locales y 
otras globales, mostrando el ámbito de cada definición:
A
B Variables definidas Accesibles desde:
C en:

A A, B, C, D, E, F, G

B B, C
D
E C C
F
D D, E, F, G
G E E, F, G

F F

G G
Comunicación con subprogramas: 
Paso de parámetros
Cuando un programa principal invoca a un 
subprograma, la información se transmite o 
comunica a través de la lista de parámetros, y 
se establece una correspondencia automática 
entre los parámetros actuales y ficticios. 
Los parámetros ficticios toman el valor de los 
parámetros actuales.
Correspondencia de parámetros
Existe dos  métodos para establecer la 
correspondencia de parámetros:
1.Correspondencia posicional: se establece 
relacionando los parámetros actuales y 
ficticios según su posición, en Turbo Pascal es 
de izquierda a derecha.
Este método tiene algunas desventajas cuando 
el número de parámetros es grande. Por lo 
general, es el que usan la mayoría de los 
lenguajes de programación de alto nivel.
Correspondencia de parámetros
2. Correspondencia por el nombre explícito, 
también llamado método de paso de 
parámetros por nombre, en las llamadas se 
indican explícitamente la correspondencia 
entre los parámetros actuales y ficticios. 
Ej. SUB(Y>=B, X=>30), que hace corresponder 
al parámetro actual B con el ficticio Y,  y el 
parámetro actual 30 con el ficticio X, durante 
la invocación del procedimiento SUB.
Paso de Parámetros
Existen diferentes métodos para la transmisión 
o el paso de parámetros a los subprogramas. 
Es preciso conocer el método adoptado por 
cada lenguaje de programación, ya que esto 
puede afectar la lógica del programa. 
Dicho de otro modo, un mismo programa puede 
producir diferentes resultados bajo diferentes 
sistemas de paso de parámetros.
Paso de Parámetros
Los métodos más empleados para realizar el 
paso de parámetros son:
1.Paso por valor (también conocido como 
parámetro valor).
2.Paso por referencia o dirección (también 
conocido como parámetro variable).
Paso por valor 
Los parámetros ficticios, reciben como valores 
iniciales los valores de los parámetros 
actuales, y con ellos se ejecutan las acciones 
descritas en el subprograma.
Si el subprograma realiza una operación que 
cambia el valor del parámetro ficticio, dicho 
cambio no se verá reflejado en el valor del 
parámetro actual.
Paso por valor 
Aunque este método es sencillo tiene una 
limitación: no existe ninguna otra conexión 
con los parámetros actuales, y entonces los 
cambios que se produzcan por efecto del 
subprograma, no producen cambios en los 
argumentos originales y por consiguiente, no 
se pueden pasar valores de retorno al punto 
de llamada; es decir, todos los parámetros son 
solo de entrada.
Paso por valor 
La llamada por valor no devuelve información al 
programa que llama.
Paso por referencia o dirección 
En numerosas ocasiones se requiere que ciertos 
parámetros sirvan como parámetros de salida, 
es decir, devuelvan los resultados al programa 
que los invoca.
Este método se denomina paso por referencia o 
también de llamada por dirección o variable.
Paso por referencia o dirección 
El programa principal pasa al subprograma la 
dirección en memoria del parámetro actual 
(que está en el ámbito de la unidad llamante). 
Una referencia al correspondiente parámetro 
formal se trata como una referencia a la 
posición de memoria, cuya dirección se ha 
pasado. 
Así los parámetros se comparten y pueden ser  
modificados directamente por el 
subprograma.
Paso por referencia o dirección 
La característica principal de este método es su 
simplicidad y la analogía directa con la idea de 
que las variables tienen una posición de 
memoria asignada, desde la cual se puede 
obtener o actualizar sus valores.
Paso de Parámetros
• El pase de información es en ambos sentidos 
(entrada y/o salida), por esto, a los 
parámetros que son de S ó E/S y se les 
denomina parámetros variables.
• Los parámetros que se pasan por valor y los 
parámetros variables (salida) se pueden 
identificar en la cabecera del subprograma. En 
el caso de TP, los parámetros variables deben 
ir precedidos por la palabra clave var.
Paso de Parámetros
En síntesis, en el método de paso por valor una vez que 
arranca la ejecución del procedimiento, cualquier 
cambio en el valor de un parámetro ficticio no se 
refleja en un cambio en el correspondiente 
parámetro actual. Esto es, cuando el subprograma se 
termine, el argumento actual tendrá exactamente el 
mismo valor que cuando el subprograma comenzó, 
independientemente de lo que le haya sucedido al 
parámetro ficticio. Los parámetros de entrada se 
denominan parámetros valor.
Paso de Parámetros
En el método de paso por referencia o dirección, 
se envía la posición o dirección (no el valor) 
del parámetro actual, por lo que un cambio en 
el parámetro ficticio se refleja en un cambio 
en el correspondiente parámetro actual, ya 
que ambos tienen la misma dirección de 
memoria. Los parámetros de salida o 
entrada/salida, se denominan parámetros 
variables.
Efectos Laterales
• Efectos laterales: son las modificaciones que se 
producen, mediante una función o procedimiento, 
en las variables situadas fuera del subprograma.
• Son considerados como una mala técnica de 
programación.
• Aunque en algunos casos los efectos laterales 
pueden ser beneficiosos en la programación, es 
conveniente no recurrir a ellos de modo general. Los 
efectos laterales son perjudiciales en la mayoría de 
los casos.
Efectos Laterales

Programa principal y otros  Programa principal, procedimiento y 
procedimientos otras funciones

Efectos  Efectos 
laterales Lista de  laterales Argumentos Valor devuelto por la 
parámetros 
función
actuales (parámetros valor)

Procedimientos Función

En procedimientos En funciones
Ejercicios:
1) Escriba un algoritmo que, haciendo uso de un vector, 
lea 15 notas parciales, obtenga y muestre por 
pantalla:
a) el promedio de las notas de dicho parcial, usando una 
función.
b) la cantidad de aprobados y la cantidad de 
reprobados, usando un procedimiento.
c) la mayor nota, usando una función.

2) Escriba un algoritmo que calcule la suma de dos 
matrices 4x4 de números enteros, haciendo uso de 
subprogramas. 
3. Se desea calcular el salario neto semanal de un trabajador en función del número 
de horas trabajadas, los impuestos a pagar y los descuentos de ley. Las 
condiciones son las siguientes:
• Las primeras 40 horas se pagan a tarifa normal (Bs. 100 por hora).
• Las horas extra (es decir, si un trabajador labora más de 40 horas a la semana) se 
pagan a 2.5 veces la tarifa normal.
• Los descuentos de ley son 1.5% por LPH, 1.0% por Paro Forzoso y 4% de SSO, 
sobre el salario bruto.
• Las tasa de impuesto dependen del salario bruto menos los descuentos:
– Hasta Bs. 4000 son libres de impuestos.
– A partir de Bs. 4000 y hasta Bs. 5500 pagan un 15% de impuesto.
– Y más de Bs. 5500 pagan un 35% de impuesto.

Escriba un algoritmo que arroje como salida el nombre del trabajador, su 
salario bruto, total de los descuentos de ley, total de impuestos a pagar y 
el salario neto que finalmente cobrará dicho trabajador. Utilice un 
procedimiento para leer los datos de entrada y tres funciones: la primera 
para calcular el salario bruto, la segunda para calcular los descuentos de 
ley y la tercera para calcular los impuestos.
4) Escriba un algoritmo que realice la suma de 
los números positivos y la suma de los 
números negativos de una matriz T de 4 filas y 
5 columnas, usando funciones.
5) Un investigador obtuvo los datos relativos a la 
producción anual de arroz de Colombia, Venezuela, 
Perú, Brasil y Chile desde el año 2006 al 2011.  
Escriba un algoritmo que, haciendo uso de al menos 
tres subprogramas según su propio criterio, le 
permita a dicho investigador determinar lo siguiente: 
a) La producción total de arroz de cada país durante los 
años 2006‐2011. 
b) El país que más produjo arroz durante los años 2006‐
2011. 
c) El año en que Venezuela produjo menos arroz 
durante los años 2006‐2011. 

Potrebbero piacerti anche