Lenguajes de programación. Algoritmos y Estructuras de Datos I. Lenguajes compilados. Lenguajes compilados

Documentos relacionados
Esquema. Condicionales. Ejemplo de condicional. Demostración. P { if (B) uno else dos } Q. P { while (B) cuerpo } Q

Algoritmos y programas. Algoritmos y Estructuras de Datos I

Funciones Definición de función

REPRESENTACIÓN DE DATOS

1.1 Tipos de Datos Primitivos. 1.2 Tipos de datos estructurados. 1.3 Definición de estructura de datos

Introducción a C++ y Code::Blocks

Elementos de un programa en C

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

1. Cuántas sentencias hay en la secuencia principal del siguiente programa?

Métodos que devuelven valor Dado el siguiente triángulo rectángulo:

PROGRAMACIÓN ORIENTADA A OBJETOS (L40629) Sabino Miranda-Jiménez

Introducción rápida a la programación (estructurada ) con C++

Programación. Test Autoevaluación Tema 3

Metodología y Tecnología de la Programación

4. Operadores Operador asignación

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

INTRODUCCIóN A LA PROGRAMACIóN APUNTES DE JAVA APUNTES DE JAVA

TEMA 2. EL LENGUAJE C. ELEMENTOS BÁSICOS

Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial.

Diferentes Perspectivas de un Ordenador

Java para programadores

ANEXO XVII DE LA RESOLUCION N

