Computación I: Fundamentoszeus.inf.ucv.cl/~jrubio/docs/2010-2/CCA 2551/Unidad 3.pdf · de 5....

78
Computación I: Fundamentos Unidad III-Fundamentos de la Programación de Computadores 2º Semestre, 2010 M.Eng. José Miguel Rubio L. [email protected]

Transcript of Computación I: Fundamentoszeus.inf.ucv.cl/~jrubio/docs/2010-2/CCA 2551/Unidad 3.pdf · de 5....

Computación I: FundamentosUnidad III-Fundamentos de la Programación de Computadores

2º Semestre, 2010M.Eng. José Miguel Rubio [email protected]

Sección 1.- Algoritmos y Programas

El objetivo de esta sección consistirá en explicar los conceptos de algoritmo, programa y lenguaje de programación. Así como explorar otros temas concurrentes.

• Sistemas de procesamiento de información.

• Concepto de Algoritmo.

• Lenguaje de programación.

• Datos, tipos de datos y operaciones primitivas.

• Constantes y variables.

• Expresiones.

• Funciones intrínsecas.

• Asignación.

• Entrada y salida de información.

Temáticas

Un sistema de esta clase se define como un conjunto de componentes interconectados entre sí que transforman datos en información organizada, significativa y útil.

1.1- Sistemas de Procesamiento de Información

Esquemáticamente

Datos

Procesador

Información

Una primera definición

Un algoritmo consiste en el grupo de instrucciones que definen la secuencia de operaciones a realizar para resolver un sistema específico o clase de problema.

Concepto de Algoritmo

La metodología de la programación es aquella que es necesaria para resolver problemas mediante programas, su eje es el algoritmo.

Problema

Diseño

del

algoritmo

Programa

Pasos para la solución de un problema

• El diseño del algoritmo describe el análisis del problema y desarrollo del algoritmo.

• Expresar el algoritmo como un programa en un lenguaje de programación.

• Ejecutar y validar el programa por la computadora.

Características de los algoritmos

• Preciso, indicará el orden de cada paso.

• Definido, el mismo resultado se obtendrá al ejecutar el algoritmo “n” ocasiones.

• Finito, deberá terminar en algún momento.

Ejemplo Algoritmo que soluciona la entrega de un pedido a un cliente.

1. Inicio.

2. Leer el pedido.

3. Examinar el historial crediticio del cliente

4. Si el cliente es solvente, entregar el pedido. En caso contrario, rechazarlo.

5. Fin

Ejemplo Algoritmo que suma los números entre el 3 y el 30, en incrementos de 3.

1. Inicio.

2. Hacer SUMA igual cero.

3. Establecer NUMERO igual a 3.

4. Sumar NUMERO a SUMA.

5. Incrementar NUMERO en 3

6. Si NUMERO es menor o igual que 30 ir a 4; si no imprimir a SUMA.

7. Fin

Ejemplo Algoritmo que determina el mayor de tres números enteros.

1. Inicio

2. Leer los números y guardarlos en NUM1, NUM2 y NUM3 respectivamente

3. Comparar NUM1 y NUM2, el número mayor se guarda en AUX.

4. Comparar AUX y NUM3, imprimir el número mayor.

5. Fin.

1. Diseñe un algoritmo para determinar si un número es primo o no.

2. Diseñe un algoritmo que sume los números entre el 2 y el 20, en incrementos de 2.

3. Indique las modificaciones necesarias para el algoritmo 2 de tal manera que sume los números entre el 5 y el 50, en incrementos de 5.

Ejercicios

1.2 Los lenguajes de Programación

• Cuando el procesador de datos es una computadora entonces el algoritmo de solución se expresa en un programa.

• Por tanto, un programa es escrito en un lenguaje de programación.

• Luego, la programación consiste en expresar las operaciones en forma de programa de un algoritmo.

Tipos de lenguajes

• Máquina; escritos en código binario.

• Bajo nivel (ensamblador); escrito en nemotécnicos.

• Alto nivel; diseñados para ser entendidos por el ser humano.

Instrucciones básicas

• Entrada/Salida; transferencia de información entre dispositivos periféricos y memoria central.

• Aritmético/Lógicas; ejecutan operaciones de éstos tipos.

• Selectivas; seleccionan tareas en función de los resultados.

• Repetitivas; permiten la iteración de secuencias de instrucciones un número dado de veces.

Traductores del Lenguaje

A) Intérpretes; Toma un programa fuente

