Este documento presenta los fundamentos de la programación, incluyendo conceptos como algoritmos, programas, lenguajes de programación, estructuras de datos y más. Explica que un algoritmo es una secuencia de pasos para resolver un problema, y que los lenguajes de programación permiten expresar algoritmos para que las computadoras puedan ejecutarlos. También clasifica los lenguajes de programación y describe conceptos clave como variables, constantes, expresiones y tipos de datos.
Diapositiva con los conceptos básicos necesarios para comenzar a adentrarse en el mundo de las computadoras y de la programacion, define qué es una computadora, bit, byte, memoria, IDE, lenguaje de programación, se establece la diferencia entre lenguajes compilados e interpretados, etc
Diapositiva con los conceptos básicos necesarios para comenzar a adentrarse en el mundo de las computadoras y de la programacion, define qué es una computadora, bit, byte, memoria, IDE, lenguaje de programación, se establece la diferencia entre lenguajes compilados e interpretados, etc
Instrucciones del procedimiento para la oferta y la gestión conjunta del proceso de admisión a los centros públicos de primer ciclo de educación infantil de Pamplona para el curso 2024-2025.
1. REPÚBLICA BOLIVARIANA DE VENEZUELA
UNIVERSIDAD DEL ZULIA
FACULTAD EXPERIMENTAL DE CIENCIAS
DEPARTAMENTO DE PROGRAMACIÓN
Prof. Lucía Bustamante
GUÍA ALGORITMO Y PROGRAMACIÓN I
2. UNIDAD I: FUNDAMENTOS DE PROGRAMACIÓN
Prof. Lucía Bustamante
Unidad I: Fundamentos de programación
Objetivo terminal: Conocer y aplicar efectivamente los fundamentos de
programación.
1. Concepto de algoritmo
Un algoritmo consiste en la descripción clara y detallada del procedimiento
a seguir para alcanzar la solución de un problema. En un algoritmo se
establece la secuencia ordenada de pasos o instrucciones a ejecutar para
lograr esta solución.
El término algoritmo proviene del nombre Mohammed al-Khowarizmi,
matemático persa que vivió durante el siglo IX y alcanzó gran reputación por
el enunciado de las reglas, paso a paso, para sumar, restar, multiplicar y
dividir números decimales.
2. Importancia de los algoritmos en la programación
Es importante el estudio y conocimiento de los Algoritmos desde su
aparición hasta nuestros días es, y seguirá siendo; vital para el desarrollo
de aplicaciones para computadoras y el manejo y dominio de la lógica de
programación para resolver problemas.
La solución de un problema se puede expresar mediante un algoritmo. El
programador de computadoras es ante que nada una persona que resuelve
problemas, por lo que para llegar a ser un programador eficaz se necesita
aprender a resolver problemas de un modo riguroso y sistemático. A la
metodología necesaria para resolver problemas mediante programas se
denomina Metodología de la Programación. El eje central de esta
metodología es el algoritmo.
Los algoritmos son independientes tanto del lenguaje de programación en
que se expresan como de la computadora que lo ejecuta. En cada problema
el algoritmo se puede expresar en un lenguaje diferente de programación y
ejecutarse en una computadora distinta; sin embargo, el algoritmo será
siempre el mismo. Así, por ejemplo, en una analogía con la vida diaria, una
receta de un plato de cocina se puede expresar en español, ingles o
3. UNIDAD I: FUNDAMENTOS DE PROGRAMACIÓN
Prof. Lucía Bustamante
francés, pero cualquiera que sea el lenguaje, los pasos para la elaboración
del plato se realizaran sin importar el idioma del cocinero.
En la ciencia de la computación y en la programación, los algoritmos son
más importantes que los lenguajes de programación o las computadoras.
Un lenguaje de programación es tan solo un medio para expresar un
algoritmo y una computadora es solo un procesador para ejecutarlo. Tanto
el lenguaje de programación como la computadora son los medios para
obtener un fin: conseguir que el algoritmo se ejecute y se efectúe el proceso
correspondiente.
Dada la importancia del algoritmo en la ciencia de la computación, un
aspecto muy importante será el diseño de algoritmos.
3. Características de los algoritmos
Preciso: Indicar el orden de realización de cada paso.
El orden de realización de las operaciones debe estar dado en una
forma clara. No debe existir ambigüedad en el mismo.
Todos los posibles caminos de solución deben aparecer recogidos en
el algoritmo.
Deterministico: Si se sigue el algoritmo dos o más veces sobre los
mismos datos de entrada se debe obtener el mismo resultado cada
vez.
Finito: Debe tener un número finito de pasos.
El algoritmo debe terminar en un momento determinado después de
ejecutar un número finito de pasos.
Elemental: La secuencia de las operaciones debe ser detallada. Los
pasos deben estar indicados como instrucciones sencillas, de ser
posible representables en el lenguaje de programación a utilizar
después.
General: Debe encontrar la solución para las diferentes instancias
del problema que resuelve, no debe estar sujeto a unos parámetros
de entrada específicos.
4. UNIDAD I: FUNDAMENTOS DE PROGRAMACIÓN
Prof. Lucía Bustamante
4. Conceptos relacionados con la programación
4.1.Instrucción
Información que indica a la computadora una acción elemental a
ejecutar. Este término es empleado en lenguajes de bajo nivel.
4.1.1. Tipos de instrucciones
Las instrucciones que se indican en un algoritmo generalmente son
de los siguientes tipos:
Lectura. Recepción de datos.
Computo. Realización de operaciones matemáticas o
lógicas.
Almacenamiento. Almacenaje de datos.
Salida. Impresión de datos almacenados.
4.2.Programa
Es una serie de instrucciones perfectamente legibles por la
computadora, ordenadas secuencialmente para que esta realice una
tarea específica.
4.3.Diferencia entre algoritmo y programa
En los algoritmos no se especifica el lenguaje de programación a
emplear. Son un código genérico para todos los lenguajes.
Ej.: Algoritmo y programa para hallar el área de un cuarto que tiene una
longitud de 8 metros por 3 metros de ancho.
Algoritmo Programa en C
1. Asignación de los datos a las
variables largo y ancho.
2. Cálculo del área como: área =
largo * ancho.
3. Mostrar por pantalla la variable
área.
…
int largo = 8;
int ancho = 3;
int area = largo * ancho;
println(“El área es: %d”, área);
5. UNIDAD I: FUNDAMENTOS DE PROGRAMACIÓN
Prof. Lucía Bustamante
Los algoritmos son secuencia de instrucciones que conducen a la
solución de un problema. Los programas son una secuencia de
instrucciones que indican al computador los pasos para solucionar un
problema.
No todos los algoritmos pueden llegar a ser programas, en general son
programables los algoritmos que resuelven problemas del tipo
matemático-lógicos.
5. Clasificación de programas
5.1.De sistema
Un computador emplea un código de muy bajo nivel, basado en números
binarios para operar. Para evitar el uso de este lenguaje para interactuar
con el computador se cuenta con programas que facilitan la
comunicación entre el usuario y el computador, estos programas se
denominan programas de sistema.
El principal programa o componente de software del computador es el
sistema operativo.
5.1.1. Sistema operativo
Es un intérprete entre el usuario, los programas de aplicación y el
computador. El computador al ser encendido realiza un chequeo de
sí mismo y carga el sistema operativo en memoria RAM y comienza
a ejecutarlo. Es cuando el computador está listo para comunicarse
con el usuario.
5.2.De aplicación
Son los programas que se cargan sobre el sistema operativo y con los
que el usuario realiza tareas especificas, ejemplos se ellos son:
procesadores de palabras, hojas de cálculo, manejadores de bases
datos, juegos, etc.
6. Lenguajes de programación.
6.1.Definición
6. UNIDAD I: FUNDAMENTOS DE PROGRAMACIÓN
Prof. Lucía Bustamante
Son dialectos con los cuales podemos listar instrucciones que luego de
ser traducidas no permiten indicar al computador qué tareas realizar.
6.2.Clasificación
Los lenguajes de programación entre más sencillos son para el
programador son más difíciles de entender por el computador, lo que los
hace perder versatilidad. Los lenguajes de programación se clasifican
según su versatilidad en:
6.2.1. Bajo nivel
Son muy versátiles, permiten un control total del computador. Entre
los lenguajes de bajo nivel encontramos: el código máquina y el
ensamblador.
6.2.1.1. Máquina
El lenguaje máquina comprende una serie de instrucciones en
términos de códigos numéricos (cadenas de ceros y unos) que
pueden ser interpretados por cierto modelo de computadora. Es
un código propio de cada computadora que esta relacionado con
el diseño del hardware de la misma.
6.2.1.2. Ensamblador
Lenguaje de programación basado en códigos nemotécnicos
(abreviaturas en inglés) y direcciones simbólicas que permite
representar operaciones elementales de la computadora.
6.2.2. Alto nivel
Poco versátiles, son bastante sencillos de aprender por el
programador, usan palabras inglesas para definir las órdenes que
se pueden dar al computador, así como notaciones matemáticas de
uso común.
Relación de complejidad de los lenguajes de programación para el
usuario y el computador:
7. UNIDAD I: FUNDAMENTOS DE PROGRAMACIÓN
Prof. Lucía Bustamante
6.3.Traductores
Programas que convierten los programas escritos por los programadores
en un lenguaje de programación en programas con instrucciones en
código máquina.
6.3.1. Compilador
Es un programa que traduce una serie de órdenes en un lenguaje de
programación (código fuente) al lenguaje propio o particular de la
máquina. También detecta los errores de programación o sintaxis
que se hayan cometido.
Compilar es el proceso de traducción de código fuente a un
programa de lenguaje de máquina.
Un compilador realiza las siguientes tareas.
Traduce programa y a parte se corre binario generado.
Si hay error, no genera archivo ejecutable (no ejecuta).
El código binario generado es 100% lenguaje de máquina.
6.3.2. Intérprete
Programa que efectúa la traducción y ejecución sucesiva instrucción
a instrucción de un programa escrito en un lenguaje de alto nivel.
Un intérprete realiza las siguientes tareas:
Traduce y ejecuta una línea del programa a la vez.
Lenguaje de alto nivel
Lenguaje ensamblador
Lenguaje máquina Computadora
Usuario
8. UNIDAD I: FUNDAMENTOS DE PROGRAMACIÓN
Prof. Lucía Bustamante
Si hay error, detiene ejecución del programa.
Programas más lentos pero más portables y flexibles.
6.3.3. Ensamblador
Programa que traduce un programa escrito en lenguaje ensamblador
en un programa objeto escrito en código máquina.
7. Componentes de un programa
7.1.Palabras claves
Son las palabras reservadas por el lenguaje de programación y que
tienen un significado especial para el compilador.
7.2.Identificadores
Son los nombres con los que se permite hacer referencia a los diferentes
objetos de un programa. Los identificadores deben cumplir con las
siguientes reglas:
Ser significativos, sugerir que es lo que representan.
No pueden ser palabras reservadas.
Comprendidos por uno o más caracteres que pueden ser letras,
dígitos y algunos caracteres especiales, pero siempre deben
comenzar con una letra.
7.3.Delimitadores
Signos especiales que permiten al compilador separar y reconocer las
diferentes unidades sintácticas del lenguaje. Los delimitadores
dependen del lenguaje de programación, sin embargo algunos de los
delimitadores que tienen igual significado en los diferentes lenguajes
son:
Punto y coma: ; Indica fin de una sentencia.
Coma: , Separa dos elementos consecutivos
como parámetros formales en la
declaración de un subprograma.
9. UNIDAD I: FUNDAMENTOS DE PROGRAMACIÓN
Prof. Lucía Bustamante
Paréntesis: () Enmarcan una lista de parámetros,
condiciones, indican llamada a un
subprograma.
7.4.Expresiones
Las expresiones son combinaciones de operandos (constantes,
variables u otras expresiones) y operadores.
7.5.Comentarios
Son líneas que sirven para aclarar el algoritmo o programa al propio
programador y a otros. Es conveniente añadir comentarios en los
algoritmos y programas para hacerlos más fáciles de leer, entender
y por tanto corregir y mantener.
Los comentarios son ignorados por el compilador, su función es
permitir al programador la documentación de los programas.
7.6.Estructuras de datos
Una estructura de datos es una representación de los datos de modo
que puedan ser procesados como un conjunto homogéneo.
Según Roger Pressman, la estructura de datos es una representación de
la relación lógica entre elementos individuales de datos y dicta la
organización, métodos de acceso, grados de asociatividad y alternativas
de procesamiento para información siendo el elemento escalar la
estructura de datos más simple.
Según UIT, los programas son formulaciones concretas de algoritmos
abstractos basados en estructuras de datos.
Programas = Algoritmos + Estructuras de Datos.
“Los datos en primera instancia representan abstracciones de
fenómenos reales formuladas como estructuras abstractas que no tienen
que ser necesariamente las existentes en los lenguajes utilizados
usualmente en programación. En el proceso de construcción de un
programa se reforma gradualmente la representación de datos al mismo
10. UNIDAD I: FUNDAMENTOS DE PROGRAMACIÓN
Prof. Lucía Bustamante
tiempo que el algoritmo, de forma que, progresivamente se vaya
cumpliendo con las restricciones impuestas por el sistema de
programación disponible”.
8. Constantes, variables y expresiones
8.1. Constantes
Una constante es un valor invariante que ocupa un lugar en la memoria
y puede ser referenciado en el programa por el valor mismo o un
nombre, generalmente se designan al principio del programa. Se pueden
declarar constantes de cualquier tipo simple de dato.
8.2. Variables
Una variable es un nombre compuesto por letras y números (el primer
carácter ha de ser una letra) con el que se designan una porción de
memoria en la que se almacena un valor que pueden variar a lo largo del
programa. Se pueden definir variables de cualquier tipo de dato simple o
compuesto.
8.3.Usos básicos de las variables
Las variables pueden ser utilizadas para diversos propósitos durante el
curso de las operaciones planteadas en un algoritmo. Entre los usos
básicos se tienen:
Acumulador En este caso la variable contiene el
resultado de efectuar repetidas veces
una operación aritmética donde la
variable interviene. En cada ejecución
se suma uno a la variable acumulador
y se almacena en ella.
Contador La variable lleva la cuenta del número
de veces que se presenta una
determinada situación. Por lo general
se define su valor en 0 y cada vez que
se presente el evento se incrementa
11. UNIDAD I: FUNDAMENTOS DE PROGRAMACIÓN
Prof. Lucía Bustamante
su valor en 1.
Control El valor de la variable determina si se
ejecuta o no un conjunto de
sentencias, las cuales se ejecutan
una vez por cada valor permitido que
tome la variable a lo largo del proceso
repetitivo.
Bandera La variable actúa como un indicador,
puede tomar sólo dos valores. El valor
inicial de la variable cambia cuando
se presenta determinada situación.
8.4.Expresión
Es una combinación de variables, constantes, operadores y referencias
a funciones que expresan cálculos aritméticos y/o lógicos a ser
realizados.
En su forma más simple una expresión esta constituida por una variable
o constante.
9. Datos y tipos de datos.
9.1.Dato
Expresión general que describe los objetos con los cuales opera una
computadora.
Ej.: Cifras de venta de un supermercado, notas de un parcial, número de
vuelos San Juan-Maiquetía.
9.2.Tipo de dato
Descripción de un conjunto de datos que comparten propiedades
(tamaño en bits que ocupan en la memoria, rango de valores que
pueden tomar) y operaciones que pueden ser aplicadas sobre este.
12. UNIDAD I: FUNDAMENTOS DE PROGRAMACIÓN
Prof. Lucía Bustamante
Toda variable debe estar asociada a un tipo de dato, el cual es
responsable de indicar el dominio de valores válidos y conjunto de
operaciones.
9.3.Clasificación tipos de datos
9.3.1. Simples
Almacenan un solo valor (enteros, reales, caracteres, lógicos)
Cuando se opera con valores de diferentes tipos resulta un valor del
tipo más dominante, si este resultado es almacenado en un tipo de
dato no apropiado se puede perder precisión en los cálculos.
Ej.: Se multiplica un entero con un real, se obtiene un real. Si el
resultado no es almacenado en una variable del tipo real, sino del
tipo entero el valor se trunca y se pierde precisión.
9.3.2. Compuestos
Almacenan uno o más valores (arreglos, estructuras de datos
lineales y no lineales), se definen mediante la composición de datos
simples y se utilizan cuando se requiere el procesamiento de
múltiples datos con características comunes.
10.Tipos de datos simples
10.1. Enteros
Subconjunto finito de loa números enteros, cuyo rango o tamaño
dependerá del lenguaje de programación en el que posteriormente se
codificará el algoritmo y de la computadora utilizada.
Dependiendo del número de bits empleado en cada computadora, el
dominio del tipo entero varía en: -2n-1
,…, 0,…,2n+1
-1
Ej.: Si n es 16 el dominio de los enteros comprende los números:
-215
,… 0,… 215
– 1 = -32768,…, 0,…32767
10.2. Reales
Subconjunto de los números reales limitado no sólo en tamaño, sino
también en cuanto a la precisión (que depende de la computadora). Se
13. UNIDAD I: FUNDAMENTOS DE PROGRAMACIÓN
Prof. Lucía Bustamante
conocen como números de punto flotante cuya representación consta de
una mantisa (parte fraccional), de una base y de un exponente (potencia
a la cual se eleva la base).
Ej.: Para el número 0,437875x103
se tiene:
Mantisa = 0,437875
Base = 10
Exponente = 3
10.3. Carácter
Conjunto finito y ordenado de los símbolos que el computador reconoce:
letras, dígitos, signos de puntuación, etc.
Un carácter es almacenado en un byte usando el código de 8 bits ASCII
(American Standandard Code for Information Interchange), lo que da la
posibilidad de representar 28
= 256 caracteres diferentes.
10.4. Lógico
Conjunto formado por los valores: Cierto y Falso.
11.Tipos de expresiones
11.1. Operadores
Se llaman operadores a todos aquellos símbolos que realizan una
operación determinada del argumento antecedente con el consecuente.
La sintaxis general de un operador es:
Argumento antecedente Operador argumento consecuente
11.2. Expresiones aritméticas
11.2.1. Definición
Son expresiones de resultado numérico. Los valores posibles como
resultado de las expresiones aritméticas pertenecen a los tipos de
datos entero o real.
11.2.2. Operadores aritméticos
14. UNIDAD I: FUNDAMENTOS DE PROGRAMACIÓN
Prof. Lucía Bustamante
Serie de símbolos que indican determinadas operaciones
matemáticas a efectuar con los datos.
Operador Operación que denota
^ Potenciación
/ División
* Multiplicación
- Resta
+ Suma
Ej.: Expresiones aritméticas
a/b a dividido entre b
a * b a multiplicado por b
a – b a menos b
a + b a sumado a b
11.2.3. Precedencia entre operadores aritméticos
Los operadores siguen un orden de precedencia a la hora de evaluar
las expresiones, ordenados en orden de mayor a menor prioridad los
operadores aritméticos son:
Potenciación
División y multiplicación
Suma y resta.
Esto quiere decir que aunque las expresiones son leídas de izquierda
a derecha se realizan primero las operaciones aritméticas de
potenciación, después las de división y multiplicación y finalmente las
sumas y restas.
Ej.: Para valores a = 5, b = 2, c = 3, la expresión aritmética a * b ^ c
tiene como resultado 40, primero se eleva 2 a la 3 y se obtiene como
resultado 8 y luego se multiplica 5 por 8.
15. UNIDAD I: FUNDAMENTOS DE PROGRAMACIÓN
Prof. Lucía Bustamante
Cuando los operadores tienen la misma precedencia se opera de
izquierda a derecha (excepto la potenciación que se evalúa de
derecha a izquierda)
Se puede cambiar el orden de precedencia de los operadores
encerrando entre paréntesis la expresión.
Ej.: (a * b) ^ c, con los mismos valores del ejemplo anterior
tendríamos como resultado 1000 (10 elevado a la 3).
11.3. Expresiones lógicas
11.3.1. Definición
Son expresiones de resultado lógico. Esto significa que existen dos
valores posibles como resultado de la expresión de evaluar la
expresión: Verdadero o Falso.
11.3.2. Operadores relacionales
Operan sobre expresiones de diferentes tipos (enteras, reales,
caracteres) y retornan un valor del tipo lógico: Verdadero o falso.
Operador Operación que denota
< Menor que
> Mayor que
<= Menor o igual que
>= Mayor o igual que
== Igualdad
!= Desigualdad
11.3.3. Precedencia
Al igual que los operadores aritméticos para cambiar el orden de
evaluación se utilizan los paréntesis y la evaluación de las
expresiones con operadores de igual prioridad se realiza de
izquierda a derecha. Ordenados en orden de mayor a menor
prioridad los operadores relacionales son: Menor que, Mayor que,
16. UNIDAD I: FUNDAMENTOS DE PROGRAMACIÓN
Prof. Lucía Bustamante
Menor o igual que, Mayor o igual que y luego los operadores de
Igualdad y Desigualdad.
<, >, <=, >=
==, !=
Tanto los operadores relacionales tienen un nivel de precedencia menor
que los operadores aritméticos. Esto significa que una expresión x > y +
z se evalúa como x > (y + z).
11.3.4. Operadores lógicos
Estos operadores se basan en la aritmética del lenguaje binario, en
el que existen sólo dos valores, 0 ó 1, Falso o Verdadero. Operan
sobre operandos lógicos.
Operador Operación que denota
! NOT
& AND
|| OR
11.3.5. Precedencia
!
&
||
17. UNIDAD II: INTRODUCCIÓN A LA PROGRAMACIÓN ESTRUCTURADA
Prof. Lucía Bustamante
Unidad II: Introducción a la programación estructurada
Objetivo terminal: Conocer y aplicar la programación estructurada en la
solución de problemas.
1. Pasos para resolver un problema mediante el uso del computador
1.1.Análisis del problema (E-P-S)
Es el primer paso que el programador debe realizar. Se plantea el
problema, se trata de identificar la naturaleza del mismo y se analiza la
forma de resolverlo, en qué consiste su solución. Si es necesario se
recurre a la bibliografía en busca de métodos para solucionarlo y se
elige el que más se adapte a la programación.
En este paso se describen los datos de entrada, el proceso y lo
resultados o salida.
Especificaciones de entrada: Información necesaria para la solución
del problema.
¿Cuántos y cuáles son los datos de entrada?
¿Cuándo los datos de entrada son válidos? Bajo qué condiciones va a
ser resuelto el problema.
Proceso: Operaciones o cálculos necesarios para encontrar la solución
del problema.
¿Cuáles métodos se emplearan?
¿Qué tipo de ecuaciones?
¿Cuántas ecuaciones?
Se debe determinar el método de solución más factible, a veces existe
un único método, en otros casos existen varios de entre los cuales se
debe escoger el que en forma óptima, según los criterios empleados,
resuelva el problema. Esto supone el conocimiento adecuado de los
procedimientos matemáticos y/o lógicos necesarios para alcanzar la
solución del problema desde un punto de vista teórico. De ser necesario,
se recurrirá a la bibliografía adecuada para ubicar la información
18. UNIDAD II: INTRODUCCIÓN A LA PROGRAMACIÓN ESTRUCTURADA
Prof. Lucía Bustamante
requerida para tener capacidad de solución, a nivel teórico, del
problema.
Especificaciones de salida: Resultados finales de los cálculos.
¿Cuántos y cuáles son los datos que se producirán (datos de salida)?
Ej.: Análisis E-P-S para determinar…
1.2.Diseño del algoritmo
Una vez seleccionado el método de solución, especificado los datos de
entrada y los resultados, se procederá al diseño del algoritmo.
Esto conlleva a un análisis lógico de las operaciones que deben
ejecutarse para alcanzar la solución del problema. En este paso se
emplean las técnicas de diseño de algoritmos como el Diseño
Descendente, las técnicas de la Programación Estructurada y las
técnicas de representación de algoritmos para su escritura y
representación.
Se debe describir la secuencia ordenada de pasos que conducen a la
solución del problema planteado. Los algoritmos deben cumplir con las
características mencionadas en la sección 3 y ser expresados a través
de una técnica de representación de algoritmos.
Ej.: Diseño del algoritmo para…
1.3.Prueba del algoritmo
En esta fase se corrigen errores de lógica, que conducen a la obtención
de resultados no esperados. Se hace una prueba manual del algoritmo.
El programador elige un conjunto de datos de entrada y ejecuta
manualmente cada sentencia del programa fuente y verifica que los
resultados obtenidos sean los esperados, de acuerdo al conjunto de
datos de salida. Este proceso debe ser llevado a cabo con conjuntos de
datos que permitan ejecutar todos los caminos posibles del programa.
1.4.Codificación
En esta fase, se pasa el pseudo código, diagrama de flujo o diagrama N-
S, a un lenguaje de programación especifico. Se define las variables a
19. UNIDAD II: INTRODUCCIÓN A LA PROGRAMACIÓN ESTRUCTURADA
Prof. Lucía Bustamante
utilizar y se codifica todo el procedimiento. El resultado de obtenido es
un archivo con el código fuente del programa.
Las instrucciones expresadas en el algoritmo se traducen a
instrucciones en algún lenguaje programación para obtener el programa
fuente.
1.5.Prueba y depuración del programa
Una vez escrito el programa fuente, se procede a su compilación. El
compilador toma el código escrito en el lenguaje empleado y lo traduce a
código máquina (que es como lo entiende el computador). En esta fase
se ponen de manifiesto los errores sintácticos y de programación que se
puedan haber cometido.
Se deben corregir todos los errores y avisos del compilador, una vez
hecho esto el compilador devuelve un archivo objeto, que es un archivo
escrito en código máquina pero aún no es ejecutable. Esto debido a que
el compilador tiene escritos muchos segmentos de código que utiliza
frecuentemente y se encuentran guardados en librerías de forma que
cuando el compilador encuentra un segmento de código que tienen en
una librería sitúa en el programa una llamada a la librería.
Para hacer el código completamente ejecutable se debe usar el
programa de enlace o Linker. Este programa toma el archivo objeto que
generó el compilador y busca en él todas las llamadas a librerías.
Seguidamente toma de las librerías el código requerido y lo inserta en el
programa final. De esta forma el Linker devuelve un archivo con
extensión .exe y ese es el programa final, que puede ser cargado en
memoria para su ejecución.
Después de la ejecución del programa se hace la verificación de que los
resultados obtenidos se correspondan con los esperados.
20. UNIDAD II: INTRODUCCIÓN A LA PROGRAMACIÓN ESTRUCTURADA
Prof. Lucía Bustamante
Editor. Lenguaje
de Programación
Compilador
Encadenador
Cargador
Ejecución
Errores de
Sintaxis
Errores de
Lógica
Programa fuente
No
Si
Programa objeto
Programa ejecutable
Solución del problema
No
Corregir errores en el programa fuente
Diseño
Análisis (E-P-S)
Problema
Algoritmo
Pasos para resolver un problema mediante el uso del computador.
21. UNIDAD II: INTRODUCCIÓN A LA PROGRAMACIÓN ESTRUCTURADA
Prof. Lucía Bustamante
2. Técnicas de representación de algoritmos.
Son la primera aproximación a la programación del algoritmo diseñado, a
través de estas técnicas se muestra la estructura del programa.
2.1.Definición
Una técnica de representación de algoritmos es una técnica para la
representación de los algoritmos en donde a través de convenciones y el
empleo de símbolos estandarizados se expresa en forma clara el
proceso establecido en el algoritmo.
Estas técnicas permiten la descripción en forma clara de los pasos o
instrucciones u operaciones que deben ejecutarse para alcanzar la
solución de un problema, estableciéndose el orden lógico a seguir.
Las técnicas de representación de algoritmos más utilizadas son los
diagramas de flujo, pseudo-códigos y diagramas N-S.
2.2.Diagramas de flujo
Son una representación pictórica de los pasos necesarios para resolver
le problema. Cada paso, representado por un símbolo, indica una acción
necesaria. La secuencia de pasos se muestra mediante flechas.
2.2.1. Símbolos utilizados
22. UNIDAD II: INTRODUCCIÓN A LA PROGRAMACIÓN ESTRUCTURADA
Prof. Lucía Bustamante
Ej.: Representar el algoritmo para…
2.3.Diagramas N/S
Los diagramas de Nassi-Schneiderman son parecidos al diagrama flujo.
Utiliza símbolos gráficos o bloques en donde la secuencia de
instrucciones se visualiza como una secuencia de bloques unidos, sin
las flechas de unión. Están basados en programación estructurada.
Ej.: El algoritmo anterior se representaría como:…
2.4.Pseudo código
Símbolo de proceso: Se utiliza para indicar
cálculo y manipulación de datos.
Símbolo de preparación: Se utiliza para
inicializar variables.
Símbolo de entrada: Se utiliza para detonar
recepción de datos desde cualquier dispositivo.
Símbolo inicio/fin: Se utiliza para indicar el
comienzo y fin del programa.
Símbolo de conexión: Se utiliza para
continuar el diagrama de flujo.
Símbolo de decisión: Se utiliza para realizar
comparaciones, decisiones o preguntas.
Símbolo por pantalla: Se utiliza para denotar
impresión de datos por pantalla.
23. UNIDAD II: INTRODUCCIÓN A LA PROGRAMACIÓN ESTRUCTURADA
Prof. Lucía Bustamante
Permite expresar las operaciones a realizar en una computadora en
forma muy parecida a nuestro lenguaje habitual, utilizando palabras
reservadas con significados establecidos. Se lee de arriba hacia abajo.
Es la representación de algoritmos que más se asemeja a un programa
fuente, por lo que al igual que en la codificación en este tipo de
representación deben seguirse las buenas prácticas de codificación, en
especial la identación, para facilitar su legibilidad.
Ej.: El algoritmo anterior se representa en pseudo-código de la siguiente
manera:…
3. Técnica de Refinamiento Progresivo
La técnica de refinamiento progresivo, o técnica de diseño descendente, es
una técnica orientada al diseño de algoritmos en donde partiendo de lo más
general se va a lo más detallado a través de un refinamiento cada vez
mayor de las diferentes operaciones que representan el algoritmo, hasta
llegar al nivel del lenguaje de programación donde se va a implementar el
algoritmo para obtener el programa.
4. Buenas prácticas de codificación
4.1.Selección de nombres apropiados
Utilizar nombres descriptivos para variables y subprogramas…
4.2.Identación
Permiten ver con más claridad las instrucciones que forman parte de
cierto camino, comenzando un poco más a la derecha que las
instrucciones que inician el camino.
4.3.Documentación
Una documentación apropiada facilita la tarea de revisión del código
fuente, ya que facilita la legibilidad del programa.
Una buena documentación debe poseer las siguientes características:
Ser coherente con el programa. Debe indicar conceptos o
métodos implementados, relaciones entre partes del programa,
etc.
24. UNIDAD II: INTRODUCCIÓN A LA PROGRAMACIÓN ESTRUCTURADA
Prof. Lucía Bustamante
Ser relevante, indicar pasos cruciales del programa.
Debe mantenerse al día.
5. Prueba y depuración de algoritmos
5.1.Prueba
Es un proceso orientado a determinar la existencia de errores. Cuando
una prueba detecta un error la depuración el proceso que elimina este
error.
5.1.1. Técnica de chequeo manual del algoritmo
Es una técnica de prueba donde se seleccionan datos de entrada
para representar todos los casos posibles durante la ejecución del
algoritmo. Estos datos de entrada son llamados casos de pruebas y
sus resultados son conocidos.
Los casos de prueba son evaluados llevando a cabo corridas
manuales en donde los resultados obtenidos son sometidos a estudio
y si aparece una falta de correspondencia con los resultados
esperados y se habrá demostrado la existencia de errores por lo que
será necesario iniciar un proceso de depuración que consistirá en
una revisión del algoritmo para localizar el error y corregirlo.
Si durante la ejecución de los casos de prueba no se detectan
errores no debe llegarse a la conclusión de que el algoritmo es
correcto, salvo que se trate de un algoritmo sencillo en donde no
haya duda que los datos presentes en los casos de prueba,
realmente representan todas las situaciones posibles de prueba del
algoritmo.
5.2.Depuración
Es el proceso de detección y corrección de los errores de programación.
Estos errores pueden ser de los siguientes tipos:
Errores de sintaxis: Son los errores de escritura, son fácilmente
detectables, pues el compilador indica la línea del código fuente
en la que se encuentran.
25. UNIDAD II: INTRODUCCIÓN A LA PROGRAMACIÓN ESTRUCTURADA
Prof. Lucía Bustamante
Errores de ejecución: Son los errores de programación y
generalmente son detectados por el compilador, ejemplo de estos
errores son los ciclos infinitos y la declaración de expresiones no
definidas con la división entre cero. Estos errores son más
complejos, pues además de ser de múltiples tipos, a veces el
compilador indica una línea que no es la donde se producen, sin
embargo se nos alerta del error y se nos explica brevemente en
que consiste.
6. Optimización
La optimización es un paso necesario e importante, en esta fase se
explora el programa en busca de posibles modificaciones que
mejoren el rendimiento, reducción de código, o simplemente
mejoramiento de la velocidad de resolución. Generalmente una
optimización importante consiste en almacenar sólo los valores que
necesarios, en vez de todos los calculados.
Ej.: Calcular la distancia máxima entre 1000 puntos. Para saber cual
es la mayor, se debe calcular las distancias entre ellos dos a dos y
compararlas. Una solución común es calcular cada una de estas
almacenarlas en una matriz para luego compararlas y determinar
cual es la mayor. Una forma más eficiente de hacerlo es calcular la
primera y la segunda y compararlas, almacenando sólo la mayor y
calculando la siguiente y comparando sucesivamente y al final se
tendrá la distancia mayor. Ambos métodos consiguen la solución
deseada, sin embargo el segundo es más eficiente en cuanto al uso
de memoria.
7. Programación estructurada
La programación estructurada es el resultado de estudios formales de
corrección y se considera al Prof. Edgar Dijkstra de la Universidad de
Eindhoven el padre de la programación estructurada con valiosos aportes
en este desarrollo de Hoare, Wirth, Knuth, etc. Es célebre la frase de
Dijkstra: “La estructura GOTO es perjudicial para la programación”.
7.1.Definición
26. UNIDAD II: INTRODUCCIÓN A LA PROGRAMACIÓN ESTRUCTURADA
Prof. Lucía Bustamante
Enfoque disciplinado que permite escribir programas estructurados,
utilizando tres estructuras de control: Secuenciales, de control de flujo y
de repetición.
La programación estructurada es un conjunto de técnicas orientadas a la
construcción de programas confiables que limita el conjunto de
estructuras de control aplicables y presenta una serie de reglas que
coordinan adecuadamente el desarrollo de las diferentes fases de la
programación.
Este conjunto de técnicas tiene por objetivo la producción de programas
correctos (libres de errrores), legibles (fáciles de leer), depurables
(fáciles de corregir) y modificables (fáciles de mantener), lo que conduce
a la producción de programas confiables.
7.2.Importancia
Los programas estructurados son fáciles de probar, depurar y modificar.
Todos los modelos o enfoques de programación utilizan la programación
estructurada.
Un programa correcto es aquel que alcanza la solución del problema
para el que fue diseñado.
Un programa eficiente es un programa correcto que optimiza el uso de
los recursos: espacio en memoria y tiempo de ejecución.
La programación estructurada conduce a la creación de programas
confiables, que por ofrecer legibilidad y facilidades de corrección y
mantenimiento en algunas ocasiones hacen uso de mayor número de
variables e invocación de funciones lo que supone mayor utilización de
la memoria y tiempo de ejecución, sin embargo dado el abaratamiento
de memoria y la mayor velocidad de la computadoras actuales, se
prefiere la producción de programas confiables frente a la de programas
eficientes.
7.3.Teorema de la estructura
Enunciado por Böhm Jacoponi en 1996: “Todo programa con un solo
punto de entrada y un solo punto de salida puede ser expresado
27. UNIDAD II: INTRODUCCIÓN A LA PROGRAMACIÓN ESTRUCTURADA
Prof. Lucía Bustamante
utilizando solamente tres tipos de estructuras de control: Secuencial,
Selectiva y Repetitiva.”
7.4.Estructura de control
Permiten expresar un proceso estableciendo la forma en la cual las
acciones que lo componen van a ser ejecutadas. Se caracterizan por
tener una sola entrada y una sola salida y dar origen a programas que
pueden ser leídos de arriba hacia abajo.
7.5.Sentencias
Son las que determinan las acciones que el ordenador debe realizar
para resolver un problema. Son un conjunto de palabras claves del
lenguaje y expresiones que determinan cómo se deben tratar los datos y
cómo se obtendrán los resultados. Este término es empleado para los
lenguajes de alto nivel.
7.6.Estructura de control secuencial
Permite indicar la ejecución incondicional de varias acciones de forma
secuencial:
Diagrama de flujo Diagrama N-S Pseudo-código
Inicio
Acción1
Acción2
…..
Acciónn
Fin
7.6.1. Sentencias de declaración
Son todas aquellas sentencias que se usan para definir constantes y
variables, programas y módulos.
Acción1
Acción2
Acciónn
…
Acción1
Acción2
…
Acciónn
28. UNIDAD II: INTRODUCCIÓN A LA PROGRAMACIÓN ESTRUCTURADA
Prof. Lucía Bustamante
Ej.: Declaración de una variable real
real precio
Los objetivos de la declaración de variables son:
Asociar un tipo de dato y un identificador a la variable para
que el computador pueda verificar la correctitud de las
operaciones en donde interviene la variable.
Permitir que el compilador sepa cuánto espacio de memoria
se necesita para almacenar el valor de la variable, y asignar la
dirección de memoria donde este valor se va a almacenar.
7.6.2. Sentencias de asignación
Son todas aquellas sentencias que modifican el contenido de una
variable.
Las sentencias de asignación implican la ejecución de la operación
almacenamiento, transforman la memoria de un estado a otro en el
tiempo. La ejecución de un programa tendrá como efecto (sin
considerar los procesos de E/S) la transformación de la memoria
inicial en otra final, realizando un conjunto de asignaciones sobre las
n variables que intervienen en el programa, ejecutadas según un flujo
de control establecida.
Ej.: Asignación de un valor a variables reales
real precio = 1000,50
real iva = 160, 096
real precioVenta = precio + iva
Esta última asignación evalúa la expresión de la derecha, en donde
la variable con el nombre precio tiene el valor de 1000,50 y la
variable iva el valor de 160,096, suma ambas y asigna el resultado
(1160,596) a la parte izquierda de la expresión, la variable
precioVenta.
7.6.3. Sentencias de Entrada/Salida
29. UNIDAD II: INTRODUCCIÓN A LA PROGRAMACIÓN ESTRUCTURADA
Prof. Lucía Bustamante
Son las sentencias que permiten la intercomunicación del ordenador
con el usuario y los periféricos (discos, impresora, modem, etc.).
Mediante estas sentencias se puede comunicar al computador los
datos de entrada y este podrá devolver los resultados.
7.7.Estructura de control selectiva
Son aquellas que permiten variar el orden de ejecución del programa
según se verifiquen o no ciertas condiciones. Permiten la selección de
tareas alternativas en función de los resultados de diferentes
expresiones relacionales o lógicas (condiciones).
La estructura selectiva puede ser:
Simple
Diagrama de flujo Diagrama N-S Pseudo-código
…
Si (Condición) entonces
Acción
Fin-Si.
Doble
Diagrama de flujo Diagrama N-S Pseudo-código
Condición
Acción
Si
No
F
V
Condición
Acción
30. UNIDAD II: INTRODUCCIÓN A LA PROGRAMACIÓN ESTRUCTURADA
Prof. Lucía Bustamante
…
Si (Condición)
entonces
Acción 1
Sino
Acción 2
Fin-Si.
Múltiple
Diagrama de flujo Diagrama N-S Pseudo-código
Caso (Expresión)
Valor 1: Acción 1
Valor 2: Acción 2
…
Valor n: Acción n
De otra manera
Acción
Fin-Caso
7.7.1. IF-THEN-ELSE
Es una sentencia que se emplea para realizar bifurcaciones, según
ciertas condiciones. En su forma Responde a la siguiente sintaxis:
if (expresión1) then
<grupo de sentencias 1>
else if (expresión2)
Condición
Acción1
Valor1
Acción2
Acciónn
…
Valor2
ValorN
…
… …
F
V
Condición
A
c
c
i
ó
n
1
A
c
c
i
ó
n
2
A
c
c
i
ó
n
n
.
.
.
Condición
Acción1
Si No
Acción2
F
V
Condición
Acción1 Acción2
31. UNIDAD II: INTRODUCCIÓN A LA PROGRAMACIÓN ESTRUCTURADA
Prof. Lucía Bustamante
<grupo de sentencias 2>
else (expresión3)
<grupo de sentencias 3>
El significado de esta porción de código es que si la expresión1 se
cumple es verdadera, el control se transfiere al grupo de sentencias
1, en caso contrario se evalúa la expresión2 y de ser cierta se
transfiere el control al grupo de sentencias 2, sino se ejecuta el
grupo de sentencias 3.
Si se ejecuta el if no se ejecutan los else y viceversa. Las
condiciones se evalúan de arriba hacia abajo, tan pronto como se
encuentra una condición cierta, se ejecuta la sentencia asociada a
ella y se pasan por alto las demás. Si ninguna es cierta se ejecuta
el else final.
Se pueden poner tantos else if como se quiera, o no poner ninguno,
en cuyo caso se tiene:
If (expresión1) then
{
<grupo de sentencias 1>
}
else
{
<grupo de sentencias 2>
}
La instrucción else también es opcional, si no la colocamos significa
que si no se verifica ninguna de las condiciones dadas por el if o los
else if no se tiene que hacer nada.
Ej.:
if (X >= 10) then
{
32. UNIDAD II: INTRODUCCIÓN A LA PROGRAMACIÓN ESTRUCTURADA
Prof. Lucía Bustamante
cad = “Aprobado”
}
else
{
cad = “Aplazado”
}
7.7.2. Select case
Esta sentencia permite ejecutar distintos bloques de sentencias
según el valor de una determinada variable de control, que puede
ser entera o del tipo carácter. Su sintaxis es:
select case (control)
case valor1:
{
<sentencias>
break;
}
case valor2:
{
<sentencias>
break;
}
…
case default
{
<sentencias>
}
end select
33. UNIDAD II: INTRODUCCIÓN A LA PROGRAMACIÓN ESTRUCTURADA
Prof. Lucía Bustamante
Según el valor de la variable se transferirá el control a los bloques
de sentencias correspondientes. Si el valor de la variable no esta
contemplado en los cases se ejecuta el conjunto de sentencias
correspondientes a default.
La diferencia entre el if y el select radica en que el select sólo
permite comprobar la igualdad, mientras que el if puede evaluar
todas las expresiones relacionales y lógicas, además de que a
partir de donde se encuentra la primera correspondencia se ejecuta
el código subsiguiente, para modificar este comportamiento debe
insertarse la instrucción break en cada bloque case.
7.8.Estructura de control repetitiva
Son las que permiten la repetición de secuencias de sentencias un
número determinado de veces. De esta forma, si tenemos que repetir
acciones no será necesario escribir las mismas sentencias varias veces,
sino que bastará con incluirlas dentro de un lazo o bucle. La estructura
repetitiva tiene tres tipos:
Mientras
Para
Repetir/hasta que
7.8.1. Mientras (WHILE)
Se trata de una sentencia de lazo o bucle que repite las sentencias
mientras se verifica la condición. El bucle termina cuando la
condición deja de cumplirse, por eso es importante que dentro del
cuerpo de la sentencia while se modifique la o las variables que
intervienen en la condición, sino se produce un ciclo infinito. Su
sintaxis es la siguiente:
While (condición)
{
<sentencias>
}
34. UNIDAD II: INTRODUCCIÓN A LA PROGRAMACIÓN ESTRUCTURADA
Prof. Lucía Bustamante
Si la condición es falsa la primera vez, las sentencias del while no
se ejecutan ni una sola vez.
Ej.: Un bucle que imprime los número del 1 al 9
int n = 1;
while (n < 10)
{
mostrar (n)
n = n + 1
}
Diagrama de flujo Diagrama N-S Pseudo-código
Mientras (condición)
Acción
Fin-Mientras
7.8.2. FOR
for (inicialización, condición, incremento)
En inicialización generalmente va una sentencia de asignación
que se utiliza para inicializar la variable de control del bucle, y se
ejecuta antes de empezar la iteración, sólo una vez. La condición
es una expresión relacional que determina si el bucle continua o
no, se verifica en cada iteración. El incremento define como
Condición
Acción
Verdadera
Falsa
Acción
Mientras (Condición)
35. UNIDAD II: INTRODUCCIÓN A LA PROGRAMACIÓN ESTRUCTURADA
Prof. Lucía Bustamante
cambia la variable de control cada vez que se repite el bucle, es
decir, es una sentencia que se ejecuta al final de cada iteración.
Si la condición es la falsa la primera vez, las sentencias del for no
se ejecutan ni una sola vez.
Diagrama de flujo Diagrama N-S Pseudo-código
Mientras (condición)
Acción
Fin-Mientras
7.8.3. DO/WHILE y REPEAT/ UNTIL
A diferencia de los bucles while y for, que analizan la condición al
principio del bucle, estas sentencias analizan la condición al final,
esto significa que el bucle se ejecuta por lo menos una vez. Sus
sintaxis son:
DO/WHILE REPEAT/ UNTIL
do
{
<sentencias>
}
while (condición)
repeat
{
<sentencias>
}
until (condición)
La diferencia entre el DO/WHILE y el REPEAT/UNTIL es que en
el primero el lazo se ejecuta mientras la condición es verdadera,
en el caso del REPEAT/UNTIL se itera mientras la condición es
falsa, al hacerse cierta el lazo finaliza.
Ej.: Lazos do/while y repeat/until para imprimir los números del 1
al 10.
Para V = I hasta F [Paso V]
Acción Acción
Para V = I hasta F [Paso V]
36. UNIDAD II: INTRODUCCIÓN A LA PROGRAMACIÓN ESTRUCTURADA
Prof. Lucía Bustamante
do
{
int n = 1;
print(n);
n = n + 1;
}
while (n < 10)
repeat
{
int n = 1;
print(n);
n = n + 1;
}
until (n == 10)
Diagrama de flujo Diagrama N-S Pseudo-código
Repetir/Hacer
Acción
Hasta/mientras(Cond)
Condición
Acción
Acción
Mientras/Hasta (Cond)
37. UNIDAD III: TIPOS DE DATOS ESTRUCTURADOS
Prof. Lucía Bustamante
Unidad III: Tipos de datos estructurados
Objetivo terminal: Conocer y aplicar los tipos de datos estructurados en
la solución de problemas.
1. Evolución de los enfoques de programación.
1.1.Programación no estructurada
Esta programación sólo es útil en el caso de programas pequeños y
sencillos consistentes en un solo programa principal. Aquí "programa
principal" se refiere a una secuencia de comandos o instrucciones que
modifican datos que son a su vez globales en el transcurso de todo el
programa.
Como todos deberían saber, estas técnicas de programación ofrecen
tremendas desventajas una vez que el programa se hace
suficientemente grande. Por ejemplo, si la misma secuencia de
instrucciones se necesita en diferentes situaciones dentro del programa,
la secuencia debe ser repetida. Esto ha conducido a la idea de extraer
estas secuencias, darles un nombre y ofrecer una técnica para llamarlas
y regresar desde estos procedimientos.
1.2.Programación Procedimental
Con la programación procedimental se pueden combinar las secuencias
de instrucciones repetibles en un solo lugar. Una llamada de
procedimiento se utiliza para invocar al procedimiento. Después de que
la secuencia es procesada, el control es retornado exactamente después
de la línea donde la llamada fue hecha.
Al introducir parámetros así como procedimientos de procedimientos
(subprocedimientos) los programas pudieron ser escritos en forma más
estructurada y libres de errores. Por ejemplo, si un procedimiento ya es
correcto, cada vez que es usado produce resultados correctos. Por
consecuencia, en caso de errores, se puede reducir la búsqueda a
aquellos lugares que todavía no han sido revisados.
38. UNIDAD III: TIPOS DE DATOS ESTRUCTURADOS
Prof. Lucía Bustamante
De este modo, un programa en la programación procedimental puede
ser visto como una secuencia de llamadas a procedimientos. Un
programa único que se divide en pequeñas piezas llamadas
procedimientos.
El programa principal coordina las llamadas a procedimientos y pasa los
datos apropiados en forma de parámetros, los datos son procesados por
los procedimientos y, una vez que el programa ha terminado, los datos
resultantes son presentados.
1.3.Programación modular
Para posibilitar el uso de procedimientos generales o grupos de
procedimientos también en otros programas, aquéllos deben estar
disponibles en forma separada. Por esa razón, la programación modular
permite el agrupamiento de procedimientos dentro de módulos.
El programa principal coordina las llamadas a procedimientos en
módulos separados y pasa los datos apropiados en forma de
parámetros.
El proceso de descomposición de un problema en módulos se conoce
como modulación y la programación relativa a ellos programación
modular.
1.4.Programación Orientada a objetos
Programación basada en objetos, encapsula datos (atributos) y métodos
(comportamiento) en objetos y la unidad básica es la clase.
En contraste con las otras técnicas, en la programación orientada a
objetos se tiene una telaraña de objetos interactúantes, cada uno de los
cuáles manteniendo su propio estado. Los objetos del programa
interactúan mandando mensajes unos a otros.
Por ejemplo se tiene una aplicación que emplea listas (secuenciales o
enlazadas) en la programación orientada a objetos se deben tener
tantos objetos-lista como sean necesarios y en lugar de llamar un
39. UNIDAD III: TIPOS DE DATOS ESTRUCTURADOS
Prof. Lucía Bustamante
procedimiento al que le debemos proveer el manejador de lista correcto,
mandaríamos un mensaje directamente al objeto-lista en cuestión. En
términos generales, cada objeto implementa su propio módulo.
Cada objeto es responsable de inicializarse y destruirse en forma
correcta. Por consiguiente, ya no existe la necesidad de llamar
explícitamente al procedimiento de creación o de terminación.
La programación orientada a objetos no es ésta solo una manera más
elegante de técnica de programación modular, además de esta
características se introducen otras adicionales que hacen de la
programación orientada a objetos una técnica novedosa de
programación.
2. Estructuras lineales de datos
2.1.Definición
Las estructuras lineales de datos se caracterizan porque sus elementos
están en secuencia, relacionados en forma lineal, uno después del otro.
Cada elemento de la estructura puede estar conformado por uno o
varios sub-elementos o campos que pueden pertenecer a cualquier tipo
de dato, sin embargo generalmente se trata de tipos simples de datos.
2.2.Estructuras estáticas de datos
Son las estructuras de datos a las que se les asigna una cantidad fija de
memoria en tiempo de compilación. Durante la ejecución del programa
no crecen ni decrecen.
3. Arreglos
Representan un conjunto de valores (caracteres, enteros, reales, entre
otros) donde todos comparten el mismo nombre y cada valor es
referenciado utilizando uno o más subíndices.
4. Tipos de arreglos
Vectores: Arreglos unidimensionales, un solo subíndice
Matrices: Arreglos multidimensionales, dos o más subíndices
5. Arreglos unidimensionales (Vectores)
5.1.Definición arreglo
40. UNIDAD III: TIPOS DE DATOS ESTRUCTURADOS
Prof. Lucía Bustamante
Los arreglos son un conjunto localidades consecutivas de memoria que
almacenan datos del mimo tipo. Cada localidad representa un elemento
del vector que es accedido mediante el nombre del vector y un
subíndice.
Ej.: Se desea almacenar la temperatura de 5 ciudades diferentes puede
disponerse convenientemente en una secuencia de elementos, donde se
identifica a través de la ubicación en el arreglo a que ciudad pertenece la
temperatura.
5.2.Sintaxis
Nombre_arreglo tipo [Número_elementos]
Ej.: Definición de un arreglo para almacenar la temperatura de 5
ciudades
temperaturas real [5]
5.3.Importancia
La principal razón del uso de los arreglos se puede explicar mediante un
ejemplo: Se quiere hacer un programa para almacenar los resultados de
un examen e imprimir el promedio del curso. Si el examen es aplicado a
45 estudiantes, si se asigna el resultado de cada estudiante a una
variable tendríamos un programa muy extenso sólo por los datos.
Si se desea almacenar el peso de 10 personas en lugar crear 10
variables con nombres distintos se puede crear una sola del tipo arreglo
con 10 apartados.
Ej.: Definición de un arreglo de 10 enteros.
pesos int [10]
5.4.Acceso a los elementos de un vector (Subíndices)
El nombre de un arreglo se refiere a todos los elementos que este
contenga, para acceder a un elemento particular se hace uso de
subíndices.
41. UNIDAD III: TIPOS DE DATOS ESTRUCTURADOS
Prof. Lucía Bustamante
Los elementos de un vector son accedidos a través de un subíndice, el
cual se refiere a un valor específico dentro el arreglo que puede ser
considerado como una variable. El subíndice se representa como un
entero (no negativo) entre 0 y el número de elementos del arreglo menos
1, entre corchetes. La sintaxis general es:
Nombre_arreglo [subíndice]
Ej.: Asignación del peso de la persona número 3
pesos [3] = 55
5.5.Expresiones con arreglos
Supongamos que queremos sumar el peso de las personas 1 y 2, la
expresión seria:
peso1y2 = pesos [1] + pesos [2]
Si el subíndice es una expresión matemática, esta se calculará y luego
se convertirá el resultado en entero.
Ej.: pesos [i + 1] = pesos [j – 2], si i = 3 y j = 7, como resultado de
ejecutar esta expresión se tendrá la igualación de los pesos de las
personas 4 y 5.
Para realizar operaciones sobre todos los elementos del arreglo se
emplean sentencias de repetición.
Ej.: Se desea incrementar en 2 kilos los 10 pesos almacenados.
Elem1 Elem7
Elem2 Elem3 Elem4 Elem5 Elem6
0 6
1 2 3 4 5
Nombre del vector
Subíndices
42. UNIDAD III: TIPOS DE DATOS ESTRUCTURADOS
Prof. Lucía Bustamante
for (i = 0; i<10; i++)
{
Pesos[i] = pesos[i] + 2
}
5.6.Paso de vectores como parámetros
Un arreglo se puede pasar completo como parámetro de un
subprograma, el programa principal al invocar el subprograma sólo
especifica su nombre, sin corchetes ni subíndices. En la declaración del
subprograma se escribe un par de corchetes vacíos, el tamaño no se
especifica.
Ej.: Definición de una función que recibe como parámetro un arreglo
real calcularPromedio (int tamArreglo, real arreglo []) //Corchetes vacíos
{
…
}
//Programa principal
int totalNotas = 10;
real notas [totalNotas] = {15, 17, 18, 16, 14, 20, 15, 19, 17, 12};
real promedio = calcularPromedio (10, notas); //No incluye los corchetes
6. Arreglos multidimensionales (Matrices)
6.1.Definición de matriz
Los arreglos multidimensionales o matrices son un conjunto localidades
consecutivas de memoria que almacenan arreglos (unidimensionales o
multidimensionales).
En el caso de dos dimensiones cada localidad representa un vector
(arreglo unidimensional) o una fila de la matriz. Cada elemento de esta
es accedido mediante el nombre de la matriz y dos subíndices [fila]
[columna].
6.2.Sintaxis
43. UNIDAD III: TIPOS DE DATOS ESTRUCTURADOS
Prof. Lucía Bustamante
Nombre_matriz tipo [NumEleDim1] [NumEleDim2]… [NumEleDimN]
Ej.: Definición de una matriz bidimensional para almacenar el precio de 7
artículos de 3 marcas diferentes.
precios real [7] [3]
En caso particular de matrices de dos dimensiones la sintaxis general se
reduce a:
Nombre_matriz tipo [NumFilas] [NumColumnas]
6.3.Importancia
El tipo de dato matriz puede utilizarse en casos donde se requiere
almacenar información correspondiente a más de una variable. Por
ejemplo si se desea almacenar la temperatura de una ciudad en las
diferentes estaciones del año, esta información puede ser almacenada
en una matriz de doble entrada en la que cada fila representa una
ciudad, cada columna una estación del año y cada casilla de la
intersección fila, columna se almacenará la temperatura
correspondiente.
6.4.Acceso a los elementos
Nombre_matriz [SubIndDim1] [SubIndDim2]… [SubIndDimN]
Ej. : Supóngase la siguiente matriz de 3 dimensiones 3, 2, 4. A
continuación se muestran los subíndices para acceder a cada elemento
de la matriz.
0 1
0 [0][0][0] [0][0][1] [0][0][2] [0][0][3] [0][1][0] [0][1]1] [0][1][2] [0][1][3]
1 [1][0][0] [1][0][1] [1][0][2] [1][0][3] [1][1][0] [1][1]1] [1][1][2] [1][1][3]
2 [2][0][0] [2][0][1] [2][0][2] [2][0][3] [2][1][0] [2][1]1] [2][1][2] [2][1][3]
6.5.Expresiones con matrices
Supongamos que queremos sumar los valores que pertenecen a la celda
[1] [1], la expresión sería:
44. UNIDAD III: TIPOS DE DATOS ESTRUCTURADOS
Prof. Lucía Bustamante
sumatoria1_2 = matriz [1] [1] [0] + matriz [1] [1]1] + matriz [1] [1] [2]
+ matriz [1] [1] [3]
Para realizar operaciones sobre todos los elementos de la matriz se
emplean sentencias de repetición anidadas.
Ej.: Se desea inicializar en 0 la matriz anterior.
Para (i = 0; i<3; i++)
Para (j = 0; j<2; j++)
Para (k=0; k<4; k++)
matriz[i] [j] [k] = 0;
Fin-Para
Fin-Para
Fin-Para
6.6.Ocupación de la memoria
Los arreglos colocan sus elementos consecutivamente, a partir de una
determinada dirección de memoria. En el caso de dos o más
dimensiones, la colocación se realiza por columnas.
Ej.: Se define una matriz a de 3 x 3, su colocación en memoria se realiza
a partir de una posición x de la siguiente forma:
Dirección Elemento
Almacenado
Dirección Elemento
almacenado
Dirección Elemento
almacenado
x a[0][0] x + 3 a[0][1] x + 6 a[0][2]
x + 1 A[1][0] x + 4 a[1][1] x + 7 a[1][2]
x + 2 a[2][0] x + 5 a[2][1] x + 8 a[2][2]
7. Programación procedimental
7.1.Definición
Programación orientada a acciones donde la unidad básica es el
subprograma.
45. UNIDAD III: TIPOS DE DATOS ESTRUCTURADOS
Prof. Lucía Bustamante
7.2.Subprogramas
7.2.1. Definición
Es un conjunto de instrucciones que realizan una tarea concreta a
las que se designa con un nombre o identificador y constituyen una
unidad de programa. La tarea determinada al subprograma se
ejecuta cada vez que en el código fuente se haga referencia al
nombre del subprograma.
La declaración de un subprograma incluye los parámetros de
entrada y en el caso de las funciones también el tipo del parámetro
de salida.
7.2.2. Importancia
Muchas veces en un programa es necesario repetir un mismo
proceso varias veces en distintas partes de éste. Para evitar tener
que repetir el mismo código varias veces, el programador tiene la
opción de abstraer esa parte del programa en un subprograma, el
cual puede ser llamado cuando se requiera.
7.2.3. Tipos
7.2.3.1. Funciones
Es un subprograma que retorna parámetros.
Ej.: Declaración de una función
Tipo_retorno nombre_funcion(p1, p2, … pn)
7.2.3.2. Procedimientos
Son subprogramas que no retornan parámetros.
Ej.: Declaración de un procedimiento
Tipo_retorno nombre_procedimiento (p1, p2,… pn)
46. UNIDAD III: TIPOS DE DATOS ESTRUCTURADOS
Prof. Lucía Bustamante
7.2.3.3. Comparación Funciones y procedimientos
Funciones Semejanzas Procedimientos
Son subprogramas
Retorna un valor No retorna valores
Pueden recibir o no
parámetros de entrada
Otra clasificación de los subprogramas viene dada por donde se
encuentran definidos o implementados, de acuerdo a este criterio
existen tres tipos de subprogramas: de sentencia, intrínsecos y
externos.
7.2.3.4. Subprogramas de sentencia
Son los que son definidos dentro del programa principal para
realizar una tarea especifica que se repite muchas veces durante
el proceso.
Ej.: Supóngase un programa que opera con vectores que requiere
calcular varias veces el módulo de un vector, lo más acertado es
declarar una función para calcular el módulo.
7.2.3.5. Subprogramas intrínsecos
Son los subprogramas que vienen definidos en el compilador y
pueden ser utilizados invocándolos a través de su nombre.
Ej.: Tareas rutinarias como mostrar datos por pantalla, realizar
operaciones matemáticas como cálculo de la raíz cuadrada, ente
otras, son tareas que han sido programadas previamente e
incorporadas al compilador de modo que el programador pueda
utilizarlas.
47. UNIDAD III: TIPOS DE DATOS ESTRUCTURADOS
Prof. Lucía Bustamante
7.2.3.6. Subprogramas externos
Son los subprogramas que están definidos en módulos que
podemos utilizar al importar las librerías que los contienen.
7.2.4. Parámetros
Un parámetro es un valor que pude ser proporcionado al
subprograma (de entrada) o retornado por este (de salida).
7.2.4.1. Parámetros formales
En la declaración de un subprograma, cuando se incluyen
parámetros, estos se denominan parámetros formales,
representan los datos recibidos por el subprograma. Ellos sirven
para contener los valores de los argumentos del programa
principal, es decir, para contener los valores suministrados en
cada invocación.
7.2.4.2. Argumentos
Los datos que se envían a los subprogramas se llaman argumentos
del programa principal, estos deben coincidir en número, orden y
tipo con los parámetros formales de la declaración del
subprograma.
7.2.4.3. Parámetros de entrada
Son aquellos cuyos valores deben ser proporcionados al hacer la
invocación de la función.
7.2.4.4. Parámetros de salida
Son aquellos cuyos valores se calculan en el subprograma y son
retornados por el subprograma.
7.2.5. Ámbito de un subprograma
7.3.Variables globales
Son variables globales las que son declaradas en el programa principal,
estas variables pueden ser accedidas desde cualquier parte del código.
48. UNIDAD III: TIPOS DE DATOS ESTRUCTURADOS
Prof. Lucía Bustamante
7.4.Variables locales
Son variables locales las que son declaradas dentro de un subprograma
y se dice que son locales al subprograma. Una variable local sólo esta
disponible durante la ejecución del subprograma, su valor se pierde al
retornar el control al programa principal.
7.5.Transferencia de información a/desde subprogramas
Existen dos formas de pasar la información entre el programa principal y
los subprogramas. Se trata del paso por valor y el paso por referencia.
7.5.1. Por valor
Los valores de los argumentos del programa principal que son
enviados al subprograma son copiados en unas nuevas variables
para ser procesados. La ventaja de enviar parámetros por valor, es
que las variables del programa principal no son alteradas en el
subprograma.
Ej.: Paso de parámetros por valor
7.5.2. Por referencia
Cuando se hace el paso de parámetros por referencia, lo que se
envía es la posición de memoria donde están almacenados los
argumentos del programa principal, por lo que si los parámetros son
modificados en el subprograma los cambios se verán reflejados
también en el programa principal. La ventaja del paso por referencia
es que de cierto modo se tienen múltiples valores de retorno.
Ej.: Paso de parámetros por referencia
8. Programación Modular
8.1.Definición
La programación modular se basa en diseñar un programa dividiéndolo
en módulos que resultan de segmentar el problema en funciones lógicas
que son perfectamente diferenciadas. Esta división exige la presencia
de un módulo denominado módulo de base o principal a objeto de que
controle y se relacione con los demás.
49. UNIDAD III: TIPOS DE DATOS ESTRUCTURADOS
Prof. Lucía Bustamante
La programación modular al considerar funciones lógicas constituye un
intento para diseñar programas que puedan ser cambiados o
reemplazados fácilmente sin afectar en lo posible a ninguna otra parte o
módulo del programa.
8.2.Definición de módulo
En la programación modular, los procedimientos con una funcionalidad
común son agrupados en módulos separados. Un programa por
consiguiente, ya no consiste solamente de una sección. Ahora está
dividido en varias secciones más pequeñas que interactúan a través de
llamadas a procedimientos y que integran el programa en su totalidad
Cada módulo puede contener sus propios datos. Esto permite que cada
módulo maneje un estado interno que es modificado por las llamadas a
procedimientos de ese módulo. Sin embargo, solamente hay un estado
por módulo y cada módulo existe cuando más una vez en todo el
programa.
Ejemplos de módulos son las bibliotecas de componentes de software
de las aplicaciones generales, las cuales permiten una mayor
comodidad y productividad en la programación.
8.3.Criterios para composición de módulos
Cada módulo debe corresponder a una función lógica
perfectamente diferenciable.
El tamaño de cada módulo debe ser variable, pero se recomienda
que sea pequeño, con el objeto de obtener programas claros y de
poca complejidad.
Evitar el uso de excesivo número de módulos, es necesario
buscar un equilibrio entre la cantidad de módulos y el tamaño de
los mismos.
Cada módulo vista como una caja negra, donde la salida debe ser
en función exclusiva de la entrada.
50. UNIDAD III: TIPOS DE DATOS ESTRUCTURADOS
Prof. Lucía Bustamante
9. Programación orientada a objetos
Entre las diferencias entre la programación orientada a objetos y otras
técnicas de programación, se tiene que en la programación orientada a
objetos, los objetos intercambian mensajes entre sí. En otras técnicas de
programación, los datos son intercambiados entre procedimientos bajo
el control de un programa principal. Es decir, objetos del mismo tipo pero
cada uno con su propio status pueden coexistir. Esto contrasta con el
enfoque modular donde cada módulo tiene solamente un status global.
9.1.Conceptos relacionados
9.1.1. Clase
Una clase es la implementación de un tipo de datos abstracto (TDA).
Define atributos y métodos que implementan la estructura de datos y
operaciones del TDA, respectivamente. Las instancias de las clases
son llamadas objetos. Consecuentemente, las clases definen las
propiedades y el comportamiento de conjuntos de objetos.
Los TDAs permiten la creación de instancias con propiedades bien
definidas y comportamiento bien definido. Los TDAs definen la
funcionalidad al poner especial énfasis en los datos involucrados, su
estructura, operaciones, así como en axiomas y precondiciones.
Una clase es una representación real de un TDA. Por lo tanto, provee
detalles de implementación para la estructura de datos utilizada y las
operaciones.
Al nivel de clases (implementación) hablamos de "atributos", que son
elementos de la estructura de datos al nivel del TDA. Lo mismo se
aplica a "métodos", que es la implementación de las operaciones del
TDA.
9.1.2. Objeto
Un objeto es una instancia de una clase. Puede ser identificado en
forma única por su nombre y define un estatus, el cuál es
51. UNIDAD III: TIPOS DE DATOS ESTRUCTURADOS
Prof. Lucía Bustamante
representado por los valores de sus atributos en un momento en
particular.
El estatus de un objeto cambia de acuerdo a los métodos que le son
aplicados. Nos referimos a esta posible secuencia de cambios de
estatus como el comportamiento del objeto:
El comportamiento de un objeto es definido por un conjunto de
métodos que le pueden ser aplicados.
Se han presentado hasta ahora dos conceptos principales de
orientación a objetos, clase y objeto. La programación orientada a
objetos es por lo tanto la implementación de tipos de datos
abstractos o, en palabras más sencillas, la escritura de clases. En
tiempo de ejecución, instancias de estas clases -los objetos- cumplen
con el objetivo del programa cambiando sus estatus. Por
consecuencia, se genera la pregunta: ¿Cómo interactúan estos
objetos? y surge la necesidad del concepto de mensaje.
9.1.3. Mensaje y método
Un programa en ejecución es una colección de objetos, donde dichos
objetos interactuantes son creados y destruidos. Esta interacción se
basa en mensajes que son mandados de un objeto a otro, donde el
emisor le pide al receptor que aplique un método a sí mismo
Mandar un mensaje pidiéndole a un objeto que aplique un método es
similar a una llamada a un procedimiento en lenguajes de
programación "tradicionales". Sin embargo, en orientación a objetos,
hay un cuadro de objetos autónomos que se comunican unos con los
otros por medio del intercambio de mensajes. Los objetos reaccionan
cuando reciben mensajes por medio de la aplicación de métodos
sobre si mismos. También pueden negar la ejecución de un método,
por ejemplo si el objeto que hace la llamada no tiene permiso para
ejecutar el método solicitado.
Un mensaje es una solicitud a un objeto para invocar uno de sus
métodos. Un mensaje por lo tanto contiene: el nombre del método y
los argumentos del método.
52. UNIDAD III: TIPOS DE DATOS ESTRUCTURADOS
Prof. Lucía Bustamante
Por consecuencia, la invocación de un método es solamente una
reacción causada por el hecho de recibir un mensaje. Esto solamente
es posible si el método es realmente conocido por el objeto.
Un método está asociado a una clase. Un objeto invoca un método
como una reacción al recibir un mensaje.
9.1.4. Herencia
La herencia es la propiedad que permite a los objetos construirse a
partir de otros objetos. El concepto de herencia está presente en
nuestras vidas diarias donde las clases se dividen en subclases.
La herencia permite entonces describir entidades (clases) por
diferencia entre ellas; por eso se dice que programar con orientación
a objetos es programar para diferenciar. La utilidad de la herencia es
múltiple. En primer lugar hay que analizar, diseñar, codificar y poner
a punto, que en cuanto se tiene un concepto definido, jamás lo
repetimos. Como muchos, si el concepto nuevo es muy parecido a
uno anterior, se define el nuevo como la diferencia respecto al
anterior. Si surge un error en la utilización de la nueva entidad,
seguro que el error está en lo que se ha añadido por que lo que se
ha heredado ya se había producido.
Hay diferentes tipos de herencia: los más importantes son simples y
múltiples. Con esto se quiere decir que, al contrario de la herencia
biológica donde siempre se hereda de dos padres, en la
programación orientada a objetos se puede heredar de uno, dos o
más padres.
La definición de cliente minorista a partir de cliente es un ejemplo de
herencia simple. Y se podría definir un vehículo anfibio como una
herencia (subclase) de otras dos clases: coche y barco.
9.1.5. Polimorfismo
La característica de polimorfismo de la POO permite que las
instancias de diferentes clases reaccionen de una forma particular al
llamado de una función. Por ejemplo, en una jerarquía de formas
53. UNIDAD III: TIPOS DE DATOS ESTRUCTURADOS
Prof. Lucía Bustamante
graficas (punto, línea, cuadro, rectángulo, etc.), cada forma tiene una
función dibujar responsable de contestar adecuadamente a
peticiones del trazo de esa forma.
El polimorfismo permite que las instancias de diferentes clases
respondan a la misma función en forma adecuada para cada clase.
Polimorfismo significa que muchos programas se hacen extensibles a
nuevos tipos sin necesidad de recompilarlos.
El origen del término polimorfismo es simple: ya que describe la
capacidad de código de C++ de comportarse de diferentes maneras
dependiendo de situaciones que se presenten al momento de la
ejecución. Este comportamiento a menudo escapa del control directo
del programador. El polimorfismo no es tanto una característica de
objetos como lo es de funciones miembro de una clase. Se implanta
a través de la arquitectura de clases; sin embargo, solo las funciones
miembro de la clase puede ser polimorficas, y no la clase completa.
54. UNIDAD IV: INTRODUCCIÓN AL MANEJO DE ARCHIVOS Y ESTRUCTURAS
Prof. Lucía Bustamante
Unidad IV: Introducción al manejo de archivos y estructuras
Objetivo terminal: Conocer e identificar efectivamente los archivos y las
estructuras para almacenar y manipular información en el desarrollo de
programas informáticos.