La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Curso de Programación I Parte I

Presentaciones similares


Presentación del tema: "Curso de Programación I Parte I"— Transcripción de la presentación:

1 Curso de Programación I Parte I
Ing. Jorge Traveria Lic. Cristian Kenny UTN San Martín de los Andes

2 Objetivos (I) Explicar el proceso de construcción de un programa
Que al final de la cursada el estudiante pueda: 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

3 Objetivos (II) Explicar y aplicar algoritmos secuenciales, selectivos e iterativos Conocer el papel de las etapas de análisis, diseño y programación en el desarrollo estructurado del software

4 Contenido Sintético Resolución de problemas y los algoritmos
De los algoritmos a los programas la programación estructurada Fundamentos del diseño modular Introducción a los tipos de datos Algoritmos selectivos Introducción al análisis y diseño estructurado del software Archivos

5 Resolución de problemas y los algoritmos
Concepto de algoritmo Propiedades de un algoritmo El rol del algoritmo en la resolución de problemas

6 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.

7 Concepto de algoritmo (I)
Problema Análisis Profundo del problema Construcción del algoritmo Verificación del algoritmo Etapas Resultado o efecto . . .

8 Concepto de algoritmo (II)
Especificación de las entradas Acción o procedimiento Descripción del resultado o efecto . . . asignación secuencia Anidación

9 Un primer ejemplo de algoritmo
El siguiente algoritmo calcula el área y el perímetro de un rectángulo 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 Inicio Leer base y altura (b, a) hacer ar ← b*a hacer pe ← 2*(b + a) Escribir “Área del rectángulo: ”, ar Escribir “Perímetro del rectángulo: ”, pe Fin

10 Características de los algoritmos (I)
Precisión: Deben indicar el orden de realización de cada paso, así como especificar con precisión las entradas y cada paso o etapa Definición. Etapas bien definidas y concretas Exactitud y corrección. Se debe demostrar que el algoritmo resuelve el problema para el cual fue escrito Finitud. Deben tener un número finito de pasos y deben terminar Determinismo. Dado un conjunto de datos idénticos de entrada, siempre debe arrojar los mismos resultados

11 Características de los algoritmos (II)
Partes que debe describir la definición de un algoritmo: Entrada Proceso Salida Entrada Salida Proceso

12 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

13 El rol del algoritmo en la resolución de problemas (I)
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. Descripción y análisis del problema Diseño del algoritmo Programa en un lenguaje de programación

14 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)

15 Ejemplos de algoritmos (I.b.)
Datos de entrada: Total de deportistas (N) Sexo de la persona (S) Continuamos con el análisis del problema 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)

16 Ejemplos de algoritmos (I.c.)
Inicio Inicializar en cero el total de personas del sexo masculino: CM ← 0 Inicializar en cero el total de personas del sexo femenino: CF ← 0 Inicializar en uno el total de personas procesadas: TP ← 1 Leer total de deportistas (N) MIENTRAS TP <= N 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 FIN-MIENTRAS

17 Ejemplos de algoritmos (I.d.)
Algoritmo (continuación): Calcular porcentaje de hombres en el grupo: PM ← CM/N*100 Calcular porcentaje de mujeres en el grupo: PF ← CF/N*100 Escribir “Porcentaje de hombres en el grupo: ”, PM Escribir “Porcentaje de mujeres en el grupo: ”, PF 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 Repetitiva ó iterativa

18 Otros ejemplos de algoritmos (II)
Cálculo de la media de N observaciones numéricas Determinar si un número es primo dada una lista de N números enteros Cálculo del factorial de un número N Retiro de efectivo en un cajero automático Receta para preparar “spaghetti a la napolitana” Definir en cada caso: entrada, procesos/operaciones y salida..

19 Diseño de algoritmos (I)
Reglas para la construcción de algoritmos Debe tener principio y fin La dirección del flujo debe ser: vertical u horizontal Cada paso se debe ir descomponiendo o desgranando o refinando Cada paso debe tener una conexión hacia otro paso Se construye de arriba hacia abajo La notación utilizada debe ser independiente del lenguaje de programación Utilizar comentarios para ayudar a seguirlo