lo traduce e inmediatamente lo ejecuta.

Programa fuente IntérpreteTraducción

y ejecución

en línea

B) Compiladores; traduce un programa

fuente a código objeto.

Programa

fuente

Programa

Objeto

Programa

ejecutable

Compilador

(Compiler)

Montador

(Linker)

Traductores del Lenguaje

1.3 Datos, Tipos de Datos y Operaciones Primitivas• Un dato es la expresión general que describe

los objetos con los cuales opera la computadora.

• Los tipos son: simples (no estructurados) y compuestos (estructurados). Aquellos se subdividen en:a) Numéricos (integer, real)

b) Lógicos (booleans)

c) Carácter (char, string)

Datos primitivos

Datos

CarácterNumérico Lógico

Entero Real

1.4. Constantes y Variables

• Constantes: valores que durante la ejecución de un programa no cambian su valor.

• Variables: valores que cambiarán durante la ejecución del programa.

1.5. Expresiones

• Se definen como una combinación de constantes, variables, símbolos de operación, paréntesis, y nombres de funciones especiales.

• Una expresión consta de operandos y operadores.

• Las expresiones se clasifican en aritméticas, lógicas y carácter.

Expresiones aritméticas

EnteroEnteroMódulo o resto%

EnteroEnteroDivisión enteraDiv

RealReal División/

Entero o realEntero o realMultiplicación*

Entero o realEntero o realResta-

Entero o realEntero o realSuma+

Entero o realEntero o realExponenciación^

Tipo resultadoTipo de operandosSignificadoOperador

Reglas de prioridad

( )Parentesis

+, -Más y menos

Div, % Div y Mod

*, /Multi, divide

**Exponencial

GrafoOperador

Operadores de relación

Menor<

Distinto<>,!=

Mayor o igual>=

Menor o igual<=

Igual=

Mayor>

SignificadoOperador

Expresión 2Operador de relación

Expresión 1

Operadores lógicos

disyunciónP o QOr

ConjunciónP y QAnd

NegaciónNot pNot

SignificadoExpresión lógicaOperador lógico

Funciones Intrínsecas

TruncamientoTrunc(x)

Raíz cuadradaSqrt(x)

CuadradoSqr(x)

SenoSin(x)

RedondeoRound(x)

Log decimalLog10(x)

Log neperianoLn(x)

ExponencialExp(x)

CosenoCos(x)

Tangente inversaArctan(x)

AbsolutoAbs(x)

DescripciónFunción

Operación de Asignación

Es la forma de darle valores tanto a

variables como constantes, se representa con el símbolo = o →.

Tipos de Asignación

a) Aritmética

b) Lógica

c) Cadena de caracteres

Entrada y salida de información

• La operación de lectura READ/LEER permite el ingreso de los datos necesarios para los cálculos computacionales.

• La operación de escritura WRITE/ESCRIBIR imprime la información procesada por el programa y su respectivo algoritmo.

2.- Resolución de Problemas con Computadoras

El objetivo de esta sección es exponer los conocimientos indispensables para el aprendizaje de la programación.

19/10/2010 32

Temáticas

• Solución de problemas

• Análisis de problemas

• Diseño del algoritmos

• Solución de problemas mediante computadora

• Representación grafica de algoritmos

• Pseudo-código

19/10/2010 33

2.1- Solución de Problemas

Motivación:

• Problemas “Humanos”:

http://www.youtube.com/watch?v=RfeGP9QqcVI.

• Como comenzar:

http://www.youtube.com/watch?v=jLJZCU7LmqM&feature=related.

19/10/2010 34

2.1- Solución de Problemas

Fases de fragmentación:

• Análisis del problema: definición concisa a fin de que sea analizado en todo detalle.

• Diseño del algoritmo: procedimiento, paso a paso, para la solucionar el problema dado.

• Solución del algoritmo con la computadora: codificación del algoritmo en un lenguaje de programación.

19/10/2010 35

2.2 Análisis de Problemas

• El propósito es ayudar al programador a llegar a un cierto grado de comprensión de la naturaleza del problema.

• Una buena definición del problema, junto con una descripción detallada de entrada y salida, son los requisitos más importantes para una solución eficaz.

2.3 Análisis de Problemas

1. Que información debe proporcionar la solución del problema.

Solución del

Problema

Análisis del

Problema

Diseño del

algoritmo

Solución por

computadora

2. Que datos se necesitan para resolver el problema.

Análisis del

Problema

Definición del

Problema

Especificaciones

