Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Básicos de Programación
Digital
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
ió
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
Intérprete Compilador
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.
Entrada/Salida Pantalla
Decisión Teclado
Ciclo de vida de un software
Ejemplo de Diagrama de flujo
Inicio
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
Intérprete Compilador
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
ió
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
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 1 Instrucciones 2
3. Instrucciones y tipos de instrucciones
Instrucción 2
V
Condición
lógica
F
4. Elementos básicos de un programa
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)
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)
o (or) p o q (p or q) Disyunción de p y q
7.2 Expresiones lógicas (booleanas)
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
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
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
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:
si_no
e1 en
Variable
e2 e3
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
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:
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
• 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
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.
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
ió
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
ió
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
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é
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 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
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
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
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
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.
Á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.