20 Diseño de algoritmos (II)
Diseño descendente (I) El diseño descendente (top down) es un procedimiento de desgranado o 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.

21 Diseño de algoritmos (III)
Diseño descendente (II) . . . Problema Subproblema

22 Diseño de algoritmos (V)
Diseño descendente (IV) Ejemplo: el problema del cajero automático Cajero automático Lectura y validación del PIN Selección de tipo de cuenta Selección de tipo de operación Finalizar Consulta de saldo Traspaso entre cuentas propias Retiro de efectivo Pago de servicios . . .

23 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.

24 Diseño de algoritmos (X)
Especificación y representación gráfica del algoritmo Pseudocódigo Diagramas de flujo

25 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. Algoritmo Especificación en pseudocódigo Programa

26 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 similares a las utilizadas en los lenguajes de programación estructurada pero independientes de cualquier lenguaje. Entre estas palabras, las más usadas son: leer hacer mientras si condición entonces repetir con … escribir

27 Diseño de algoritmos (XIII)
Especificación del algoritmo: pseudocódigo (III) leer N hacer NE ← 1 hacer SE ← 0 hacer SP ← 0 mientras NE < =N repetir leer E, P hacer SE ← SE + E hacer SP ← SP + P hacer NE ← NE + 1 {fin ciclo mientras} Algoritmo para el cálculo de la media de la edad y peso de un grupo de estudiantes (versión en pseudocódigo)

28 Diseño de algoritmos (XIV)
Especificación del algoritmo: pseudocódigo (IV) 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. hacer ME ← SE/N hacer MP ← SP/N escribir “La edad promedio es: ”, ME escribir “El peso promedio es: ”, MP

29 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. .

30 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 Rombo Representa toma de decisión (estructura selectiva o repetitiva) Rectángulo redondeado o elipse Representa el inicio y fin del diagrama Documento Representa una salida

31 diagramas de flujo y pseudocódigo
Diseño de algoritmos (XVI) algoritmo: diagramas de flujo y pseudocódigo símbolo instrucción ejemplo Leer… Hacer… Escribir… A, B Leer A , B A A+Tot Hacer A A + Tot Escribir A , B A,B

32 Diseño de algoritmos (XVII)
Representación gráfica del algoritmo: diagramas de flujo (III) Inicio Leer cantidad de estudiantes (N) Hacer NE 1, SE 0, SP 0 MIENTRAS NE <= N repetir 4.1 Leer edad y peso del estudiante (E, P) 4.2 hacer SE SE + E 4.3 hacer SP SP + P 4.4 Incrementar el contador: NE NE + 1 {FIN ciclo MIENTRAS del paso 4} Inicio Leer N NE <- 1 SE <- 0 SP <- 0 1 Hacer la media de la edad: ME SE/N Hacer la media del peso: MP SP/N Escribir “La edad promedio es: ”, ME Escribir “El peso promedio es: ”, MP Fin

33 Diseño de algoritmos (XVIII)
1 Continuación (IV) Leer E, P Inicio Leer cantidad de estudiantes (N) Hacer NE 1, SE 0, SP 0 MIENTRAS NE < N repetir 4.1 Leer edad y peso del estudiante (E, P) 4.2 hacer SE SE + E 4.3 hacer SP SP + P 4.4 Incrementar el contador: NE NE + 1 {FIN ciclo MIENTRAS del paso 4} SE <- SE+E SP <- SP+P NE <- NE+1 Si NE <=N No ME <- SE/N Hacer la media de la edad: ME SE/N Hacer la media del peso: MP SP/N Escribir “La edad promedio es: ”, ME Escribir “El peso promedio es: ”, MP Fin MP <- SP/N Escribir ME, MP Fin

34 Diseño de algoritmos (XXIII)
Diagrama de flujo Algoritmo para calcular el área y perímetro de un rectángulo inicio inicio leer base y altura (b, a) hacer ar ← b*a hacer pe ← 2*(b + a) escribir “Área: ”, ar escribir “Perímetro: ”, pe fin b , a ar b*a pe 2*(b+a) ar , pe fin

