Curso de Algoritmo Mas Ejercicios

78
Curso de Programación Estructurada Parte I Dr. Ana Lilia Laureano-Cruces e-mail: [email protected] Departamento de Sistemas UAM, Unidad Azcapotzalco

Transcript of Curso de Algoritmo Mas Ejercicios

Page 1: Curso de Algoritmo Mas Ejercicios

Curso de Programación

Estructurada

Parte I

Dr. Ana Lilia Laureano-Crucese-mail: [email protected]

Departamento de Sistemas

UAM, Unidad Azcapotzalco

Page 2: Curso de Algoritmo Mas Ejercicios

Objetivos (I)

• Ubicar la importancia de la programación en la ingeniería

del software

• Explicar el proceso de construcción de un programa

• Diseñar algoritmos para resolver problemas simples

• Diseñar y construir programas modulares bajo el

enfoque de la programación estructurada utilizando

eficazmente y eficientemente un entorno de desarrollo

convencional

Que al final del curso el estudiante sea capaz de:

Page 3: Curso de Algoritmo Mas Ejercicios

Objetivos (II)

• Explicar y aplicar algoritmos iterativos de búsqueda y

ordenamiento

• Conocer el papel de las etapas de análisis, diseño y

programación en el desarrollo estructurado del software

Page 4: Curso de Algoritmo Mas Ejercicios

Contenido Sintético

Resolución de

problemas y los

algoritmos

De los algoritmos

a los programas

Constructores

fundamentales de

la programación

estructurada

Fundamentos del

diseño modular

Algoritmos

iterativos de

búsqueda y

ordenamiento

Archivos

Introducción a los

tipos de datos

abstractos

Introducción al

análisis y diseño

estructurado del

software

Page 5: Curso de Algoritmo Mas Ejercicios

Resolución de problemas y los

algoritmos

• Concepto de algoritmo

• Propiedades de un algoritmo

• El rol del algoritmo en la resolución de

problemas

Page 6: Curso de Algoritmo Mas Ejercicios

Concepto de algoritmo (I)

Un algoritmo es un procedimiento para resolver un problema.

Éste describe un conjunto finito y ordenado de pasos, reglas o

instrucciones para producir la solución a un problema dado.

Un algoritmo puede ser definido como una secuencia de

instrucciones bien definidas y efectivas, y finaliza con la

producción del resultado esperado a partir de las entradas

dadas.

Page 7: Curso de Algoritmo Mas Ejercicios

Concepto de algoritmo (II)

Algoritmo

Especificación

de las

entradas

Acción o

procedimiento

Acción o

procedimiento

Acción o

procedimiento

Acción o

procedimiento

Descripción

del resultado o

efecto

. . .

Page 8: Curso de Algoritmo Mas Ejercicios

Un primer ejemplo de algoritmo

El siguiente algoritmo calcula el área y el perímetro de un rectángulo

1. Inicio

2. Leer base y altura (b, a)

3. ar ← b*a

4. pe ← 2*(b + a)

5. Escribir “Área del rectángulo: ”, ar

6. Escribir “Perímetro del rectángulo: ”, pe

7. Fin

Datos de entrada: b y a (base y altura)

Datos de salida: ar y pe (área y perímetro)

Procesos: ar = b*a, pe = 2*(b + a)

Análisis resumido

del problema

Page 9: Curso de Algoritmo Mas Ejercicios

Características de los algoritmos (I)

• Son precisos. Deben indicar el orden de realización de

cada paso, así como especificar con precisión las

entradas y cada paso o etapa

• Están bien definidos. Etapas bien definidas y concretas

• Exactitud y corrección. Se debe demostrar que el

algoritmo resuelve el problema para el cual fue escrito

• Son finitos. Deben tener un número finito de pasos y

deben terminar

• Deben describir el resultado o efecto final. La salida

esperada del algoritmo debe estar completamente

especificada

Page 10: Curso de Algoritmo Mas Ejercicios

Características de los algoritmos (II)

• Entrada

• Proceso

• Salida

Partes que debe describir la definición de un algoritmo:

Entrada SalidaProceso

Page 11: Curso de Algoritmo Mas Ejercicios

Características de los algoritmos (III)

• Son independientes tanto del lenguaje de programación

en el que se expresan como del hardware en que se

ejecutan los programas

Algoritmo

Código en C

Código en

Pascal

Código en

Fortran

Computadora con

los compiladores

de C y Pascal

Computadora con

el compilador de

Fortran

Expresado

en

Ejecutado

en

Page 12: Curso de Algoritmo Mas Ejercicios

El rol del algoritmo en la resolución de

problemas (I)

Descripción y

análisis del

problema

Diseño del

algoritmo

Programa en un

lenguaje de

programación

La resolución de un problema en computadora requiere como

paso previo el diseño de un algoritmo que especifique el

procedimiento para resolver el problema. Es decir, antes de

codificar un programa se requiere diseñar el algoritmo.

Page 13: Curso de Algoritmo Mas Ejercicios

Ejemplos de algoritmos (I.a.)

Definición del problema

Calcular los porcentajes de hombres y mujeres en un grupo de N

deportistas

Análisis del problema

Datos a considerar:

• Sexo de la persona (S)