de entrada

Especificaciones

de salida

2.3 Análisis de Problemas

• Ejemplo: leer los lados de un triángulo rectángulo e imprima la hipotenusa.

– Entradas: valores de los lados (variable LADO1 y variable LADO2).

– Salida: valor de la hipotenusa (variable LADO3).

– Variables: LADO1, LADO2 y LADO3 (tipo reales).

2.3 Análisis de Problemas

2.4 Diseño de Algoritmos

• La información proporcionada al algoritmo constituye su entrada y la información producida constituye su salida.

• Los problemas complejos se resuelven eficazmente si se fragmentan en subproblemas que sean más sencillos de solucionar que el original. Esta técnica es conocida como divide y vencerás (divide andconquer).

• La descomposición del problema original en subproblemas cuya solución puede implementarse a través de la computadora se le denomina diseño descendente (top down design).

• La descripción detallada de la solución mediante pasos específicos se le denomina refinamiento del algoritmo (stepwise refinement).

2.4 Diseño de Algoritmos

Diseño del

algoritmo

Diseño

descendente

Refinamiento

por pasos

Herramientas de

programación

- diagramas de flujo

- pseudocódigo

2.4 Diseño de Algoritmos

• Ejemplo: Determine a los números menores que 90 y múltiplos de 9, asícomo su sumatoria.

Definición del

Problema

Especificaciones

de entrada

Especificaciones

de salida

Imprimir

múltiplos de 9

y su suma

siempre y

cuando sea

menor que 90

TOTAL = 0

NUM = 9

LIMITE = 90

NUM, TOTAL

2.4 Diseño de Algoritmos

Diseño

descendente

Refinamiento

por pasos

Herramientas de

programación

Múltiplos de 9

Sumatoria

a) Num=9

b) Print Num

c) Num+=9

d) Num <= 90

regresar a)

Total+=Num

2.4 Diseño de Algoritmos

1. Inicio

2. Total=0, Num=9, Limite=90

3. Mientras Num <= Limite

4. Escribir Num

5. Total=Total+Num

6. Num=Num+9

7. Fin Mientras

8. Escribir Total

9. Fin

2.4 Diseño de Algoritmos

2.5 Representación de Algoritmos

Los métodos usuales para representarlo son:1. Diagrama de flujo2. Diagrama de nassi-shneiderman

3. Lenguajes de especificación de algoritmos

2.5 Representación de Algoritmos• Diagrama de flujo.

2.5 Representación de Algoritmos• Diagrama de nassi-shneiderman.

– Definición del problema• Identificar el mayor y menor de dos números

– Análisis del problema• Datos de entrada: num1, num2• Datos salida: mayor, menor• Proceso: comparación

– Diseño de la solución

2.6 Pseudo-código

• Es un lenguaje de especificación de algoritmos que permite una codificación rápida y simple.

• Su ventaja radica en que el programador no debe preocuparse por la sintaxis de un lenguaje de programación en particular.

• Utiliza palabras sencillas de entender para codificar programas.