35 De los algoritmos a los programas
Lenguajes de programación: niveles, sintaxis y semántica Estrategias de contrucción de programas

36 Programas Un programa es un conjunto de instrucciones que sigue la computadora para alcanzar un resultado específico. El programa se escribe en un lenguaje de programación a partir de un diagrama de flujo diseñado con anterioridad. Un lenguaje de programación está constituido por un conjunto de reglas sintácticas ( instrucciones válidas) y semánticas (con significado ) que hacen posible escribir un programa técnica y lógicamente correcto.

37 Programas Un programa se diseña jerárquicamente usando sólo un conjunto restringido de estructuras de control en cada nivel, instrucciones secuenciales, estructuras selectivas y estructuras repetitivas..

38 Lenguajes de programación: niveles, sintaxis y semántica (I)
Niveles de lenguajes de programación (I) Lenguajes de alto nivel Lenguajes de alto nivel Lenguajes ensambladores Lenguajes ensambladores Lenguajes de máquina Lenguajes de máquina

39 Lenguajes de programación: niveles, sintaxis y semántica (II)
Niveles de lenguajes de programación (II) Lenguajes de máquina 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 ensambladores 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. Aparecen los programas traductores.

40 Lenguajes de programación: niveles, sintaxis y semántica (III)
Niveles de lenguajes de programación (III) Lenguajes de alto nivel 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.

41 Lenguajes de programación: niveles, sintaxis y semántica (IV)
Lenguaje de programación = Léxico + Sintaxis + Semántica

42 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 Implementación Pragmática

43 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: Identificador(nombre de variables, nombre de constantes, nombre de funciones, etc.) Literal (números enteros y decimales) Operador (+, -, *, /. etc.) Separador (; . , etc.) palabras reservadas (while, read, write, if, for, case, int, real, etc.)

44 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) Sintaxis 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.

45 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) Semántica 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. Gestión de memoria 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.

46 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) Implementación Cómo se ejecutan los programas. Pragmática Se refiere a los aspectos prácticos del uso de los programas.

47 Lenguajes de programación: niveles, sintaxis y semántica (XI)
Lenguaje natural Aplicación Lenguaje de programación Compilador/Intérprete Contexto en el que se ubican los lenguajes de programación Máquina virtual Sistema operativo Lenguaje de máquina

48 Lenguajes de programación: traductores de lenguajes (I)
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.

49 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

50 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

51 Lenguajes de programación: traductores de lenguajes (IV)
Fases de la compilación de un programa Programa fuente Compilador Programa 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

52 Lenguajes de programación: traductores de lenguajes (IV)
Fases del entorno de C Programa ejecutable en lenguaje de máquina Programa fuente Programa objeto Compilador enlazador fase 1 fase 2 fase 3 fase 4 fase 5 fase 6 Preprocesador cargador CPU Editor Compilador Enlazador disco Memoria principal

53 Lenguaje de programación C
FASES Los nombres de los archivos de los programas C editados deben terminar con la extensión .c El preprocesador realiza manipulaciones sobre el archivo , donde incorpora otros archivos y reemplaza símbolos especiales por texto de programa. El compilador traduce el programa a código de lenguaje máquina (código objeto) En el enlace se vincula el código objeto con el código de las funciones faltantes. (bibliotecas estándar y bibliotecas de grupos de programadores) La compilación y el enlazador generan un archivo con el nombre a.out El cargador dispone el archivo en memoria Finalmente la CPU ejecuta el programa

54 Lenguaje de programación: C Breve historia
C evolucionó a partir de dos lenguajes previos: BCPL y B Martin Richards. Ken Thompson empleó B 1970 para crear UNIX BCPL y B eran lenguajes “sin tipo” C deriva de B . Dennis Ritchie. 1972 1978 Kernighan y Ritchie publican Programación lenguaje C 1983 se crea Comité técnico para estandarizar C 1989 se aprueba bajo norma ANSI/ISO 9899/ 90 1988 Kernighan y Ritchie publican ANSI C

55 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

56 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).

57 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 N2 Módulo 11 Módulo 311 Módulo 312

58 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

59 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


Descargar ppt "Curso de Programación I Parte I"

Presentaciones similares


Anuncios Google