• Número de personas del sexo masculino (CM)

• Número de personas del sexo femenino (CF)

• Total de deportistas (N)

• Porcentaje de hombres (PM)

• Porcentaje de mujeres (PF)

Page 14: Curso de Algoritmo Mas Ejercicios

Ejemplos de algoritmos (I.b.)

Datos de entrada:

• Total de deportistas (N)

• Sexo de la persona (S)

Datos de salida:

• Porcentaje de hombres (PM)

• Porcentaje de mujeres (PF)

Procesos:

• Contar la cantidad de personas del sexo masculino (CM = CM + 1)

• Contar la cantidad de personas del sexo femenino (CF = CF + 1)

• Calcular el porcentaje de hombres en el grupo (PM = CM/N*100)

• Calcular el porcentaje de mujeres en el grupo (PF = CF/N*100)

Continuamos con el

análisis del problema

Page 15: Curso de Algoritmo Mas Ejercicios

Ejemplos de algoritmos (I.c.)

Algoritmo:

1. Inicio

2. Inicializar en cero el total de personas del sexo masculino: CM ← 0

3. Inicializar en cero el total de personas del sexo femenino: CF ← 0

4. Inicializar en cero el total de personas procesadas: TP ← 0

5. Leer total de deportistas (N)

6. MIENTRAS TP < N

FIN-MIENTRAS

6.1 Leer sexo de la persona (S)

6.2 SI S =„M‟, entonces CM ← CM + 1

6.3 SI S = „F‟, entonces CF ← CF + 1

6.4 Incrementar en 1 el contador: TP ← TP + 1

Page 16: Curso de Algoritmo Mas Ejercicios

Ejemplos de algoritmos (I.d.)

Algoritmo (continuación):

7. Calcular porcentaje de hombres en el grupo: PM ← CM/N*100

8. Calcular porcentaje de mujeres en el grupo: PF ← CF/N*100

9. Escribir “Porcentaje de hombres en el grupo: ”, PM

10. Escribir “Porcentaje de mujeres en el grupo: ”, PF

11. Fin

En este algoritmo se puede apreciar el uso de las tres

estructuras de control de la programación estructurada:

• Estructura secuencial

• Estructura selectiva

• Estructura iterativa

Page 17: Curso de Algoritmo Mas Ejercicios

Ejemplos de algoritmos (II)

1. Cálculo de la media de N observaciones numéricas

2. Determinar si un número es primo dada una lista de N

números enteros

3. Cálculo del factorial de un número N

4. Retiro de efectivo en un cajero automático

5. Receta para preparar “spaghetti alla napoletana”

Definir en cada caso: entrada, procesos/operaciones y salida.

Escribir el algoritmo completo para todos los casos.

Page 18: Curso de Algoritmo Mas Ejercicios

Diseño de algoritmos (I)

Diseño del

algoritmo

Diseño

descendente RefinamientoRepresentación

gráfica

Page 19: Curso de Algoritmo Mas Ejercicios

Diseño de algoritmos (II)

Diseño descendente (I)

El diseño descendente (top down) es un procedimiento de

refinamiento iterativo de un problema, en el cual se parte del

mayor nivel de abstracción del problema (sistema o tarea) y

se prosigue hacia los niveles inferiores a través de un proceso

de descomposición del problema en subproblemas.

En el diseño descendente se parte de una visión estructural

del problema sin especificar detalles para ninguna de sus

partes componentes. Cada componente del sistema es

entonces refinado, mostrando más detalles en cada nivel de

refinamiento.

Page 20: Curso de Algoritmo Mas Ejercicios

Diseño de algoritmos (III)

Diseño descendente (II)

. . .

Problema

Subproblema Subproblema Subproblema Subproblema

Subproblema Subproblema Subproblema Subproblema SubproblemaSubproblema

Subproblema Subproblema

Page 21: Curso de Algoritmo Mas Ejercicios

Diseño de algoritmos (IV)

Diseño descendente (III)

El diseño descendente efectúa una relación entre las

sucesivas etapas de refinamiento, de forma tal que éstas se

relacionen unas con otras a través de los flujos de entrada y

de salida de información.

X YP

P1

P2

P3

P4X Y

U

V

P

Q

P31 P32 P33V QR S

Page 22: Curso de Algoritmo Mas Ejercicios

Diseño de algoritmos (V)

Diseño descendente (IV)

Ejemplo: el problema del cajero automático

Cajero

automático

Lectura y

validación

del NIP

Selección de

tipo de

cuenta

Selección de

tipo de

operación

Finalizar

Consulta de

saldo

Traspaso

entre cuentas

propias

Retiro de

efectivoPago de

servicios. . .

. . .

Page 23: Curso de Algoritmo Mas Ejercicios

Diseño de algoritmos (VI)

Refinamiento del algoritmo (I)

Comúnmente, la primera versión de un algoritmo no

constituye una versión completa ni específica del mismo. El

refinamiento del algoritmo se refiere a la conversión del

primer esbozo/versión del algoritmo en una versión más

detallada y completa, haciendo los pasos del algoritmo más

específicos. Este proceso conduce a la obtención de un

algoritmo claro, preciso y completo.

Page 24: Curso de Algoritmo Mas Ejercicios