• Ejemplo: SL y su entorno de desarrollo SLE. (http://www.cnc.una.py/sl/)

Ejercicios

1. Calcule la superficie de un triangulo en función de la base y la altura.

2. Lea cuatro números e imprima el mayor de ellos.

3. Imprima y sume la serie de números múltiplos de 3 en el rango cerrado de 3 y 99.

4. Lea e imprima una serie de números distintos de cero. El algoritmo terminará con un valor que no se debe imprimir, es decir, cero. Finalmente obtenga la cantidad de valores leídos.

5. Determine el máximo común divisor para dos números enteros.

2.7 Solución de Problemas mediante la Computadora

Una vez diseñado el algoritmo y representado mediante una herramienta de programación se debe:

Solución del

Problema por

Computadora

Codificación

del programa

Ejecución del

programa

Comprobación

del programa

3.- Estructura General de un Programa de ComputadoraPrograma: Conjunto de instrucciones que producirán la ejecución de una determinada tarea. Esencialmente es un medio para lograr un fin.

19/10/2010 52

3.1- Proceso de Programación

Consiste en la solución de problemas y el desarrollo de programas.

19/10/2010 53

3.1.1 Fases del Proceso de Programación

• Definición y análisis del problema.

• Diseño de algoritmos:– Diagrama de flujo.

– Diagrama (N-S).

– Pseudocódigo

• Codificación del programa.

• Depuración y verificación del programa.

• Documentación.

• Mantenimiento.

3.2 Partes de un Programa

1. Concepto de caja negra.

Entrada Algoritmo Salida

2. Tipos de Instrucciones (acciones que resuelven un problema).

• De inicio / fin.

• De asignación.

• De lectura.

• De escritura.

• De bifurcación / repetición (bucles).

3.2 Partes de un Programa

• Palabras reservadas.

• Identificadores (nombres de variables).

• Caracteres especiales.

• Constantes.

• Variables.

• Expresiones.

• Instrucciones.

3.3 Elementos básicos de un programa

• Iteraciones,

• Contadores,

• Acumuladores,

• Interruptores,

• Estructuras:• Secuenciales,

• Selectivas,

• Repetitivas.

3.4 Otros Elementos

Es el segmento de un algoritmo o programa, cuyasinstrucciones se repiten un número determinado de veces mientras se cumple una determinadacondición. Sus partes son:

decisión

cuerpo del bucle

salida

3.4.1 Iteraciones

Un contador es una variable cuyo valor se incrementao decrementa en una cantidad constante en cadaiteración.

3.4.2 Contadores

Un Acumulador es una variable cuya misión esalmacernar cantidades distintas resultantes de sumassucesivas.

3.4.3 Acumuladores

Un interruptor (conmutador, bandera, flag) es unavariable que puede tomar diversos valores durantela ejecución de un programa y que permitecomunicar información desde una parte a otra del mismo.

3.4.4 Interruptores

Programa

Cabecera del programa

Sección de declaración

Sección de acciones

3.5 Componentes de un Programa

4.- Elementos de Programación Estructurada

19/10/2010 64

4.1- Técnicas de Programación

• Programación modular: Descomposición del problema en módulos.

• Programación estructurada: Programación de cada módulo mediante métodos estructurados.

19/10/2010 65

4.1.1 Características de la Programación Modular

• Todo programa tiene un módulo principal.

• Dicho módulo primario se divide en submódulos, que a su vez ejecutan una tarea única y podrán codificarse de manera independiente de cualquier otra actividad. Sin embargo, al finalizar su función devolverán el control al módulo principal.

• Esta independencia alude a que ningún otro módulo podrá accesarlo directamente, a excepción de sus propios subsubmódulos y al módulo principal.

Consideraciones:

La descomposición de un programa podría implementarse así:

• Módulo principal.

• Submódulo impresión de títulos

• Submódulo de lectura de datos

• Submódulo ejecución de procesos

• Submódulo impresión de resultados

4.1.1 Características de la Programación Modular

Conjunto de técnicas que reducen el tiempo requerido para escribir, verificar, depurar y mantener los programas.

Mediante el uso de:• recursos abstractos,

• diseño descendente,

• estructuras básicas.

4.1.2 Características de la Programación Estructurada

Recursos Abstractos:

Consiste en descomponer una determinada acción compleja en un número de acciones más simples, capaces de ser ejecutada por una computadora y sus respectivas instrucciones.

4.1.2 Características de la Programación Estructurada

Diseño Descendente (Top-Down Design):

• Esta metodología efectúa una relación de refinamiento entre las distintas etapas de estructuración, de modo que se relacionen unas con otras, mediante entradas y salidas de información.

• Descompone el problema en etapas o estructuras jerárquicas, de modo que se pueda considerar cada estructura desde dos puntos de vista: qué hace y cómo lo hace

4.1.2 Características de la Programación Estructurada

Diseño Descendente (Top-Down Design):

• Desde el exterior.

4.1.2 Características de la Programación Estructurada

Diseño Descendente (Top-Down Design):

• Desde el interior.

4.1.2 Características de la Programación Estructurada

Teorema de la programación estructurada:

Un programa propio es aquel que cumple las siguientes características:

• secuenciales,

• selectivas, y

• repetitivas.

• posee un solo punto de entrada y salida.

• se puede recorrer toda la estructura del programa modular.

• todas las instrucciones son ejecutables y no existen bucles infinitos.

4.1.3 Estructuras Básicas

4.1.3 Estructuras Básicas

Instrucciones Secuenciales:

4.1.3 Estructuras Básicas

Instrucciones Selectiva Simple:

4.1.3 Estructuras Básicas

Instrucción Selectiva Compuestas:

4.1.3 Estructuras Básicas

Instrucción Repetitiva While:

4.1.3 Estructuras Básicas

Instrucción Repetitiva Repeat:

4.1.3 Estructuras Básicas

Instrucción Repetitiva For: