SlideShare una empresa de Scribd logo
1 de 271
Dr. Ricardo Vargas de Basterra
Programación estructurada
Dr. Ricardo Vargas de Basterra
ricardo.vargas@nube.unadmexico.mx
1/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Agenda
• Bienvenida y
presentación
• Expectativas
• Encuadre de la
asignatura
• Evaluación y plan de
trabajo
• Recomendaciones
• Introducción
Conclusiones
2/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Bienvenida
• Es un placer recibirte a
la materia
“Programación
Estructurada”
3/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Presentación
Dr. Ricardo Vargas de Basterra
• Doctor en Ciencias de la
Computación
• Maestría en Ciencias y
Maestría en Educación
• Ing. En Cibernética
• World-Class Performance
San Diego State University
• Sielop & Internet University
of Minnesota
• Catedrático desde 1983
• Director en 4 instituciones
• Rector en 2 instituciones
4/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Expectativas
• ¿Qué expectativas
tienes de esta materia?
• ¿Qué piensas que vas a
aprender?
• ¿Qué ya sabes del
tema?
5/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Materia
• Nombre: Programación
estructurada
• Duración: 60 horas
• Horario: 15:40 a 17:20
• Calendario: 3 de enero
al 15 de febrero
6/20
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Objetivo
• Al término de la
asignatura el discente
Aplicará los principios
de la programación
estructurada en el
desarrollo de software
y aplicativos para la
institución.
7/20
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Contenido
Programación
estructurada
1. Estructuras de control
2. Funciones
3. Algoritmos de Búsquedas y Ordenamientos
4. Algoritmos y Estructuras de Datos
5. Diseño estructurado
8/20
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Reglas Generales
• Asistir a Clase.
• Hacer la tarea
• Participación activa individual y grupal.
• Cumplir fechas de entrega de tareas individuales
(hasta la media noche del día señalado).
• Cumplir formatos de entrega.
• Prohibido el plagio o fraude.
• Se requiere tiempo de estudio.
• Esfuerzo por la calidad en sus trabajos.
• Uso de equipo de cómputo.
9/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Reglas para Entrega de trabajos
1. Se debe incluir una portada con
todos los datos del estudiante.
2. Se debe incluir un índice con los
apartados que incluye la tarea.
3. Redacta siempre una introducción.
4. El contenido de la tarea colócalo
en el cuerpo del documento con
apartados específicos para cada
requisito de la actividad. Todo esto
dentro de la sección Desarrollo.
5. Incluye una conclusión
6. Agrega citas dentro del cuerpo de
tu documento en formato APA.
7. Coloca las referencias bibliográficas
al final del documento, también en
formato APA.
8. Cada referencia bibliográfica debe
haber sido citada al menos una vez
en el cuerpo del documento. Todas
las citas deben tener su referencia
bibliográfica.
9. Todas tus tareas deben ser de tu
completa autoría (salvo las citas por
supuesto). Los trabajos con
información no propia serán
anulados y evaluados con cero.
10/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Calendario
• Inicio de Clase: lunes 7
de noviembre
• Fin de clase: viernes 16
de diciembre
• Receso: 28 de noviembre
al 2 de diciembre
• Presentación de
proyectos finales:por
definir en enero 2023
• Examen final: por definir
enero 2023
11/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Proyecto Integrador
• Desarrollar un Proyecto
de un producto de
software.
• El proyecto se realizará
con entregas parciales
cada lunes
• Se trata de un solo
proyecto que se irá
complementado.
• Se desarrolla en equipo
12/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Evaluación
Criterio Ponderación
1. Examen Escrito 30%
2. Proyecto Final 40%
3. Portafolio de evidencias y
actividades de aprendizaje
30%
TOTAL 100%
Los criterios 2 y 3 incluirán procesos de autoevaluación y coevaluación
13/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Material de trabajo
• Las filminas que estoy
usando, videos y
materiales de lectura
complementarios estarán
en la plataforma y en la
siguiente liga:
• https://drive.google.com
/drive/folders/1i2E7EBSb
yPDbSkyaGMCfni6Cur0Q
mhrN?usp=sharing
15/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
¡Iniciamos!
16/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
INTRODUCCIÓN
Antecedentes
17/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Programación
• Proceso de diseñar,
codificar, depurar y
mantener el código
fuente de programas
de computadora.
• El código se escribe en
un lenguaje de
programación
• El código implementa
un algoritmo
18/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Algoritmo
Conjunto finito de
instrucciones ordenadas
que tienen las siguientes
características:
• Precisión
• Unicidad
• Finito
• Entrada
• Salida
• Generalidad Richard Johnsonbaugh
19/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Expresiones algorítmicas
• Un algoritmo puede
expresarse de distintas
maneras: en forma
gráfica, como un
diagrama de flujo, en
forma de código como
en pseudocódigo o un
lenguaje de
programación, en
forma explicativa
20/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Programa
• Secuencia de
instrucciones, escritas
en un lenguaje de
programación para
realizar una tarea
específica en una
computadora
• Hay dos tipos
fundamentales:
– Programa Fuente
– Programa Objeto
Algoritmo + Estructura de Datos = Programa
21/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Proceso
22/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Herramientas y técnicas
• Diagramas de Bloques
• Diagramas de Flujo
• Grafos
• Tablas de Verdad
• Tablas de Decisiones
• Árboles de decisiones.
• Pseudocódigo
Condición 1
Condición 2
Condición 3
Acción 1
Acción 2
Acción 3
s s s s n
s n s n n
n s s n n
x x
x x x
x x
Raiz
Condición 1
Condición 2
Condición 3
Condición 4
Condición 5
Condición 6
Acción
Acción
Acción
Acción
Acción
Acción
Acción
Acción
23/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Diagramas de flujo
Secuencial
Entrada
Proceso
Salida
i=1
i=n
+1 Proceso
Ciclo For
Proceso
Condición
No Si
Ciclo While
Proceso
Condición
No Si
Ciclo Until
Condición
Proceso
No Si
If-Then
Condición
Proceso
Proceso
No Si
If-Then-else
Variable
Proceso Proceso Proceso
1 2 3
Multicondicional
Case 24/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Pseudocódigo
• Descripción de alto nivel
compacta e informal​ del
principio operativo de un
algoritmo.
• Diseñado para la lectura
humana con independencia
de cualquier lenguaje de
programación.
• Omite detalles que no son
esenciales para la
comprensión humana del
algoritmo (declaraciones de
variables, código específico
del sistema, etc.)
25/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Compilación
26/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Teoría de la programación
• Conjunto de principios que
rigen un paradigma de
programación y definen las
características semánticas de
cierto conjunto de lenguajes.
• Aspira a dar certidumbre
sobre las formas más
adecuadas de enfrentar un
problema, modelarlo y
encontrar su solución
algorítmica para poder
codificarlo en algún lenguaje y
ejecutar la solución en una
computadora
28/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Evolución de la teoría de la
programación
• La primer teoría de la programación.- La
programación dura. Nacimiento de la Eniac (1943)
• La segunda teoría de programación.- La
programación suave. Nace del modelo de John von
Neumann (1945)
• La tercer teoría de programación.- Teorema de la
Estructura. Resultado del trabajo de Conrado Böhm
y Giuseppe Jacopini (1966).
• La cuarta teoría de la programación.- ADT,
ocultación y acceso uniforme (1974).
29/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Paradigma Duro
Su característica principal
es el alambrado físico
por medio de cables
para la definición del
algoritmo. No existen
reglas ni técnicas de
diseño algorítmico
formal. Lo único que
hay son datos
organizados en tipos
primitivos.
30/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Paradigma Libre
No se cuenta con métodos
formales de diseño
algorítmico ni de sistemas.
Los lenguajes implementan
las siguientes estructuras
básicas de control:
secuencia, repetición, salto
condicional y salto
incondicional.
Se desarrollan estructuras de
datos más complejas tanto
escalares como dinámicas
así como el nacimiento de
los primeros algoritmos
formales.
31/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Paradigma Estructurado
Propone tres conceptos
fundamentales:
– Una metodología formal
de diseño basada en la
descomposición funcional
descendente (top-down).
– Un conjunto de recursos
abstractos basados en la
modularidad y las
características de la misma
(cohesión y acoplamiento)
– Un conjunto de
estructuras básicas de
programación.
32/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Estructuras propuestas:
Mientras (while)
Hasta (until)
Estructuras de Control
Condición
Repetición
Secuenciación
Abierta
Doble (if-then-else)
Simple (if-then)
Múltiple (Case)
Cerrada (For)
33/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Paradigma orientado a objetos
• Resultado de una
combinación de ideas,
entre ellas los ADT, el
ocultamiento de
información y el acceso
uniforme. (Parnas, Lizkov,
Zilles y Hoare)
• Los principios de diseño
son el Encapsulamiento,
la Herencia y el
Polimorfismo
34/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Otros Paradigmas
• Programación
orientada a aspectos
• Programación
orientada a eventos
• Programación por
componentes
35/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Lenguajes de Programación
• Es una notación para
codificar algoritmos de
forma que puedan ser
ejecutados por una
computadora. (Alcalde)
36/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Clasificación de los lenguajes
Clasificación de
los lenguajes de
programación
Nivel de
Abstracción
Maquina
(Binario)
Bajo nivel
(ensamblador)
Nivel Medio (C)
Alto nivel
(Pascal)
Propósito
Propósito
General (Java)
Propósito
Específico
(Csound)
Evolución
1ª Generación
2ª Generación
3ª Generación
4ª Generación
5ª Generación
6ª Generación
Método de
ejecución
Compilados (C)
Interpretados
(Basic)
Semicompilados
(Java)
Enfoque de tarea
Imperativos (C,
Pascal)
Funcionales
(Lisp)
Lógicos (Prolog)
Descriptivos
(HTML)
Paradigma
Libre (BASIC,
Fortran)
Estructurado
(Pascal)
Orientado a
objetos (Delphi,
Java, C++)
Orientado a
aspectos
Orientado a
eventos
37/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
De la Programación Dura al
Macroensamblador
• Alambrados Directos
• Codificación en lenguaje máquina
– 1E B80000 50 B82810 8ED8 8EC8 BF0000
BB1D00 8B0F BB1F00 8A07 FC F2 AE 7401 CB 4F
CB
• Mnemónicos (add, sto, jmp)
• Macroensamblador (if)
38/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Código Máquina
• Se codificaba directamente en hexadecimal
• Todas las operaciones de la computadora eran
responsabilidad del programador
• Alta complejidad para programar y depurar
sistemas
• Alto nivel de especialización
• Código específico para un procesador
39/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Lenguajes de alto nivel 1a. Oleada
• Basados en paradigma libre.
• Fortran (1957)1° de un linaje seguido por
COBOL (1958), LISP (1958), ALGOL (1960),
APL (1961), BASIC (1964), PL/1 (1965), Simula
(1967).
• Modelo Relacional y SQL (1970)
40/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Segunda oleada
• Nacen Pascal (1970), C (1972), Prolog (1972)
y muchos de los anteriores hacen cambios en
sus estructuras para implementar de lleno las
ideas de Böhm y Jacopini
41/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Tercera Oleada
• Nacen nuevos lenguajes como Modula2
(1979), ADA (1983) y Java (1991).
• Evolucionan otros como C que se convierte
en C++, Pascal en Object Pascal (Delphi) y
Basic en Visual Basic.
42/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Taxonomía
Modelos de
Programación
Imperativa
Fortran
Cobol
VRLM
Ensamblador- Macroensamblador
HTML
Clipper
Tercera Generación
(3GL)
Cuarta Generación
(4GL)
xBase
Scpripts
Descriptiva
dBase
Libre
Estructurado
Orientado
a Objetos
Funcional Lisp
Lógica Prolog
Java Script
Perl
CGI
Basic
Algol
Pascal
C
C++
Delphi
Java
SQL
Transac-SQL
Informix
43/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
El linaje de la programación
1955 1960 1965 2000
1995
1990
1985
1980
1975
1970
Duro
Libre
Estructurado
Orientado a
Objetos
Componentes
Aspectos
Funcional
Logica
Imperativa
Descriptiva
Lisp
Algol 68
Object
Pascal
C
SNOBOL
Algol
Basic
APL
Cobol Pascal
Lis
Simula 67
Prolog
C++
Fortran
Euclid
Delphi
Basic
Estructurado
Java
PL/1
Gödel
Modula2
Logo
Ada
Visual Basic
HTML
VRLM
44/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Más evolución
45/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Paradigmas comunes
46/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Lenguajes de Programación
Tarea
• Revisar el material
“Programas
Introductorios” que
está en la carpeta
compartida
• Escribe los programas
que ahí vienen y
pruébalos
• Presenten un informe
de la tarea
50/29
Dr. Ricardo Vargas de Basterra
UNIDAD 2
Solución de Problemas Empleando Algoritmos
51/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Solución de Problemas
• Solo un conjunto de
problemas tienen
solución a través de
procesos algorítmicos
• Antes de emprender el
diseño de un algoritmo
debemos tener claro si
éste puede resolver el
problema.
52/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Teorema de Bohm-Jacopini
• Diagrama Propio: Aquel que posee un
solo punto de inicio y uno solo de fin.
• Programa Propio: Posee un solo inicio y
un solo fin; Todo elemento del programa
es accesible, es decir, existe al menos un
camino desde el inicio al fin que pasa a
través de él; No posee ciclos infinitos.
• Equivalencia de programas: Dos
programas son equivalentes si realizan,
ante cualquier situación de datos, el
mismo trabajo pero de distinta forma.
• Teorema de la estructura: Todo
programa propio, realice el trabajo que
realice, tiene al menos un programa
propio equivalente que solo utiliza las
estructuras básicas de programación, que
son: la secuencia, la selección y la
repetición.
53/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Estructuras propuestas:
Mientras (while)
Hasta (until)
Estructuras de Control
Condición
Repetición
Secuenciación
Abierta
Doble (if-then-else)
Simple (if-then)
Múltiple (Case)
Cerrada (For)
54/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Construcción de Algoritmos
Análisis
Diseño
Construcción
Pruebas
Liberación
Identificación de Resultados
Identificación de Procesos
Identificación de Datos de Entrada
Identificación de Condiciones (2a It)
Identificación de Iteraciones (3a It.)
Diccionario de Datos (todas las It.)
Diseño de Secuencias (1a It)
Diseño de Condiciones (2a It.)
Diseño de Repeticiones (3a it.)
Diseño de Pruebas (todas las It)
Integración (2a It. en adelante)
Refinamiento (todas las It.)
Código en Lenguaje 3GL (todas las It.)
Pruebas de Caja Blanca
Pruebas de Caja Negra
Otras Pruebas
Código probado y funcionando
(todas las It.)
1a
Iteración
2a
Iteración
3a
Iteración
1a It.
4a
Iteración
todas
las It.
55/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Análisis
• Productos:
1. Listado de Resultados
2. Listado de Procesos
3. Datos de Entrada
4. Relación de Restricciones
5. Relación de Repeticiones
6. Diccionario de Datos
• Herramientas:
1. Árbol de Descomposición de
Procesos
2. Tablas de Decisión
3. Árboles de Decisión
Repeticiones
Resultados Procesos
Entradas
Restricciones
Dicc.
Datos
Secuencia
56/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Diseño
• Productos
1. Diseño de Secuencias
2. Diseño de Condiciones
3. Diseño de Repeticiones
4. Diseño de Pruebas
5. Diseño Integrado
• Herramientas
1. Metodología
2. Lenguaje Visual de Modelado
3. Heurísticas
Diseño de Secuencias
Diseño de
Condicionales
Diseño de
Ciclos
Testing
Integración
y
Refinamiento
57/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Construcción
Diseño de Secuencias
Diseño de
Condicionales
Diseño de
Ciclos
Testing
Integración
y
Refinamiento
Repeticiones
Resultados Procesos
Entradas
Restricciones
Dicc.
Datos
Secuencia
58/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Lenguaje Visual de Modelado
(símbolos actuales)
Entrada
Proceso
Salida
Proceso
Condición
No
Si
Ciclo While
Proceso
Condición
No Si
Ciclo Until
Condición
Proceso
No Si
If-Then
Condición
Proceso
Proceso
No Si
If-Then-else
Secuencial
Proceso
Ciclo For
i=1
i=n
+1
59/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Lenguaje LeMVI (pág. 141)
Secuencia
If-Then-else
Entrada
Proceso
Salida
If-Then
Ciclo abierto
(While)
Ciclo abierto
(Until)
Estructuras de
Repetición
Estructuras
Condicionales
Estructura
Secuencial
Multicondicional
Case
Ciclo cerrado
(For)
Condición
No Si
Estructura
Condición
No Si
Estructura Estructura
Variable
ordinal
1er valor 2° valor n valor
Estructura Estructura
Estructura . . .
Estructura
Incre-
mento
Valor
inicial
Valor Final
Si
Estructura
Condición
Fin de
ciclo
Estructura
Condición
Inicio de
Ciclo
Si
60/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Pseudocódigos
• Secuencia:
– Leer variable
– Proceso
– Imprimir variable/constante
• Condición
– Si condición
• Proceso
– Si condición
• Proceso
– De lo contrario
• Proceso
– Caso x
• 1: proceso
• 2: proceso
• N:proceso
• De lo contrario: Proceso
– Fin caso
• Ciclos
– Repite variable desde x
• Proceso
– Hasta y
– Repite mientras condición
• Proceso
– Fin repite
– Repite
• Proceso
– Hasta condición
61/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Reglas de La Lógica
1. Regla de Secuencia
2. Regla de Equivalencia
3. Regla de Composición
4. Regla de Colaboración
5. Regla de Cerradura
6. Regla de Creación
7. Regla de Integridad
8. Regla de Flujo
9. Regla de Existencia
10. Regla de Restricción
11. Regla de Repetición
12. Regla de Combinación
62/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Reglas de la lógica
1. Regla de Secuencia.- Todas las tareas
requieren de al menos una salida y
cero, uno o más procesos y entradas.
Primero se ejecutan las operaciones de
entrada, luego las de proceso y
finalmente las de salida.
2. Regla de Equivalencia.- Las acciones
(es decir, los procesos de entrada,
proceso y salida) se consideran
equivalentes entre sí y por tanto toda
acción de proceso puede convertirse
en entrada o salida y viceversa.
3. Regla de Composición.- Un proceso
complejo puede dividirse en
subprocesos más simples colaborando
en la solución y varios procesos
individuales pueden combinarse en
uno solo más complejo.
4. Regla de Colaboración.- La(s)
salida(s) de un proceso puede(n) usarse
como entrada(s) de otro.
5. Regla de Cerradura.- En todo lugar
donde haya una acción (es decir, una
entrada, un proceso o una salida) puede
colocarse una estructura de control. En
todo lugar que haya una estructura de
control puede colocarse una acción.
6. Regla de Creación.- En una tarea o
procedimiento solo puede haber nuevas
acciones o estructuras. Estas
únicamente pueden agregarse entre
acción y acción o entre acción y
estructura o entre estructura y
estructura.
63/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Reglas de la lógica
7. Regla de Integridad.- Las
estructuras de control no pueden
cambiar su diseño. Las
operaciones son parte integral de
las estructuras de control, no son
estructuras independientes.
8. Regla del Flujo.- La secuencia de
ejecución está dictado por el
diseño de cada estructura de
control. Esta pude ser secuencial o
anidada.
9. Regla de Existencia.- Todas las
variables antes de usarse deben
estar definidas y si son parte de un
proceso de cálculo deben tener un
valor válido.
10. Regla de Restricción.- Toda variable
que deba cumplir con dominios del
mundo real o del mundo virtual
debe ser validado a través de una
estructura de restricción.
11. Regla de Repetición.- Toda
Estructura o Acción que se escriben
en más de una ocasión pueden ser
introducidos con una estructura de
repetición.
12. Regla de Combinación.- Uno o más
procedimientos pueden
combinarse para formar otro
procedimiento o una tarea. La
composición puede darse por
concatenación, anidación, fusión o
adaptación.
64/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Estrategias
• Espiral incremental. Agregar
progresivamente
funcionalidades al algoritmo.
• Retroceso. Iniciar por
identificar las salidas y a partir
de ahí identificar los procesos
y luego las entradas.
• Divide y vencerás. Divide la
tarea completa en subtareas.
• Fuerza Bruta. Interpretación
directa del problema
65/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Lenguajes de Programación
Formatos para nombrar variables
66/29
Dr. Ricardo Vargas de Basterra
Lenguajes de Programación
Tipos de datos en C
67/29
Dr. Ricardo Vargas de Basterra
Lenguajes de Programación
Ejercicio
• “Hola Mundo”
• Investiga en línea como
es el programa hola
mundo en lenguaje C
• Instala DevC en tu
computadora
• Transcribe el programa
y ejecútalo
68/29
Dr. Ricardo Vargas de Basterra
UNIDAD 3
Ejecución Condicional
69/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Operadores
• Símbolos que
representan una
operación.
• Se utilizan para construir
expresiones
• Hay de tres tipos:
– Aritméticos (resultados
numéricos)
– Relacionales (resultados
booleanos)
– Lógicos (resultados
booleanos)
70/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Es un conjunto de constantes, variables y
operadores con los cuales se realiza las
operaciones para obtener un resultado.
Ejemplo:
resultado = a-(3*b+6)/c
Operando Operando
Operador
Valor
Constante o variable
Expresión
71/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Expresiones aritméticas
• Notación algorítmica
para representar
formulas matemáticas
dentro de un programa
• Combina uno, dos o
más valores
(constantes o variables)
a través de operadores
aritméticos para
generar un valor
numérico
72/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Jerarquía de operadores
aritméticos
73/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Ejemplo
Se ejecutan por orden de jerarquía de
operadores y de izquierda a derecha
74/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Expresiones Relacionales
• Comparan dos
expresiones a través de
un operador relacional
• Generan un resultados
Booleano (verdadero o
falso)
• Jerarquía: Todos tienen
la misma jerarquía
Operador Significado
== igualdad
!= Diferente
> Mayor que
< Menor que
>= Mayor o igual
<= Menor o igual
75/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Ejemplos
1 > 2 = 0 falso
3 < 5 = 1 verdadero
(7 – 4) == 3 = 1 verdadero
17 >= (5 + 12) = 1 verdadero
i = 3; j = 7;
i * j != 21 = 0 falso
float a=0.1;
(3*a – 0.3) == 0 = 0 falso (OJO con los reales)
3 > 1 > 0 = 1 verdadero
Asignar a una variable la mayor de otras dos:
a = 17; b = 15;
c = a*(a>=b) + b*(b>=a); c = 17 a>=b = 1 y b>=a = 0
76/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Expresiones Lógicas
• Comparan dos
expresiones booleanas
través de un operador
lógico
• Generan un resultados
Booleano (verdadero o
falso)
• Jerarquía:
– 1º la Negación
– 2ª. Todos los demás
77/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Ejemplos
Se ejecutan por orden de jerarquía de
operadores y de izquierda a derecha
78/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
1. Aritméticos
1. ^
2. *, /
3. +, -
2. Relacionales
1. Mayor que >
2. Menor que <
3. Mayor igual que >=
4. Menor igual que <=
5. Igual =
6. Diferencia < > !=
3. Lógicos
1. AND
2. OR
3. NOT
3. Asignación
1. =
2. 
Tipos de operadores y orden de
ejecución
79/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Flujo de Control
• Orden en el que se
ejecutarán las
instrucciones de un
programa, desde su
comienzo hasta que
finaliza.
• El orden de ejecución es
secuencial instrucción
por instrucción
• La secuencia se puede
alterar por una condición
o por una repetición
80/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Ejecución Secuencial
Área de un rectángulo
Lee base
Lee altura
area = base * altura
Imprime area
81/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Lenguajes de Programación
Ejercicio
• Realiza programas para
calcular lo siguiente:
– El área de un triángulo
– El área de un círculo
– El área de un cuadrado
– El área de un rectángulo
– El perímetro de un círculo
– El perímetro de cuadrado
– El perímetro de un
rectángulo
– Las dos raíces de una
ecuación de segundo
grado
82/29
Dr. Ricardo Vargas de Basterra
Ejecución Condicional
• Se utilizan para
determinar cual será
flujo de ejecución de
un programa
dependiendo de una
condición.
• Hay tres tipos:
– Simple
– Doble
– Mútiple
83/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Condición Simple
• Determina si una
sentencia (o bloque) se
ejecuta en función del
resultado de una
condición
• Si es verdadera se
ejecuta, de lo contrario
la omite y continúa con
la siguiente instrucción
Lee nombre
Si nombre = ‘Ricardo’
Entonces
imprime ‘Te llamas igual que yo’
Imprime ‘Hola ‘, nombre
84/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Condición Doble
• Dependiendo de una
condición Se ejecuta
una sentencia (o
bloque) u otra.
• Luego continúa con la
siguiente instrucción
Lee valor
Si (valor /2) = 0
Entonces
imprime ‘el numero es par’
De lo contrario
imprime ‘el numero es impar’
Imprime ‘Gracias por participar’
85/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Condición múltiple
• Dependiendo del valor
que tome una variable
se determina la ruta a
seguir.
• Las rutas pueden ser
tres o más
• Después se continúa
con la siguiente
instrucción
Lee NumeroDia
Caso NumeroDia
1: Imprime ‘Domingo’
2: Imprime ‘Lunes’
3: Imprime ‘Martes’
4: Imprime ‘Miércoles’
5: Imprime ‘Jueves’
6: Imprime ‘Viernes’
7: Imprime ‘Sábado’
otro: Imprime ‘No existe’
Fin del caso
Imprime ‘Gracias por participar‘
86/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Anidación
• Se da cuando una
estructura completa se
coloca en la parte del
proceso de otra
Leer N
Si N > 5
entonces
Si N > 10
entonces
Imprime N, ‘es mayor que diez’
De lo contrario
Imprime N, ’es Mayor que 5 pero menor o igual a 10
De lo contrario
Imprime N, ‘es menor que 5’
Imprime ‘Gracias por participar’
87/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
UNIDAD 4
Iteraciones
88/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Iteraciones
• También llamados
ciclos o loops
• Es una estructura de
control que se utiliza
para repetir la
ejecución de un
proceso un número ‘n’
de veces
89/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Mecanismos de control
• Existe un mecanismo de
control para determinar
cuando detener el ciclo
• Ese mecanismo de
control está basado en el
cumplimiento o no de
una condición.
• Esa condición utiliza una
variable de control
normalmente llamada ‘i’
90/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Tipos de Ciclos
Ciclos
Cerrados (se conoce el
número de repeticiones)
Abiertos (no se conoce el
número de repeticiones)
Condición antes del
proceso
Condición después del
proceso
91/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Ciclo cerrado ‘Repite’
• Se conoce de
antemano el número
de veces que se
repetirá un ciclo.
• En los lenguajes se
conoce como ciclo ‘for’
92/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Ejemplo
• Se interpreta como
“Repite el proceso
desde que i es igual a 1
hasta 10 de uno en
uno”
Repite i=1 hasta 10 de +1
Inicio de bloque
Proceso
Fin de bloque
93/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Ejemplo
• Se interpreta como “Repite
el proceso desde que i es
igual a m hasta n de menos
2 en menos 2”
• Los valores de n y m deben
ser asignados antes de que
el control de ejecución
llegue a esa instrucción
Repite i=m hasta n de -2
Inicio de bloque
Proceso
Fin de bloque
94/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Ciclo abierto
• No se conoce de
antemano el número
de veces que se
repetirá un proceso.
• Hay dos versiones:
– Aplicar la condición de
control antes de la
ejecución del ciclo
– Aplicar la condición de
control después de la
ejecución del ciclo
95/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Ciclo abierto ‘Mientras’
• El ciclo mientras realiza la
repetición del proceso
mientras una condición
de control sea verdadera
• La condición se valida
antes de realizar el
proceso a repetir
• Dependiendo de la
condición, puede suceder
que el proceso a repetir
no se ejecute nunca
96/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Ejemplo
• Se interpreta como “Repite el
proceso mientras que i es
igual o menor que 10”
• En este tipo de ciclo el valor
de la variable de control (i)
debe ser actualizada dentro
del proceso para buscar que
el algún momento la
condición deje de cumplirse y
el ciclo concluya
• La variable i debe tener un
valor inicial antes de
comenzar la ejecución del
ciclo
Se le asigna un valor inicial a i
Mientras i <= 10
Inicio de bloque
Proceso
i debe cambiar en algún momento
Fin de bloque
97/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Ejemplo
• Se interpreta como
“Repite el proceso
mientras que i es
mayor que n”
• El valor de n debe ser
asignado antes de que
el control de ejecución
llegue a esa instrucción
Se le asigna un valor inicial a i
Se le asigna un valor inicial a n
Mientras i > n
Inicio de bloque
Proceso
i debe cambiar en algún momento
Fin de bloque
98/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Ciclo abierto ‘Hasta’
• El ciclo hasta realiza la
repetición del proceso
hasta que una condición
de control sea verdadera
• La condición se valida
después de realizar el
proceso a repetir
• Dependiendo de la
condición, puede suceder
que el proceso a repetir
se ejecute una sola vez
99/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Ejemplo
• Se interpreta como “Repite el
proceso hasta que i sea
diferente a 10”
• En este tipo de ciclo el valor
de la variable de control (i)
debe ser actualizada dentro
del proceso para buscar que
el algún momento la
condición deje de cumplirse y
el ciclo concluya
• La variable i debe tener un
valor inicial antes de
comenzar la ejecución del
ciclo
Se le asigna un valor inicial a i
Inicio de bloque
Proceso
i debe cambiar en algún momento
Hasta i <> 10
100/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Ejemplo
• Se interpreta como
“Repite el proceso
hasta que i sea menor
que n”
• El valor de n debe ser
asignado antes de que
el control de ejecución
llegue a esa instrucción
Se le asigna un valor inicial a i
Se le asigna un valor inicial a n
Inicio de bloque
Proceso
i debe cambiar en algún momento
Hasta que i < n
101/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Observaciones
• Los ciclos infinitos se
dan cuando las
condiciones de control
nunca se cumplen
• Los valores para las
variables de control del
ciclo debes asignarse
antes de que el control
de ejecución llegue al
ciclo.
102/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Lenguajes de Programación
Reto
• ¿Como se podría usar
un ciclo para validar la
entrada de una
variable?
103/29
Dr. Ricardo Vargas de Basterra
Lenguajes de Programación
Ejercicio: El jardín
• Pedro es jardinero y le han
pedido hacer un presupuesto
para poner pasto en una casa
que se está construyendo. El
jardín es rectangular pero tiene
una gran fuente circular en el
centro. Pedro tiene que decirle a
su cliente cuantos metros
cuadrados de pasto tendrá que
colocar y el importe total. Además
Pedro cobra una cantidad por
colocación que corresponde a su
mano de obra. Alma es sobrina
de Pedro y le dijo que podía
hacerle un programa para que le
ayudara a calcular lo que le
piden.
104/29
Dr. Ricardo Vargas de Basterra
Lenguajes de Programación
Tarea
• Revisar el material
Modelo para la
Construcción de
Algoritmos Apoyados
en Heurísticas
• Páginas 86 a 105
105/29
Dr. Ricardo Vargas de Basterra
¿Qué recuerdas de la sesión
anterior?
• Comenta las ideas
principales de la sesión
anterior
Dr. Ricardo Vargas de Basterra
Lenguajes de Programación
FUNCIONES
107/29
Dr. Ricardo Vargas de Basterra
Actividad 1 de funciones
• En equipos de 3
personas respondan:
• ¿Qué es una Función?
• ¿Para que se usan?
• ¿Cómo se declaran?
• ¿Cómo se invocan?
108/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Actividad 2 de funciones
• En equipos de 3
personas respondan:
• ¿Cómo se le pueden
pasar valores a una
función para que haga
su trabajo?
• ¿Cómo regresa una
función el resultado de
su ejecución?
109/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
¿Qué son?¿Para qué sirven?
• Son un grupo de sentencias bajo el mismo
nombre que realizan una tarea específica.
• Sirven para facilitar la resolución de
problemas mediante la aplicación del
paradigma “Dividir y Conquistar”.
Dr. Ricardo Vargas de Basterra
Librería MATH
• La librería math.h permite al programador efectuar cálculos
matemáticos comunes a través de funciones.
Numero Descripcion Ejemplo
ceil(x) redondea x al entero mas pequeño no menor
que x
ceil(9.2) es 10.0
ceil(-9.8) es –9.0
floor(x) redondea x al entero mas grande no mayor que
x
floor(9.2) es 9.0
floor(-9.8) es –10.0
fabs(x) valor absoluto de x fabs(-9.5) es 9.5
fmod(x,y) residuo de x/y como numero de punto flotante fmod(13.657, 2.333) es
1.992
sqrt(x) raiz cuadrada de x sqrt(9.0) es 3.0
pow(x,y) x elevado a la potencia y pow(2,7) es 128
log(x) logaritmo natural de x(base e) log10(x)
log10(x) logaritmo de x(base 10) log(2.718282) es 1
exp(x) funcion exponencial exp(0.1) es 2.71828
sin(x) seno trigonometrico de x(en radianes) sin(0.0) es 0.0
cos(x) coseno trigonometrico de x(en radianes) cos(0.0) es 1
tan(x) tangente trigonometrico de x(en radianes) tan(0.0) es 0
Dr. Ricardo Vargas de Basterra
• Las funciones y los programas se parecen mucho, pero difieren:
– Los programas son usados por un usuario externo.
– Las funciones son utilizadas por un programador.
– El usuario del programa “Hola Mundo” no conoce que es
la función printf.
– El programador que usa printf no siempre conocerá
explícitamente como ésta hace para mostrar información
en pantalla.
– El programador que escribió printf conoce exactamente
su funcionamiento interno.
Diferencia entre
El Programa y las Funciones
Dr. Ricardo Vargas de Basterra
Conceptos Básicos
• Función
– Grupo de sentencias bajo el mismo nombre que
realizan una tarea específica.
• Llamada a una función
– Ejecuta el grupo de sentencias de una función.
• Retorno
– Una vez “llamada” la función, esta hace su
trabajo, y regresa al mismo punto donde fue
llamada.
Dr. Ricardo Vargas de Basterra
Declaración de Funciones
• De forma similar a las variables, las funciones
deben ser declaradas:
• La forma de declarar una función es siguiendo
la forma predefinida:
• Por ejemplo:
int potencia(int base, int exponente);
float farenheitACelsius(double celsius);
tipoDatoRetorno nombreFuncion(lista parámetros);
Dr. Ricardo Vargas de Basterra
Implementación de Funciones
int potencia(int base, int exponente)
{
sentencias;
}
float farenheitACelsius(double celsius)
{
sentencias;
}
La primera línea se escribe
igual que en la declaración,
pero sin el punto y coma.
Entre llaves se escriben
las sentencias que
ejecutan lo que debe
realizar la función
Dr. Ricardo Vargas de Basterra
¿Cómo Retornar?
• Si la función debe generar un valor, lo retornará usando la
sentencia return dentro del cuerpo de la función.
• La forma de usarla es:
return (variable o expresión que se debe retornar);
• Esto especifica que la función debe terminar, retornando el
valor calculado.
• Hay funciones que no retornan datos, en este caso, se puede
usar return, pero sin mencionar una expresión.
return;
Dr. Ricardo Vargas de Basterra
Uso de Funciones
• Como las funciones siempre retornan un
valor, el uso de una función consiste en
utilizar el valor de retorno.
• Se lo puede hacer de dos formas:
– Almacenar el valor de retorno en una variable
que deberá ser del mismo tipo de dato que el
tipo de dato de retorno de la función.
– Utilizar el valor de retorno en una expresión.
Dr. Ricardo Vargas de Basterra
Uso de Funciones (continuación)
• Ejemplo:
void main( )
{
int x;
….
x = potencia(a,b);
…
}
void main( )
{
float c;
….
c = farenheitACelsius(f);
…
}
void main( )
{
….
printf(“%d”, potencia(a,b));
…
}
void main( )
{
….
printf(“%f”, farenheitACelsius(f));
…
}
Dr. Ricardo Vargas de Basterra
Lenguajes de Programación
Realizar el paquete de ejercicios
• ¡A programar!
119/29
Dr. Ricardo Vargas de Basterra
Lenguajes de Programación
ÁREAS DE TRABAJO
120/29
Dr. Ricardo Vargas de Basterra
Lenguajes de Programación
Áreas de trabajo: namespace
• Un namespace, no es
más que una forma de
crear un bloque, y que
todas las funciones que
estén dentro del
mismo, estén asociadas
a ese namespace (o
espacio de nombres), al
cual se le asigna un
nombre para
identificarlo.
namespace hola
void f()
{
std::cout << “hola”;
}
121/29
Dr. Ricardo Vargas de Basterra
Lenguajes de Programación
Para que se usan
• Aparecen en C++
• No existían en C
• Se usa para poder crear
funciones sin el peligro
que sus nombres estén
repetidos en una
librería cargada
void f()
{
std::cout << “adios”;
}
void f()
{
std::cout << “hola”;
}
122/29
Dr. Ricardo Vargas de Basterra
Lenguajes de Programación
Cómo se usan
• Para identificar a
que área de
trabajo pertenece
una función se
utilizan los dobles
dos puntos: “::”
NombreNamespace::función;
namespace prueba
{
void f() { std::cout << “hola”;
}
void f()
{
std::cout << “adios”;
}
int main()
{
f();
prueba::f();
getchar();
return 0;
}
123/29
Dr. Ricardo Vargas de Basterra
Lenguajes de Programación
namespace std
• Es el namespace dónde
está incluida toda la
librería estándar de C++
• Al incluirlo ya no
tenemos que indicar
std::cout, sino que
directamente indicamos
cout
using namespace std;
int main()
{
f();
hola::f();
cout << “loquesea”;
getchar();
return 0;
}
124/29
Dr. Ricardo Vargas de Basterra
Lenguajes de Programación
Múltiples namespace
namespace prueba
{
void f()
{
std::cout << “hola”;
}
}
namespace otro
{
void f()
{
std::cout << “adios”;
}
}
using namespace std;
using namespace prueba;
int main()
{
f();
otro::f();
cout << “loquesea”;
getchar();
return 0;
}
125/29
Dr. Ricardo Vargas de Basterra
¿Qué recuerdas de la sesión
anterior?
• Comenta las ideas
principales de la sesión
anterior
Dr. Ricardo Vargas de Basterra
Lenguajes de Programación
APUNTADORES
127/29
Dr. Ricardo Vargas de Basterra
Lenguajes de Programación
Definición
• Un apuntador es
una variable que
contiene la dirección
en memoria de otra
variable. Se pueden
tener apuntadores a
cualquier tipo de
variable.
128/29
Dr. Ricardo Vargas de Basterra
Apuntador
2000 0010 ApuntaG
2001 0007 ApuntaD
2002 X
2003 X
2004 X
2005 X
2006 X
2007 X
2008 X
2009 X
2010 x
0000 34 A
0001 45 B
0002 12 C
0003 4 Var1
0004 99 Var2
0005 -98 Var3
0006 45 Vector1
0007 32 D
0008 55 E
0009 -9 F
0010 3 G
Dirección Contenido Denominación Dirección Contenido Denominación
Dr. Ricardo Vargas de Basterra
Declarar Apuntadores
• int *maria
– Declara un Apuntador
del tipo entero
• Float *pedro
• Char *juan
• maria tiene la dirección
de la variable
• *maría es equivalente al
valor de la variable
• &maría obtiene la
dirección de memoria
de la variable maria
Dr. Ricardo Vargas de Basterra
Apuntadores
La dirección de x es 100 y la de y es 200
Además la variable ap es en 1000
Declara ap como apuntador
Asigna ap como el apuntador de x
Es decir no el valor de x que es 1 sino la
Dirección de x
Cual valor tendría entonces?
Dr. Ricardo Vargas de Basterra
Ejemplo en c
Dr. Ricardo Vargas de Basterra
Análisis del ejemplo
Dr. Ricardo Vargas de Basterra
Apuntador de un Caracter
Dr. Ricardo Vargas de Basterra
Aplicaciones
Dr. Ricardo Vargas de Basterra
¿Qué recuerdas de la sesión
anterior?
• Comenta las ideas
principales de la sesión
anterior
Dr. Ricardo Vargas de Basterra
Lenguajes de Programación
Actividad
• Escribir una función
que reciba dos valores
por referencia y los
invierta
137/29
Dr. Ricardo Vargas de Basterra
Punteros a Funciones
Dr. Ricardo Vargas de Basterra
Lenguajes de Programación
Actividad
• Investigar:
– Cadenas de caracteres
– Funciones disponibles
sobre cadenas de
caracteres
• Hacer un programa que
pida dos cadenas, las
concatene y las
imprima al revés
139/29
Dr. Ricardo Vargas de Basterra
Lenguajes de Programación
Ejemplo de direccionamiento con
apuntadores a cadenas
#include <cstdlib>
#include <iostream>
char *copiacadena (char *destino, const char *origen);
int main ()
{
char destino[20];
char origen[20];
printf("escribe la cadena: ");
scanf("%s", &origen);
printf("la cadena original es: %s n", origen);
printf("Mando copiar la cadena n");
copiacadena(destino,origen);
printf("la cadena original es: %s n", origen);
printf("la cadena invertida es: %s n", destino);
getchar();
return 0;
}
char *copiacadena(char *strDest, const char *strOrg)
{
int len = strlen(strOrg);
printf("La longitud de la cadena original es:
%d n", len);
while (len > 0)
{
*(strDest + len+1) = *(strOrg + len--);
}
*strDest = *strOrg;
return strDest;
}
140/29
Dr. Ricardo Vargas de Basterra
Lenguajes de Programación
Tarea
• Investigar sobre
arreglos
• Investigar sobre
matrices
• Elaborar una
presentación por
equipos con ejemplos
de los tres puntos.
141/29
Dr. Ricardo Vargas de Basterra
Trabajo con Cadena
Dr. Ricardo Vargas de Basterra
Ejemplo
Dr. Ricardo Vargas de Basterra
ALGORITMOS Y ESTRUCTURASS DE
DATOS
Algoritmos de búsqueda y ordenación
144/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Lenguajes de Programación
Formatos para nombrar variables
145/29
Dr. Ricardo Vargas de Basterra
Algoritmos básicos
• Dan soluciones a
problemas comunes
que pueden ser simples
o complejos.
• Los casos
fundamentales son:
– Intercambio de valores
– Contador
– Sumador/Permutador
– Ordenación
– Búsqueda
146
Dr. Ricardo Vargas de Basterra
Intercambio de valores
• Sean A y B dos
variables con valores
cualesquiera y se desea
intercambiar éstos
valores
• Solución posible
Ejemplos: A = 3 y B = 7
A = B
B = A
Solución:
• Para evitar la perdida de
valores se utiliza una
variable temporal T
• Solución:
T = A
A = B
B = T
147
Dr. Ricardo Vargas de Basterra
Contador
• Un contador es una
variable cuyo valor se
incrementa o
decrementa en una
cantidad constante cada
vez que se produce un
determinado suceso o
acción.
• Los contadores se utilizan
con la finalidad de contar
sucesos o acciones
internas en un ciclo
148
Dr. Ricardo Vargas de Basterra
Sumatoria
• Una sumatoria es una
variable que suma sobre sí
misma un conjunto de
valores, para de esta
manera tener la suma de
todos ellos en una sola
variable.
• La diferencia entre un
contador y un sumador es
que el primero se modifica
usando valores fijos (1), la
sumatoria se modifica en
forma variable
149
Dr. Ricardo Vargas de Basterra
Permutatoria
• Una permutatoria es
una variable que
multiplica sobre sí
misma un conjunto de
valores, para de esta
manera tener el
producto de todos ellos
en una sola variable.
150
𝑃
=
𝑘=1
𝑛
𝐴𝑘
Dr. Ricardo Vargas de Basterra
Fases
Contador Sumador Permutador
Inicialización Contador = 0 Suma = 0 Mult = 1
Incremento/
decremento
Contador = Contador + 1
Contador = Contador – 1
Sumador = Sumador +
valor
Sumador = Sumador –
valor
Mult = Mult * valor
151
Tiene 3 Fases (se calculan en momentos de tiempo diferente dentro
de ciclos):
1 . Inicialización (en cero o uno según el caso)
2. Calculo (Incremento, decremento, acumulación o multiplicación)
3. Utilización (la variable ya con el
Dr. Ricardo Vargas de Basterra
Ejemplo Contador
152
Dr. Ricardo Vargas de Basterra
153
La Escuela
Dr. Ricardo Vargas de Basterra
¿Qué recuerdas de la sesión
anterior?
• Comenta las ideas
principales de la sesión
anterior
Dr. Ricardo Vargas de Basterra
Estructuras de Datos
• Colecciones de datos
organizados que
pueden ser de
diferentes tipos y que
comparten
comportamientos
• Son medios para
manejar grandes
cantidades de datos
155
Dr. Ricardo Vargas de Basterra
Estructuras de datos
156
Dr. Ricardo Vargas de Basterra
Lenguajes de Programación
Estructuras básicas
• Arreglos
• Matricies
• Registros
157/29
Dr. Ricardo Vargas de Basterra
Arreglos (Arrays)
• Colección de un número
fijo de componentes que
son del mismo tipo de
dato.
• Forma general para
declarar un arreglo de una
dimensión:
– dataType arrayName[intExp];
• Donde intExp es cualquier
expresión constante que al
evaluarse produce un número
positivo entero. También,
intExp especifica el número
de componentes del arreglo.
Dr. Ricardo Vargas de Basterra
Arrays
• Ejemplos:
– La instrucción: int num[5]; declara un arreglo
llamado num de cinco componentes, cada uno de
tipo int.
num[0] num[1] num[2] num[3] num[4]
num
Dr. Ricardo Vargas de Basterra
Arrays
• Para acceder a los componentes de un arreglo, la
forma general utilizada es:
– arrayName[indexExp]
• Donde indexExp, también llamado el index, es cualquier expresión
cuyo valor debe ser un entero positivo. Especifica la posición de un
componente dentro del arreglo.
– Ejemplo:
• int list[10]; //declara un arreglo llamado list de 10 componentes
• list[5] = 34; // almacena el valor 34 en la sexta posición del arreglo list
34
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
Dr. Ricardo Vargas de Basterra
Arrays
 Supongamos que a es una variable de tipo int. Las
instrucciones:
– a = 3;
– list[a] = 63;
asignan el valor de 3 a la variable a, y luego le asigna el
valor 63 a la cuarta posición del arreglo list. De la misma
forma, si el valor de la variable a es 4, entonces la
instrucción
list[2 * a – 3] = 58;
almacena el valor 58 dentro de list[5] porque 2*a-3
evalua a cinco.
Dr. Ricardo Vargas de Basterra
Arrays
• Ejemplos:
list[3] = 10; //asigna el valor de 10 al cuarto componente de list
list [6] = 35; //asigna el valor de 35 a la posición siete de list
list [5] = list[3] + list [6] ; //suma el contenido de list[3] y de list[6] a list[5]
10 45 35
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
Dr. Ricardo Vargas de Basterra
Arrays
• Uso práctico de arreglos
en C
– Problema sin arreglos:
hacer un programa que en
C que lea cinco números,
los sume, y luego los
escriba en el orden
inverso como se entraron.
• Se necesitan declarar al
menos cinco variables
todas del mismo tipo para
almacenar en memoria los
números que se van a
entrar.
Dr. Ricardo Vargas de Basterra
Arrays
 Programa #1
#include<iostream>
using namespace std;
int main()
{
int num1, num2, num3, num4, num5;
int sum;
cout << “Ingrese cinco enteros: “;
cin >> num1, num2, num3, num4, num5;
cout << endl;
sum = num1 + num2 + num3 + num4 + num5;
cout << “The sum of the numbers = “ << sum << endl;
cout << “The numbers in reverse order are: “;
cout << num5 << “ “ << num4 << “ “ << num3 << “ “ << num2
<< “ “ << num1<< endl;
system(“pause”);
return 0;
}
Dr. Ricardo Vargas de Basterra
Arrays
• Hacer el mismo programa pero para que lea 20
números en lugar de solo cinco.
– En vez de definir veinte variables del mismo tipo en
el programa, es más conveniente definir un arreglo
de veinte posiciones donde se pueda acumular cada
valor en su lugar correspondiente, leerlos, sumarlos,
y por último escribirlos en el orden inverso como se
entraron.
Dr. Ricardo Vargas de Basterra
Arrays
 Solución:
#include<iostream>
using namespace std;
int main()
{
int list[100];
int sum = 0;
cout << “Enter 100 integers: “;
for (int i = 0; i < 100; i ++)
{
cin >> list[i];
sum = sum + list[i];
}
cout << endl;
cout << “The sum of the numbers = “ << sum << endl;
cout << “The numbers in reverse order are: “;
for(int i = 99; i >=0; i --)
cout << list[i] << “ “;
cout << endl;
system(“pause”);
return 0;
}
Dr. Ricardo Vargas de Basterra
¿Qué recuerdas de la sesión
anterior?
• Comenta las ideas
principales de la sesión
anterior
Dr. Ricardo Vargas de Basterra
Lenguajes de Programación
Dimensiones del arreglo
• Hay arreglos de 1
dimensión con un solo
índice para su acceso
• Pero puede haber
arreglos de dos
dimensiones con dos
índices para su acceso.
Ejemplo:
• Int A[i,j]
• Int A[i][j]
168/29
Dr. Ricardo Vargas de Basterra
Lenguajes de Programación
Múltiples dimensiones
169/29
• ¿Crees que pueda
haber arreglos de 3
dimensiones?
• ¿de 4?
• ¿de n dimensiones?
Dr. Ricardo Vargas de Basterra
Lenguajes de Programación
Ejercicio
• Retomemos el programa que
calculaba el promedio de
calificaciones de varios
estudiantes
• Ahora convertirlo a un
programa que utilice
matricies
• Al terminar el programa de
imprimir las notas de todos
los estudiantes, su promedio
individual, el promedio grupal
y los conteos de estudiantes
de excelencia, regulares y no
acreditados
170/29
Dr. Ricardo Vargas de Basterra
Lenguajes de Programación 171/29
Dr. Ricardo Vargas de Basterra
¿Qué recuerdas de la sesión
anterior?
• Comenta las ideas
principales de la sesión
anterior
Dr. Ricardo Vargas de Basterra
1
Definición formal del problema de búsqueda
Entrada:
• secuencia de n números <a1, a2,..,an>
• Un número b
Salida:
• un entero i, tal que b == ai (igual)
• 0 si b != ai, para i = 1,...,n
Ejemplo instancia:
Entrada: <5, 6, 9, 12> y 9
Salida: 3
Algoritmos de búsqueda y
ordenación
173/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
1
Entrada:
• secuencia de n números <a1, a2,..,an>
Salida:
• Una permutación <a'1, a'2,..,a'n>
reordenamiento de la secuencia, tal que:
a'1 < a'2 < ... < a'n
Ejemplo instancia:
Entrada: <5,3,1,6,0>
Salida: <0,1,3,5,6>
Definición formal del problema
de ordenamiento
174/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
1
Algoritmos de Búsqueda
Definición: Son algoritmos
para encontrar un dato dentro
de una estructura o arreglo
– Se ha desarrollado un
conjunto de algoritmos de
búsqueda que varían en
complejidad, eficiencia y
tamaño del dominio de
búsqueda.
– Si se conoce por anticipado
en qué tipo de “orden” inicial
se encuentran los datos, es
posible elegir un algoritmo
que sea más adecuado.
175/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
1
Tipos de Búsqueda
• Casos más famosos
– Secuencial
– Binaria
176/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
1
Consiste en ir comparando el elemento
que se busca con cada elemento del
arreglo hasta que se encuentra.
I N F O M Á T I C A
R R R R R
0 1 2 3 4 5 6 7 8 9 10
Índice resultado = 4
Búsqueda Secuencial
177/29
Lenguajes de Programación
R
Dr. Ricardo Vargas de Basterra
1
Algoritmo Búsqueda Secuencial
for (i=0; i < LARGO; i++)
if (a[i]==Elemento_buscado)
printf(“Elemento encontrado en: %dn”, i);
178/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
1
Búsqueda Binaria
Los elementos del arreglo se encuentran ordenados y
no están repetidos. En cada iteración el dominio de
búsqueda se divide en 2.
3 5 8 20 32 45 60 73
32 32
0 1 2 3 4 5 6 7
Resultado = 4
32
179/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
1
tipo A[LARGO]
Max=LARGO-1;
min=0;
Encontrado=0;
while(min+1<max && !Encontrado){
Medio=(Max+min)/2
if (A[Medio]==Elemento){
printf(“Elemento Encontradon”);
Encontrado=1; /*Fuerza la salida del ciclo*/
}
if (A[Medio]<Elemento) Max=Medio;
if (A[Medio]>Elemento) min=Medio;
}
Algoritmo Búsqueda Binaria
180/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
1
Algoritmos de Ordenamiento
Definición:
• Son algoritmos que
fueron realizados para
ordenar un conjunto de
datos. Los algoritmos
varían según su facilidad
de entendimiento, su
eficiencia, cantidad de
código necesario para
implementarlos,
complejidad, requisitos
necesarios de los datos.
181/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
1
Tipos de Ordenamiento
• Internos
• Externos
• Inserción
• Intercambio
• Casos más famosos
– Ordenamiento por
burbuja (bubble sort)
– Quick Sort
182/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
1
Ordenamiento Burbuja
El algoritmo consiste en que los
elementos más pesados se hundan y
los más livianos salgan a flote.
25 25
32
15
1 1
32
15
32
1
15
25
32
1
25
15
32
25
1
15
32
25
15
1
32
25
15
1
183/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
1
Ordenamiento Burbuja
• Algoritmo
for (i=Largo-1;i>0;i--)
for (j=0;j<i;j++)
if (A[j]>A[j+1])
Intercambiar(A[j],A[j+1]);
184/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
1
Búsqueda del más pequeño
El algoritmo consiste en encontrar el más
pequeño de un grupo de datos y
colocarlo hasta arriba.
25 15
32
15
1 1
25
32
15
25
32
1
15
32
25
1
25
32
15
1
32
25
15
1
15
1
185/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
1
Más Pequeño
• Algoritmo
for (i=0;i<=n-1;i++)
{
for (j=i+1;j<=n;j++)
{
if (A[i]>A[j])
{
x=A[i];
A[i]=A[j];
A[j]=x;
}
}
} 186/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Otros algoritmos de ordenación
Quick Sort
• Elegir un elemento de la lista de elementos
a ordenar, al que llamaremos pivote.
• Resituar los demás elementos de la lista a
cada lado del pivote, de manera que a un
lado queden todos los menores que él, y al
otro los mayores. Los elementos iguales al
pivote pueden ser colocados tanto a su
derecha como a su izquierda, dependiendo
de la implementación deseada. En este
momento, el pivote ocupa exactamente el
lugar que le corresponderá en la lista
ordenada.
• La lista queda separada en dos sublistas,
una formada por los elementos a la
izquierda del pivote, y otra por los
elementos a su derecha.
• Repetir este proceso de forma recursiva
para cada sublista mientras éstas contengan
más de un elemento. Una vez terminado
este proceso todos los elementos estarán
ordenados.
187/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
DIRECCIONES DE MEMORIA
1000
1001
1002
1003
&a es
1000
 Las variables
 Tienen direcciones de memoria
 Si deseamos conocer dicha dirección
 En lenguaje C
 Se usa el operador & de dirección
 Ejemplo:
int a;
a = 3;
printf(“Valor:%d Dir: %d”, a, &a);
 Un puntero
 Es una variable que puede almacenar dirección de
memoria
Dr. Ricardo Vargas de Basterra
DECLARACION DE PUNTEROS
• Un tipo de dato
– El puntero solo podrá almacenar direcciones de
memoria de variables del tipo especificado
– Se pueden definir punteros de cualquier tipo:
float *pf;
char *pc;
• Un identificador que siempre va antecedido del
operador * pt almacena la
dirección de x, se dice
que pt apunta a x
x
pt
int *p;
1000
1001
1002
1003
1004
1005
1000
int *pt, x;
x = 3;
pt = &x;
3
Dr. Ricardo Vargas de Basterra
CONSULTANDO CONTENIDO
• Si un puntero apunta a una variable
– A través del puntero se puede llegar a conocer todo sobre la variable
– Ejemplo:
c = ‘A’
printf(“%c”, *pc1);
*pc1 = ‘N’
printf(“%c”,c);
Es equivalente a :
printf(“%c”, c);
Es equivalente a :
c = ‘N’
Imprime ‘N’ pues c ya
cambio
char c, *pc1, *pc2;
pc1 = &c;
 Si quiero conocer la dirección, uso directamente el puntero
printf(“%d”, pc1); //Imprimo la dir. Almacenada por pc1
pc2 = pc1; //pc2 almacena la misma dir. que pc1
 Si quiero conocer el contenido al que apunta un puntero, uso el
operador *, sobre dicho puntero
Dr. Ricardo Vargas de Basterra
EJERCICIO EN CLASE
*p1 = *p2;
int x,y;
int *p1,*p2;
x = -42;
y = 163;
p1 = &x;
p2 = &y;
*p1 = 17;
*p2 = x+5;
1000
1004
Es equivalente a escribir
x = y;
p1 = p2; Esto indica que p1
ahora apunta a la
misma variable que p2
1004
p1 = NULL;
p2 = NULL; Esto es equivalente a “encerar” el
puntero, y decir que no apunta a ninguna
variable
1000
1004
1008
1012
x
y
p1
p2
-42
22
1000
1004
17
22
0
0
163
1004
Dr. Ricardo Vargas de Basterra
Lenguajes de Programación
Ejercicio
• Hacer un programa que
defina las siguientes
variables:
– Int a,b
– Int *p1,*p2, *
• Asignar lo siguiente
– a=1
– B=2
– *p1=&a
– *p2=&b
• Imprimir
– a
– b
– &a
– &b
– *p1
– *p2
– p1
– p2
– &p1
– &p2
192/29
Dr. Ricardo Vargas de Basterra
ARITMETICA DE PUNTEROS
• Los operadores + y –
– Se pueden usar con punteros
– Pero el significado de la operación cambia un poco
• Si un entero ocupa 4 bytes, tomemos este
ejemplo
int x;
int *p;
p = &x;
• Si la dirección de x es un valor 100 y decimos
p = p+2;
• Que dirección almacena p?
102 108 104
La suma indica que p se mueva 2
“enteros” mas adelante
Cada entero equivale a 4 bytes
100 + 2*4 = 108
Dr. Ricardo Vargas de Basterra
EJERCICIO EN CLASE
main(){
double Lista[3];
double *p,*p1,*p2;
int k;
Lista[0] = 1;
Lista[1] = 1.1;
Lista[2] = 1.2;
p = Lista;
p = p + 2;
printf(“%d”, *p);
p = p - 1;
printf(“%d”, *p);
p1 = Lista+2;
p2 = &Lista[0];
k = p1-p2;
printf(“%d”, k);
}
1000
1008
1016
Lista[0]
Lista[1]
Lista[2]
p
p2
p1
p se mueve 2
desfases
p retrocede un
desfase
Da el total de desfases
entre p1 y p2
1
1.1
1.2
Dr. Ricardo Vargas de Basterra
Lenguajes de Programación
Hacer un programa que
• Agregar al final del
programa anterior la
impresión de lo
siguiente:
– Lista[0]
– Lista
– &Lista[0]
– p2
– *p2
– &p2
195/29
Dr. Ricardo Vargas de Basterra
ESTRUCTURAS o REGISTROS
• Es un grupo de “componentes”. Cada componente
– Tiene su propio identificador, y
– Se conoce como “elemento” o “campo” de la estructura
• Ejemplo:
• Es la declaración del nuevo “tipo de dato”: NombreCompleto
• Con este tipo de dato, podremos crear “variables”:
NombreCompleto snombre, enombre;
struct NombreCompleto
{
char Primero[10];
char Inicial;
char Ultimo[10];
};
Dr. Ricardo Vargas de Basterra
USANDO ESTRUCTURAS
primero inicial
ultimo
snombre
Los registros de tipo
NombreCompleto, tendrán la
misma “estructura”
Cada dato tiene diferente
tamaño y espacio en
memoria
Cada dato representa una
información diferente
• snombre es una variable de tipo NombreCompleto
– Tiene la misma forma que la del nuevo tipo de dato
– Cada miembro/campo ocupa memoria
– Para acceder a un campo, se indica,
• La variable seguida de un punto y del nombre del campo. Ejemplo
snombre.Inicial = ‘L’;
Dr. Ricardo Vargas de Basterra
Lenguajes de Programación
Escribe estos programa
/* Paso de una estructura por valor. */
#include <stdio.h>
struct trabajador
{
char nombre[20];
char apellidos[40];
int edad;
char puesto[10];
};
void visualizar(struct trabajador);
main() /* Rellenar y visualizar */
{
struct trabajador fijo;
printf("Nombre: ");
scanf("%s",fijo.nombre);
printf("nApellidos: ");
scanf("%s",fijo.apellidos);
printf("nEdad: ");
scanf("%d",&fijo.edad);
printf("nPuesto: ");
scanf("%s",fijo.puesto);
visualizar(fijo);
}
void visualizar(struct trabajador datos)
{
printf("Nombre: %s",datos.nombre);
printf("nApellidos: %s",datos.apellidos);
printf("nEdad: %d",datos.edad);
printf("nPuesto: %s",datos.puesto);
}
/* Paso de una estructura por referencia. */
#include <stdio.h>
struct trabajador
{
char nombre[20];
char apellidos[40];
int edad;
char puesto[10];
};
void visualizar(struct trabajador *);
main() /* Rellenar y visualizar */
{
struct trabajador fijo;
printf("Nombre: ");
scanf("%s",fijo.nombre);
printf("nApellidos: ");
scanf("%s",fijo.apellidos);
printf("nEdad: ");
scanf("%d",&fijo.edad);
printf("nPuesto: ");
scanf("%s",fijo.puesto);
visualizar(&fijo);
}
void visualizar(struct trabajador *datos)
{
printf("Nombre: %s",datos->nombre);
printf("nApellidos: %s",datos->apellidos);
printf("nEdad: %d",datos->edad);
printf("nPuesto: %s",datos->puesto);
}
198/29
Dr. Ricardo Vargas de Basterra
Lenguajes de Programación
Ejercicio
Investiga en parejas lo
siguiente:
• ¿Qué es una estructura
tipo Pila?
• ¿Que comportamiento
tiene?
• ¿Qué apuntadores
requiere?
• ¿Cuáles son sus
algoritmos básicos?
• Presenten dos ejemplos
de su uso
199/29
Dr. Ricardo Vargas de Basterra
¿Qué recuerdas de la sesión
anterior?
• Comenta las ideas
principales de la sesión
anterior
Dr. Ricardo Vargas de Basterra
TDA PILA
Def: una pila es una lista ordenada de elementos en la que todas las inserciones
y supresiones se realizan por un mismo extremo denominado tope o cima
de la pila.
Definición
Estructura LIFO (Last In First Out): “último en entrar primero
en salir”
Dr. Ricardo Vargas de Basterra
Operaciones básicas
• PUSH: apilar, meter
• POP: desapilar, sacar
• TOP: cima, tope
• Underflow (pila vacía)
• OverFlow (Pila Llena)
TDA PILA
Dr. Ricardo Vargas de Basterra
Operaciones
• Crear_pila(P: pila, ok: lógico)
• Borrar_pila(P: pila, ok: lógico)
• Vacía?(P: pila, resp: lógico)
• Llena?(P: pila, resp: lógico)
• Push(P: pila, X: elemento, resp: lógico)
• Pop(P: pila, X: elemento, resp: lógico)
• Top(P: pila, X: elemento, resp: lógico)
TDA PILA
Dr. Ricardo Vargas de Basterra
Lenguajes de Programación
Comportamiento
204/29
Dr. Ricardo Vargas de Basterra
Implementación con vectores
• Definición de tipos
ELEMENTO = T;
PILA = registro de
tope: numérico;
arreglo: vector[1..MAX] de
ELEMENTO;
finregistro;
 Operación Push
Algoritmo PUSH (P: Pila, X: ELEMENTO,
ok: lógico) es
resp: lógico;
INICIO
Llena?(P,resp);
si resp entonces
ok:= falso;
sino
P.tope:= P.tope + 1;
P.arreglo[P.tope]:= X;
ok:= cierto;
finsi;
FIN
TDA PILA
Dr. Ricardo Vargas de Basterra
Implementación con vectores
• Operación Pop
Algoritmo POP (P: PILA, X:
ELEMENTO, ok: lógico) es
INICIO
Vacia(P, resp);
si resp entonces
ok:= falso; {no hay
elementos q
sacar}
sino
X:= P.arreglo[P.tope];
P.tope:= P.tope -1;
ok:= cierto;
finsi;
FIN
 Operación Top
Algoritmo TOP (P: PILA, X: ELEMENTO,
ok:lógico) es
resp: lógico;
INICIO
Vacia?(P, resp);
si resp entonces
ok:= falso; {pila vacía}
sino
ok:= cierto;
X:= P.arreglo[P.tope];
finsi;
FIN
TDA PILA
Dr. Ricardo Vargas de Basterra
Lenguajes de Programación
Ejercicio
Investiga en parejas lo
siguiente:
• ¿Qué es una estructura
tipo Cola?
• ¿Que comportamiento
tiene?
• ¿Qué apuntadores
requiere?
• ¿Cuáles son sus
algoritmos básicos?
• Presenten dos ejemplos
de su uso
208/29
Dr. Ricardo Vargas de Basterra
TDA COLA
Def: una cola es una lista ordenada de elementos en la que todas las
inserciones se realizan por un extremo (frente o principio) y las
supresiones se realizan por el otro (final).
Definición
Estructura FIFO (First In First Out): “primero en entrar primero
en salir”
Dr. Ricardo Vargas de Basterra
Operaciones básicas
• QUEUE: encolar, meter
• DEQUEUE: desencolar, sacar
Dr. Ricardo Vargas de Basterra
Operaciones
• Crear_cola(C: cola, ok: lógico)
• Borrar_cola(C: cola, ok: lógico)
• Vacía?(C: cola, resp: lógico)
• Llena?(C: cola, resp: lógico)
• Queue(C: cola, X: elemento, resp: lógico)
• Dequeue(C: cola, X: elemento, resp: lógico)
• Tamaño(C: cola, N: numérico)
Dr. Ricardo Vargas de Basterra
Implementación con vectores
• Si el principio de la cola es fijo en la primera posición del vector y el final es variante
para eliminar un elemento de la cola hay que desplazar todos los demás una posición
(Dequeue() es ineficiente).
• Si principio y final de la cola son variantes, no hacen falta desplazamientos.
– Problema: la cola puede desbordarse teniendo celdas libres.
Dr. Ricardo Vargas de Basterra
Implementación con vectores
• Solución: VECTOR CIRCULAR cuando algún índice llega al final, vuelve al
comienzo del vector
Para saber si la cola está llena o vacía,
su tamaño se controla con el campo
tam del registro
 Definición de tipos
ELEMENTO = T;
COLA = registro de
prim, ult, tam: numérico;
arreglo: vector[1..MAX] de
ELEMENTO;
finregistro;
Dr. Ricardo Vargas de Basterra
Implementación con vectores
• Operación QUEUE
Algoritmo QUEUE(C: COLA, X: ELEMENTO, resp: lógico) es
INICIO
Llena?(C,resp);
si resp = cierto entonces {la cola está llena}
Escribir “Cola llena”;
resp := falso;
sino {la cola no está llena, por lo que procedemos a añadir el elemento}
C.ult := (C.ult + 1) mod MAX; {hacemos que ult avance de forma circular}
C.arreglo[C.ult] := X;
C.tam := C.tam +1; {pues ahora hay un elemento más en la cola}
finsi;
FIN
Dr. Ricardo Vargas de Basterra
Implementación con vectores
• Operación Dequeue
Algoritmo DEQUEUE(C: COLA, X: ELEMENTO, resp: lógico) es
INICIO
Vacía?(C,resp);
si resp = cierto entonces {la cola está vacía}
Escribir “Cola vacía”;
resp := falso;
sino {hay al menos un elemento}
X := C.arreglo[C.prim];
C.prim := (C.prim + 1) mod MAX;
C.longitud := C.longitud -1;
finsi;
FIN
Dr. Ricardo Vargas de Basterra
Aplicaciones de las colas
Principalmente: gestión de recursos
• Sistemas de tiempo compartido: los recursos (CPU, memoria, …) se asignan a
los procesos que están en cola de espera en el orden en el que fueron
introducidos.
• Colas de impresión: al intentar imprimir varios documentos a la vez o la
impresora está ocupada, los trabajos se almacenan en una cola según el
orden de llegada.
• Simulación por computadora de situaciones reales: una cola de clientes en un
supermercado o el tiempo de espera para ser atendidos por un operador de
una línea telefónica.
Dr. Ricardo Vargas de Basterra
Lenguajes de Programación
Ejercicio
Investiga en parejas lo
siguiente:
• ¿Qué es una estructura
tipo Doblecola?
• ¿Que comportamiento
tiene?
• ¿Qué apuntadores
requiere?
• ¿Cuáles son sus
algoritmos básicos?
• Presenten dos ejemplos
de su uso
217/29
Dr. Ricardo Vargas de Basterra
Lenguajes de Programación
Operaciones en una estructura de
doble cola
• Escribir por la derecha
• Leer por la derecha
• Escribir por la izquierda
• Leer por la izquierda
• Consultar derecha
• Consultar izquierda
• Recorrer la cola
218/29
Dr. Ricardo Vargas de Basterra
Lenguajes de Programación
Tarea
Investigar sobre las
siguientes estructuras:
• Listas encadenadas
• Listas encadenadas
circulares
• Listas doblemente
encadenadas
• Listas doblemente
encadenadas circulares
219/29
Dr. Ricardo Vargas de Basterra
¿Qué recuerdas de la sesión
anterior?
• Comenta las ideas
principales de la sesión
anterior
Dr. Ricardo Vargas de Basterra
Lenguajes de Programación
Listas encadenadas
• Estructuras formadas
por nodos
• Un nodo tiene al
menos dos campos
(sección de dato y
sección de apuntador)
• Es dinámica y no
contigua (dispersa)
221/29
Dr. Ricardo Vargas de Basterra
Lenguajes de Programación
• Nodo tiene una sección
de datos y una de
apuntadores
• Si hubiera una lista
llamada Luis con dos
campos:
– Dato
– Link
• Luis.dato
• Luis.link
• Luis.dato[apuntador]
• Luis.link[apuntador]
• Si apuntador fuera 3
• Luis.dato[3]
222/29
Dr. Ricardo Vargas de Basterra
Lenguajes de Programación
Tipos de Listas
223/29
Dr. Ricardo Vargas de Basterra
Lenguajes de Programación
Apuntadores típicos en las Lista
• Primer nodo: Header /
FP (first Point)
• Último nodo: Last Point
• NIL/NULL puntero vacío
224/29
• Pointer
• Link
• Right Link
• Left LinkLista.dato
Dr. Ricardo Vargas de Basterra
Tipos de listas encadenadas
• Listas simples encadenadas: Tiene un
enlace por nodo. Este enlace apunta al
siguiente nodo en la lista, o al valor Nulo
o lista Vacia, si es el último nodo.
• Solo se puede recorrer la lista en un solo
sentido
Dr. Ricardo Vargas de Basterra
Tipos de listas enlazadas
• Listas doblemente encadenadas: Cada nodo
tiene dos enlaces: uno apunta al nodo anterior,
o apunta al valor Nulo o la lista vacia si es el
primer nodo; y otro que apunta al siguiente
nodo, o apunta al valor Nulo o la lista vacia si es
el último nodo.
• Se puede recorrer la lista en ambos sentidos
Dr. Ricardo Vargas de Basterra
Tipos de listas enlazadas
• Listas enlazadas circulares: En una lista
enlazada circular, el primer y el último nodo
están unidos. Para recorrer una lista enlazada
circular podemos empezar por cualquier nodo y
seguir la lista en cualquier dirección hasta que
se regrese al nodo original
• Se puede recorrer la lista en un solo sentido.
Dr. Ricardo Vargas de Basterra
Lenguajes de Programación
Tipos de listas enlazadas
• Listas doblemente encadenadas circulares:
En una lista enlazada circular, el primer y el
último nodo están unidos y cada uno apunta
al otro por su doble encadenamiento
• Se puede recorrer la lista en ambos sentidos
además de ser circular.
228/29
Dr. Ricardo Vargas de Basterra
Lenguajes de Programación
Algoritmos tipos
• Crear Lista
• Añadir nodo al final
• Recorrer lista
• Buscar un nodo en la
lista
• Eliminar un nodo
• Insertar un nodo en
medio de otros
• Eliminar la lista
229/29
Dr. Ricardo Vargas de Basterra
Lenguajes de Programación
Ejercicio
• ¿Qué cosas se deben
hacer para los
siguientes algoritmos:
– Añadir un nodo al final
– Eliminar un nodo
– Insertar un nodo en
medio de otros dos
230/29
Dr. Ricardo Vargas de Basterra
LSE: BUSQUEDA
• Hay que ubicarse en el inicio: header
• E ir avanzando hasta
– Encontrar el nodo con la información
buscada o
– Que ya no haya mas nodos
• Un apuntador se ubicara en el header
• Y luego irá avanzando al siguiente, y al
siguiente y al siguiente
15
A 12
H 21
J 31
M -1
V
10
Q
last
header
Busco Q
P 20 P 15 P 12 P 21
P20
Busco L
P 15 P 12 P 21 P 10 P 31 P -1
• Al encontrar al nodo buscado, no se
retorna la dirección de este
nodo(apuntador)
20 15 12 21 10 31
20 31
Al encontrar el nodo, el valor de retorno es 21
porque es la dirección del nodo
Si no encuentra el nodo el valor de retorno es -1
Dr. Ricardo Vargas de Basterra
INSERCION AL INICIO/FINAL
15
C 12
Y 21
Q 31
L B
10
A
Last
31
Header
20
H
nuevo
Header
18
G
nuevo
Last
32
Si la lista esta vacía, tanto header como last apuntan al
nuevo nodo
Si no, si es al inicio el nuevo header, es el nuevo nodo
Si no, si es al final, el nuevo last es el nuevo nodo
20 15 12 21 10 31
32
20
18
32
Dr. Ricardo Vargas de Basterra
Lista vacía e insertar en medio
• Debe recibir la posición donde se va a
insertar
• Insertemos después
– Si Lista Vacía, el nuevo header y last,
es el nuevo nodo
– Si la posición no existe no efectuar la
inserción
– Si la lista solo tiene un elemento, el
nuevo last es el nuevo nodo
15
B 12
Z A 31
Q W
10
M
header last
p
R
nuevo
21
91
header
last
H
nuevo
Header
50
Last
50
20 15 12 21 10 31
50
91
Dr. Ricardo Vargas de Basterra
LSE: SACAR DE LA LISTA
• La lista no debe estar vacía!!, si tiene un solo elemento, dejarla vacía
10 5 8 2 31
25
header last
tmp
Tmp = header;
header
Header = header->sig;
free(tmp); tmp
tmp = last;
last
Last = Anterior(Last);
free(tmp);
Last->sig = NULL;
20 15 12 21 10 31
Dr. Ricardo Vargas de Basterra
LSE: SACAR JUSTO UN NODO
• Lista no debe estar vacía
• La posición enviada debe existir
en la lista
• Revisar si se desea eliminar el
header o el last
10 5 8 2 31
25
header last
p
pant free(p);
20 15 12 21 10 31
Dr. Ricardo Vargas de Basterra
¿Qué recuerdas de la sesión
anterior?
• Comenta las ideas
principales de la sesión
anterior
Dr. Ricardo Vargas de Basterra
ARBOLES
237/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Arboles
• Un árbol es una estructura
de datos no lineal formada
por un conjunto de nodos.
• Son estructuras jerárquicas,
cada elemento puede tener
diferentes siguientes
elementos.
• El concepto de árbol
implica una estructura en la
que los datos se organizan
de modo que los
elementos de información
están relacionados entre sí
a través de ramas
Dr. Ricardo Vargas de Basterra
ARBOLES - DEFINICIÓN -
 Estructura no lineal y de dos
dimensiones de datos.
 Los nodos de los arboles
contienen dos o más enlaces.
 Normalmente se dibujan en
forma opuesta a los árboles
en la naturaleza.
2
3
9
Dr. Ricardo Vargas de Basterra
Arboles
• un árbol representa una jeraquía
ejemplos:
estructura organizativa de una empresa
tabla de contenido de un libro
Dr. Ricardo Vargas de Basterra
Arboles (1)
• Sistema de archivos de Unix o DOS/Windows
Dr. Ricardo Vargas de Basterra
Punt Izq Info Punt Der
Hijo Izq
Descendiente
Hijo Der
Descendiente
Raíz Padre o Antepasado
Hojas
Hermanos
Sub-árbol Izq
Sub-árbol Der
El nível Nx de un nodo, distancia a la raíz. Raíz Nivel 0
Número máximo de nodos de cualquier nivel es 2N
N0
N1
N2
N3
Root
ARBOLES - VOCABULARIO -
Nodo: 0,1,2 hijos
Todos los nodos son
descendientes de 8
la raíz
Dr. Ricardo Vargas de Basterra
Terminología de Arboles
• A es el nodo raíz
• B es el padre de D y E
• C es el hermano de B
• D y E son los hijos de B
• D, E, F, G, I son nodos terminales o
externos también llamados hojas
• A, B, C, H son nodos internos
• La profundidad (nivel) de E es 2
• La altura del árbol es 3
• El grado del nodo B es 2
• Propiedad: (#aristas) = (#nodos) - 1
Dr. Ricardo Vargas de Basterra
• Ejemplos:
• Árbolbinario:árbol de grado 2
■ Cada nodo tiene como mucho dos
descendientes directos
• Lista:árbol degenerado de grado 1
• Gradodeunnodo:número de descendientes directos
B C B
• Gradodelárbol:mayor grado de susnodos
D
Conceptos Básicos
Grado 2 Grado 3
A A
C
Dr. Ricardo Vargas de Basterra
Conceptos básicos
A
B D
C
G H
E F
I J K
0
1
• Profundidaddeunnodo:número de predecesores
• Altura delárbol:longitud de la rama más larga más uno.
Profundidad
2
3
profundidad(A)=0
profundidad(H)=2
Altura de árbol = 4
Dr. Ricardo Vargas de Basterra
Conceptos básicos
• Camino:existe un camino del nodo X al nodo Y,si existe una sucesión de
nodos que permitan llegar desde X aY.La sucesión debe tener un único
sentido: ascendiente o descendiente.
camino(A,K)={A,B,F,K}
camino(C,K)={}
A
B D
C
G H
E F
I J K
Dr. Ricardo Vargas de Basterra
Árboles: Ejercicio 1
1. Explica los valores de las
principales características del árbol
mostrado en la figura.
• ¿gradodel árbol?
• ¿alturadel árbol?
• ¿número nodos totalesdel árbol?
• ¿número de hojas?
• ¿número de nodos internos?
Dr. Ricardo Vargas de Basterra
Árboles generales
▶ También llamados n-arios o multicamino
▶ Árboles con grado mayor a 2
A
B D
C
G H
E F
I J K
Dr. Ricardo Vargas de Basterra
ARBOLES BINARIOS
• Tipo especial de árbol
– Cada nodo no puede tener mas de dos hijos
• Un árbol puede ser un conjunto
– Vacío, no tiene ningún nodo
– O constar de tres partes:
• Un nodo raíz y
• Dos subárboles binarios: izquierdo y derecho
• La definición de un árbol binario es recursiva
– La definición global depende de si misma
A
B C
D
A
B C
D E
H I
F G
J
RAIZ
Sub. Izq. Sub. Der.
Dr. Ricardo Vargas de Basterra
Árboles Binarios
▶ Está lleno si es completo y además
todas sus hojas están en el mismo
nivel
A
B C
F G
D E
A
B C
G H
E F
I J
• Es completosi todo nodo interno
(no hoja) tiene dos descendientes
P,I,D = BDE PreOrder
I,P,D = DBE EnOrder
I,D,P = DEB PostOrder
ABCDEGF
Dr. Ricardo Vargas de Basterra
RECORRIDOS DE UN A.B.
• Recorrer es
– Visitar todos los elementos de una estructura
• Como recorrer un árbol
– Hay tantos caminos ¿cual escoger?
– Existe tres recorridos típicos
• Nombrados de acuerdo a la posición de la raíz
• Preorden: raíz - subarbol izq. - subarbol der.
• Enorden : subarbol izq. - raíz - subarbol der.
• Postorden : subarbol izq. - subarbol der. -raíz
Dr. Ricardo Vargas de Basterra
EJEMPLO PREORDEN
G
G-D
G-D-B
G-D-B-A
G-D-B-A-C
G-D-B-A-C-E
G
D K
B E H M
A C F J
I
L
G
1
D
2
B
3
A
4
C
5
E
6
F
7
G-D-B-A-C-E-F
K
8
G-D-B-A-C-E-F-K
H
9
G-D-B-A-C-E-F-K-H
J
10
G-D-B-A-C-E-F-K-H-J
I
11
G-D-B-A-C-E-F-K-H-J-I
M
12
G-D-B-A-C-E-F-K-H-J-I-M
L
13
G-D-B-A-C-E-F-K-H-J-I-M-L
1. Visitar raiz
2. Preorden al Subarbol Izq.
3. Preorden al Subarbol Der.
Dr. Ricardo Vargas de Basterra
Ejemplo
Recorridos
27
Preorder: F, B, A, D, C, E, G, I,H
InOrder: A, B, C ,D, E, F, G, H, I
PostOrder: A, C, E, D, B, H, I,G, F
LevelOrder: F, B, G, A, D, I,C, E, H
Dr. Ricardo Vargas de Basterra
Árboles binarios:
Implementación
Nodo
Árbol
padre
hijo izquierdo
hijo derecho
elemento
A
B C
D E
nul
l
nul
l
nul
l
nul
l
nul nul
l l
nul
l
Dr. Ricardo Vargas de Basterra
Lenguajes de Programación 257/29
Dr. Ricardo Vargas de Basterra
GRAFOS
258/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
DEFINICIÓN DE GRAFOS
• Un grafo en el ámbito de las ciencias de la computación es
una estructura de datos, en concreto un tipo abstracto de
datos (TAD), que consiste en un conjunto de nodos (también
llamados vértices) y un conjunto de arcos (aristas) que
establecen relaciones entre los nodos.
• El concepto de grafo TAD desciende directamente del
concepto matemático de grafo. En este contexto árboles y
grafos se refiere a estructuras de datos que permiten
organizar y mantener información en un computador.
259/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
VERTICES
• Son los puntos o nodos
con los que esta
conformado un grafo.
• Llamaremos grado de
un vértice al número de
aristas de las que es
extremo. Se dice que un
vértice es `par' o `impar'
según lo sea su grado.
260/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
ARISTAS
• Son las líneas con las
que se unen las aristas
de un grafo y con la que
se construyen también
caminos.
261/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
DEFINICION
• Un grafo G = (V,A)
• V, el conjunto de vértices o nodos
– Representan los objetos
• A, el conjunto de arcos
– Representan las relaciones
V = {1, 4, 5, 7, 9}
A= {(1,4), (5,1), (7,9), (7,5), (4,9), (4,1), (1,5), (9,7), (5, 7), (9,4)}
1 4
5
7 9
262/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
TIPOS DE GRAFOS
• Dirigidos: Cada arco
está representado por
un par ordenado de
vértices.
• No dirigidos: El par de
vértices que representa
un arco no está
ordenado.
263/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
REPRESENTACIÓN DE GRAFOS
• Las representaciones de grafos más
habituales están basadas en matrices de
adyacencia.
• Matriz de adyacencia
Se asocia cada fila y cada columna a cada
nodo del grafo, siendo los elementos de la
matriz la relación entre los mismos, tomando
los valores de 1 si existe la arista y 0 en caso
contrario.
264/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
EJEMPLO
265/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
LISTAS DE ADYACENCIAS
• Se asocia a cada nodo del grafo una lista que
contenga todos aquellos nodos que sean
adyacentes a él.
• Ejemplo:
266/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Ejemplos de grafos
Madrid
Murcia
Valencia
Granada
Sevilla
Cádiz
Badajoz
Vigo
Coruña
Gerona
Barcelona
Zaragoza
Bilbao
Oviedo
Valladolid
Jaén
251
1
5
0
403
2
4
1
3
4
9
191
9
9
1
2
5
356
304
3
9
5
455
1
7
1
2
8
0
1
9
3
3
2
4
325
296 100
3
3
5
278
242
256
• Ejemplo: Grafo de carreteras entre ciudades.
267/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Ejemplos de grafos
Problemas
• ¿Cuál es el camino más corto de Murcia a Badajoz?
• ¿Existen caminos entre todos los pares de ciudades?
• ¿Cuál es la ciudad más lejana a Barcelona?
• ¿Cuál es la ciudad más céntrica?
• ¿Cuántos caminos distintos existen de Sevilla a Zaragoza?
• ¿Cómo hacer un tour entre todas las ciudades en el menor
tiempo posible?
• Ejemplo: grafo de carreteras entre ciudades.
268/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Ejemplos de grafos
• Ejemplo: grafo de planificación de tareas.
Licencia
de obras
6
Aplanar
terreno
4
Comprar
piedras
2
Cincelar
piedras
8
Hacer
camino
3
Colocar
piedras
9
Pintar
pirámide
3
269/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Ejemplos de grafos
• Ejemplo: grafo de planificación de tareas.
Problemas
• ¿En cuanto tiempo, como mínimo, se puede
construir la pirámide?
• ¿Cuándo debe empezar cada tarea en la
planificación óptima?
• ¿Qué tareas son más críticas (es decir, no pueden
sufrir retrasos)?
• ¿Cuánta gente necesitamos para acabar las
obras?
270/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Ejemplos de grafos
• Ejemplo: grafo asociado a un dibujo de líneas.
1
4
2
7
3
6
5
b
e
a
d
c
Modelo 1
Modelo 2
Escena
271/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Ejemplos de grafos
• Ejemplo: grafo de asociado a un dibujo de líneas.
Problemas
• ¿Cuántos grupos hay en la escena?
• ¿Qué objetos están visibles en la escena y en qué
posiciones?
• ¿Qué correspondencia hay entre puntos del
modelo y de la escena observada?
• ¿Qué objetos son isomorfos?
272/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
CAMINOS
• Definicion
– Un camino P en un grafo G, desde
V0 a Vn
– Es la secuencia de n+1 vertices
– Tal que (Vi, Vi+1)  A para 0 i  n
 Longitud de camino
 El numero de arcos que lo
forman
 Camino Simple
 Todos los nodos que lo
forman son distintos
 Ciclo
 Camino simple cerrado
de long. >= 2
 Donde V0 = Vn
4 7
9
6
10
11
Camino entre 4 y 7
P = {4, 6, 9, 7}
Longitud: 3
A B C
D E F
Camino A y A
P = {A, E, B, F, A}
Longitud: 4 – 4ciclo
273/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Operaciones elementales con
grafos
• Crear un grafo vacío (o
con n vértices).
• Insertar un nodo o una
arista.
• Eliminar un nodo o
arista.
• Consultar si existe una
arista (obtener la
etiqueta).
• Iteradores sobre las
aristas de un nodo:
274/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Algoritmos
• Existen múltiples
algoritmos ya desarrollados
para cada una de las
operaciones básicas así
como para la solución de
problemas típicos.
• Ejemplos:
– Dijkstra
– Euler
– Warshall
– Floyd
– Prim
– Kruskal
275/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Autoevaluación
• Realizar Autoevaluación.
Criterios:
– Esfuerzo
– Calidad
– Puntualidad en entrega de tareas
– Participación
– Aprendizaje
• Liga de la autoevaluación:
• https://forms.gle/9EWJGipK7hnE
K4AQ9
Metodología de Desarrollo de software
Dr. Ricardo Vargas de Basterra
Presentar proyecto integrador
• Presentar en equipo la
versión final del
proyecto integrador
• Realicen coevaluación.
Criterios:
– Calidad de la
información
– Calidad de la
presentación
– Calidad de la exposición
Metodología de Desarrollo de software
• https://forms.gle/LpwZ
G51D5JTJACxY6
Dr. Ricardo Vargas de Basterra
Preguntas
¿Cuáles son tus dudas?
278/29
Lenguajes de Programación
Dr. Ricardo Vargas de Basterra
Conclusiones y Preguntas
Gracias
Dr. Ricardo Vargas de Basterra
279/29
Lenguajes de Programación

Más contenido relacionado

La actualidad más candente

Gestión del riesgo de software
Gestión del riesgo de software Gestión del riesgo de software
Gestión del riesgo de software jose_macias
 
Ppt de ingenieria de requerimiento
Ppt de ingenieria de requerimientoPpt de ingenieria de requerimiento
Ppt de ingenieria de requerimientomely1930
 
¿Qué hacer para dominar el arte del levantamiento de requerimientos?
¿Qué hacer para dominar el arte del levantamiento de requerimientos?¿Qué hacer para dominar el arte del levantamiento de requerimientos?
¿Qué hacer para dominar el arte del levantamiento de requerimientos?Software Guru
 
Generación código intermedio 2
Generación código intermedio 2Generación código intermedio 2
Generación código intermedio 2Humano Terricola
 
Como instalar JasperReport e iReport en Netbeans 8.0
Como instalar JasperReport e iReport en Netbeans 8.0Como instalar JasperReport e iReport en Netbeans 8.0
Como instalar JasperReport e iReport en Netbeans 8.0Sandra Campos
 
Instalacion de un (SGBD)sistema gestor de base de datos.
Instalacion de un (SGBD)sistema gestor de base de datos.Instalacion de un (SGBD)sistema gestor de base de datos.
Instalacion de un (SGBD)sistema gestor de base de datos.SergioLopez467
 
Marcos de gobierno de ti
Marcos de gobierno de tiMarcos de gobierno de ti
Marcos de gobierno de tiRosmery Banr
 
Planificacion De Proyectos De Software
Planificacion De Proyectos De SoftwarePlanificacion De Proyectos De Software
Planificacion De Proyectos De SoftwareIván Sanchez Vera
 
Modelo requisitos UML
Modelo requisitos UMLModelo requisitos UML
Modelo requisitos UMLramirezjaime
 
Gestión de riesgos de software
Gestión de riesgos de softwareGestión de riesgos de software
Gestión de riesgos de softwareOmar S. Gomez
 
Silabo gestión y administración web
Silabo   gestión y administración webSilabo   gestión y administración web
Silabo gestión y administración webEdwin Mamani López
 
Fundamentos arquitectura del software
Fundamentos arquitectura del softwareFundamentos arquitectura del software
Fundamentos arquitectura del softwarevenezuela2015
 
Fundamentos de Ingenieria de Software - Unidad 1 modelo de negocios
Fundamentos de Ingenieria de Software - Unidad 1 modelo de negociosFundamentos de Ingenieria de Software - Unidad 1 modelo de negocios
Fundamentos de Ingenieria de Software - Unidad 1 modelo de negociosJosé Antonio Sandoval Acosta
 
Proyectos de seguridad informática
Proyectos de seguridad informáticaProyectos de seguridad informática
Proyectos de seguridad informáticaRaúl Díaz
 

La actualidad más candente (20)

Ejercicios de ms visio
Ejercicios de  ms visioEjercicios de  ms visio
Ejercicios de ms visio
 
Gestión del riesgo de software
Gestión del riesgo de software Gestión del riesgo de software
Gestión del riesgo de software
 
Proceso unificado
Proceso unificadoProceso unificado
Proceso unificado
 
Ensayo de Diseño de Software
Ensayo de Diseño de SoftwareEnsayo de Diseño de Software
Ensayo de Diseño de Software
 
Ppt de ingenieria de requerimiento
Ppt de ingenieria de requerimientoPpt de ingenieria de requerimiento
Ppt de ingenieria de requerimiento
 
pruebas caja negra y blanca.pdf
pruebas caja negra y blanca.pdfpruebas caja negra y blanca.pdf
pruebas caja negra y blanca.pdf
 
¿Qué hacer para dominar el arte del levantamiento de requerimientos?
¿Qué hacer para dominar el arte del levantamiento de requerimientos?¿Qué hacer para dominar el arte del levantamiento de requerimientos?
¿Qué hacer para dominar el arte del levantamiento de requerimientos?
 
Ingenieria requerimientos
Ingenieria requerimientosIngenieria requerimientos
Ingenieria requerimientos
 
Generación código intermedio 2
Generación código intermedio 2Generación código intermedio 2
Generación código intermedio 2
 
Como instalar JasperReport e iReport en Netbeans 8.0
Como instalar JasperReport e iReport en Netbeans 8.0Como instalar JasperReport e iReport en Netbeans 8.0
Como instalar JasperReport e iReport en Netbeans 8.0
 
Instalacion de un (SGBD)sistema gestor de base de datos.
Instalacion de un (SGBD)sistema gestor de base de datos.Instalacion de un (SGBD)sistema gestor de base de datos.
Instalacion de un (SGBD)sistema gestor de base de datos.
 
Marcos de gobierno de ti
Marcos de gobierno de tiMarcos de gobierno de ti
Marcos de gobierno de ti
 
Planificacion De Proyectos De Software
Planificacion De Proyectos De SoftwarePlanificacion De Proyectos De Software
Planificacion De Proyectos De Software
 
Modelo requisitos UML
Modelo requisitos UMLModelo requisitos UML
Modelo requisitos UML
 
Arquitectura del software
Arquitectura del softwareArquitectura del software
Arquitectura del software
 
Gestión de riesgos de software
Gestión de riesgos de softwareGestión de riesgos de software
Gestión de riesgos de software
 
Silabo gestión y administración web
Silabo   gestión y administración webSilabo   gestión y administración web
Silabo gestión y administración web
 
Fundamentos arquitectura del software
Fundamentos arquitectura del softwareFundamentos arquitectura del software
Fundamentos arquitectura del software
 
Fundamentos de Ingenieria de Software - Unidad 1 modelo de negocios
Fundamentos de Ingenieria de Software - Unidad 1 modelo de negociosFundamentos de Ingenieria de Software - Unidad 1 modelo de negocios
Fundamentos de Ingenieria de Software - Unidad 1 modelo de negocios
 
Proyectos de seguridad informática
Proyectos de seguridad informáticaProyectos de seguridad informática
Proyectos de seguridad informática
 

Similar a Programación estructurada (2).pptx

7. repres e infer parte4
7. repres e infer parte47. repres e infer parte4
7. repres e infer parte4norma8avila
 
7. repres e infer parte4
7. repres e infer parte47. repres e infer parte4
7. repres e infer parte4norma8avila
 
Ing. Mecatrónica, Prog. Básica U1; Conceptos basicos y algoritmos
Ing. Mecatrónica, Prog. Básica U1; Conceptos basicos y algoritmosIng. Mecatrónica, Prog. Básica U1; Conceptos basicos y algoritmos
Ing. Mecatrónica, Prog. Básica U1; Conceptos basicos y algoritmosJosé Antonio Sandoval Acosta
 
ALP Unidad 1: Introducción a los fundamentos de la programación estructurada
ALP Unidad 1: Introducción a los fundamentos de la programación estructuradaALP Unidad 1: Introducción a los fundamentos de la programación estructurada
ALP Unidad 1: Introducción a los fundamentos de la programación estructuradaFranklin Parrales Bravo
 
Silabo fundamentos programación
Silabo fundamentos programaciónSilabo fundamentos programación
Silabo fundamentos programaciónFernando Solis
 
Ingeniería de software
Ingeniería de softwareIngeniería de software
Ingeniería de softwaremat3matik
 
Ingeniería%20de%20 software[1], maryy
Ingeniería%20de%20 software[1], maryyIngeniería%20de%20 software[1], maryy
Ingeniería%20de%20 software[1], maryynelly
 
Ingeniería de software16
Ingeniería de software16Ingeniería de software16
Ingeniería de software16Ramon
 
Ingenier%c3%ada de software
Ingenier%c3%ada de softwareIngenier%c3%ada de software
Ingenier%c3%ada de softwareMarilupe
 
Ingen de software
Ingen de softwareIngen de software
Ingen de softwareerikapoh
 
Ingeniería de software
Ingeniería de softwareIngeniería de software
Ingeniería de softwaresamantha
 
Ingeniería de software
Ingeniería de softwareIngeniería de software
Ingeniería de software142918
 
Algoritmos y estructura de datos 1
Algoritmos y estructura de datos 1Algoritmos y estructura de datos 1
Algoritmos y estructura de datos 1Pedro Garcia Mtz
 
Silabo fund programación abril agosto2015
Silabo fund programación abril agosto2015Silabo fund programación abril agosto2015
Silabo fund programación abril agosto2015Fernando Solis
 
Ingeniería Catastral y Geodesia - Syllabus Programación Básica
Ingeniería Catastral y Geodesia - Syllabus Programación BásicaIngeniería Catastral y Geodesia - Syllabus Programación Básica
Ingeniería Catastral y Geodesia - Syllabus Programación Básicagiseproi
 
Algoritmos y lenguajes de programacion
Algoritmos y lenguajes de programacionAlgoritmos y lenguajes de programacion
Algoritmos y lenguajes de programaciontf94
 
Jcf iind 2010-227 algoritmos y leng de pro
Jcf iind 2010-227 algoritmos y leng de proJcf iind 2010-227 algoritmos y leng de pro
Jcf iind 2010-227 algoritmos y leng de proAngel Rodriguez S
 

Similar a Programación estructurada (2).pptx (20)

7. repres e infer parte4
7. repres e infer parte47. repres e infer parte4
7. repres e infer parte4
 
7. repres e infer parte4
7. repres e infer parte47. repres e infer parte4
7. repres e infer parte4
 
Ing. Mecatrónica, Prog. Básica U1; Conceptos basicos y algoritmos
Ing. Mecatrónica, Prog. Básica U1; Conceptos basicos y algoritmosIng. Mecatrónica, Prog. Básica U1; Conceptos basicos y algoritmos
Ing. Mecatrónica, Prog. Básica U1; Conceptos basicos y algoritmos
 
ALP Unidad 1: Introducción a los fundamentos de la programación estructurada
ALP Unidad 1: Introducción a los fundamentos de la programación estructuradaALP Unidad 1: Introducción a los fundamentos de la programación estructurada
ALP Unidad 1: Introducción a los fundamentos de la programación estructurada
 
Silabo fundamentos programación
Silabo fundamentos programaciónSilabo fundamentos programación
Silabo fundamentos programación
 
Ingeniería de software
Ingeniería de softwareIngeniería de software
Ingeniería de software
 
Ingeniería%20de%20 software[1], maryy
Ingeniería%20de%20 software[1], maryyIngeniería%20de%20 software[1], maryy
Ingeniería%20de%20 software[1], maryy
 
Ingeniería de software16
Ingeniería de software16Ingeniería de software16
Ingeniería de software16
 
Ingenier%c3%ada de software
Ingenier%c3%ada de softwareIngenier%c3%ada de software
Ingenier%c3%ada de software
 
Ingen de software
Ingen de softwareIngen de software
Ingen de software
 
Ingeniería de software
Ingeniería de softwareIngeniería de software
Ingeniería de software
 
Clase 11
Clase 11Clase 11
Clase 11
 
Ingeniería de software
Ingeniería de softwareIngeniería de software
Ingeniería de software
 
Algoritmos y estructura de datos 1
Algoritmos y estructura de datos 1Algoritmos y estructura de datos 1
Algoritmos y estructura de datos 1
 
Silabo fund programación abril agosto2015
Silabo fund programación abril agosto2015Silabo fund programación abril agosto2015
Silabo fund programación abril agosto2015
 
Ingeniería Catastral y Geodesia - Syllabus Programación Básica
Ingeniería Catastral y Geodesia - Syllabus Programación BásicaIngeniería Catastral y Geodesia - Syllabus Programación Básica
Ingeniería Catastral y Geodesia - Syllabus Programación Básica
 
Algoritmos y lenguajes de programacion
Algoritmos y lenguajes de programacionAlgoritmos y lenguajes de programacion
Algoritmos y lenguajes de programacion
 
Jcf iind 2010-227 algoritmos y leng de pro
Jcf iind 2010-227 algoritmos y leng de proJcf iind 2010-227 algoritmos y leng de pro
Jcf iind 2010-227 algoritmos y leng de pro
 
Conferencia_Introducción a la Ingeniería de Software
Conferencia_Introducción a la Ingeniería de SoftwareConferencia_Introducción a la Ingeniería de Software
Conferencia_Introducción a la Ingeniería de Software
 
26. Modelado y Diseño.pdf
26. Modelado y Diseño.pdf26. Modelado y Diseño.pdf
26. Modelado y Diseño.pdf
 

Programación estructurada (2).pptx

  • 1. Dr. Ricardo Vargas de Basterra Programación estructurada Dr. Ricardo Vargas de Basterra ricardo.vargas@nube.unadmexico.mx 1/29 Lenguajes de Programación
  • 2. Dr. Ricardo Vargas de Basterra Agenda • Bienvenida y presentación • Expectativas • Encuadre de la asignatura • Evaluación y plan de trabajo • Recomendaciones • Introducción Conclusiones 2/29 Lenguajes de Programación
  • 3. Dr. Ricardo Vargas de Basterra Bienvenida • Es un placer recibirte a la materia “Programación Estructurada” 3/29 Lenguajes de Programación
  • 4. Dr. Ricardo Vargas de Basterra Presentación Dr. Ricardo Vargas de Basterra • Doctor en Ciencias de la Computación • Maestría en Ciencias y Maestría en Educación • Ing. En Cibernética • World-Class Performance San Diego State University • Sielop & Internet University of Minnesota • Catedrático desde 1983 • Director en 4 instituciones • Rector en 2 instituciones 4/29 Lenguajes de Programación
  • 5. Dr. Ricardo Vargas de Basterra Expectativas • ¿Qué expectativas tienes de esta materia? • ¿Qué piensas que vas a aprender? • ¿Qué ya sabes del tema? 5/29 Lenguajes de Programación
  • 6. Dr. Ricardo Vargas de Basterra Materia • Nombre: Programación estructurada • Duración: 60 horas • Horario: 15:40 a 17:20 • Calendario: 3 de enero al 15 de febrero 6/20 Lenguajes de Programación
  • 7. Dr. Ricardo Vargas de Basterra Objetivo • Al término de la asignatura el discente Aplicará los principios de la programación estructurada en el desarrollo de software y aplicativos para la institución. 7/20 Lenguajes de Programación
  • 8. Dr. Ricardo Vargas de Basterra Contenido Programación estructurada 1. Estructuras de control 2. Funciones 3. Algoritmos de Búsquedas y Ordenamientos 4. Algoritmos y Estructuras de Datos 5. Diseño estructurado 8/20 Lenguajes de Programación
  • 9. Dr. Ricardo Vargas de Basterra Reglas Generales • Asistir a Clase. • Hacer la tarea • Participación activa individual y grupal. • Cumplir fechas de entrega de tareas individuales (hasta la media noche del día señalado). • Cumplir formatos de entrega. • Prohibido el plagio o fraude. • Se requiere tiempo de estudio. • Esfuerzo por la calidad en sus trabajos. • Uso de equipo de cómputo. 9/29 Lenguajes de Programación
  • 10. Dr. Ricardo Vargas de Basterra Reglas para Entrega de trabajos 1. Se debe incluir una portada con todos los datos del estudiante. 2. Se debe incluir un índice con los apartados que incluye la tarea. 3. Redacta siempre una introducción. 4. El contenido de la tarea colócalo en el cuerpo del documento con apartados específicos para cada requisito de la actividad. Todo esto dentro de la sección Desarrollo. 5. Incluye una conclusión 6. Agrega citas dentro del cuerpo de tu documento en formato APA. 7. Coloca las referencias bibliográficas al final del documento, también en formato APA. 8. Cada referencia bibliográfica debe haber sido citada al menos una vez en el cuerpo del documento. Todas las citas deben tener su referencia bibliográfica. 9. Todas tus tareas deben ser de tu completa autoría (salvo las citas por supuesto). Los trabajos con información no propia serán anulados y evaluados con cero. 10/29 Lenguajes de Programación
  • 11. Dr. Ricardo Vargas de Basterra Calendario • Inicio de Clase: lunes 7 de noviembre • Fin de clase: viernes 16 de diciembre • Receso: 28 de noviembre al 2 de diciembre • Presentación de proyectos finales:por definir en enero 2023 • Examen final: por definir enero 2023 11/29 Lenguajes de Programación
  • 12. Dr. Ricardo Vargas de Basterra Proyecto Integrador • Desarrollar un Proyecto de un producto de software. • El proyecto se realizará con entregas parciales cada lunes • Se trata de un solo proyecto que se irá complementado. • Se desarrolla en equipo 12/29 Lenguajes de Programación
  • 13. Dr. Ricardo Vargas de Basterra Evaluación Criterio Ponderación 1. Examen Escrito 30% 2. Proyecto Final 40% 3. Portafolio de evidencias y actividades de aprendizaje 30% TOTAL 100% Los criterios 2 y 3 incluirán procesos de autoevaluación y coevaluación 13/29 Lenguajes de Programación
  • 14. Dr. Ricardo Vargas de Basterra Material de trabajo • Las filminas que estoy usando, videos y materiales de lectura complementarios estarán en la plataforma y en la siguiente liga: • https://drive.google.com /drive/folders/1i2E7EBSb yPDbSkyaGMCfni6Cur0Q mhrN?usp=sharing 15/29 Lenguajes de Programación
  • 15. Dr. Ricardo Vargas de Basterra ¡Iniciamos! 16/29 Lenguajes de Programación
  • 16. Dr. Ricardo Vargas de Basterra INTRODUCCIÓN Antecedentes 17/29 Lenguajes de Programación
  • 17. Dr. Ricardo Vargas de Basterra Programación • Proceso de diseñar, codificar, depurar y mantener el código fuente de programas de computadora. • El código se escribe en un lenguaje de programación • El código implementa un algoritmo 18/29 Lenguajes de Programación
  • 18. Dr. Ricardo Vargas de Basterra Algoritmo Conjunto finito de instrucciones ordenadas que tienen las siguientes características: • Precisión • Unicidad • Finito • Entrada • Salida • Generalidad Richard Johnsonbaugh 19/29 Lenguajes de Programación
  • 19. Dr. Ricardo Vargas de Basterra Expresiones algorítmicas • Un algoritmo puede expresarse de distintas maneras: en forma gráfica, como un diagrama de flujo, en forma de código como en pseudocódigo o un lenguaje de programación, en forma explicativa 20/29 Lenguajes de Programación
  • 20. Dr. Ricardo Vargas de Basterra Programa • Secuencia de instrucciones, escritas en un lenguaje de programación para realizar una tarea específica en una computadora • Hay dos tipos fundamentales: – Programa Fuente – Programa Objeto Algoritmo + Estructura de Datos = Programa 21/29 Lenguajes de Programación
  • 21. Dr. Ricardo Vargas de Basterra Proceso 22/29 Lenguajes de Programación
  • 22. Dr. Ricardo Vargas de Basterra Herramientas y técnicas • Diagramas de Bloques • Diagramas de Flujo • Grafos • Tablas de Verdad • Tablas de Decisiones • Árboles de decisiones. • Pseudocódigo Condición 1 Condición 2 Condición 3 Acción 1 Acción 2 Acción 3 s s s s n s n s n n n s s n n x x x x x x x Raiz Condición 1 Condición 2 Condición 3 Condición 4 Condición 5 Condición 6 Acción Acción Acción Acción Acción Acción Acción Acción 23/29 Lenguajes de Programación
  • 23. Dr. Ricardo Vargas de Basterra Diagramas de flujo Secuencial Entrada Proceso Salida i=1 i=n +1 Proceso Ciclo For Proceso Condición No Si Ciclo While Proceso Condición No Si Ciclo Until Condición Proceso No Si If-Then Condición Proceso Proceso No Si If-Then-else Variable Proceso Proceso Proceso 1 2 3 Multicondicional Case 24/29 Lenguajes de Programación
  • 24. Dr. Ricardo Vargas de Basterra Pseudocódigo • Descripción de alto nivel compacta e informal​ del principio operativo de un algoritmo. • Diseñado para la lectura humana con independencia de cualquier lenguaje de programación. • Omite detalles que no son esenciales para la comprensión humana del algoritmo (declaraciones de variables, código específico del sistema, etc.) 25/29 Lenguajes de Programación
  • 25. Dr. Ricardo Vargas de Basterra Compilación 26/29 Lenguajes de Programación
  • 26. Dr. Ricardo Vargas de Basterra Teoría de la programación • Conjunto de principios que rigen un paradigma de programación y definen las características semánticas de cierto conjunto de lenguajes. • Aspira a dar certidumbre sobre las formas más adecuadas de enfrentar un problema, modelarlo y encontrar su solución algorítmica para poder codificarlo en algún lenguaje y ejecutar la solución en una computadora 28/29 Lenguajes de Programación
  • 27. Dr. Ricardo Vargas de Basterra Evolución de la teoría de la programación • La primer teoría de la programación.- La programación dura. Nacimiento de la Eniac (1943) • La segunda teoría de programación.- La programación suave. Nace del modelo de John von Neumann (1945) • La tercer teoría de programación.- Teorema de la Estructura. Resultado del trabajo de Conrado Böhm y Giuseppe Jacopini (1966). • La cuarta teoría de la programación.- ADT, ocultación y acceso uniforme (1974). 29/29 Lenguajes de Programación
  • 28. Dr. Ricardo Vargas de Basterra Paradigma Duro Su característica principal es el alambrado físico por medio de cables para la definición del algoritmo. No existen reglas ni técnicas de diseño algorítmico formal. Lo único que hay son datos organizados en tipos primitivos. 30/29 Lenguajes de Programación
  • 29. Dr. Ricardo Vargas de Basterra Paradigma Libre No se cuenta con métodos formales de diseño algorítmico ni de sistemas. Los lenguajes implementan las siguientes estructuras básicas de control: secuencia, repetición, salto condicional y salto incondicional. Se desarrollan estructuras de datos más complejas tanto escalares como dinámicas así como el nacimiento de los primeros algoritmos formales. 31/29 Lenguajes de Programación
  • 30. Dr. Ricardo Vargas de Basterra Paradigma Estructurado Propone tres conceptos fundamentales: – Una metodología formal de diseño basada en la descomposición funcional descendente (top-down). – Un conjunto de recursos abstractos basados en la modularidad y las características de la misma (cohesión y acoplamiento) – Un conjunto de estructuras básicas de programación. 32/29 Lenguajes de Programación
  • 31. Dr. Ricardo Vargas de Basterra Estructuras propuestas: Mientras (while) Hasta (until) Estructuras de Control Condición Repetición Secuenciación Abierta Doble (if-then-else) Simple (if-then) Múltiple (Case) Cerrada (For) 33/29 Lenguajes de Programación
  • 32. Dr. Ricardo Vargas de Basterra Paradigma orientado a objetos • Resultado de una combinación de ideas, entre ellas los ADT, el ocultamiento de información y el acceso uniforme. (Parnas, Lizkov, Zilles y Hoare) • Los principios de diseño son el Encapsulamiento, la Herencia y el Polimorfismo 34/29 Lenguajes de Programación
  • 33. Dr. Ricardo Vargas de Basterra Otros Paradigmas • Programación orientada a aspectos • Programación orientada a eventos • Programación por componentes 35/29 Lenguajes de Programación
  • 34. Dr. Ricardo Vargas de Basterra Lenguajes de Programación • Es una notación para codificar algoritmos de forma que puedan ser ejecutados por una computadora. (Alcalde) 36/29 Lenguajes de Programación
  • 35. Dr. Ricardo Vargas de Basterra Clasificación de los lenguajes Clasificación de los lenguajes de programación Nivel de Abstracción Maquina (Binario) Bajo nivel (ensamblador) Nivel Medio (C) Alto nivel (Pascal) Propósito Propósito General (Java) Propósito Específico (Csound) Evolución 1ª Generación 2ª Generación 3ª Generación 4ª Generación 5ª Generación 6ª Generación Método de ejecución Compilados (C) Interpretados (Basic) Semicompilados (Java) Enfoque de tarea Imperativos (C, Pascal) Funcionales (Lisp) Lógicos (Prolog) Descriptivos (HTML) Paradigma Libre (BASIC, Fortran) Estructurado (Pascal) Orientado a objetos (Delphi, Java, C++) Orientado a aspectos Orientado a eventos 37/29 Lenguajes de Programación
  • 36. Dr. Ricardo Vargas de Basterra De la Programación Dura al Macroensamblador • Alambrados Directos • Codificación en lenguaje máquina – 1E B80000 50 B82810 8ED8 8EC8 BF0000 BB1D00 8B0F BB1F00 8A07 FC F2 AE 7401 CB 4F CB • Mnemónicos (add, sto, jmp) • Macroensamblador (if) 38/29 Lenguajes de Programación
  • 37. Dr. Ricardo Vargas de Basterra Código Máquina • Se codificaba directamente en hexadecimal • Todas las operaciones de la computadora eran responsabilidad del programador • Alta complejidad para programar y depurar sistemas • Alto nivel de especialización • Código específico para un procesador 39/29 Lenguajes de Programación
  • 38. Dr. Ricardo Vargas de Basterra Lenguajes de alto nivel 1a. Oleada • Basados en paradigma libre. • Fortran (1957)1° de un linaje seguido por COBOL (1958), LISP (1958), ALGOL (1960), APL (1961), BASIC (1964), PL/1 (1965), Simula (1967). • Modelo Relacional y SQL (1970) 40/29 Lenguajes de Programación
  • 39. Dr. Ricardo Vargas de Basterra Segunda oleada • Nacen Pascal (1970), C (1972), Prolog (1972) y muchos de los anteriores hacen cambios en sus estructuras para implementar de lleno las ideas de Böhm y Jacopini 41/29 Lenguajes de Programación
  • 40. Dr. Ricardo Vargas de Basterra Tercera Oleada • Nacen nuevos lenguajes como Modula2 (1979), ADA (1983) y Java (1991). • Evolucionan otros como C que se convierte en C++, Pascal en Object Pascal (Delphi) y Basic en Visual Basic. 42/29 Lenguajes de Programación
  • 41. Dr. Ricardo Vargas de Basterra Taxonomía Modelos de Programación Imperativa Fortran Cobol VRLM Ensamblador- Macroensamblador HTML Clipper Tercera Generación (3GL) Cuarta Generación (4GL) xBase Scpripts Descriptiva dBase Libre Estructurado Orientado a Objetos Funcional Lisp Lógica Prolog Java Script Perl CGI Basic Algol Pascal C C++ Delphi Java SQL Transac-SQL Informix 43/29 Lenguajes de Programación
  • 42. Dr. Ricardo Vargas de Basterra El linaje de la programación 1955 1960 1965 2000 1995 1990 1985 1980 1975 1970 Duro Libre Estructurado Orientado a Objetos Componentes Aspectos Funcional Logica Imperativa Descriptiva Lisp Algol 68 Object Pascal C SNOBOL Algol Basic APL Cobol Pascal Lis Simula 67 Prolog C++ Fortran Euclid Delphi Basic Estructurado Java PL/1 Gödel Modula2 Logo Ada Visual Basic HTML VRLM 44/29 Lenguajes de Programación
  • 43. Dr. Ricardo Vargas de Basterra Más evolución 45/29 Lenguajes de Programación
  • 44. Dr. Ricardo Vargas de Basterra Paradigmas comunes 46/29 Lenguajes de Programación
  • 45. Dr. Ricardo Vargas de Basterra Lenguajes de Programación Tarea • Revisar el material “Programas Introductorios” que está en la carpeta compartida • Escribe los programas que ahí vienen y pruébalos • Presenten un informe de la tarea 50/29
  • 46. Dr. Ricardo Vargas de Basterra UNIDAD 2 Solución de Problemas Empleando Algoritmos 51/29 Lenguajes de Programación
  • 47. Dr. Ricardo Vargas de Basterra Solución de Problemas • Solo un conjunto de problemas tienen solución a través de procesos algorítmicos • Antes de emprender el diseño de un algoritmo debemos tener claro si éste puede resolver el problema. 52/29 Lenguajes de Programación
  • 48. Dr. Ricardo Vargas de Basterra Teorema de Bohm-Jacopini • Diagrama Propio: Aquel que posee un solo punto de inicio y uno solo de fin. • Programa Propio: Posee un solo inicio y un solo fin; Todo elemento del programa es accesible, es decir, existe al menos un camino desde el inicio al fin que pasa a través de él; No posee ciclos infinitos. • Equivalencia de programas: Dos programas son equivalentes si realizan, ante cualquier situación de datos, el mismo trabajo pero de distinta forma. • Teorema de la estructura: Todo programa propio, realice el trabajo que realice, tiene al menos un programa propio equivalente que solo utiliza las estructuras básicas de programación, que son: la secuencia, la selección y la repetición. 53/29 Lenguajes de Programación
  • 49. Dr. Ricardo Vargas de Basterra Estructuras propuestas: Mientras (while) Hasta (until) Estructuras de Control Condición Repetición Secuenciación Abierta Doble (if-then-else) Simple (if-then) Múltiple (Case) Cerrada (For) 54/29 Lenguajes de Programación
  • 50. Dr. Ricardo Vargas de Basterra Construcción de Algoritmos Análisis Diseño Construcción Pruebas Liberación Identificación de Resultados Identificación de Procesos Identificación de Datos de Entrada Identificación de Condiciones (2a It) Identificación de Iteraciones (3a It.) Diccionario de Datos (todas las It.) Diseño de Secuencias (1a It) Diseño de Condiciones (2a It.) Diseño de Repeticiones (3a it.) Diseño de Pruebas (todas las It) Integración (2a It. en adelante) Refinamiento (todas las It.) Código en Lenguaje 3GL (todas las It.) Pruebas de Caja Blanca Pruebas de Caja Negra Otras Pruebas Código probado y funcionando (todas las It.) 1a Iteración 2a Iteración 3a Iteración 1a It. 4a Iteración todas las It. 55/29 Lenguajes de Programación
  • 51. Dr. Ricardo Vargas de Basterra Análisis • Productos: 1. Listado de Resultados 2. Listado de Procesos 3. Datos de Entrada 4. Relación de Restricciones 5. Relación de Repeticiones 6. Diccionario de Datos • Herramientas: 1. Árbol de Descomposición de Procesos 2. Tablas de Decisión 3. Árboles de Decisión Repeticiones Resultados Procesos Entradas Restricciones Dicc. Datos Secuencia 56/29 Lenguajes de Programación
  • 52. Dr. Ricardo Vargas de Basterra Diseño • Productos 1. Diseño de Secuencias 2. Diseño de Condiciones 3. Diseño de Repeticiones 4. Diseño de Pruebas 5. Diseño Integrado • Herramientas 1. Metodología 2. Lenguaje Visual de Modelado 3. Heurísticas Diseño de Secuencias Diseño de Condicionales Diseño de Ciclos Testing Integración y Refinamiento 57/29 Lenguajes de Programación
  • 53. Dr. Ricardo Vargas de Basterra Construcción Diseño de Secuencias Diseño de Condicionales Diseño de Ciclos Testing Integración y Refinamiento Repeticiones Resultados Procesos Entradas Restricciones Dicc. Datos Secuencia 58/29 Lenguajes de Programación
  • 54. Dr. Ricardo Vargas de Basterra Lenguaje Visual de Modelado (símbolos actuales) Entrada Proceso Salida Proceso Condición No Si Ciclo While Proceso Condición No Si Ciclo Until Condición Proceso No Si If-Then Condición Proceso Proceso No Si If-Then-else Secuencial Proceso Ciclo For i=1 i=n +1 59/29 Lenguajes de Programación
  • 55. Dr. Ricardo Vargas de Basterra Lenguaje LeMVI (pág. 141) Secuencia If-Then-else Entrada Proceso Salida If-Then Ciclo abierto (While) Ciclo abierto (Until) Estructuras de Repetición Estructuras Condicionales Estructura Secuencial Multicondicional Case Ciclo cerrado (For) Condición No Si Estructura Condición No Si Estructura Estructura Variable ordinal 1er valor 2° valor n valor Estructura Estructura Estructura . . . Estructura Incre- mento Valor inicial Valor Final Si Estructura Condición Fin de ciclo Estructura Condición Inicio de Ciclo Si 60/29 Lenguajes de Programación
  • 56. Dr. Ricardo Vargas de Basterra Pseudocódigos • Secuencia: – Leer variable – Proceso – Imprimir variable/constante • Condición – Si condición • Proceso – Si condición • Proceso – De lo contrario • Proceso – Caso x • 1: proceso • 2: proceso • N:proceso • De lo contrario: Proceso – Fin caso • Ciclos – Repite variable desde x • Proceso – Hasta y – Repite mientras condición • Proceso – Fin repite – Repite • Proceso – Hasta condición 61/29 Lenguajes de Programación
  • 57. Dr. Ricardo Vargas de Basterra Reglas de La Lógica 1. Regla de Secuencia 2. Regla de Equivalencia 3. Regla de Composición 4. Regla de Colaboración 5. Regla de Cerradura 6. Regla de Creación 7. Regla de Integridad 8. Regla de Flujo 9. Regla de Existencia 10. Regla de Restricción 11. Regla de Repetición 12. Regla de Combinación 62/29 Lenguajes de Programación
  • 58. Dr. Ricardo Vargas de Basterra Reglas de la lógica 1. Regla de Secuencia.- Todas las tareas requieren de al menos una salida y cero, uno o más procesos y entradas. Primero se ejecutan las operaciones de entrada, luego las de proceso y finalmente las de salida. 2. Regla de Equivalencia.- Las acciones (es decir, los procesos de entrada, proceso y salida) se consideran equivalentes entre sí y por tanto toda acción de proceso puede convertirse en entrada o salida y viceversa. 3. Regla de Composición.- Un proceso complejo puede dividirse en subprocesos más simples colaborando en la solución y varios procesos individuales pueden combinarse en uno solo más complejo. 4. Regla de Colaboración.- La(s) salida(s) de un proceso puede(n) usarse como entrada(s) de otro. 5. Regla de Cerradura.- En todo lugar donde haya una acción (es decir, una entrada, un proceso o una salida) puede colocarse una estructura de control. En todo lugar que haya una estructura de control puede colocarse una acción. 6. Regla de Creación.- En una tarea o procedimiento solo puede haber nuevas acciones o estructuras. Estas únicamente pueden agregarse entre acción y acción o entre acción y estructura o entre estructura y estructura. 63/29 Lenguajes de Programación
  • 59. Dr. Ricardo Vargas de Basterra Reglas de la lógica 7. Regla de Integridad.- Las estructuras de control no pueden cambiar su diseño. Las operaciones son parte integral de las estructuras de control, no son estructuras independientes. 8. Regla del Flujo.- La secuencia de ejecución está dictado por el diseño de cada estructura de control. Esta pude ser secuencial o anidada. 9. Regla de Existencia.- Todas las variables antes de usarse deben estar definidas y si son parte de un proceso de cálculo deben tener un valor válido. 10. Regla de Restricción.- Toda variable que deba cumplir con dominios del mundo real o del mundo virtual debe ser validado a través de una estructura de restricción. 11. Regla de Repetición.- Toda Estructura o Acción que se escriben en más de una ocasión pueden ser introducidos con una estructura de repetición. 12. Regla de Combinación.- Uno o más procedimientos pueden combinarse para formar otro procedimiento o una tarea. La composición puede darse por concatenación, anidación, fusión o adaptación. 64/29 Lenguajes de Programación
  • 60. Dr. Ricardo Vargas de Basterra Estrategias • Espiral incremental. Agregar progresivamente funcionalidades al algoritmo. • Retroceso. Iniciar por identificar las salidas y a partir de ahí identificar los procesos y luego las entradas. • Divide y vencerás. Divide la tarea completa en subtareas. • Fuerza Bruta. Interpretación directa del problema 65/29 Lenguajes de Programación
  • 61. Dr. Ricardo Vargas de Basterra Lenguajes de Programación Formatos para nombrar variables 66/29
  • 62. Dr. Ricardo Vargas de Basterra Lenguajes de Programación Tipos de datos en C 67/29
  • 63. Dr. Ricardo Vargas de Basterra Lenguajes de Programación Ejercicio • “Hola Mundo” • Investiga en línea como es el programa hola mundo en lenguaje C • Instala DevC en tu computadora • Transcribe el programa y ejecútalo 68/29
  • 64. Dr. Ricardo Vargas de Basterra UNIDAD 3 Ejecución Condicional 69/29 Lenguajes de Programación
  • 65. Dr. Ricardo Vargas de Basterra Operadores • Símbolos que representan una operación. • Se utilizan para construir expresiones • Hay de tres tipos: – Aritméticos (resultados numéricos) – Relacionales (resultados booleanos) – Lógicos (resultados booleanos) 70/29 Lenguajes de Programación
  • 66. Dr. Ricardo Vargas de Basterra Es un conjunto de constantes, variables y operadores con los cuales se realiza las operaciones para obtener un resultado. Ejemplo: resultado = a-(3*b+6)/c Operando Operando Operador Valor Constante o variable Expresión 71/29 Lenguajes de Programación
  • 67. Dr. Ricardo Vargas de Basterra Expresiones aritméticas • Notación algorítmica para representar formulas matemáticas dentro de un programa • Combina uno, dos o más valores (constantes o variables) a través de operadores aritméticos para generar un valor numérico 72/29 Lenguajes de Programación
  • 68. Dr. Ricardo Vargas de Basterra Jerarquía de operadores aritméticos 73/29 Lenguajes de Programación
  • 69. Dr. Ricardo Vargas de Basterra Ejemplo Se ejecutan por orden de jerarquía de operadores y de izquierda a derecha 74/29 Lenguajes de Programación
  • 70. Dr. Ricardo Vargas de Basterra Expresiones Relacionales • Comparan dos expresiones a través de un operador relacional • Generan un resultados Booleano (verdadero o falso) • Jerarquía: Todos tienen la misma jerarquía Operador Significado == igualdad != Diferente > Mayor que < Menor que >= Mayor o igual <= Menor o igual 75/29 Lenguajes de Programación
  • 71. Dr. Ricardo Vargas de Basterra Ejemplos 1 > 2 = 0 falso 3 < 5 = 1 verdadero (7 – 4) == 3 = 1 verdadero 17 >= (5 + 12) = 1 verdadero i = 3; j = 7; i * j != 21 = 0 falso float a=0.1; (3*a – 0.3) == 0 = 0 falso (OJO con los reales) 3 > 1 > 0 = 1 verdadero Asignar a una variable la mayor de otras dos: a = 17; b = 15; c = a*(a>=b) + b*(b>=a); c = 17 a>=b = 1 y b>=a = 0 76/29 Lenguajes de Programación
  • 72. Dr. Ricardo Vargas de Basterra Expresiones Lógicas • Comparan dos expresiones booleanas través de un operador lógico • Generan un resultados Booleano (verdadero o falso) • Jerarquía: – 1º la Negación – 2ª. Todos los demás 77/29 Lenguajes de Programación
  • 73. Dr. Ricardo Vargas de Basterra Ejemplos Se ejecutan por orden de jerarquía de operadores y de izquierda a derecha 78/29 Lenguajes de Programación
  • 74. Dr. Ricardo Vargas de Basterra 1. Aritméticos 1. ^ 2. *, / 3. +, - 2. Relacionales 1. Mayor que > 2. Menor que < 3. Mayor igual que >= 4. Menor igual que <= 5. Igual = 6. Diferencia < > != 3. Lógicos 1. AND 2. OR 3. NOT 3. Asignación 1. = 2.  Tipos de operadores y orden de ejecución 79/29 Lenguajes de Programación
  • 75. Dr. Ricardo Vargas de Basterra Flujo de Control • Orden en el que se ejecutarán las instrucciones de un programa, desde su comienzo hasta que finaliza. • El orden de ejecución es secuencial instrucción por instrucción • La secuencia se puede alterar por una condición o por una repetición 80/29 Lenguajes de Programación
  • 76. Dr. Ricardo Vargas de Basterra Ejecución Secuencial Área de un rectángulo Lee base Lee altura area = base * altura Imprime area 81/29 Lenguajes de Programación
  • 77. Dr. Ricardo Vargas de Basterra Lenguajes de Programación Ejercicio • Realiza programas para calcular lo siguiente: – El área de un triángulo – El área de un círculo – El área de un cuadrado – El área de un rectángulo – El perímetro de un círculo – El perímetro de cuadrado – El perímetro de un rectángulo – Las dos raíces de una ecuación de segundo grado 82/29
  • 78. Dr. Ricardo Vargas de Basterra Ejecución Condicional • Se utilizan para determinar cual será flujo de ejecución de un programa dependiendo de una condición. • Hay tres tipos: – Simple – Doble – Mútiple 83/29 Lenguajes de Programación
  • 79. Dr. Ricardo Vargas de Basterra Condición Simple • Determina si una sentencia (o bloque) se ejecuta en función del resultado de una condición • Si es verdadera se ejecuta, de lo contrario la omite y continúa con la siguiente instrucción Lee nombre Si nombre = ‘Ricardo’ Entonces imprime ‘Te llamas igual que yo’ Imprime ‘Hola ‘, nombre 84/29 Lenguajes de Programación
  • 80. Dr. Ricardo Vargas de Basterra Condición Doble • Dependiendo de una condición Se ejecuta una sentencia (o bloque) u otra. • Luego continúa con la siguiente instrucción Lee valor Si (valor /2) = 0 Entonces imprime ‘el numero es par’ De lo contrario imprime ‘el numero es impar’ Imprime ‘Gracias por participar’ 85/29 Lenguajes de Programación
  • 81. Dr. Ricardo Vargas de Basterra Condición múltiple • Dependiendo del valor que tome una variable se determina la ruta a seguir. • Las rutas pueden ser tres o más • Después se continúa con la siguiente instrucción Lee NumeroDia Caso NumeroDia 1: Imprime ‘Domingo’ 2: Imprime ‘Lunes’ 3: Imprime ‘Martes’ 4: Imprime ‘Miércoles’ 5: Imprime ‘Jueves’ 6: Imprime ‘Viernes’ 7: Imprime ‘Sábado’ otro: Imprime ‘No existe’ Fin del caso Imprime ‘Gracias por participar‘ 86/29 Lenguajes de Programación
  • 82. Dr. Ricardo Vargas de Basterra Anidación • Se da cuando una estructura completa se coloca en la parte del proceso de otra Leer N Si N > 5 entonces Si N > 10 entonces Imprime N, ‘es mayor que diez’ De lo contrario Imprime N, ’es Mayor que 5 pero menor o igual a 10 De lo contrario Imprime N, ‘es menor que 5’ Imprime ‘Gracias por participar’ 87/29 Lenguajes de Programación
  • 83. Dr. Ricardo Vargas de Basterra UNIDAD 4 Iteraciones 88/29 Lenguajes de Programación
  • 84. Dr. Ricardo Vargas de Basterra Iteraciones • También llamados ciclos o loops • Es una estructura de control que se utiliza para repetir la ejecución de un proceso un número ‘n’ de veces 89/29 Lenguajes de Programación
  • 85. Dr. Ricardo Vargas de Basterra Mecanismos de control • Existe un mecanismo de control para determinar cuando detener el ciclo • Ese mecanismo de control está basado en el cumplimiento o no de una condición. • Esa condición utiliza una variable de control normalmente llamada ‘i’ 90/29 Lenguajes de Programación
  • 86. Dr. Ricardo Vargas de Basterra Tipos de Ciclos Ciclos Cerrados (se conoce el número de repeticiones) Abiertos (no se conoce el número de repeticiones) Condición antes del proceso Condición después del proceso 91/29 Lenguajes de Programación
  • 87. Dr. Ricardo Vargas de Basterra Ciclo cerrado ‘Repite’ • Se conoce de antemano el número de veces que se repetirá un ciclo. • En los lenguajes se conoce como ciclo ‘for’ 92/29 Lenguajes de Programación
  • 88. Dr. Ricardo Vargas de Basterra Ejemplo • Se interpreta como “Repite el proceso desde que i es igual a 1 hasta 10 de uno en uno” Repite i=1 hasta 10 de +1 Inicio de bloque Proceso Fin de bloque 93/29 Lenguajes de Programación
  • 89. Dr. Ricardo Vargas de Basterra Ejemplo • Se interpreta como “Repite el proceso desde que i es igual a m hasta n de menos 2 en menos 2” • Los valores de n y m deben ser asignados antes de que el control de ejecución llegue a esa instrucción Repite i=m hasta n de -2 Inicio de bloque Proceso Fin de bloque 94/29 Lenguajes de Programación
  • 90. Dr. Ricardo Vargas de Basterra Ciclo abierto • No se conoce de antemano el número de veces que se repetirá un proceso. • Hay dos versiones: – Aplicar la condición de control antes de la ejecución del ciclo – Aplicar la condición de control después de la ejecución del ciclo 95/29 Lenguajes de Programación
  • 91. Dr. Ricardo Vargas de Basterra Ciclo abierto ‘Mientras’ • El ciclo mientras realiza la repetición del proceso mientras una condición de control sea verdadera • La condición se valida antes de realizar el proceso a repetir • Dependiendo de la condición, puede suceder que el proceso a repetir no se ejecute nunca 96/29 Lenguajes de Programación
  • 92. Dr. Ricardo Vargas de Basterra Ejemplo • Se interpreta como “Repite el proceso mientras que i es igual o menor que 10” • En este tipo de ciclo el valor de la variable de control (i) debe ser actualizada dentro del proceso para buscar que el algún momento la condición deje de cumplirse y el ciclo concluya • La variable i debe tener un valor inicial antes de comenzar la ejecución del ciclo Se le asigna un valor inicial a i Mientras i <= 10 Inicio de bloque Proceso i debe cambiar en algún momento Fin de bloque 97/29 Lenguajes de Programación
  • 93. Dr. Ricardo Vargas de Basterra Ejemplo • Se interpreta como “Repite el proceso mientras que i es mayor que n” • El valor de n debe ser asignado antes de que el control de ejecución llegue a esa instrucción Se le asigna un valor inicial a i Se le asigna un valor inicial a n Mientras i > n Inicio de bloque Proceso i debe cambiar en algún momento Fin de bloque 98/29 Lenguajes de Programación
  • 94. Dr. Ricardo Vargas de Basterra Ciclo abierto ‘Hasta’ • El ciclo hasta realiza la repetición del proceso hasta que una condición de control sea verdadera • La condición se valida después de realizar el proceso a repetir • Dependiendo de la condición, puede suceder que el proceso a repetir se ejecute una sola vez 99/29 Lenguajes de Programación
  • 95. Dr. Ricardo Vargas de Basterra Ejemplo • Se interpreta como “Repite el proceso hasta que i sea diferente a 10” • En este tipo de ciclo el valor de la variable de control (i) debe ser actualizada dentro del proceso para buscar que el algún momento la condición deje de cumplirse y el ciclo concluya • La variable i debe tener un valor inicial antes de comenzar la ejecución del ciclo Se le asigna un valor inicial a i Inicio de bloque Proceso i debe cambiar en algún momento Hasta i <> 10 100/29 Lenguajes de Programación
  • 96. Dr. Ricardo Vargas de Basterra Ejemplo • Se interpreta como “Repite el proceso hasta que i sea menor que n” • El valor de n debe ser asignado antes de que el control de ejecución llegue a esa instrucción Se le asigna un valor inicial a i Se le asigna un valor inicial a n Inicio de bloque Proceso i debe cambiar en algún momento Hasta que i < n 101/29 Lenguajes de Programación
  • 97. Dr. Ricardo Vargas de Basterra Observaciones • Los ciclos infinitos se dan cuando las condiciones de control nunca se cumplen • Los valores para las variables de control del ciclo debes asignarse antes de que el control de ejecución llegue al ciclo. 102/29 Lenguajes de Programación
  • 98. Dr. Ricardo Vargas de Basterra Lenguajes de Programación Reto • ¿Como se podría usar un ciclo para validar la entrada de una variable? 103/29
  • 99. Dr. Ricardo Vargas de Basterra Lenguajes de Programación Ejercicio: El jardín • Pedro es jardinero y le han pedido hacer un presupuesto para poner pasto en una casa que se está construyendo. El jardín es rectangular pero tiene una gran fuente circular en el centro. Pedro tiene que decirle a su cliente cuantos metros cuadrados de pasto tendrá que colocar y el importe total. Además Pedro cobra una cantidad por colocación que corresponde a su mano de obra. Alma es sobrina de Pedro y le dijo que podía hacerle un programa para que le ayudara a calcular lo que le piden. 104/29
  • 100. Dr. Ricardo Vargas de Basterra Lenguajes de Programación Tarea • Revisar el material Modelo para la Construcción de Algoritmos Apoyados en Heurísticas • Páginas 86 a 105 105/29
  • 101. Dr. Ricardo Vargas de Basterra ¿Qué recuerdas de la sesión anterior? • Comenta las ideas principales de la sesión anterior
  • 102. Dr. Ricardo Vargas de Basterra Lenguajes de Programación FUNCIONES 107/29
  • 103. Dr. Ricardo Vargas de Basterra Actividad 1 de funciones • En equipos de 3 personas respondan: • ¿Qué es una Función? • ¿Para que se usan? • ¿Cómo se declaran? • ¿Cómo se invocan? 108/29 Lenguajes de Programación
  • 104. Dr. Ricardo Vargas de Basterra Actividad 2 de funciones • En equipos de 3 personas respondan: • ¿Cómo se le pueden pasar valores a una función para que haga su trabajo? • ¿Cómo regresa una función el resultado de su ejecución? 109/29 Lenguajes de Programación
  • 105. Dr. Ricardo Vargas de Basterra ¿Qué son?¿Para qué sirven? • Son un grupo de sentencias bajo el mismo nombre que realizan una tarea específica. • Sirven para facilitar la resolución de problemas mediante la aplicación del paradigma “Dividir y Conquistar”.
  • 106. Dr. Ricardo Vargas de Basterra Librería MATH • La librería math.h permite al programador efectuar cálculos matemáticos comunes a través de funciones. Numero Descripcion Ejemplo ceil(x) redondea x al entero mas pequeño no menor que x ceil(9.2) es 10.0 ceil(-9.8) es –9.0 floor(x) redondea x al entero mas grande no mayor que x floor(9.2) es 9.0 floor(-9.8) es –10.0 fabs(x) valor absoluto de x fabs(-9.5) es 9.5 fmod(x,y) residuo de x/y como numero de punto flotante fmod(13.657, 2.333) es 1.992 sqrt(x) raiz cuadrada de x sqrt(9.0) es 3.0 pow(x,y) x elevado a la potencia y pow(2,7) es 128 log(x) logaritmo natural de x(base e) log10(x) log10(x) logaritmo de x(base 10) log(2.718282) es 1 exp(x) funcion exponencial exp(0.1) es 2.71828 sin(x) seno trigonometrico de x(en radianes) sin(0.0) es 0.0 cos(x) coseno trigonometrico de x(en radianes) cos(0.0) es 1 tan(x) tangente trigonometrico de x(en radianes) tan(0.0) es 0
  • 107. Dr. Ricardo Vargas de Basterra • Las funciones y los programas se parecen mucho, pero difieren: – Los programas son usados por un usuario externo. – Las funciones son utilizadas por un programador. – El usuario del programa “Hola Mundo” no conoce que es la función printf. – El programador que usa printf no siempre conocerá explícitamente como ésta hace para mostrar información en pantalla. – El programador que escribió printf conoce exactamente su funcionamiento interno. Diferencia entre El Programa y las Funciones
  • 108. Dr. Ricardo Vargas de Basterra Conceptos Básicos • Función – Grupo de sentencias bajo el mismo nombre que realizan una tarea específica. • Llamada a una función – Ejecuta el grupo de sentencias de una función. • Retorno – Una vez “llamada” la función, esta hace su trabajo, y regresa al mismo punto donde fue llamada.
  • 109. Dr. Ricardo Vargas de Basterra Declaración de Funciones • De forma similar a las variables, las funciones deben ser declaradas: • La forma de declarar una función es siguiendo la forma predefinida: • Por ejemplo: int potencia(int base, int exponente); float farenheitACelsius(double celsius); tipoDatoRetorno nombreFuncion(lista parámetros);
  • 110. Dr. Ricardo Vargas de Basterra Implementación de Funciones int potencia(int base, int exponente) { sentencias; } float farenheitACelsius(double celsius) { sentencias; } La primera línea se escribe igual que en la declaración, pero sin el punto y coma. Entre llaves se escriben las sentencias que ejecutan lo que debe realizar la función
  • 111. Dr. Ricardo Vargas de Basterra ¿Cómo Retornar? • Si la función debe generar un valor, lo retornará usando la sentencia return dentro del cuerpo de la función. • La forma de usarla es: return (variable o expresión que se debe retornar); • Esto especifica que la función debe terminar, retornando el valor calculado. • Hay funciones que no retornan datos, en este caso, se puede usar return, pero sin mencionar una expresión. return;
  • 112. Dr. Ricardo Vargas de Basterra Uso de Funciones • Como las funciones siempre retornan un valor, el uso de una función consiste en utilizar el valor de retorno. • Se lo puede hacer de dos formas: – Almacenar el valor de retorno en una variable que deberá ser del mismo tipo de dato que el tipo de dato de retorno de la función. – Utilizar el valor de retorno en una expresión.
  • 113. Dr. Ricardo Vargas de Basterra Uso de Funciones (continuación) • Ejemplo: void main( ) { int x; …. x = potencia(a,b); … } void main( ) { float c; …. c = farenheitACelsius(f); … } void main( ) { …. printf(“%d”, potencia(a,b)); … } void main( ) { …. printf(“%f”, farenheitACelsius(f)); … }
  • 114. Dr. Ricardo Vargas de Basterra Lenguajes de Programación Realizar el paquete de ejercicios • ¡A programar! 119/29
  • 115. Dr. Ricardo Vargas de Basterra Lenguajes de Programación ÁREAS DE TRABAJO 120/29
  • 116. Dr. Ricardo Vargas de Basterra Lenguajes de Programación Áreas de trabajo: namespace • Un namespace, no es más que una forma de crear un bloque, y que todas las funciones que estén dentro del mismo, estén asociadas a ese namespace (o espacio de nombres), al cual se le asigna un nombre para identificarlo. namespace hola void f() { std::cout << “hola”; } 121/29
  • 117. Dr. Ricardo Vargas de Basterra Lenguajes de Programación Para que se usan • Aparecen en C++ • No existían en C • Se usa para poder crear funciones sin el peligro que sus nombres estén repetidos en una librería cargada void f() { std::cout << “adios”; } void f() { std::cout << “hola”; } 122/29
  • 118. Dr. Ricardo Vargas de Basterra Lenguajes de Programación Cómo se usan • Para identificar a que área de trabajo pertenece una función se utilizan los dobles dos puntos: “::” NombreNamespace::función; namespace prueba { void f() { std::cout << “hola”; } void f() { std::cout << “adios”; } int main() { f(); prueba::f(); getchar(); return 0; } 123/29
  • 119. Dr. Ricardo Vargas de Basterra Lenguajes de Programación namespace std • Es el namespace dónde está incluida toda la librería estándar de C++ • Al incluirlo ya no tenemos que indicar std::cout, sino que directamente indicamos cout using namespace std; int main() { f(); hola::f(); cout << “loquesea”; getchar(); return 0; } 124/29
  • 120. Dr. Ricardo Vargas de Basterra Lenguajes de Programación Múltiples namespace namespace prueba { void f() { std::cout << “hola”; } } namespace otro { void f() { std::cout << “adios”; } } using namespace std; using namespace prueba; int main() { f(); otro::f(); cout << “loquesea”; getchar(); return 0; } 125/29
  • 121. Dr. Ricardo Vargas de Basterra ¿Qué recuerdas de la sesión anterior? • Comenta las ideas principales de la sesión anterior
  • 122. Dr. Ricardo Vargas de Basterra Lenguajes de Programación APUNTADORES 127/29
  • 123. Dr. Ricardo Vargas de Basterra Lenguajes de Programación Definición • Un apuntador es una variable que contiene la dirección en memoria de otra variable. Se pueden tener apuntadores a cualquier tipo de variable. 128/29
  • 124. Dr. Ricardo Vargas de Basterra Apuntador 2000 0010 ApuntaG 2001 0007 ApuntaD 2002 X 2003 X 2004 X 2005 X 2006 X 2007 X 2008 X 2009 X 2010 x 0000 34 A 0001 45 B 0002 12 C 0003 4 Var1 0004 99 Var2 0005 -98 Var3 0006 45 Vector1 0007 32 D 0008 55 E 0009 -9 F 0010 3 G Dirección Contenido Denominación Dirección Contenido Denominación
  • 125. Dr. Ricardo Vargas de Basterra Declarar Apuntadores • int *maria – Declara un Apuntador del tipo entero • Float *pedro • Char *juan • maria tiene la dirección de la variable • *maría es equivalente al valor de la variable • &maría obtiene la dirección de memoria de la variable maria
  • 126. Dr. Ricardo Vargas de Basterra Apuntadores La dirección de x es 100 y la de y es 200 Además la variable ap es en 1000 Declara ap como apuntador Asigna ap como el apuntador de x Es decir no el valor de x que es 1 sino la Dirección de x Cual valor tendría entonces?
  • 127. Dr. Ricardo Vargas de Basterra Ejemplo en c
  • 128. Dr. Ricardo Vargas de Basterra Análisis del ejemplo
  • 129. Dr. Ricardo Vargas de Basterra Apuntador de un Caracter
  • 130. Dr. Ricardo Vargas de Basterra Aplicaciones
  • 131. Dr. Ricardo Vargas de Basterra ¿Qué recuerdas de la sesión anterior? • Comenta las ideas principales de la sesión anterior
  • 132. Dr. Ricardo Vargas de Basterra Lenguajes de Programación Actividad • Escribir una función que reciba dos valores por referencia y los invierta 137/29
  • 133. Dr. Ricardo Vargas de Basterra Punteros a Funciones
  • 134. Dr. Ricardo Vargas de Basterra Lenguajes de Programación Actividad • Investigar: – Cadenas de caracteres – Funciones disponibles sobre cadenas de caracteres • Hacer un programa que pida dos cadenas, las concatene y las imprima al revés 139/29
  • 135. Dr. Ricardo Vargas de Basterra Lenguajes de Programación Ejemplo de direccionamiento con apuntadores a cadenas #include <cstdlib> #include <iostream> char *copiacadena (char *destino, const char *origen); int main () { char destino[20]; char origen[20]; printf("escribe la cadena: "); scanf("%s", &origen); printf("la cadena original es: %s n", origen); printf("Mando copiar la cadena n"); copiacadena(destino,origen); printf("la cadena original es: %s n", origen); printf("la cadena invertida es: %s n", destino); getchar(); return 0; } char *copiacadena(char *strDest, const char *strOrg) { int len = strlen(strOrg); printf("La longitud de la cadena original es: %d n", len); while (len > 0) { *(strDest + len+1) = *(strOrg + len--); } *strDest = *strOrg; return strDest; } 140/29
  • 136. Dr. Ricardo Vargas de Basterra Lenguajes de Programación Tarea • Investigar sobre arreglos • Investigar sobre matrices • Elaborar una presentación por equipos con ejemplos de los tres puntos. 141/29
  • 137. Dr. Ricardo Vargas de Basterra Trabajo con Cadena
  • 138. Dr. Ricardo Vargas de Basterra Ejemplo
  • 139. Dr. Ricardo Vargas de Basterra ALGORITMOS Y ESTRUCTURASS DE DATOS Algoritmos de búsqueda y ordenación 144/29 Lenguajes de Programación
  • 140. Dr. Ricardo Vargas de Basterra Lenguajes de Programación Formatos para nombrar variables 145/29
  • 141. Dr. Ricardo Vargas de Basterra Algoritmos básicos • Dan soluciones a problemas comunes que pueden ser simples o complejos. • Los casos fundamentales son: – Intercambio de valores – Contador – Sumador/Permutador – Ordenación – Búsqueda 146
  • 142. Dr. Ricardo Vargas de Basterra Intercambio de valores • Sean A y B dos variables con valores cualesquiera y se desea intercambiar éstos valores • Solución posible Ejemplos: A = 3 y B = 7 A = B B = A Solución: • Para evitar la perdida de valores se utiliza una variable temporal T • Solución: T = A A = B B = T 147
  • 143. Dr. Ricardo Vargas de Basterra Contador • Un contador es una variable cuyo valor se incrementa o decrementa en una cantidad constante cada vez que se produce un determinado suceso o acción. • Los contadores se utilizan con la finalidad de contar sucesos o acciones internas en un ciclo 148
  • 144. Dr. Ricardo Vargas de Basterra Sumatoria • Una sumatoria es una variable que suma sobre sí misma un conjunto de valores, para de esta manera tener la suma de todos ellos en una sola variable. • La diferencia entre un contador y un sumador es que el primero se modifica usando valores fijos (1), la sumatoria se modifica en forma variable 149
  • 145. Dr. Ricardo Vargas de Basterra Permutatoria • Una permutatoria es una variable que multiplica sobre sí misma un conjunto de valores, para de esta manera tener el producto de todos ellos en una sola variable. 150 𝑃 = 𝑘=1 𝑛 𝐴𝑘
  • 146. Dr. Ricardo Vargas de Basterra Fases Contador Sumador Permutador Inicialización Contador = 0 Suma = 0 Mult = 1 Incremento/ decremento Contador = Contador + 1 Contador = Contador – 1 Sumador = Sumador + valor Sumador = Sumador – valor Mult = Mult * valor 151 Tiene 3 Fases (se calculan en momentos de tiempo diferente dentro de ciclos): 1 . Inicialización (en cero o uno según el caso) 2. Calculo (Incremento, decremento, acumulación o multiplicación) 3. Utilización (la variable ya con el
  • 147. Dr. Ricardo Vargas de Basterra Ejemplo Contador 152
  • 148. Dr. Ricardo Vargas de Basterra 153 La Escuela
  • 149. Dr. Ricardo Vargas de Basterra ¿Qué recuerdas de la sesión anterior? • Comenta las ideas principales de la sesión anterior
  • 150. Dr. Ricardo Vargas de Basterra Estructuras de Datos • Colecciones de datos organizados que pueden ser de diferentes tipos y que comparten comportamientos • Son medios para manejar grandes cantidades de datos 155
  • 151. Dr. Ricardo Vargas de Basterra Estructuras de datos 156
  • 152. Dr. Ricardo Vargas de Basterra Lenguajes de Programación Estructuras básicas • Arreglos • Matricies • Registros 157/29
  • 153. Dr. Ricardo Vargas de Basterra Arreglos (Arrays) • Colección de un número fijo de componentes que son del mismo tipo de dato. • Forma general para declarar un arreglo de una dimensión: – dataType arrayName[intExp]; • Donde intExp es cualquier expresión constante que al evaluarse produce un número positivo entero. También, intExp especifica el número de componentes del arreglo.
  • 154. Dr. Ricardo Vargas de Basterra Arrays • Ejemplos: – La instrucción: int num[5]; declara un arreglo llamado num de cinco componentes, cada uno de tipo int. num[0] num[1] num[2] num[3] num[4] num
  • 155. Dr. Ricardo Vargas de Basterra Arrays • Para acceder a los componentes de un arreglo, la forma general utilizada es: – arrayName[indexExp] • Donde indexExp, también llamado el index, es cualquier expresión cuyo valor debe ser un entero positivo. Especifica la posición de un componente dentro del arreglo. – Ejemplo: • int list[10]; //declara un arreglo llamado list de 10 componentes • list[5] = 34; // almacena el valor 34 en la sexta posición del arreglo list 34 [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
  • 156. Dr. Ricardo Vargas de Basterra Arrays  Supongamos que a es una variable de tipo int. Las instrucciones: – a = 3; – list[a] = 63; asignan el valor de 3 a la variable a, y luego le asigna el valor 63 a la cuarta posición del arreglo list. De la misma forma, si el valor de la variable a es 4, entonces la instrucción list[2 * a – 3] = 58; almacena el valor 58 dentro de list[5] porque 2*a-3 evalua a cinco.
  • 157. Dr. Ricardo Vargas de Basterra Arrays • Ejemplos: list[3] = 10; //asigna el valor de 10 al cuarto componente de list list [6] = 35; //asigna el valor de 35 a la posición siete de list list [5] = list[3] + list [6] ; //suma el contenido de list[3] y de list[6] a list[5] 10 45 35 [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
  • 158. Dr. Ricardo Vargas de Basterra Arrays • Uso práctico de arreglos en C – Problema sin arreglos: hacer un programa que en C que lea cinco números, los sume, y luego los escriba en el orden inverso como se entraron. • Se necesitan declarar al menos cinco variables todas del mismo tipo para almacenar en memoria los números que se van a entrar.
  • 159. Dr. Ricardo Vargas de Basterra Arrays  Programa #1 #include<iostream> using namespace std; int main() { int num1, num2, num3, num4, num5; int sum; cout << “Ingrese cinco enteros: “; cin >> num1, num2, num3, num4, num5; cout << endl; sum = num1 + num2 + num3 + num4 + num5; cout << “The sum of the numbers = “ << sum << endl; cout << “The numbers in reverse order are: “; cout << num5 << “ “ << num4 << “ “ << num3 << “ “ << num2 << “ “ << num1<< endl; system(“pause”); return 0; }
  • 160. Dr. Ricardo Vargas de Basterra Arrays • Hacer el mismo programa pero para que lea 20 números en lugar de solo cinco. – En vez de definir veinte variables del mismo tipo en el programa, es más conveniente definir un arreglo de veinte posiciones donde se pueda acumular cada valor en su lugar correspondiente, leerlos, sumarlos, y por último escribirlos en el orden inverso como se entraron.
  • 161. Dr. Ricardo Vargas de Basterra Arrays  Solución: #include<iostream> using namespace std; int main() { int list[100]; int sum = 0; cout << “Enter 100 integers: “; for (int i = 0; i < 100; i ++) { cin >> list[i]; sum = sum + list[i]; } cout << endl; cout << “The sum of the numbers = “ << sum << endl; cout << “The numbers in reverse order are: “; for(int i = 99; i >=0; i --) cout << list[i] << “ “; cout << endl; system(“pause”); return 0; }
  • 162. Dr. Ricardo Vargas de Basterra ¿Qué recuerdas de la sesión anterior? • Comenta las ideas principales de la sesión anterior
  • 163. Dr. Ricardo Vargas de Basterra Lenguajes de Programación Dimensiones del arreglo • Hay arreglos de 1 dimensión con un solo índice para su acceso • Pero puede haber arreglos de dos dimensiones con dos índices para su acceso. Ejemplo: • Int A[i,j] • Int A[i][j] 168/29
  • 164. Dr. Ricardo Vargas de Basterra Lenguajes de Programación Múltiples dimensiones 169/29 • ¿Crees que pueda haber arreglos de 3 dimensiones? • ¿de 4? • ¿de n dimensiones?
  • 165. Dr. Ricardo Vargas de Basterra Lenguajes de Programación Ejercicio • Retomemos el programa que calculaba el promedio de calificaciones de varios estudiantes • Ahora convertirlo a un programa que utilice matricies • Al terminar el programa de imprimir las notas de todos los estudiantes, su promedio individual, el promedio grupal y los conteos de estudiantes de excelencia, regulares y no acreditados 170/29
  • 166. Dr. Ricardo Vargas de Basterra Lenguajes de Programación 171/29
  • 167. Dr. Ricardo Vargas de Basterra ¿Qué recuerdas de la sesión anterior? • Comenta las ideas principales de la sesión anterior
  • 168. Dr. Ricardo Vargas de Basterra 1 Definición formal del problema de búsqueda Entrada: • secuencia de n números <a1, a2,..,an> • Un número b Salida: • un entero i, tal que b == ai (igual) • 0 si b != ai, para i = 1,...,n Ejemplo instancia: Entrada: <5, 6, 9, 12> y 9 Salida: 3 Algoritmos de búsqueda y ordenación 173/29 Lenguajes de Programación
  • 169. Dr. Ricardo Vargas de Basterra 1 Entrada: • secuencia de n números <a1, a2,..,an> Salida: • Una permutación <a'1, a'2,..,a'n> reordenamiento de la secuencia, tal que: a'1 < a'2 < ... < a'n Ejemplo instancia: Entrada: <5,3,1,6,0> Salida: <0,1,3,5,6> Definición formal del problema de ordenamiento 174/29 Lenguajes de Programación
  • 170. Dr. Ricardo Vargas de Basterra 1 Algoritmos de Búsqueda Definición: Son algoritmos para encontrar un dato dentro de una estructura o arreglo – Se ha desarrollado un conjunto de algoritmos de búsqueda que varían en complejidad, eficiencia y tamaño del dominio de búsqueda. – Si se conoce por anticipado en qué tipo de “orden” inicial se encuentran los datos, es posible elegir un algoritmo que sea más adecuado. 175/29 Lenguajes de Programación
  • 171. Dr. Ricardo Vargas de Basterra 1 Tipos de Búsqueda • Casos más famosos – Secuencial – Binaria 176/29 Lenguajes de Programación
  • 172. Dr. Ricardo Vargas de Basterra 1 Consiste en ir comparando el elemento que se busca con cada elemento del arreglo hasta que se encuentra. I N F O M Á T I C A R R R R R 0 1 2 3 4 5 6 7 8 9 10 Índice resultado = 4 Búsqueda Secuencial 177/29 Lenguajes de Programación R
  • 173. Dr. Ricardo Vargas de Basterra 1 Algoritmo Búsqueda Secuencial for (i=0; i < LARGO; i++) if (a[i]==Elemento_buscado) printf(“Elemento encontrado en: %dn”, i); 178/29 Lenguajes de Programación
  • 174. Dr. Ricardo Vargas de Basterra 1 Búsqueda Binaria Los elementos del arreglo se encuentran ordenados y no están repetidos. En cada iteración el dominio de búsqueda se divide en 2. 3 5 8 20 32 45 60 73 32 32 0 1 2 3 4 5 6 7 Resultado = 4 32 179/29 Lenguajes de Programación
  • 175. Dr. Ricardo Vargas de Basterra 1 tipo A[LARGO] Max=LARGO-1; min=0; Encontrado=0; while(min+1<max && !Encontrado){ Medio=(Max+min)/2 if (A[Medio]==Elemento){ printf(“Elemento Encontradon”); Encontrado=1; /*Fuerza la salida del ciclo*/ } if (A[Medio]<Elemento) Max=Medio; if (A[Medio]>Elemento) min=Medio; } Algoritmo Búsqueda Binaria 180/29 Lenguajes de Programación
  • 176. Dr. Ricardo Vargas de Basterra 1 Algoritmos de Ordenamiento Definición: • Son algoritmos que fueron realizados para ordenar un conjunto de datos. Los algoritmos varían según su facilidad de entendimiento, su eficiencia, cantidad de código necesario para implementarlos, complejidad, requisitos necesarios de los datos. 181/29 Lenguajes de Programación
  • 177. Dr. Ricardo Vargas de Basterra 1 Tipos de Ordenamiento • Internos • Externos • Inserción • Intercambio • Casos más famosos – Ordenamiento por burbuja (bubble sort) – Quick Sort 182/29 Lenguajes de Programación
  • 178. Dr. Ricardo Vargas de Basterra 1 Ordenamiento Burbuja El algoritmo consiste en que los elementos más pesados se hundan y los más livianos salgan a flote. 25 25 32 15 1 1 32 15 32 1 15 25 32 1 25 15 32 25 1 15 32 25 15 1 32 25 15 1 183/29 Lenguajes de Programación
  • 179. Dr. Ricardo Vargas de Basterra 1 Ordenamiento Burbuja • Algoritmo for (i=Largo-1;i>0;i--) for (j=0;j<i;j++) if (A[j]>A[j+1]) Intercambiar(A[j],A[j+1]); 184/29 Lenguajes de Programación
  • 180. Dr. Ricardo Vargas de Basterra 1 Búsqueda del más pequeño El algoritmo consiste en encontrar el más pequeño de un grupo de datos y colocarlo hasta arriba. 25 15 32 15 1 1 25 32 15 25 32 1 15 32 25 1 25 32 15 1 32 25 15 1 15 1 185/29 Lenguajes de Programación
  • 181. Dr. Ricardo Vargas de Basterra 1 Más Pequeño • Algoritmo for (i=0;i<=n-1;i++) { for (j=i+1;j<=n;j++) { if (A[i]>A[j]) { x=A[i]; A[i]=A[j]; A[j]=x; } } } 186/29 Lenguajes de Programación
  • 182. Dr. Ricardo Vargas de Basterra Otros algoritmos de ordenación Quick Sort • Elegir un elemento de la lista de elementos a ordenar, al que llamaremos pivote. • Resituar los demás elementos de la lista a cada lado del pivote, de manera que a un lado queden todos los menores que él, y al otro los mayores. Los elementos iguales al pivote pueden ser colocados tanto a su derecha como a su izquierda, dependiendo de la implementación deseada. En este momento, el pivote ocupa exactamente el lugar que le corresponderá en la lista ordenada. • La lista queda separada en dos sublistas, una formada por los elementos a la izquierda del pivote, y otra por los elementos a su derecha. • Repetir este proceso de forma recursiva para cada sublista mientras éstas contengan más de un elemento. Una vez terminado este proceso todos los elementos estarán ordenados. 187/29 Lenguajes de Programación
  • 183. Dr. Ricardo Vargas de Basterra DIRECCIONES DE MEMORIA 1000 1001 1002 1003 &a es 1000  Las variables  Tienen direcciones de memoria  Si deseamos conocer dicha dirección  En lenguaje C  Se usa el operador & de dirección  Ejemplo: int a; a = 3; printf(“Valor:%d Dir: %d”, a, &a);  Un puntero  Es una variable que puede almacenar dirección de memoria
  • 184. Dr. Ricardo Vargas de Basterra DECLARACION DE PUNTEROS • Un tipo de dato – El puntero solo podrá almacenar direcciones de memoria de variables del tipo especificado – Se pueden definir punteros de cualquier tipo: float *pf; char *pc; • Un identificador que siempre va antecedido del operador * pt almacena la dirección de x, se dice que pt apunta a x x pt int *p; 1000 1001 1002 1003 1004 1005 1000 int *pt, x; x = 3; pt = &x; 3
  • 185. Dr. Ricardo Vargas de Basterra CONSULTANDO CONTENIDO • Si un puntero apunta a una variable – A través del puntero se puede llegar a conocer todo sobre la variable – Ejemplo: c = ‘A’ printf(“%c”, *pc1); *pc1 = ‘N’ printf(“%c”,c); Es equivalente a : printf(“%c”, c); Es equivalente a : c = ‘N’ Imprime ‘N’ pues c ya cambio char c, *pc1, *pc2; pc1 = &c;  Si quiero conocer la dirección, uso directamente el puntero printf(“%d”, pc1); //Imprimo la dir. Almacenada por pc1 pc2 = pc1; //pc2 almacena la misma dir. que pc1  Si quiero conocer el contenido al que apunta un puntero, uso el operador *, sobre dicho puntero
  • 186. Dr. Ricardo Vargas de Basterra EJERCICIO EN CLASE *p1 = *p2; int x,y; int *p1,*p2; x = -42; y = 163; p1 = &x; p2 = &y; *p1 = 17; *p2 = x+5; 1000 1004 Es equivalente a escribir x = y; p1 = p2; Esto indica que p1 ahora apunta a la misma variable que p2 1004 p1 = NULL; p2 = NULL; Esto es equivalente a “encerar” el puntero, y decir que no apunta a ninguna variable 1000 1004 1008 1012 x y p1 p2 -42 22 1000 1004 17 22 0 0 163 1004
  • 187. Dr. Ricardo Vargas de Basterra Lenguajes de Programación Ejercicio • Hacer un programa que defina las siguientes variables: – Int a,b – Int *p1,*p2, * • Asignar lo siguiente – a=1 – B=2 – *p1=&a – *p2=&b • Imprimir – a – b – &a – &b – *p1 – *p2 – p1 – p2 – &p1 – &p2 192/29
  • 188. Dr. Ricardo Vargas de Basterra ARITMETICA DE PUNTEROS • Los operadores + y – – Se pueden usar con punteros – Pero el significado de la operación cambia un poco • Si un entero ocupa 4 bytes, tomemos este ejemplo int x; int *p; p = &x; • Si la dirección de x es un valor 100 y decimos p = p+2; • Que dirección almacena p? 102 108 104 La suma indica que p se mueva 2 “enteros” mas adelante Cada entero equivale a 4 bytes 100 + 2*4 = 108
  • 189. Dr. Ricardo Vargas de Basterra EJERCICIO EN CLASE main(){ double Lista[3]; double *p,*p1,*p2; int k; Lista[0] = 1; Lista[1] = 1.1; Lista[2] = 1.2; p = Lista; p = p + 2; printf(“%d”, *p); p = p - 1; printf(“%d”, *p); p1 = Lista+2; p2 = &Lista[0]; k = p1-p2; printf(“%d”, k); } 1000 1008 1016 Lista[0] Lista[1] Lista[2] p p2 p1 p se mueve 2 desfases p retrocede un desfase Da el total de desfases entre p1 y p2 1 1.1 1.2
  • 190. Dr. Ricardo Vargas de Basterra Lenguajes de Programación Hacer un programa que • Agregar al final del programa anterior la impresión de lo siguiente: – Lista[0] – Lista – &Lista[0] – p2 – *p2 – &p2 195/29
  • 191. Dr. Ricardo Vargas de Basterra ESTRUCTURAS o REGISTROS • Es un grupo de “componentes”. Cada componente – Tiene su propio identificador, y – Se conoce como “elemento” o “campo” de la estructura • Ejemplo: • Es la declaración del nuevo “tipo de dato”: NombreCompleto • Con este tipo de dato, podremos crear “variables”: NombreCompleto snombre, enombre; struct NombreCompleto { char Primero[10]; char Inicial; char Ultimo[10]; };
  • 192. Dr. Ricardo Vargas de Basterra USANDO ESTRUCTURAS primero inicial ultimo snombre Los registros de tipo NombreCompleto, tendrán la misma “estructura” Cada dato tiene diferente tamaño y espacio en memoria Cada dato representa una información diferente • snombre es una variable de tipo NombreCompleto – Tiene la misma forma que la del nuevo tipo de dato – Cada miembro/campo ocupa memoria – Para acceder a un campo, se indica, • La variable seguida de un punto y del nombre del campo. Ejemplo snombre.Inicial = ‘L’;
  • 193. Dr. Ricardo Vargas de Basterra Lenguajes de Programación Escribe estos programa /* Paso de una estructura por valor. */ #include <stdio.h> struct trabajador { char nombre[20]; char apellidos[40]; int edad; char puesto[10]; }; void visualizar(struct trabajador); main() /* Rellenar y visualizar */ { struct trabajador fijo; printf("Nombre: "); scanf("%s",fijo.nombre); printf("nApellidos: "); scanf("%s",fijo.apellidos); printf("nEdad: "); scanf("%d",&fijo.edad); printf("nPuesto: "); scanf("%s",fijo.puesto); visualizar(fijo); } void visualizar(struct trabajador datos) { printf("Nombre: %s",datos.nombre); printf("nApellidos: %s",datos.apellidos); printf("nEdad: %d",datos.edad); printf("nPuesto: %s",datos.puesto); } /* Paso de una estructura por referencia. */ #include <stdio.h> struct trabajador { char nombre[20]; char apellidos[40]; int edad; char puesto[10]; }; void visualizar(struct trabajador *); main() /* Rellenar y visualizar */ { struct trabajador fijo; printf("Nombre: "); scanf("%s",fijo.nombre); printf("nApellidos: "); scanf("%s",fijo.apellidos); printf("nEdad: "); scanf("%d",&fijo.edad); printf("nPuesto: "); scanf("%s",fijo.puesto); visualizar(&fijo); } void visualizar(struct trabajador *datos) { printf("Nombre: %s",datos->nombre); printf("nApellidos: %s",datos->apellidos); printf("nEdad: %d",datos->edad); printf("nPuesto: %s",datos->puesto); } 198/29
  • 194. Dr. Ricardo Vargas de Basterra Lenguajes de Programación Ejercicio Investiga en parejas lo siguiente: • ¿Qué es una estructura tipo Pila? • ¿Que comportamiento tiene? • ¿Qué apuntadores requiere? • ¿Cuáles son sus algoritmos básicos? • Presenten dos ejemplos de su uso 199/29
  • 195. Dr. Ricardo Vargas de Basterra ¿Qué recuerdas de la sesión anterior? • Comenta las ideas principales de la sesión anterior
  • 196. Dr. Ricardo Vargas de Basterra TDA PILA Def: una pila es una lista ordenada de elementos en la que todas las inserciones y supresiones se realizan por un mismo extremo denominado tope o cima de la pila. Definición Estructura LIFO (Last In First Out): “último en entrar primero en salir”
  • 197. Dr. Ricardo Vargas de Basterra Operaciones básicas • PUSH: apilar, meter • POP: desapilar, sacar • TOP: cima, tope • Underflow (pila vacía) • OverFlow (Pila Llena) TDA PILA
  • 198. Dr. Ricardo Vargas de Basterra Operaciones • Crear_pila(P: pila, ok: lógico) • Borrar_pila(P: pila, ok: lógico) • Vacía?(P: pila, resp: lógico) • Llena?(P: pila, resp: lógico) • Push(P: pila, X: elemento, resp: lógico) • Pop(P: pila, X: elemento, resp: lógico) • Top(P: pila, X: elemento, resp: lógico) TDA PILA
  • 199. Dr. Ricardo Vargas de Basterra Lenguajes de Programación Comportamiento 204/29
  • 200. Dr. Ricardo Vargas de Basterra Implementación con vectores • Definición de tipos ELEMENTO = T; PILA = registro de tope: numérico; arreglo: vector[1..MAX] de ELEMENTO; finregistro;  Operación Push Algoritmo PUSH (P: Pila, X: ELEMENTO, ok: lógico) es resp: lógico; INICIO Llena?(P,resp); si resp entonces ok:= falso; sino P.tope:= P.tope + 1; P.arreglo[P.tope]:= X; ok:= cierto; finsi; FIN TDA PILA
  • 201. Dr. Ricardo Vargas de Basterra Implementación con vectores • Operación Pop Algoritmo POP (P: PILA, X: ELEMENTO, ok: lógico) es INICIO Vacia(P, resp); si resp entonces ok:= falso; {no hay elementos q sacar} sino X:= P.arreglo[P.tope]; P.tope:= P.tope -1; ok:= cierto; finsi; FIN  Operación Top Algoritmo TOP (P: PILA, X: ELEMENTO, ok:lógico) es resp: lógico; INICIO Vacia?(P, resp); si resp entonces ok:= falso; {pila vacía} sino ok:= cierto; X:= P.arreglo[P.tope]; finsi; FIN TDA PILA
  • 202. Dr. Ricardo Vargas de Basterra Lenguajes de Programación Ejercicio Investiga en parejas lo siguiente: • ¿Qué es una estructura tipo Cola? • ¿Que comportamiento tiene? • ¿Qué apuntadores requiere? • ¿Cuáles son sus algoritmos básicos? • Presenten dos ejemplos de su uso 208/29
  • 203. Dr. Ricardo Vargas de Basterra TDA COLA Def: una cola es una lista ordenada de elementos en la que todas las inserciones se realizan por un extremo (frente o principio) y las supresiones se realizan por el otro (final). Definición Estructura FIFO (First In First Out): “primero en entrar primero en salir”
  • 204. Dr. Ricardo Vargas de Basterra Operaciones básicas • QUEUE: encolar, meter • DEQUEUE: desencolar, sacar
  • 205. Dr. Ricardo Vargas de Basterra Operaciones • Crear_cola(C: cola, ok: lógico) • Borrar_cola(C: cola, ok: lógico) • Vacía?(C: cola, resp: lógico) • Llena?(C: cola, resp: lógico) • Queue(C: cola, X: elemento, resp: lógico) • Dequeue(C: cola, X: elemento, resp: lógico) • Tamaño(C: cola, N: numérico)
  • 206. Dr. Ricardo Vargas de Basterra Implementación con vectores • Si el principio de la cola es fijo en la primera posición del vector y el final es variante para eliminar un elemento de la cola hay que desplazar todos los demás una posición (Dequeue() es ineficiente). • Si principio y final de la cola son variantes, no hacen falta desplazamientos. – Problema: la cola puede desbordarse teniendo celdas libres.
  • 207. Dr. Ricardo Vargas de Basterra Implementación con vectores • Solución: VECTOR CIRCULAR cuando algún índice llega al final, vuelve al comienzo del vector Para saber si la cola está llena o vacía, su tamaño se controla con el campo tam del registro  Definición de tipos ELEMENTO = T; COLA = registro de prim, ult, tam: numérico; arreglo: vector[1..MAX] de ELEMENTO; finregistro;
  • 208. Dr. Ricardo Vargas de Basterra Implementación con vectores • Operación QUEUE Algoritmo QUEUE(C: COLA, X: ELEMENTO, resp: lógico) es INICIO Llena?(C,resp); si resp = cierto entonces {la cola está llena} Escribir “Cola llena”; resp := falso; sino {la cola no está llena, por lo que procedemos a añadir el elemento} C.ult := (C.ult + 1) mod MAX; {hacemos que ult avance de forma circular} C.arreglo[C.ult] := X; C.tam := C.tam +1; {pues ahora hay un elemento más en la cola} finsi; FIN
  • 209. Dr. Ricardo Vargas de Basterra Implementación con vectores • Operación Dequeue Algoritmo DEQUEUE(C: COLA, X: ELEMENTO, resp: lógico) es INICIO Vacía?(C,resp); si resp = cierto entonces {la cola está vacía} Escribir “Cola vacía”; resp := falso; sino {hay al menos un elemento} X := C.arreglo[C.prim]; C.prim := (C.prim + 1) mod MAX; C.longitud := C.longitud -1; finsi; FIN
  • 210. Dr. Ricardo Vargas de Basterra Aplicaciones de las colas Principalmente: gestión de recursos • Sistemas de tiempo compartido: los recursos (CPU, memoria, …) se asignan a los procesos que están en cola de espera en el orden en el que fueron introducidos. • Colas de impresión: al intentar imprimir varios documentos a la vez o la impresora está ocupada, los trabajos se almacenan en una cola según el orden de llegada. • Simulación por computadora de situaciones reales: una cola de clientes en un supermercado o el tiempo de espera para ser atendidos por un operador de una línea telefónica.
  • 211. Dr. Ricardo Vargas de Basterra Lenguajes de Programación Ejercicio Investiga en parejas lo siguiente: • ¿Qué es una estructura tipo Doblecola? • ¿Que comportamiento tiene? • ¿Qué apuntadores requiere? • ¿Cuáles son sus algoritmos básicos? • Presenten dos ejemplos de su uso 217/29
  • 212. Dr. Ricardo Vargas de Basterra Lenguajes de Programación Operaciones en una estructura de doble cola • Escribir por la derecha • Leer por la derecha • Escribir por la izquierda • Leer por la izquierda • Consultar derecha • Consultar izquierda • Recorrer la cola 218/29
  • 213. Dr. Ricardo Vargas de Basterra Lenguajes de Programación Tarea Investigar sobre las siguientes estructuras: • Listas encadenadas • Listas encadenadas circulares • Listas doblemente encadenadas • Listas doblemente encadenadas circulares 219/29
  • 214. Dr. Ricardo Vargas de Basterra ¿Qué recuerdas de la sesión anterior? • Comenta las ideas principales de la sesión anterior
  • 215. Dr. Ricardo Vargas de Basterra Lenguajes de Programación Listas encadenadas • Estructuras formadas por nodos • Un nodo tiene al menos dos campos (sección de dato y sección de apuntador) • Es dinámica y no contigua (dispersa) 221/29
  • 216. Dr. Ricardo Vargas de Basterra Lenguajes de Programación • Nodo tiene una sección de datos y una de apuntadores • Si hubiera una lista llamada Luis con dos campos: – Dato – Link • Luis.dato • Luis.link • Luis.dato[apuntador] • Luis.link[apuntador] • Si apuntador fuera 3 • Luis.dato[3] 222/29
  • 217. Dr. Ricardo Vargas de Basterra Lenguajes de Programación Tipos de Listas 223/29
  • 218. Dr. Ricardo Vargas de Basterra Lenguajes de Programación Apuntadores típicos en las Lista • Primer nodo: Header / FP (first Point) • Último nodo: Last Point • NIL/NULL puntero vacío 224/29 • Pointer • Link • Right Link • Left LinkLista.dato
  • 219. Dr. Ricardo Vargas de Basterra Tipos de listas encadenadas • Listas simples encadenadas: Tiene un enlace por nodo. Este enlace apunta al siguiente nodo en la lista, o al valor Nulo o lista Vacia, si es el último nodo. • Solo se puede recorrer la lista en un solo sentido
  • 220. Dr. Ricardo Vargas de Basterra Tipos de listas enlazadas • Listas doblemente encadenadas: Cada nodo tiene dos enlaces: uno apunta al nodo anterior, o apunta al valor Nulo o la lista vacia si es el primer nodo; y otro que apunta al siguiente nodo, o apunta al valor Nulo o la lista vacia si es el último nodo. • Se puede recorrer la lista en ambos sentidos
  • 221. Dr. Ricardo Vargas de Basterra Tipos de listas enlazadas • Listas enlazadas circulares: En una lista enlazada circular, el primer y el último nodo están unidos. Para recorrer una lista enlazada circular podemos empezar por cualquier nodo y seguir la lista en cualquier dirección hasta que se regrese al nodo original • Se puede recorrer la lista en un solo sentido.
  • 222. Dr. Ricardo Vargas de Basterra Lenguajes de Programación Tipos de listas enlazadas • Listas doblemente encadenadas circulares: En una lista enlazada circular, el primer y el último nodo están unidos y cada uno apunta al otro por su doble encadenamiento • Se puede recorrer la lista en ambos sentidos además de ser circular. 228/29
  • 223. Dr. Ricardo Vargas de Basterra Lenguajes de Programación Algoritmos tipos • Crear Lista • Añadir nodo al final • Recorrer lista • Buscar un nodo en la lista • Eliminar un nodo • Insertar un nodo en medio de otros • Eliminar la lista 229/29
  • 224. Dr. Ricardo Vargas de Basterra Lenguajes de Programación Ejercicio • ¿Qué cosas se deben hacer para los siguientes algoritmos: – Añadir un nodo al final – Eliminar un nodo – Insertar un nodo en medio de otros dos 230/29
  • 225. Dr. Ricardo Vargas de Basterra LSE: BUSQUEDA • Hay que ubicarse en el inicio: header • E ir avanzando hasta – Encontrar el nodo con la información buscada o – Que ya no haya mas nodos • Un apuntador se ubicara en el header • Y luego irá avanzando al siguiente, y al siguiente y al siguiente 15 A 12 H 21 J 31 M -1 V 10 Q last header Busco Q P 20 P 15 P 12 P 21 P20 Busco L P 15 P 12 P 21 P 10 P 31 P -1 • Al encontrar al nodo buscado, no se retorna la dirección de este nodo(apuntador) 20 15 12 21 10 31 20 31 Al encontrar el nodo, el valor de retorno es 21 porque es la dirección del nodo Si no encuentra el nodo el valor de retorno es -1
  • 226. Dr. Ricardo Vargas de Basterra INSERCION AL INICIO/FINAL 15 C 12 Y 21 Q 31 L B 10 A Last 31 Header 20 H nuevo Header 18 G nuevo Last 32 Si la lista esta vacía, tanto header como last apuntan al nuevo nodo Si no, si es al inicio el nuevo header, es el nuevo nodo Si no, si es al final, el nuevo last es el nuevo nodo 20 15 12 21 10 31 32 20 18 32
  • 227. Dr. Ricardo Vargas de Basterra Lista vacía e insertar en medio • Debe recibir la posición donde se va a insertar • Insertemos después – Si Lista Vacía, el nuevo header y last, es el nuevo nodo – Si la posición no existe no efectuar la inserción – Si la lista solo tiene un elemento, el nuevo last es el nuevo nodo 15 B 12 Z A 31 Q W 10 M header last p R nuevo 21 91 header last H nuevo Header 50 Last 50 20 15 12 21 10 31 50 91
  • 228. Dr. Ricardo Vargas de Basterra LSE: SACAR DE LA LISTA • La lista no debe estar vacía!!, si tiene un solo elemento, dejarla vacía 10 5 8 2 31 25 header last tmp Tmp = header; header Header = header->sig; free(tmp); tmp tmp = last; last Last = Anterior(Last); free(tmp); Last->sig = NULL; 20 15 12 21 10 31
  • 229. Dr. Ricardo Vargas de Basterra LSE: SACAR JUSTO UN NODO • Lista no debe estar vacía • La posición enviada debe existir en la lista • Revisar si se desea eliminar el header o el last 10 5 8 2 31 25 header last p pant free(p); 20 15 12 21 10 31
  • 230. Dr. Ricardo Vargas de Basterra ¿Qué recuerdas de la sesión anterior? • Comenta las ideas principales de la sesión anterior
  • 231. Dr. Ricardo Vargas de Basterra ARBOLES 237/29 Lenguajes de Programación
  • 232. Dr. Ricardo Vargas de Basterra Arboles • Un árbol es una estructura de datos no lineal formada por un conjunto de nodos. • Son estructuras jerárquicas, cada elemento puede tener diferentes siguientes elementos. • El concepto de árbol implica una estructura en la que los datos se organizan de modo que los elementos de información están relacionados entre sí a través de ramas
  • 233. Dr. Ricardo Vargas de Basterra ARBOLES - DEFINICIÓN -  Estructura no lineal y de dos dimensiones de datos.  Los nodos de los arboles contienen dos o más enlaces.  Normalmente se dibujan en forma opuesta a los árboles en la naturaleza. 2 3 9
  • 234. Dr. Ricardo Vargas de Basterra Arboles • un árbol representa una jeraquía ejemplos: estructura organizativa de una empresa tabla de contenido de un libro
  • 235. Dr. Ricardo Vargas de Basterra Arboles (1) • Sistema de archivos de Unix o DOS/Windows
  • 236. Dr. Ricardo Vargas de Basterra Punt Izq Info Punt Der Hijo Izq Descendiente Hijo Der Descendiente Raíz Padre o Antepasado Hojas Hermanos Sub-árbol Izq Sub-árbol Der El nível Nx de un nodo, distancia a la raíz. Raíz Nivel 0 Número máximo de nodos de cualquier nivel es 2N N0 N1 N2 N3 Root ARBOLES - VOCABULARIO - Nodo: 0,1,2 hijos Todos los nodos son descendientes de 8 la raíz
  • 237. Dr. Ricardo Vargas de Basterra Terminología de Arboles • A es el nodo raíz • B es el padre de D y E • C es el hermano de B • D y E son los hijos de B • D, E, F, G, I son nodos terminales o externos también llamados hojas • A, B, C, H son nodos internos • La profundidad (nivel) de E es 2 • La altura del árbol es 3 • El grado del nodo B es 2 • Propiedad: (#aristas) = (#nodos) - 1
  • 238. Dr. Ricardo Vargas de Basterra • Ejemplos: • Árbolbinario:árbol de grado 2 ■ Cada nodo tiene como mucho dos descendientes directos • Lista:árbol degenerado de grado 1 • Gradodeunnodo:número de descendientes directos B C B • Gradodelárbol:mayor grado de susnodos D Conceptos Básicos Grado 2 Grado 3 A A C
  • 239. Dr. Ricardo Vargas de Basterra Conceptos básicos A B D C G H E F I J K 0 1 • Profundidaddeunnodo:número de predecesores • Altura delárbol:longitud de la rama más larga más uno. Profundidad 2 3 profundidad(A)=0 profundidad(H)=2 Altura de árbol = 4
  • 240. Dr. Ricardo Vargas de Basterra Conceptos básicos • Camino:existe un camino del nodo X al nodo Y,si existe una sucesión de nodos que permitan llegar desde X aY.La sucesión debe tener un único sentido: ascendiente o descendiente. camino(A,K)={A,B,F,K} camino(C,K)={} A B D C G H E F I J K
  • 241. Dr. Ricardo Vargas de Basterra Árboles: Ejercicio 1 1. Explica los valores de las principales características del árbol mostrado en la figura. • ¿gradodel árbol? • ¿alturadel árbol? • ¿número nodos totalesdel árbol? • ¿número de hojas? • ¿número de nodos internos?
  • 242. Dr. Ricardo Vargas de Basterra Árboles generales ▶ También llamados n-arios o multicamino ▶ Árboles con grado mayor a 2 A B D C G H E F I J K
  • 243. Dr. Ricardo Vargas de Basterra ARBOLES BINARIOS • Tipo especial de árbol – Cada nodo no puede tener mas de dos hijos • Un árbol puede ser un conjunto – Vacío, no tiene ningún nodo – O constar de tres partes: • Un nodo raíz y • Dos subárboles binarios: izquierdo y derecho • La definición de un árbol binario es recursiva – La definición global depende de si misma A B C D A B C D E H I F G J RAIZ Sub. Izq. Sub. Der.
  • 244. Dr. Ricardo Vargas de Basterra Árboles Binarios ▶ Está lleno si es completo y además todas sus hojas están en el mismo nivel A B C F G D E A B C G H E F I J • Es completosi todo nodo interno (no hoja) tiene dos descendientes P,I,D = BDE PreOrder I,P,D = DBE EnOrder I,D,P = DEB PostOrder ABCDEGF
  • 245. Dr. Ricardo Vargas de Basterra RECORRIDOS DE UN A.B. • Recorrer es – Visitar todos los elementos de una estructura • Como recorrer un árbol – Hay tantos caminos ¿cual escoger? – Existe tres recorridos típicos • Nombrados de acuerdo a la posición de la raíz • Preorden: raíz - subarbol izq. - subarbol der. • Enorden : subarbol izq. - raíz - subarbol der. • Postorden : subarbol izq. - subarbol der. -raíz
  • 246. Dr. Ricardo Vargas de Basterra EJEMPLO PREORDEN G G-D G-D-B G-D-B-A G-D-B-A-C G-D-B-A-C-E G D K B E H M A C F J I L G 1 D 2 B 3 A 4 C 5 E 6 F 7 G-D-B-A-C-E-F K 8 G-D-B-A-C-E-F-K H 9 G-D-B-A-C-E-F-K-H J 10 G-D-B-A-C-E-F-K-H-J I 11 G-D-B-A-C-E-F-K-H-J-I M 12 G-D-B-A-C-E-F-K-H-J-I-M L 13 G-D-B-A-C-E-F-K-H-J-I-M-L 1. Visitar raiz 2. Preorden al Subarbol Izq. 3. Preorden al Subarbol Der.
  • 247. Dr. Ricardo Vargas de Basterra Ejemplo Recorridos 27 Preorder: F, B, A, D, C, E, G, I,H InOrder: A, B, C ,D, E, F, G, H, I PostOrder: A, C, E, D, B, H, I,G, F LevelOrder: F, B, G, A, D, I,C, E, H
  • 248. Dr. Ricardo Vargas de Basterra Árboles binarios: Implementación Nodo Árbol padre hijo izquierdo hijo derecho elemento A B C D E nul l nul l nul l nul l nul nul l l nul l
  • 249. Dr. Ricardo Vargas de Basterra Lenguajes de Programación 257/29
  • 250. Dr. Ricardo Vargas de Basterra GRAFOS 258/29 Lenguajes de Programación
  • 251. Dr. Ricardo Vargas de Basterra DEFINICIÓN DE GRAFOS • Un grafo en el ámbito de las ciencias de la computación es una estructura de datos, en concreto un tipo abstracto de datos (TAD), que consiste en un conjunto de nodos (también llamados vértices) y un conjunto de arcos (aristas) que establecen relaciones entre los nodos. • El concepto de grafo TAD desciende directamente del concepto matemático de grafo. En este contexto árboles y grafos se refiere a estructuras de datos que permiten organizar y mantener información en un computador. 259/29 Lenguajes de Programación
  • 252. Dr. Ricardo Vargas de Basterra VERTICES • Son los puntos o nodos con los que esta conformado un grafo. • Llamaremos grado de un vértice al número de aristas de las que es extremo. Se dice que un vértice es `par' o `impar' según lo sea su grado. 260/29 Lenguajes de Programación
  • 253. Dr. Ricardo Vargas de Basterra ARISTAS • Son las líneas con las que se unen las aristas de un grafo y con la que se construyen también caminos. 261/29 Lenguajes de Programación
  • 254. Dr. Ricardo Vargas de Basterra DEFINICION • Un grafo G = (V,A) • V, el conjunto de vértices o nodos – Representan los objetos • A, el conjunto de arcos – Representan las relaciones V = {1, 4, 5, 7, 9} A= {(1,4), (5,1), (7,9), (7,5), (4,9), (4,1), (1,5), (9,7), (5, 7), (9,4)} 1 4 5 7 9 262/29 Lenguajes de Programación
  • 255. Dr. Ricardo Vargas de Basterra TIPOS DE GRAFOS • Dirigidos: Cada arco está representado por un par ordenado de vértices. • No dirigidos: El par de vértices que representa un arco no está ordenado. 263/29 Lenguajes de Programación
  • 256. Dr. Ricardo Vargas de Basterra REPRESENTACIÓN DE GRAFOS • Las representaciones de grafos más habituales están basadas en matrices de adyacencia. • Matriz de adyacencia Se asocia cada fila y cada columna a cada nodo del grafo, siendo los elementos de la matriz la relación entre los mismos, tomando los valores de 1 si existe la arista y 0 en caso contrario. 264/29 Lenguajes de Programación
  • 257. Dr. Ricardo Vargas de Basterra EJEMPLO 265/29 Lenguajes de Programación
  • 258. Dr. Ricardo Vargas de Basterra LISTAS DE ADYACENCIAS • Se asocia a cada nodo del grafo una lista que contenga todos aquellos nodos que sean adyacentes a él. • Ejemplo: 266/29 Lenguajes de Programación
  • 259. Dr. Ricardo Vargas de Basterra Ejemplos de grafos Madrid Murcia Valencia Granada Sevilla Cádiz Badajoz Vigo Coruña Gerona Barcelona Zaragoza Bilbao Oviedo Valladolid Jaén 251 1 5 0 403 2 4 1 3 4 9 191 9 9 1 2 5 356 304 3 9 5 455 1 7 1 2 8 0 1 9 3 3 2 4 325 296 100 3 3 5 278 242 256 • Ejemplo: Grafo de carreteras entre ciudades. 267/29 Lenguajes de Programación
  • 260. Dr. Ricardo Vargas de Basterra Ejemplos de grafos Problemas • ¿Cuál es el camino más corto de Murcia a Badajoz? • ¿Existen caminos entre todos los pares de ciudades? • ¿Cuál es la ciudad más lejana a Barcelona? • ¿Cuál es la ciudad más céntrica? • ¿Cuántos caminos distintos existen de Sevilla a Zaragoza? • ¿Cómo hacer un tour entre todas las ciudades en el menor tiempo posible? • Ejemplo: grafo de carreteras entre ciudades. 268/29 Lenguajes de Programación
  • 261. Dr. Ricardo Vargas de Basterra Ejemplos de grafos • Ejemplo: grafo de planificación de tareas. Licencia de obras 6 Aplanar terreno 4 Comprar piedras 2 Cincelar piedras 8 Hacer camino 3 Colocar piedras 9 Pintar pirámide 3 269/29 Lenguajes de Programación
  • 262. Dr. Ricardo Vargas de Basterra Ejemplos de grafos • Ejemplo: grafo de planificación de tareas. Problemas • ¿En cuanto tiempo, como mínimo, se puede construir la pirámide? • ¿Cuándo debe empezar cada tarea en la planificación óptima? • ¿Qué tareas son más críticas (es decir, no pueden sufrir retrasos)? • ¿Cuánta gente necesitamos para acabar las obras? 270/29 Lenguajes de Programación
  • 263. Dr. Ricardo Vargas de Basterra Ejemplos de grafos • Ejemplo: grafo asociado a un dibujo de líneas. 1 4 2 7 3 6 5 b e a d c Modelo 1 Modelo 2 Escena 271/29 Lenguajes de Programación
  • 264. Dr. Ricardo Vargas de Basterra Ejemplos de grafos • Ejemplo: grafo de asociado a un dibujo de líneas. Problemas • ¿Cuántos grupos hay en la escena? • ¿Qué objetos están visibles en la escena y en qué posiciones? • ¿Qué correspondencia hay entre puntos del modelo y de la escena observada? • ¿Qué objetos son isomorfos? 272/29 Lenguajes de Programación
  • 265. Dr. Ricardo Vargas de Basterra CAMINOS • Definicion – Un camino P en un grafo G, desde V0 a Vn – Es la secuencia de n+1 vertices – Tal que (Vi, Vi+1)  A para 0 i  n  Longitud de camino  El numero de arcos que lo forman  Camino Simple  Todos los nodos que lo forman son distintos  Ciclo  Camino simple cerrado de long. >= 2  Donde V0 = Vn 4 7 9 6 10 11 Camino entre 4 y 7 P = {4, 6, 9, 7} Longitud: 3 A B C D E F Camino A y A P = {A, E, B, F, A} Longitud: 4 – 4ciclo 273/29 Lenguajes de Programación
  • 266. Dr. Ricardo Vargas de Basterra Operaciones elementales con grafos • Crear un grafo vacío (o con n vértices). • Insertar un nodo o una arista. • Eliminar un nodo o arista. • Consultar si existe una arista (obtener la etiqueta). • Iteradores sobre las aristas de un nodo: 274/29 Lenguajes de Programación
  • 267. Dr. Ricardo Vargas de Basterra Algoritmos • Existen múltiples algoritmos ya desarrollados para cada una de las operaciones básicas así como para la solución de problemas típicos. • Ejemplos: – Dijkstra – Euler – Warshall – Floyd – Prim – Kruskal 275/29 Lenguajes de Programación
  • 268. Dr. Ricardo Vargas de Basterra Autoevaluación • Realizar Autoevaluación. Criterios: – Esfuerzo – Calidad – Puntualidad en entrega de tareas – Participación – Aprendizaje • Liga de la autoevaluación: • https://forms.gle/9EWJGipK7hnE K4AQ9 Metodología de Desarrollo de software
  • 269. Dr. Ricardo Vargas de Basterra Presentar proyecto integrador • Presentar en equipo la versión final del proyecto integrador • Realicen coevaluación. Criterios: – Calidad de la información – Calidad de la presentación – Calidad de la exposición Metodología de Desarrollo de software • https://forms.gle/LpwZ G51D5JTJACxY6
  • 270. Dr. Ricardo Vargas de Basterra Preguntas ¿Cuáles son tus dudas? 278/29 Lenguajes de Programación
  • 271. Dr. Ricardo Vargas de Basterra Conclusiones y Preguntas Gracias Dr. Ricardo Vargas de Basterra 279/29 Lenguajes de Programación