Diseño de algoritmos (VII)

Refinamiento del algoritmo (II)

1. Inicio

2. Leer cantidad de estudiantes

3. Leer edad y peso de los estudiantes

4. Calcular las medias de la edad y del peso

5. Escribir resultados

Algoritmo para el cálculo de la media de la edad y peso de un grupo de

estudiantes (primer esbozo)

Page 25: Curso de Algoritmo Mas Ejercicios

Diseño de algoritmos (VIII)

Refinamiento del algoritmo (III)

1. Inicio

2. Leer cantidad de estudiantes (N)

3. NE ← 0, SE ← 0, SP ← 0

4. MIENTRAS NE < N

4.1 Leer edad y peso del estudiante (E, P)

4.2 SE ← SE + E

4.3 SP ← SP + P

4.4 Incrementar el contador: NE ← NE + 1

FIN-MIENTRAS

Algoritmo para el cálculo de la media de la edad y peso de un grupo de

estudiantes (versión refinada)

Page 26: Curso de Algoritmo Mas Ejercicios

Diseño de algoritmos (IX)

Refinamiento del algoritmo (IV)

5. Calcular la media de la edad: ME ← SE/N

6. Calcular la media del peso: MP ← SP/N

7. Escribir “La edad promedio es: ”, ME

8. Escribir “El peso promedio es: ”, MP

9. Fin

Algoritmo para el cálculo de la media y desviación estándar de la edad y

peso de un grupo de estudiantes (versión refinada)

Page 27: Curso de Algoritmo Mas Ejercicios

Diseño de algoritmos (X)

Especificación y representación gráfica del

algoritmo

• Pseudocódigo

• Diagramas de flujo

• Diagramas de Nassi-Schneiderman (N-S)

Page 28: Curso de Algoritmo Mas Ejercicios

Diseño de algoritmos (XI)

Especificación del algoritmo: pseudocódigo (I)

El pseudocódigo es un lenguaje de especificación de

algoritmos, comúnmente con una sintaxis para las estructuras

de control similar a la expresada en el lenguaje de

programación al que será traducido el algoritmo. Cuando un

algoritmo es expresado en pseudocódigo, entonces la

traducción de éste al lenguaje de programación seleccionado

resultará relativamente fácil.

AlgoritmoEspecificación

en

pseudocódigo

Programa

Page 29: Curso de Algoritmo Mas Ejercicios

Diseño de algoritmos (XII)

Especificación del algoritmo: pseudocódigo (II)

Las acciones y las estructuras de control se representan en el

pseudocódigo con palabras reservadas del inglés, similares a las utilizadas

en los lenguajes de programación estructurada. Entre estas palabras

reservadas, las más usadas son:

start

read

write

If-then-else

while-end

repeat-until

end

Comúnmente, la

escritura del

pseudocódigo

requiere el uso de la

indentación de las

diferentes líneas

Page 30: Curso de Algoritmo Mas Ejercicios

Diseño de algoritmos (XIII)

Especificación del algoritmo: pseudocódigo (III)

Begin

read N

NE ← 0

SE ← 0

SP ← 0

while NE < N

read E, P

SE ← SE + E

SP ← SP + P

NE ← NE + 1

end while

Algoritmo para el

cálculo de la media y

desviación estándar

de la edad y peso de

un grupo de

estudiantes (versión

en pseudocódigo)

Page 31: Curso de Algoritmo Mas Ejercicios

Diseño de algoritmos (XIV)

Especificación del algoritmo: pseudocódigo (IV)

ME ← SE/N

MP ← SP/N

write “La edad promedio es: ”, ME

write “El peso promedio es: ”, MP

end

Cuando se usa el

pseudocódigo como

lenguaje de

especificación de un

algoritmo, el

programador puede

concentrarse en la

lógica y en las

estructuras de control

sin preocuparse por

la sintaxis y reglas

del lenguaje de

programación.

Page 32: Curso de Algoritmo Mas Ejercicios

Diseño de algoritmos (XV)

Representación gráfica del algoritmo:

diagramas de flujo (I)Un diagrama de flujo (flowchart, del inglés) es una técnica de

representación gráfica de la lógica o pasos de un algoritmo. El diagrama

de flujo consiste de un conjunto de símbolos (tales como rectángulos,

paralelogramos, rombos, etc.) y flechas que conectan estos símbolos.

Los símbolos representan las diferentes acciones que se pueden

ejecutar en un algoritmo (lectura, asignación, decisión, escritura, etc.),

mientras que las flechas muestran la progresión paso a paso a través

del algoritmo.

Con la aparición de los lenguajes de programación estructurada el uso

de los diagramas de flujo ha disminuído considerablemente, dando paso

a otras técnicas de representación (como por ejemplo, diagramas N-S,

tablas procesos-entidades, diagramas estructurales, diagramas de

burbujas, etc. ) que capturan en un modo más adecuado la esencia y

principios de la programación estructurada.

Page 33: Curso de Algoritmo Mas Ejercicios

Diseño de algoritmos (XVI)

Representación gráfica del algoritmo:

diagramas de flujo (II)

Símbolo Representación Significado

Flechas o líneas de flujo Indica el sentido de

ejecución de las acciones

Rectángulo Proceso o acción a realizar

(por ejemplo, asignación)

Paralelogramo Representa una entrada o

salida

Rombo Representa el constructor de

selección (decisión lógica)

Rectángulo redondeado Representa el inicio y fin del

diagrama

Círculo Se usa como conector entre

dos partes del diagrama

Page 34: Curso de Algoritmo Mas Ejercicios

Diseño de algoritmos (XVII)

Representación gráfica del algoritmo:

diagramas de flujo (III)1. Inicio

2. Leer cantidad de estudiantes (N)

3. NE <- 0, SE <- 0, SP <- 0

4. MIENTRAS NE < N

4.1 Leer edad y peso del estudiante (E, P)

4.2 SE <- SE + E

4.3 SP <- SP + P

4.4 Incrementar el contador: NE <- NE + 1

FIN-MIENTRAS

5. Calcular la media de la edad: ME <- SE/N

6. Calcular la media del peso: MP <- SP/N

7. Escribir “La edad promedio es: ”, ME

8. Escribir “El peso promedio es: ”, MP

9. Fin

Inicio

Leer N

NE <- 0

SE <- 0

SP <- 0

1

Page 35: Curso de Algoritmo Mas Ejercicios

Diseño de algoritmos (XVIII)

Continuación (IV)

1. Inicio

2. Leer cantidad de estudiantes (N)

3. NE <- 0, SE <- 0, SP <- 0

4. MIENTRAS NE < N

4.1 Leer edad y peso del estudiante (E, P)

4.2 SE <- SE + E

4.3 SP <- SP + P

4.4 Incrementar el contador: NE <- NE + 1

FIN-MIENTRAS

5. Calcular la media de la edad: ME <- SE/N

6. Calcular la media del peso: MP <- SP/N

7. Escribir “La edad promedio es: ”, ME

8. Escribir “El peso promedio es: ”, MP

9. Fin Fin

Leer E, P

SE <- SE+E

SP <- SP+P

NE <- NE+1

1

NE <NSi

No

ME <- SE/N

MP <- SP/N

Escribir

ME, MP

Page 36: Curso de Algoritmo Mas Ejercicios

Diseño de algoritmos (XIX)

Representación gráfica del algoritmo:

diagramas de Nassi-Schneiderman (N-S) (I)

El diagrama de Nassi-Schneiderman (N-S) (también conocido como

diagrama de Chapin) es una técnica de representación gráfica de

algoritmos que combina la especificación en pseudocódigo con la

representación gráfica del diagrama de flujo.

Cuando se usa el diagrama N-S un algoritmo es representado con un

rectángulo dividido en franjas o bandas horizontales, donde cada banda

representa una acción a realizar.

La especificación de los pasos del algoritmo se hace utilizando las

palabras reservadas ya vistas en el pseudocódigo, mientras que los

símbolos utilizados en el diagrama corresponden a cada tipo de

estructura de control: secuencia, selección, iteración.

Page 37: Curso de Algoritmo Mas Ejercicios

Diseño de algoritmos (XX)

Representación gráfica del algoritmo:

diagramas de Nassi-Schneiderman (N-S) (II)

Begin

End

<acción 1>

<acción 2>

<acción 3>

. . .

Begin

read

write

If-then-else

while-end

repeat-until

end

Representación gráfica N-S de un algoritmo Palabras reservadas

comúnmente usadas en la

especificación de las acciones

(pueden ser también usadas

en español)

Page 38: Curso de Algoritmo Mas Ejercicios

Diseño de algoritmos (XXI)

Representación gráfica del algoritmo:

diagramas de Nassi-Schneiderman (N-S) (III)

Representación de la estructura de control secuencial

Declaración de variables

tipo : nombre_variable

Ejemplos:

entero: edad

real: edadPromedio,

pesoPromedio

caracter: sexo

cadena: deporte

Asignación

Variable = expresion

Ejemplos:

edadPromedio = sumaEdad/N

pesoPromedio = sumaPeso/N

sexo = „M‟

Deporte = “atletismo”

Page 39: Curso de Algoritmo Mas Ejercicios

Diseño de algoritmos (XXII)

Representación gráfica del algoritmo:

diagramas de Nassi-Schneiderman (N-S) (IV)

Representación de la estructura de control secuencial

Instrucción leer

leer <lista de identificadores de variables>

Ejemplos:

leer edad, peso

leer deporte

Instrucción escribir

escribir <lista de variables y constantes>

Ejemplos:

escribir edadPromedio, pesoPromedio

escribir deporte

Page 40: Curso de Algoritmo Mas Ejercicios

Diseño de algoritmos (XXIII)

Representación gráfica del algoritmo:

diagramas de Nassi-Schneiderman (N-S) (V)

Inicio

Escribir “área: ”, ar

real: b, a, ar, pe

Leer b, a

ar = b*a

pe = 2(b + a)

Escribir “perímetro: ”, pe

Fin

1. Inicio

2. Leer base y altura (b, a)

3. ar ← b*a

4. pe ← 2*(b + a)

5. Escribir “Área: ”, ar

6. Escribir “Perímetro: ”, pe

7. Fin

Diagrama N-SAlgoritmo para calcular el área y