Partes de un programa en Java. A. Ejemplo de un Programa en Java /* Programa Ejemplo de Java: Muestra una Ventana Archivo: Ejemplo1.

Objetivos de la sesión. Aplicación de consola 7/30/11. Código con que se inicia un programa en Visual C# (aplicación de consola)

Prueba N o 1. Programación II

FACULTAD DE ECONOMIA Y ADMINISTRACION DEPARTAMENTO DE CIENCIAS DE LA COMPUTACION CÁTEDRA PROGRAMACION GENERAL. Trabajo Práctico Nº 4

Palabras reservadas de C++ y C. Una palabra reservada no puede declararse como un identificador, esto haría un conflicto entre conectores y funciones.

Tema 8: Tipos de datos. Sesión 24: Tipos de datos (1)

Programación Java. Introducción a Archivos de datos de Entrada

Funciones Tipos de funciones y Recursividad

5. Sentencias selectivas o condicionales

Paso de Parámetros a una Función

Ejercicios del Tema 3. Fundamentos de la programación en ensamblador

Programación en Lenguaje C

ESCUELA POLITÉCNICA SUPERIOR PRÁCTICA 2: EXPRESIONES, PRINTF Y SCANF

SUBPROGRAMAS PL/SQL César Martínez C. Profesor Instructor de Base de Datos Sede Puente Alto DUOC

! Qué es la POO?! Un paradigma de programación. ! No hay paradigmas mejores ni peores! Todos tienen sus ventajas e inconvenientes

1. Sobrecarga de operadores. 2. Métodos operadores unarios Operador de incremento (prefijo)

Algoritmos y Programación I

LENGUAJE. Tema 2 Elementos de un programa

Java Avanzado Facultad de Ingeniería. Escuela de computación.

Principios de Computadoras II

Programación MODULAR: Subalgoritmos - funciones y procedimientos

Tema 2 Introducción a la Programación en C.

Sintaxis básica, variables y 7pos

Unidad II: Análisis semántico

Lenguajes de Programación. Juan Zamora O. Semestre II Nombres, Ambitos y Ligados

Java Avanzado. Guía 1. Java Avanzado Facultad de Ingeniería. Escuela de computación.

Estructura de un programa en Java

UNIDAD 1. Algoritmo se define como un conjunto de instrucciones que la computadora debe seguir para resolver un problema.

Agradecimientos. Nota de los autores. 1 Problemas, algoritmos y programas 1

TEMA 8: Gestión dinámica de memoria

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Tipos algebraicos y abstractos. Algoritmos y Estructuras de Datos I. Tipos algebraicos

Clases e instancias. Algoritmos y Estructuras de Datos I. Clases e instancias. memoria dinámica.

Práctica 3. Paso de parámetros entre subrutinas. 3. Consideraciones sobre el paso de parámetros

Universidad de Managua

Estructuras de Datos Declaraciones Tipos de Datos

Tema 6. Reutilización de código. Programación Programación - Tema 6: Reutilización de código

Desarrollo de Programas. Prof. Lisbeth C. Pérez Rivas

Descripción de un Programa

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main.

Sentencias de Procesamiento Iterativo: while y do-while

Analista Universitario en Sistemas. Taller de Programación II. Instituto Politécnico Superior PUNTEROS

Tema: Funciones, Procedimientos y Recursividad en C#.

Guía - Taller # 2 (JAVA)

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

Lenguaje C [Apuntadores y arreglos]

INICIACIÓN A LA PROGRAMACIÓN 1ª parte

UNIVERSIDAD DE LOS ANDES NUCLEO UNIVERSITARIO RAFAEL RANGEL (NURR) DEPARTAMENTO DE FISICA Y MATEMATICA AREA COMPUTACION TRUJILLO EDO.

El lenguaje C. 1. Identificadores, constantes y variables

Programación en C. Algoritmo y Estructura de Datos. Ing. M. Laura López. Programación en C

Práctica 2: Java Remote Method Invocation (RMI)

2.2 Nombres, Ligado y Ámbito

Tema 13: Apuntadores en C

Métodos para escribir algoritmos: Diagramas de Flujo y pseudocódigo

Funciones como parámetros, funciones como resultados. Introducción a la Computación Patricia Borensztejn Clase 26

CAPITULO 2. COMPRENDER LAS DEFINICIONES DE CLASE

Programación Estructurada

Fundamentos de Informática E.U.P. Universidad de Sevilla

8. Sentencia return y métodos

Expresiones y sentencias

Introducción al lenguaje de programación java

APUNTADORES. Un apuntador es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable.

Los nombres y marcas comerciales mencionados en este manual son propiedad de sus respectivos autores o fabricantes.

Un identificador le da nombre único a un elemento en un programa (Variables, procedimientos, etc.). No puede contener operadores como + - * /

Caracteres y Cadenas Conversión de Datos Funciones y procedimientos Archivos cabecera. Fundamentos de programación

Conceptos a tratar. Fundamentos de la Programación Orientada a Objetos Ampliación sobre clases y objetos

TECNICO SUPERIOR EN INFORMÁTICA EMPRESARIAL MÓDULO INTRUCCIONAL

PASO DE PARÁMETROS O ARGUMENTOS EN C. POR DEFECTO, POR VALOR O POR REFERENCIA. SIZEOF MEMORIA (CU00550F)

Introducción a Java (II) Dr. (c) Noé Alejandro Castro Sánchez

Modulo 1 El lenguaje Java

TEMA 5: Subprogramas, programación modular

Programación en Lenguaje Java

Fundamentos de Programación 2017-I

TEMA 4. ESTRUCTURAS DE CONTROL

Tema: Estructuras de Selección en C#.

Programación Básica Estructuras de Datos y Funciones en C

como les va con las practicas?

1. Manejo de memoria estática 2. Manejo de memoria dinámica

Transcripción:

Lenguajes de programación Algoritmos y Estructuras de Datos I Primer cuatrimestre de 2014 Departamento de Computación - FCEyN - UBA Teórica - clase 3 Introducción a la programación imperativa Las computadoras entienden un lenguaje formal. El lenguaje que hablan las computadoras se lo llama lenguaje de máquina, que es un lenguaje de bajo nivel. 1. Las unidades de información con las que trabaja son simplemente agrupaciones de bits (bytes, words, dwords). 2. Es posible escribir programas en estos lenguajes, pero es muy incómodo! Los lenguajes de alto nivel incluyen un cierto nivel de abstracción y una mayor expresividad. 1. Los lenguajes de programación habituales (Java, C++, C#, Basic, etc.) son lenguajes de alto nivel. 2. El hardware de una computadora no entiende estos lenguajes, con lo cual es necesario un proceso de traducción intermedio. 1 2 Lenguajes compilados Lenguajes compilados 3 4

Compilación e interpretación Java En esta materia utilizamos Java como lenguaje de programación, y Eclipse como entorno de desarrollo. 5 6 Java El primer programa class Hola { // main: mostrar un mensaje sencillo public static void main (String[] args) { System.out.println ("Hola, mundo."); 7 8

Programación imperativa Programación imperativa Entidad fundamental: variables Corresponden a posiciones de memoria (RAM) Cambian expĺıcitamente de valor a lo largo de la ejecución de un programa Pérdida de la transparencia referencial Modelo de cómputo: Un programa consta de órdenes (o bien instrucciones ) que especifican cómo operar con los datos, que están alojados en la memoria. Operación fundamental: asignación Cambiar el valor de una variable Una variable no cambia a menos que se cambie expĺıcitamente su valor, a través de una asignación 9 10 Programa en Java Colección de definiciones de clases y funciones dentro de las clases. Existe una función principal que se llama main. Definición de función: tiporesultado nombrefunción (parámetros) bloqueinstrucciones Ejemplo: problema suma2 (x: Int, y: Int)= res: Int { asegura res==x+y int suma2 (int x, int y) { int res = x + y; return res; Variables en el paradigma imperativo Variable: Entidad que puede almacenar un valor, y que mantiene ese valor almacenado hasta que se lo cambie expĺıcitamente. Informalmente, es un nombre asociado a un espacio de memoria RAM. En Java las variables tienen un tipo asociado y se declaran dando su tipo y su nombre: int x; // x es una variable de tipo int char c; // c es una variable de tipo char Semántica de la programación imperativa: 1. Tenemos un conjunto de variables con los datos del problema 2. Se ejecuta una serie de instrucciones, que van cambiando los valores de las variables 3. Cuando el programa termina, los valores finales de las variables deberían contener la respuesta al problema 11 12

Componentes de un programa imperativo La asignación Operación para modificar el valor de una variable. Instrucciones: Asignación Estructuras de control: Condicional (if... else...) Ciclos (for, while...) Procedimientos y funciones Retorno de control (return) Sintaxis: variable = expresión; Efecto de la asignación: 1. Se evalúa la expresión de la derecha y se obiene un valor 2. El valor obtenido se copia en el espacio de memoria de la variable 3. El resto de la memoria no cambia Ejemplos: x = 0; y = x; x = x+x; x = suma2(z+1,3); x = x*x + 2*y + z; 13 14 return Corrección de un programa Termina la ejecución de una función, retornando el control a su invocador y devolviendo el valor de la expresión como resultado. Ejemplo: problema suma2 (x: Int, y: Int)= res: Int { asegura res==x+y int suma2 (int x, int y) { int res = x + y; return res; Una especificación de un problema en lenguaje de especificación define las propiedades que debe tener una función (contrato). Un programa en lenguaje de programación es una definición (computable) de una función. Dada una especificación y un programa que responde a esta especificación, queremos demostrar que el programa satisface la especificación. int suma2 (int x, int y) { return x + y; 15 16

Corrección Transformación de estados Un programa cumple con una especificación cuando para valores de entrada que satisfacen la precondición: 1. El programa devuelve un valor definido (terminación) 2. El valor devuelto satisface la poscondición (corrección) Llamamos estado de un programa a los valores de todas sus variables en un punto de su ejecución...... antes de ejecutar la primera instrucción,... entre dos instrucciones, y... después de ejecutar la última instrucción Podemos considerar la ejecución de un programa como una sucesión de estados. La asignación es la instrucción que permite pasar de un estado al siguiente en esta sucesión de estados. Las estructuras de control se limitan a especificar el flujo de ejecución (es decir, el orden de ejecución de las asignaciones). 17 18 Afirmaciones sobre estados Ejemplo de vale Nos interesa comentar nuestros programas con afirmaciones sobre los estados durante la ejecución. Ampliamos el lenguaje de especificación con las cláusulas vale y estado. Sintaxis I: // vale P; Sintaxis II: // vale nombre: P; Una cláusula vale afirma que el predicado... vale en el punto del programa donde se inserta. No forman parte del lenguaje de programación, sino que las incluimos como comentarios dentro del código. Ejemplo de código con afirmaciones x = 0; //vale x == 0; x = x + 3; //vale x == 3; x = 2 * x; //vale x == 6; 19 20

La cláusula estado Semántica de la asignación La cláusula estado permite dar un nombre a un estado en un punto del programa. Permite referenciar los valores de las variables en ese estado. Sintaxis: // estado nombre estado; Para referirnos al valor de una variable en un estado, podemos usar la expresión nombre variable@nombre estado... // estado a v = e; // vale v == e@a;... Después de ejecutar la asignación v = e, la variable v tiene el valor de la expresión e en el estado a. 21 22 Ejemplo de estado y vale Los argumentos de entrada en funciones int suc(int x) { // estado a; x = x + 2; // estado b //vale x == x@a+2; x = x - 1; //vale x == x@b-1; return x; Los argumentos de entrada de una función se comportan como variables. Estas variables toman valores cuando desde alguna parte del código se invoca a la función. En Java, se pueden asignar dentro de la función otros valores a los argumentos de entrada, y el valor modificado no guarda relación con las variables de quien realizó la invocación. Si un argumento no es de un tipo primitivo y se realizan modificaciones al estado interno, entonces esas modificaciones son visibles para quien realizó la invocación. 23 24

Cláusulas local y pre Ejemplo: argumento de entrada, pre, local Dentro del lenguaje de especificación indicaremos el valor los argumentos de entrada, con la cláusula pre(nombre variable). Si la función modifica los argumentos de entrada (usándolos como variables locales), lo especificamos con la cláusula local nombre variable. Si para un argumento de entrada de una función no especificamos la cláusula local ni la cláusula modifica, asumimos que el argumento mantiene su valor inicial en todos los estados del programa. Es decir, para todo estado e, tenemos que vale argumento@e == pre(argumento). problema suc(x : Int) = res : Int { asegura res == x + 1; int suc(int x) { //sin pre y sin local int y = x; //estado a //vale y == x; y = y + 1; //vale y == y@a + 1; return y; 25 26 Ejemplo: argumento de entrada, pre, local Ejemplo argumento de entrada con local problema suc(x : Int) = res : Int { asegura res == x + 1; int suc(int x) { // con local y con pre //local x //vale x == pre(x) x = x + 1; //vale x == pre(x) + 1; return x; problema suma2(x, y : Int) = res : Int { asegura res == x + y; int suma2(int x, int y) { //local x //vale x == pre(x); //vale y == pre(y); (no hace falta) x = x + y; //vale x == pre(x) + y; //vale y == pre(y); (no hace falta) return x; 27 28

Cláusula implica Ejemplo de implica En muchos casos, es conveniente incluir afirmaciones acerca del estado de un programa que se deducen de afirmaciones anteriores. Para eso el lenguaje de especificación provee la cláusula implica P, donde P es un predicado (expresión de tipo Bool). Se pone después de una o más afirmaciones vale o implica e indica que P se deduce de las afirmaciones anteriores. int suc(int x) { //local x x = x + 2; //estado a //vale x == pre(x) + 2; x = x - 1; //estado b //vale x == x@a 1; //implica x == pre(x) + 2 1; //implica x == pre(x) + 1; return x; //vale res == x@b; //implica res == pre(x) + 1; Las cláusulas implica deben ser justificadas! 29 30 Ejemplo: Usando una función auxiliar Pasaje de argumentos problema doble(x : Int) = res : Int { asegura res == 2 x; problema cuad(x : Int) = res : Int { asegura res = 4 x; int cuad(int x) { int c = doble(x); //estado 1; //vale c == 2 x; (usando la poscondición de doble) c = doble(c); //vale c == 2 c@1; (usando la poscondición de doble) //implica c == 2 2 x == 4 x; return c; //vale res == 4 x; Luego, cuad es correcta respecto de su especificación. Pasaje por valor (o por copia) Coloca en la posición de memoria del argumento de entrada el valor de la expresión usada en la invocación. Si la función modifica el valor, no se cambian las variables en el llamador. Declaración de la función: int f(int b); Invocación de la función: f(x), o bien f(x+5). 31 32

Pasaje de argumentos Resumen Pasaje por referencia (no disponible para tipos primitivos!) La función recibe una dirección de memoria donde encontrar el argumento. La función puede leer esa posición de memoria pero también puede escribirla. Todas las asignaciones hechas dentro del cuerpo de la función cambian el contenido de la memoria del llamador. La expresión con la que se realiza la invocación debe ser necesariamente una variable. Vamos a escribir programas imperativos. 1. Los datos se almacenan en variables. 2. Se utilizan asignaciones para modificar las variables. 3. Se utilizan estructuras de control para organizar la ejecución de las asignaciones. Vamos a razonar sobre la corrección de programas imperativos. 1. Agregamos afirmaciones que caracterizan el estado del programa en cada punto de su ejecución. 2. Utilizamos estas afirmaciones para deducir el comportamiento del programa. 33 34 Qué hace este código? //estado 1; vale x == pre(x) y == pre(y); x = x + y; //estado 2; vale y == y@1 x == x@1 + y@1; //implica x == pre(x) + pre(y); (pues y@1 == pre(y) y x@1 == pre(x)) y = x - y; //estado 3; vale x == pre(x) + pre(y) y == x@2 y@2; //implica y == pre(x) + pre(y) pre(y); (pues y@2 == y@1 == pre(y)) //implica y == pre(x); (operaciones aritméticas) x = x - y; //estado 4; vale y == pre(x) x == x@3 y@3; //implica x == pre(x) + pre(y) pre(x); //implica y == pre(x) x == pre(y); (operaciones aritméticas) 35