perímetro de un rectángulo

Page 41: Curso de Algoritmo Mas Ejercicios

Diseño de algoritmos (XXIV)

Representación gráfica del algoritmo:

diagramas de Nassi-Schneiderman (N-S) (VI)Representación de la estructura de control condicional

condición

Sí No

<acciones> <acciones>

Algoritmo Diagrama N-S

si <condición> entonces

<acción 1>

si_no

<acción 2>

selector

otro 1 2 3 . . . n Estructura

de control

condicional

CASE

Page 42: Curso de Algoritmo Mas Ejercicios

Diseño de algoritmos (XXV)

Representación gráfica del algoritmo:

diagramas de Nassi-Schneiderman (N-S) (VII)

Representación de la estructura de control condicional

S = „M‟

Sí No

CM = CM + 1 CF = CF + 1

Leer sexo de la persona (S)

SI S =„M‟, entonces CM ← CM + 1

SI S = „F‟, entonces CF ← CF + 1

Incrementar el contador: TP ← TP + 1

AlgoritmoDiagrama N-S

Page 43: Curso de Algoritmo Mas Ejercicios

Diseño de algoritmos (XXVI)

Representación gráfica del algoritmo:

diagramas de Nassi-Schneiderman (N-S) (VIII)

Representación de la estructura de control de iteración

Representación en el diagrama N-S

de la estructura MIENTRAS

Representación en el diagrama N-S

de la estructura REPITE-HASTA

Mientras (condición)

<acciones que se repiten>

HASTA (condición)

<acciones que se repiten>

Page 44: Curso de Algoritmo Mas Ejercicios

Diseño de algoritmos (XXVII)

Representación gráfica del algoritmo:

diagramas de Nassi-Schneiderman (N-S) (IX)

Representación de la estructura de control de iteración

Representación en el diagrama N-S

de la estructura PARA

Para Contador ← valor_inicial hasta valor_final

hacer

<acciones que se repiten>

Page 45: Curso de Algoritmo Mas Ejercicios

Diseño de algoritmos (XXVIII)

Representación gráfica del algoritmo:

diagramas de Nassi-Schneiderman (N-S) (X)

start

read N

NE ← 0

SE ← 0

SP ← 0

while NE < N

read E, P

SE ← SE + E

SP ← SP + P

NE ← NE + 1

end while

Inicio

real: SE, SP

entero: NE

Mientras NE <N

leer E, P

SE = SE + E

SP = SP + P

NE = NE + 1

NE = 0

SE = 0

SP = 0

Page 46: Curso de Algoritmo Mas Ejercicios

Diseño de algoritmos (XXIX)

Representación gráfica del algoritmo:

diagramas de Nassi-Schneiderman (N-S) (XI)

ME = SE/N

MP = SP/N

Escribir “Edad promedio”, ME

Escribir “Peso promedio”, MP

ME <- SE/N

MP <- SP/N

write “Edad promedio: ”, ME

write “Peso promedio: ”, MP

endFin

Lo que hemos hecho en estas últimas dos transparencias

ha sido la especificación en un diagrama N-S del

algoritmo para el cálculo de la edad promedio y peso

promedio de un grupo de N personas

Page 47: Curso de Algoritmo Mas Ejercicios

De los algoritmos a los programas

• Elementos, estructura y funcionamiento de un

sistema de cómputo

• Lenguajes de programación: niveles, sintaxis y

semántica

• Estrategias de contrucción de programas

Page 48: Curso de Algoritmo Mas Ejercicios

Elementos, estructura y funcionamiento de

un sistema de cómputo (I)

CPU

Unidad Central de Proceso

CU

Unidad de control

ALU

Unidad

lógico-aritmética

RAM

Memoria

Dispositivos

de entrada

Dispositivos

de salida

Memoria externa

(almacenamiento

permanente)

Organización física de una computadora

Page 49: Curso de Algoritmo Mas Ejercicios

Elementos, estructura y funcionamiento de

un sistema de cómputo (II)

Funcionamiento de una computadora (I)

La unidad central de proceso (del inglés, CPU) es el “cerebro” de la

computadora. La CPU dirige y controla el proceso de información efectuado

por la computadora, es la unidad donde se ejecutan las instrucciones de los

programas y donde se controla el funcionamiento de los distintos

componentes de la computadora. La CPU procesa información almacenada

en la memoria, puede recuperar información desde la memoria (datos o

programas) y almacenar nueva información o información procesada en la

memoria. La CPU está compuesta por dos componentes: la unidad de

control (CU) y la unidad lógico-aritmética (ALU)

La unidad central de proceso (del inglés, CPU)

Page 50: Curso de Algoritmo Mas Ejercicios

Elementos, estructura y funcionamiento de

un sistema de cómputo (III)

Funcionamiento de una computadora (II)

Como su nombre lo indica, la unidad lógico-aritmética es la encargada de

realizar operaciones artiméticas y lógicas (suma, resta, multiplicación,

división y comparaciones) sobre datos que provienen de la memoria

principal (RAM).

La unidad lógico-aritmética (ALU)

La unidad de control (CU) dirige y coordina las actividades de la

computadora, determina la secuencia de operaciones a realizar, interpreta

instrucciones codificadas, controla las funciones de decodificación,

ejecución y almacenamiento. Esta unidad controla y sincroniza todo el

proceso que tiene lugar en la computadora.

La unidad de control (CU)

Page 51: Curso de Algoritmo Mas Ejercicios

Elementos, estructura y funcionamiento de

un sistema de cómputo (IV)

Funcionamiento de una computadora (III)

El papel de la memoria central (memoria RAM, Random Access Memory) es

el almacenamiento de información: datos y programas. Para que un

programa se pueda ejecutar, debe ser almacenado en la memoria central

(carga o load del programa). También los datos que serán usados por el

programa durante su ejecución deben ser situados en la memoria. Es decir,

la memoria RAM se usa para mantener los programas mientras se están

ejecutando y los datos mientras se están procesando.

La memoria central (RAM)

Memoria

central

Memoria

cachéProcesador

Page 52: Curso de Algoritmo Mas Ejercicios

Elementos, estructura y funcionamiento de

un sistema de cómputo (V)

Funcionamiento de una computadora (IV)

Los dispositivos de entrada/salida establecen la comunicación entre la

computadora y el usuario. Los dispositivos de entrada (teclado, mouse,

unidad CD-ROM, unidad DVD, escaner, cámara, etc.) permiten la

introducción de datos y programas en la computadora para su

procesamiento. Una vez que los datos son leídos de los dispositivos de

entrada, éstos son almacenados en la memoria central para su

procesamiento. Los dispositivos de salida (pantalla, impresora, etc.)

permiten representar/visualizar el resultado de la ejecución de los

programas.

Dispositivos de entrada/salida

Page 53: Curso de Algoritmo Mas Ejercicios

Elementos, estructura y funcionamiento de

un sistema de cómputo (VI)

Funcionamiento de una computadora (V)

La memoria externa es un medio de almacenamiento permanente tanto para

programas como para datos. Entre los dispositivos de almacenamiento (o

memorias auxiliares) más comúnmente utilizados se encuentran:

La memoria externa

• El disco duro

• Disquetes magnéticos

• Unidad CD-ROM

• Unidad DVD

• Memoria USB

Page 54: Curso de Algoritmo Mas Ejercicios

Elementos, estructura y funcionamiento de

un sistema de cómputo (VII)

El microprocesador

El microprocesador es un chip, un circuito integrado electrónico que es

utilizado como unidad central de proceso en una computadora. Las

funciones del microprocesador son el cálculo y control computacional.

Memoria centralUnidad de

control

Unidad lógico-

aritmética

Microprocesador

Page 55: Curso de Algoritmo Mas Ejercicios

Lenguajes de programación: niveles,

sintaxis y semántica (I)

Niveles de lenguajes de programación (I)

Lenguajes de máquina

Lenguajes

ensambladores

Lenguajes de alto nivel

Lenguajes declarativos

Page 56: Curso de Algoritmo Mas Ejercicios

Lenguajes de programación: niveles,

sintaxis y semántica (II)

Niveles de lenguajes de programación (II)

Fue el primer lenguaje utilizado en la programación de computadoras.

Constituye la capa más interna en los niveles de lenguaje en la

computación. Se podría decir que el lenguaje de máquina es el único que

entiende directamente la computadora. Este lenguaje se expresa a través

del alfabeto binario, el cual consta solo de los símbolos 0 y 1. El lenguaje de

máquina es dependiente de la computadora.

Lenguajes de máquina

El lenguaje ensamblador es una representación simbólica del lenguaje de

máquina asociado. Es decir, cada computadora tiene un lenguaje

ensamblador propio. El lenguaje ensamblador usa palabras nemotécnicas

para representar cada instrucción (cadenas de bits) del lenguaje de

máquina asociado.

Lenguajes ensambladores

Page 57: Curso de Algoritmo Mas Ejercicios

Lenguajes de programación: niveles,

sintaxis y semántica (III)

Niveles de lenguajes de programación (III)

Constituyen los lenguajes de programación más utilizados. Son lenguajes

independientes de la computadora. Un programa escrito en lenguaje de alto

nivel puede ser ejecutado en cualquier computadora, siempre que ésta

disponga del traductor o compilador del lenguaje en cuestión. Los

programas pueden ser escritos y comprendidos de una forma más sencilla,

dada la aproximación de estos lenguajes con el lenguaje natural. Se

caracterizan por proporcionar librerías de uso frecuente (entrada/salida,

funciones matemáticas, manejo de cadenas, etc.). Ejemplos de estos

lenguajes son: Pascal, Fortran, C, C++, Java, Ada, Lisp y Prolog.

Lenguajes de alto nivel

Son aquellos lenguajes en los que se indica a la computadora qué es lo que

debe hacer, qué es lo que se desea obtener o qué es lo que se está

buscando. Son comúnmente lenguajes de órdenes, donde se expresa lo

que hay que hacer en lugar de cómo hacerlo. Ejemplos de lenguajes

declarativos son SQL y Prolog.

Lenguajes declarativos

Page 58: Curso de Algoritmo Mas Ejercicios

Lenguajes de programación: niveles,

sintaxis y semántica (IV)

Lenguaje de programación =

Léxico + Sintaxis + Semántica

Page 59: Curso de Algoritmo Mas Ejercicios

Lenguajes de programación: niveles,

sintaxis y semántica (V)

Aspectos a considerar en el diseño e implementación de los

lenguajes de programación (I)

• Léxico

• Sintaxis

• Semántica

• Gestión de memoria

• Manejo de excepciones

• Implementación

• Pragmática

Page 60: Curso de Algoritmo Mas Ejercicios

Lenguajes de programación: niveles,

sintaxis y semántica (VI)

Aspectos a considerar en el diseño e implementación de los

lenguajes de programación (II)

Léxico

Es el conjunto de categorías gramaticales que definen el vocabulario del

lenguaje de programación. Comúnmente, el léxico de un lenguaje de

programación posee las siguientes categorías gramaticales:

• Identifier (nombre de variables, nombre de constantes, nombre de funciones, etc.)

• Literal (números enteros y decimales)

• Operator (+, -, *, /. etc.)

• Separator (; . , etc.)

• Keyword (while, read, write, if, for, case, int, real, etc.)

Page 61: Curso de Algoritmo Mas Ejercicios

Lenguajes de programación: niveles,

sintaxis y semántica (VII)

Aspectos a considerar en el diseño e implementación de los

lenguajes de programación (III)

La sintaxis de un lenguaje de programación es la definición gramatical de

lo que constituye un programa en dicho lenguaje. La sintaxis se especifica

en términos de un conjunto de reglas que rigen la construcción de los

programas. La definición de la sintaxis de un lenguaje de programación

debe ser clara, concisa y formal. La sintaxis del lenguaje de programación

se describe a partir de otros lenguajes, llamados metalenguajes. Uno de

los metalenguajes más difundidos es el formalismo BNF (Backus-Naur

Form), una gramática libre de contexto.

Sintaxis

Page 62: Curso de Algoritmo Mas Ejercicios

Lenguajes de programación: niveles,

sintaxis y semántica (VIII)

Aspectos a considerar en el diseño e implementación de los

lenguajes de programación (IV)

Se refiere al significado de los programas. Es el conjunto de reglas que

permiten determinar el significado de cualquier construcción del lenguaje.

La semántica asocia un significado a cada posible construcción gramatical

del lenguaje.

Semántica

La gestión de memoria se refiere al proceso de asignar valores a la

memoria, considerando tanto las características estáticas como dinámicas

de dichos valores. Los valores pueden ser asignados a una de tres

categorías de memoria: memoria estática, la pila en tiempo de ejecución y

el montículo.

Gestión de memoria

Page 63: Curso de Algoritmo Mas Ejercicios

Lenguajes de programación: niveles,

sintaxis y semántica (IX)

Aspectos a considerar en el diseño e implementación de los

lenguajes de programación (V)

Una excepción es una condición detectada por una operación la cual no se

puede resolver en el contexto de la operación. Dos procesos básicos se

asocian al manejo de excepciones: (1) lanzamiento de la excepción y (2)

captura de la excepción. El lanzamiento de una excepción es señalar que

se ha producido una excepción, mientras que la captura de la excepción

consiste en proporcionar una forma de manipular dicha excepción,

transfiriéndose el control del programa al manipulador de la excepción.

Manejo de excepciones

Page 64: Curso de Algoritmo Mas Ejercicios

Lenguajes de programación: niveles,

sintaxis y semántica (X)

Aspectos a considerar en el diseño e implementación de los

lenguajes de programación (VI)

Cómo se ejecutan los programas.

Implementación

Se refiere a los aspectos prácticos del uso de los programas.

Pragmática

Page 65: Curso de Algoritmo Mas Ejercicios

Lenguajes de programación: niveles, sintaxis

y semántica (XI)

Contexto en el

que se ubican

los lenguajes de

programación

Lenguaje natural

Aplicación

Lenguaje de programación

Compilador/Intérprete

Máquina virtual

Sistema operativo

Lenguaje

de máquina

Page 66: Curso de Algoritmo Mas Ejercicios

Lenguajes de programación: traductores de

lenguajes (I)

Traductores de

lenguaje

Intérpretes Compiladores

Un traductor de lenguaje es un programa que traduce a código de

máquina un programa fuente escrito en un lenguaje de alto nivel.

Page 67: Curso de Algoritmo Mas Ejercicios

Lenguajes de programación: traductores de

lenguajes (II)

Intérpretes

Un intérprete es un traductor que recibe como entrada un programa fuente,

lo traduce y lo ejecuta. Un intérprete traduce y ejecuta una instrucción en

código fuente, a la vez. Los programas interpretados generalmente son

más lentos en ejecución que los programas compilados.

Programa fuente Intérprete

Traducción y

ejecución línea

a línea

Page 68: Curso de Algoritmo Mas Ejercicios

Lenguajes de programación: traductores de

lenguajes (III)

Compiladores

Un compilador traduce un programa fuente escrito en lenguaje de alto

nivel al lenguaje de máquina de la computadora. El programa traducido a

lenguaje de máquina es almacenado como código objeto.

Programa fuente Compilador Programa objeto

Page 69: Curso de Algoritmo Mas Ejercicios

Lenguajes de programación: traductores de

lenguajes (IV)

Fases de la compilación de un programa

Programa

fuente CompiladorPrograma

objeto Linker

Programa

ejecutable

en lenguaje

de máquina

Analizador

léxico

Analizador

sintáctico

Analizador

semántico

Generador

de código

intermedio

Optimizador

de código

Generador

de código

objeto

Page 70: Curso de Algoritmo Mas Ejercicios

Paradigmas de programación (I)

• Programación imperativa

• Programación funcional

• Programación lógica

• Programación orientada a objetos

• Programación concurrente

• Programación guiada por eventos

Page 71: Curso de Algoritmo Mas Ejercicios

Paradigmas de programación (II)

El programa se define como una serie de acciones o pasos, cada uno de

los cuales recibe una entrada, ejecuta un cálculo, o produce como

resultado una salida. La programación imperativa se basa en la asignación

de valores, en la utilización de variables para almacenar valores y en la

realización de operaciones con estos valores almacenados. Ejemplos de

lenguajes de programación imperativa son los lenguajes de alto nivel

(Fortran, C, Pascal, etc.) y los lenguajes ensambladores.

Programación imperativa

Los programas están formados por una colección de definiciones de

funciones. Las funciones interactúan entre sí utilizando condicionales,

recursividad y composición funcional. Ejemplos de lenguajes de

programación funcional son Lisp y Scheme.

Programación funcional

Page 72: Curso de Algoritmo Mas Ejercicios

Paradigmas de programación (III)

Un lenguaje de programación lógica es un tipo de lenguaje declarativo, en

el cual el programa está formado por un conjunto de declaraciones lógicas

(predicados, hechos). La ejecución de un programa consiste en aplicar

estas declaraciones para obtener todas las soluciones posibles a un

problema. El ejemplo clásico de lenguaje de programación lógica es

Prolog.

Programación lógica

El programa es una colección de objetos que interactúan entre sí a través

del paso de mensajes, los cuales comúnmente transforman el estado de

los objetos. Ejemplos de lenguajes orientados a objetos son Smalltalk,

C++, Eiffel y Java.

Programación orientada a objetos

Page 73: Curso de Algoritmo Mas Ejercicios

Paradigmas de programación (IV)

La programación se basa en la ejecución simultánea de procesos, ya sea

en una misma computadora con uno o varios procesadores, que en un

cluster de computadoras. El programa se define como una colección de

procesos cooperativos y asíncronos. Ejemplos de lenguajes concurrentes

son Linda y Fortran de alto rendimiento.

Programación concurrente

El programa responde a eventos externos generados en un orden no

predecible. Los eventos comúnmente se generan a partir de acciones del

usuario en la pantalla (por ejemplo, clics del mouse o pulsaciones de

teclas), pudiendo existir también otras fuentes generadoras de eventos.

Ejemplos de lenguajes de programación guida por eventos son Visual

Basic y Java.

Programación guiada por eventos

Page 74: Curso de Algoritmo Mas Ejercicios

Estrategias de construcción de

programas (I)

Fases de construcción de un programa

Descripción

y análisis del

problema

Diseño del

algoritmo

Codificación

del programa

Ejecución del

programa

Validación del

programa

Page 75: Curso de Algoritmo Mas Ejercicios

Estrategias de construcción de

programas (II)

Programación modular (I)

La filosofía subyacente de la programación modular es la descomposición

del programa en módulos independientes, cada uno de los cuales ejecuta

una única actividad o función. Cada módulo se analiza, se diseña, se

codifica y se verifica por separado. El programa es una jerarquía de

módulos, con un módulo principal (también llamado programa principal) con

una función de controlador. El módulo principal transfiere el control a los

módulos inmediatamente subordinados (o subprogramas), de modo que

éstos puedan ejecutar sus funciones. Una véz que el módulo subordinado

haya completado su tarea, devolverá nuevamente el control al módulo

controlador.

La descomposición de un módulo en submódulos continúa hasta que se

llegue a un punto en que el módulo resultante tenga sólo una tarea

específica que ejecutar (lectura, salida de resultados, procesamiento de

datos o control de otros módulos).

Page 76: Curso de Algoritmo Mas Ejercicios

Estrategias de construcción de

programas (III)

Programación modular (II)

. . .

Módulo

principal

Módulo 1 Módulo 2 Módulo 3 Módulo N

Módulo 12 Módulo 31 Módulo 32 Módulo N1 Módulo N2Módulo 11

Módulo 311 Módulo 312

Page 77: Curso de Algoritmo Mas Ejercicios

Estrategias de construcción de

programas (IV)

Programación modular (III)

Ejemplo de descomposición de un programa en módulos:

programa para el cálculo de estadísticas descriptivas

Cálculo de

estadísticas

Lectura de

datos

Cálculo de

medidas de

tendencia

central

Cálculo de

medidas de

dispersión

Generación de

tablas

resumen

Generación de

gráficos

Page 78: Curso de Algoritmo Mas Ejercicios

Estrategias de construcción de

programas (V)

Programación estructurada (programación sin goto)

La programación estructurada es un conjunto de técnicas que

incorporan:

Diseño modular

Diseño descendente (top-down)

Estructuras de control básico:

secuencia, selección e iteración