Programación imperativa. Algoritmos y Estructuras de Datos I. Ciclos
|
|
- Diego Ríos Morales
- hace 6 años
- Vistas:
Transcripción
1 Programación imperativa Algoritmos y Estructuras de Datos I Segundo cuatrimestre de 2014 Departamento de Computación - FCEyN - UBA Programación imperativa - clase 6 Ciclos y arreglos Entidad fundamental: variables Corresponden a posiciones de memoria (RAM). Cambian expĺıcitamente de valor a lo largo de la ejecución de un programa. Tres instrucciones: asignación (y llamadas a funciones), condicional, ciclo Un programa es una lista de instrucciones, que se ejecutan una tras otra. La semántica de un programa se define mediante la composición de la semántica de las instrucciones por transformación de estados. 1 2 Programación imperativa Ciclos Aunque muchos lenguajes imperativos permiten implementar funciones recursivas, el mecanismo fundamental de cómputo no es la recursión. cuerpo del ciclo; B: expresión booleana del lenguaje de programación. Se la llama guarda. {cuerpo de ciclo: es un bloque de instrucciones entre llaves. Se repite mientras valga la guarda B, cero o más veces. La ejecución del ciclo termina si y solo si el ciclo se repite una cantidad finita de veces. Esto ocurre si y solo si la guarda B llega a ser falsa. Si el ciclo termina, el estado resultante es el estado posterior a la última instrucción del cuerpo del ciclo. 3 4
2 Ejemplo de un ciclo Correctitud de un ciclo respecto de una especificación problema fact(x : Int) = r : Int{ requiere x 0 asegura r == [1..x] En funcional: fact :: Int -> Int fact 0 = 1 fact i i>0 = i * (fact (i-1)) En imperativo: int fact (int x) { int f = 1; int i = 1; while (i x) { f = f * i; i = i + 1; return f; 5 Introducimos en el lenguaje de especificación P C : precondición del ciclo Q C : postcondición del ciclo B: guarda donde B corresponde a la guarda B del lenguaje de programación. int g(int x) {... // estado antesdelciclo // vale P C cuerpo del ciclo (una o más instrucciones); // estado despuesdelciclo // vale Q C... 6 Correctitud de un ciclo Invariante P C : precondición del ciclo, Q C : postcondición del ciclo, B: guarda I: invariante int g (int x) {... // estado antesdelciclo // vale P C // implica I // estado antes // vale B I cuerpo del ciclo (una o más instrucciones) // estado despues // implica I // vale I B; implica Q C... 7 Expresión booleana del lenguaje de especificación que se mantiene verdadera en los estados antes, durante y después de la ejecución de un ciclo. es análogo a la hipótesis inductiva que usamos para demostrar la correctitud de un programa recursivo en programación funcional. conviene darlo al escribir el ciclo porque expresa la idea del ciclo. no hay forma algorítmica de encontrarlo 8
3 Un ejemplo problema sumat(x : Int) = r : Int{ requiere x 0 asegura r == [0..x] En funcional: sumat :: Int -> Int sumat 0 = 0 sumat i = i + (sumat (i-1)) En imperativo: int sumat (int x) { int s = 0, i =x; while (i 0) { 9 Ejemplo sumat(int x) int sumat (int x) { int s = 0, i = x; while (i > 0) { // estado a // estado b Estados para x == 4 s@a i@a s@b i@b (i@a..x] i@a (i@b..x] i@b En estado a y b se cumple 0 i x y s == (i..x] (pero no en el medio) Cuando i == 0, la ejecución del ciclo termina. 10 Ejemplo sumat(int x) Transformación de estados dentro del ciclo int sumat (int x) { int s = 0; i = x; //vale P C : s == 0 i == x while (i > 0) { //estado e2 //estado e3 //vale Q C : i == 0 s == (0..x] //vale result == [0..x] La x no cambia porque es de entrada y no aparece en modifica ni en local. //vale B: i >0 //vale I : 0 i x s == (i..x] //estado e2 //vale i = i@e1 s == s@e1 + i@e1 //estado e3 //vale i == i@e2 1 s == s@e2 //implica i == i@e1 1 s == s@e1 + i@e1 porque i@e2 == i@e1 y s@e2 == s@e1 + i@e1. //implica 0 i x porque 0 < i@e1 x y i@e3 == i@e1 1 //implica s == (i..x] porque s@e1 == (i@e1..x] y s@e3 == s@e2 == s@e1 + i@e1 == (i@e1..x] + i@e1 == (i@e1 1..x] == (i@e3..x] 11 12
4 Terminación y correctitud de un ciclo respecto de una especificación Cómo demostramos que el ciclo termina? //vale P C ; //invariante I ; cuerpo //vale Q C ; Un ciclo termina si después de una cantidad finita de iteraciones se cumple la negación de la guarda. Un ciclo es correcto respecto a la especificación si comenzando su ejecución en un estado que cumple P C el ciclo termina en un estado que cumple Q C. Acotamos superiormente la cantidad de iteraciones restantes del ciclo mediante una expresión variante (v) Es una expresión del lenguaje de especificación, de tipo Int definida a partir de las variables del programa debe decrecer estrictamente en cada iteración //estado e; //vale B I ; cuerpo //vale v < v@e; Damos una cota (c) (valor entero fijo, por ejemplo 0 o 8) tal que si es alcanzado por la expresión variante, está garantizado que la ejecución alcanza un estado donde vale la negación de la guarda, y por lo tanto sale del ciclo Ejemplo de expresión variante Ejemplo de demostración de expresión variante decreciente. int sumat (int x) { int s = 0; i = x; //vale P C : s == 0 i == x while (i > 0) { //vale Q C : i == 0 s == (0..x] //vale result == [0..x] La expresión variante es un indicador de la distancia a la terminación del ciclo. //variante v : i, cota 0 Recordemos el programa sumat y la transformación de estados //variante v : i //vale B I //implica 0 < i x s == (i0..x] //estado e2 //vale i s == s@e1 + e@1 //estado e3 //vale i == i@e2 1 s == s@e2 Debemos ver que la expresión variante v : i es decreciente. Es decir, debemos ver que v@e1 > v@e3. Pero esto es inmediato, porque v@e1 == i@e1 y v@e3 == i@3 == i@e2 1 == i@e
5 Teorema de terminación Observaciones sobre terminación Sea I el invariante de un ciclo con guarda B, v una expresión variante v (expresión entera decreciente) y c una cota tal que (I v c) B. Entonces el ciclo termina. Demostración. Sea v j el valor que toma v en el estado que resulta de ejecutar el cuerpo del ciclo por j-ésima vez. Dado que v es de tipo Int, para todo j, v j Int. Como v es estrictamente decreciente, v 1 > v 2 > v 3 >..., existe un k tal que v k c. Dado que (I v c) B, en el estado alcanzado luego de k iteraciones vale B. Por lo tanto el ciclo termina. Qué pasaría si v fuese de tipo Float? Funcionaría esta demostración? Sea el siguiente programa: int dec1(int x) { while (x > 0) x = x 1; return x; Supongamos P c : x 0. I : x 0 v = x es estrictamente decreciente, cota c = 0. Dado que B : x > 0, se cumple v c B y por simple cálculo proposicional, (I v c) B. Es decir, no fue necesario usar el invariante I Observaciones sobre terminación Expresión variante y cota int dec2(int x) { while (x!= 0) x = x 1; return x; Supongamos P c : x 0 I : x 0 v = x, cota c = 0. Dado que B : not(x == 0), (I v c) B Notemos que en este caso sí necesitamos usar I ya que x 0 x == 0 pero (x 0 x 0) x == 0. Sea v una función variante y sea c su cota asociada. v = v c es una función variante con cota asociada 0. Sin pérdida de generalidad, podemos suponer siempre una función variante y cota asociada 0. v es estrictamente decreciente en las sucesivas iteraciones del ciclo. En cada iteración decrece en 1 o más unidades. Por lo tanto el valor de la expresión variante no necesariamente mide la cantidad de iteraciones (restantes) de la ejecución del ciclo
6 Teorema de correctitud de un ciclo Teorema del Invariante Sea P C, Q C, I, B, v la especificación de un ciclo que termina. Si se cumplen las relaciones de fuerza P C I y (I B) Q C entonces el ciclo es correcto con respecto a su especificación. Demostración. Debemos ver que para variables que satisfagan P C, el estado alcanzado cuando el ciclo termina satisface Q C. //vale P C ; //vale I B; cuerpo //vale I ; //estado e2 //vale Q C ; Supongamos que las variables en el estado e1 satisfacen P C como P C I, entonces en el estado e1 se cumple I. Supongamos que el ciclo ejecuta 0 o más veces. Por definición de invariante en cada iteración, el invariante se restablece. Por hipótesis, el ciclo termina y en el estado e2 vale B. Además, en el estado e2 vale I. Como (I B) Q C entonces en el estado e2 vale Q C. 21 Sea cuerpo un ciclo con guarda B, precondición P C y poscondición Q C. Sea I un predicado booleano, v una expresión variante, c una cota, y sean los estados e1 y e2 así: cuerpo //estado e2 Si valen: 1. P C I 2. (I B) Q C 3. el invariante se preserva en la ejecución del cuerpo, i.e. si I B vale en el estado e1 entonces I vale en el estado e2 4. v es decreciente, i.e. v@e1 > v@e2 5. (I v c) B entonces para cualquier valor de las variables del programa que haga verdadera P C, el ciclo termina y hace verdadera Q C, es decir, el ciclo es correcto para su especificación (P C, Q C ). Demostración. Inmediata del Teorema de Terminación (p. 17) y el Teorema de Correctitud (p. 21). 22 Cuales de los 5 puntos entran en el primer parcial? Retomamos ejemplo sumat Teoema del Invariante. Sea cuerpo un ciclo con guarda B, precondición P C y poscondición Q C. Sea I un predicado booleano, v una expresión variante, c una cota. Si valen: 1. P C I problema sumat(x : Int) = r : Int{ requiere P : x 0 asegura r == [0..x] 2. (I B) Q C 3. el invariante se preserva en la ejecución del cuerpo, i.e. si I B vale en el estado e1 entonces I vale en el estado e2 4. v es decreciente, i.e. v@e1 > v@e2 5. (I v c) B entonces para cualquier valor de las variables del programa que haga verdadera P C, el ciclo termina y hace verdadera Q C, es decir, el ciclo es correcto para su especificación (P C, Q C ). 1. P C I //vale P C : s == 0 i == x Supongamos que vale P C y veamos que vale I 1. i == x implica i x. 2. x 0 implica i s == 0 y i == x implica (i..x] == (x..x] == 0 == s. Los puntos 1,2 y 5 se demuestran usando lógica proposicional exclusivamente. Por lo tanto, (i == x s == 0) (0 i x s == (i..x]). Los puntos 3 y 4 quedan para después del primer parcial
7 Retomamos ejemplo sumat Retomamos ejemplo sumat 2. (I B) Q C // invariante I : 0 i x s == (i..x] // B : (i > 0) //vale Q C : i == 0 s == (0..x] Supongamos que vale I B y veamos que vale cada parte de Q C. Por I sabemos que 0 i. Por B sabemos i 0. Entonces, i == 0. Por I sabemos s == (i..x], y recién mostramos que i == 0, luego s == (0..x]. 5. (I v c) B //v c : i 0 // (B) : (i > 0) Supongamos que vale I (v c). Debemos ver que vale B. Esto es inmediato ya que (v c) == i 0 == B Arreglos Arreglos versus listas Secuencias de una cantidad fija de variables del mismo tipo. Se declaran con un nombre, un tamaño y un tipo. Ejemplo: int a[10]; // arreglo de 10 elementos enteros int a[]={0,1,2,3,4,5,6,7,8,9; //Inicializado Nos referimos a los elementos a través del nombre del arreglo y un índice, entre corchetes, que va de 0 a la dimensión menos uno: a[0], a[1],..., a[9] //acceso aleatorio Una referencia a una posición fuera del rango (usualmente) da error (en tiempo de ejecución). El tamaño y el tipo de un arreglo se mantienen invariantes a lo largo de la ejecución. Ambos son secuencias de elementos de un tipo dado. En el lenguaje de especificación tratamos a ambos con listas por comprensión. Longitud Los arreglos tienen longitud fija; las listas, no. Acceso Los elementos de un arreglo se acceden de manera directa, e independiente de los demás. a[i] accede al elemento en posición i-ésima del arreglo. Tiene dirección de memoria propia, y por lo tanto se le puede asignar un valor. Los elementos de una lista se acceden secuencialmente, empezando por la cabeza. Para acceder al i-ésimo elemento de una lista, hay que obtener i veces la cola y luego la cabeza
8 Arreglos en C++ Leyendo un arreglo Los arreglos en C++ son referencias. problema sumarray(a : [Int], tam : Int) = res : Int{ requiere P: tam == a ; asegura Q: res == a[0.. a ); No hay forma de averiguar su tamaño una vez que fueron creados; el programa tiene que encargarse de almacenarlo de alguna forma. Al ser pasados como argumentos, en la declaración de un parámetro no se indica su tamaño. Cuando se usan como argumentos de funciones en C y C++, pasan automáticamente como referencia ( no por copia!). 29 int sumarray(int a[], int tam){ int j = 0; int s = 0; // Pc: j == 0 s == a[0..j) while (j <tam) { // invariante 0 j tam s == a[0..j) // variante tam j; s = s + a[j]; j++; // Q c : s == a[0.. a ) // vale Q: res == a[0.. a ); 30 Inicialización de arreglos Modificando un arreglo problema init (a : [Int], x : Int, n : Int){ requiere n == a n > 0; modifica a; asegura todos([a[j] == x, j [0..n)]); asegura todos([a[j] == x, j [0..n)]); void init (int a[], int x, int n) { int i = 0; // vale P c : i == 0 while (i < n) { a[i]=x; i = i + 1; // invariante I: 0 i n todos([a[j] == x, j [0..i)]) // variantev : n i // vale Q c : i == n todos([a[j] == x, j [0..i)]) problema ceroporuno(a : [Int], tam : Int){ requiere tam == a ; modifica a; asegura a == [if i == 0 then 1 else i i pre(a)[0..tam)]; void ceroporuno(int a[], int tam) { int j = 0; // vale P c : j == 0 while (j < tam) { // invariante a[0..j) == [if i == 0 then 1 else i i pre(a)[0..j)]; // 0 j tam a[j..tam) == pre(a)[j..tam) // variante tam j; if (a[j] == 0) a[j] = 1; j++; 31 32
Arreglos. Algoritmos y Estructuras de Datos I. Arreglos en C++ Arreglos y listas
Arreglos Algoritmos y Estructuras de Datos I Primer cuatrimestre 2007 Teórica de imperativo 3 Algoritmos de búsqueda secuencias de una cantidad fija de variables del mismo tipo se declaran con un nombre,,
Más detallesEsquema. Condicionales. Ejemplo de condicional. Demostración. P { if (B) uno else dos } Q. P { while (B) cuerpo } Q
Esquema Teórica Imperativo 2 Estructuras de control Instrucción de asignación P{v=e Q // estado 1; vale P: true v:=e; // vale Q: v == e@1 && para toda vi: vi == vi@1 Instrucciones de Control de Flujo P
Más detallesComplejidad computacional. Algoritmos y Estructuras de Datos I. Complejidad computacional. Notación O grande
Complejidad computacional Algoritmos y Estructuras de Datos I Segundo cuatrimestre de 2014 Departamento de Computación - FCEyN - UBA Algoritmos - clase 10 Introducción a la complejidad computacional y
Más detallesPasaje de argumentos en lenguajes de programación. Algoritmos y Estructuras de Datos I
Pasaje de argumentos en lenguajes de programación Algoritmos y Estructuras de Datos I Segundo cuatrimestre de 2014 Departamento de Computación - FCEyN - UBA Programación imperativa - clase 5 Pasaje de
Más detallesEspecificación de programas. Algoritmos y Estructuras de Datos I. Correctitud de ciclos
Especificación de programas Algoritmos y Estructuras de Datos I Segundo cuatrimestre de 2014 Departamento de Computación - FCEyN - UBA Simulacro Coloquio Final - clase 1 Sean dos programas, cada uno recibe
Más detallesVerificación de programas. Algoritmos y Estructuras de Datos I. Semánticas formales: Primer cuatrimestre de 2016
Verificación de programas Algoritmos y Estructuras de Datos I Primer cuatrimestre de 2016 Departamento de Computación - FCEyN - UBA Programación imperativa - clase 14 Verificación automática de programas
Más detallesProgramación imperativa. Algoritmos y Estructuras de Datos I. Lenguaje C. Segundo cuatrimestre de 2014
Programación imperativa Algoritmos y Estructuras de Datos I Segundo cuatrimestre de 2014 Departamento de Computación - FCEyN - UBA Programación imperativa - clase 4 Modelo de cómputo: Un programa consta
Más detallesLenguajes de programación. Algoritmos y Estructuras de Datos I. Lenguajes compilados. Lenguajes compilados
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
Más detallesOrdenamiento de un arreglo. Algoritmos y Estructuras de Datos I. Demostración. Cota inferior de complejidad tiempo para sorting
Ordenamiento de un arreglo Algoritmos y Estructuras de Datos I Segundo cuatrimestre de 2014 Departamento de Computación - FCEyN - UBA Algoritmos - clase 12 Algoritmos de ordenamiento, segunda parte Tenemos
Más detallesParadigmas de lenguajes de programación. Introducción a la programación imperativa. Lenguaje C. Programación imperativa
Paradigmas de lenguajes de programación Introducción a la programación imperativa Algoritmos y Estructuras de Datos I Paradigma: Definición del modo en el que se especifica el cómputo (que luego es implementado
Más detallesOrdenamiento de un arreglo. Algoritmos y Estructuras de Datos I. Algoritmo downsort. Upsort vs downsort
Ordenamiento de un arreglo Algoritmos y Estructuras de Datos I Primer cuatrimestre de 2014 Departamento de Computación - FCEyN - UBA Programación imperativa - clase 8 Algoritmos de ordenamiento II Tenemos
Más detallesAlgoritmos de Búsqueda
Introducción a la Computación Algoritmos de Búsqueda Esteban E. Mocskos (emocskos@dc.uba.ar) Facultad de Ciencias Exactas y Naturales, UBA CONICET 11/10/2017 E. Mocskos (UBA CONICET) Algoritmos de Búsqueda
Más detallesIntroducción a la computación. Charlie
Introducción a la computación Charlie Estado Se denomina estado en un modelo de cómputo a un punto en la ejecución de un programa en dicho modelo. En el modelo de Von Neumann esto responde al valor de
Más detallesLenguaje de programación S (Davis/Sigal/Weyuker) Lógica y Computabilidad. Ejemplo 1. Ejemplo 2
Lógica y Computabilidad Verano 2011 Departamento de Computación - FCEyN - UBA Computabilidad - clase 4 Lenguaje S, estado, descripción instantánea, cómputo, funciones parciales computables, minimización
Más detallesIntroducción a la Computación
Introducción a la Computación Primer Cuatrimestre de 2012 Corrección de Algoritmos 1 Especificación, algoritmo y programa Especificación de un problema: Qué problema tenemos? Lenguaje formal (ej. lógica
Más detallesBloque 1. Conceptos y técnicas básicas en programación
Bloque 1. Conceptos y técnicas básicas en programación 1. Introducción 2. Datos y expresiones. Especificación de algoritmos 3. Estructuras algorítmicas básicas 4. Iteración y recursión 5. Iteración y recursión
Más detallesAlgoritmos y programas. Algoritmos y Estructuras de Datos I
Algoritmos y programas Algoritmos y Estructuras de Datos I Primer cuatrimestre de 2012 Departamento de Computación - FCEyN - UBA Programación funcional - clase 1 Funciones Simples - Recursión - Tipos de
Más detallesESTRUCTURAS DE CONTROL
ESTRUCTURAS DE CONTROL En lenguajes de programación, las estructuras de control permiten modificar el flujo de ejecución de las instrucciones de un programa. Con las estructuras de control se puede: De
Más detallesCentro Asociado Palma de Mallorca. Antonio Rivero Cuesta
Centro Asociado Palma de Mallorca Antonio Rivero Cuesta La Sintaxis de Java II... 6 Estructuras de control... 7 Estructuras de selección... 8 Sentencia if... 9 Sentencia if - else... 12 Operador condicional...
Más detallesPruebas de Validez (Correctness) de Algorithmos.
Pruebas de Validez (Correctness) de Algorithmos. Jonatan Gómez 11th September 2004 1 Introducción Uno de los aspectos mas importantes en el desarrollo de programas para computador es determinar cuando
Más detallesTema 1 INTRODUCCIÓN A LOS LENGUAJES DE PROGRAMACIÓN
Tema 1 INTRODUCCIÓN A LOS LENGUAJES DE PROGRAMACIÓN - Introducción - Sintaxis - Semántica básica - Tipos de datos - Expresiones y enunciados - Procedimientos y ambientes - Tipos abstractos de datos y módulos
Más detallesFunciones recursivas
Introducción a la Computación Funciones recursivas Esteban E. Mocskos (emocskos@dc.uba.ar) Facultad de Ciencias Exactas y Naturales, UBA CONICET 13/09/2017 E. Mocskos (UBA CONICET) Funciones Recursivas
Más detallesEl lenguaje P. Lógica y Computabilidad ( ) símbolos p. Verano convenciones. Lógica Proposicional - clase 1
Lógica y Computabilidad Verano 2011 Departamento de Computación - FCEyN - UBA Lógica Proposicional - clase 1 Lenguaje de lógica proposicional, semántica, tautología, consecuencia semántica, conjunto satisfacible,
Más detallesTema 06: Recursividad
Tema 06: Recursividad M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com edfrancom@ipn.mx @edfrancom edgardoadrianfrancom (Prof. Edgardo A. Franco) 1 Contenido Recursión Recursividad Programación
Más detallesLección 3 Sentencias de control
3.1. INTRODUCCIÓN - Hasta aquí: ejecución secuencial de los programas. - Aquí vamos a ver: Lección 3 Sentencias de control Sentencias de control Sentencias condicionales: if- y switch-case Sirven para
Más detallesComplejidad de algoritmos recursivos
Tema 3. Complejidad de algoritmos recursivos 1. INTRODUCCIÓN... 1 CLASIFICACIÓN DE FUNCIONES RECURSIVAS... 1 DISEÑO DE FUNCIONES RECURSIVAS... 2 2. VENTAJAS E INCONVENIENTES DE LA RECURSIVIDAD... 4 3.
Más detallesOperadores de comparación
Operadores de comparación Los operadores de comparación en C son: Igual (==) Distinto (!=) Mayor (>) y Mayor o igual (>=) Menor (
Más detallesEstructuras de Control
Algorítmica y Lenguajes de Programación Estructuras de Control Estructuras de Control. Introducción Hasta ahora algoritmos han consistido en simples secuencias de instrucciones Existen tareas más complejas
Más detallesCentro Asociado Palma de Mallorca. Antonio Rivero Cuesta
Centro Asociado Palma de Mallorca Introducción Práctica de Programación Java Antonio Rivero Cuesta Sesión III La Sintaxis de Java II... 6 Estructuras de Control... 7 Estructuras de Selección... 8 Sentencia
Más detallesAlgoritmos Iterativos de Búsqueda y Ordenación y sus tiempos
Estructura de Datos y Algoritmos Algoritmos Iterativos de Búsqueda y Ordenación y sus tiempos 1. Algorimos de ordenación Discutiremos el problema de ordenar un array de elementos. A los efectos de simplificar
Más detallesTema 2: Desarrollo de Algoritmos. E.E. de Algorítmica
Tema 2: Desarrollo de Algoritmos E.E. de Algorítmica Temas a tratar Identificadores Variables Constantes Tipos de Datos Separadores Operadores Aritméticos Unarios Relacionales y Condicionales Nivel de
Más detallesIntroducción al análisis de algoritmos
Estructura de Datos y Algoritmos Introducción al análisis de algoritmos 1. Eficiencia en tiempo de Ejecución Cuando resolvemos un problema nos vemos frecuentemente enfrentando una elección de programas,
Más detallesIntroducción a C++ y Code::Blocks
Introducción a C++ y Práctica Imperativo Clase 1 Luis Agustín Nieto Departamento de Computación, FCEyN,Universidad de Buenos Aires. 28 de mayo de 2010 Menu de esta Tarde Funcional Vs. Imperativo (Intérprete
Más detallesAlgoritmo de Euclides
Algoritmo de Euclides Melanie Sclar Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires AED III Melanie Sclar (UBA) Algoritmo de Euclides AED III 1 / 21 Ejercicio 2.8 de la práctica Ejercicio
Más detallesClases e instancias. Algoritmos y Estructuras de Datos I. Clases e instancias. memoria dinámica.
Algoritmos Estructuras de Datos I Primer cuatrimestre de 2014 Departamento de Computación - FCEN - UBA Programación imperativa - clase 10 Memoria dinámica listas enlazadas Clases e instancias El paquete
Más detallesLENGUAJES Y COMPILADORES
LENGUAJES Y COMPILADORES Repaso. La clase pasada presentamos el lenguaje imperativo simple y dimos las ecuaciones para casi todas las construcciones del lenguaje. En efecto, teníamos que [ ] Σ
Más detallesJava para programadores
Java para programadores Java y Servicios Web I Master en Ingeniería Matemática Manuel Montenegro Dpto. Sistemas Informáticos y Computación Desp. 467 (Mat) montenegro@fdi.ucm.es Contenidos Variables. Tipos
Más detallesProgramación Estructurada. Sesión 4:Estructuras de control
Programación Estructurada Sesión 4:Estructuras de control Contextualización En la sesión anterior vimos las estructuras condicionales, mediante éstas somos capaces de elegir qué expresiones usaremos, pero
Más detallesALGORÍTMICA. Dpto. Ingeniería de Sistemas y Automática Facultad de Ciencias Universidad de Valladolid.
ALGORÍTMICA Dpto. Ingeniería de Sistemas y Automática Facultad de Ciencias Universidad de Valladolid. Indíce Algoritmo Elementos de un algoritmo: Variables, Constantes, Expresiones Datos: Definición y
Más detallesBloque II. Elementos del lenguaje de programación Java
Bloque II. Elementos del lenguaje de programación Java 1.Introducción a los lenguajes de programación 2. Estructura de un programa 3. Datos y expresiones simples 4. Instrucciones de control 5. Entrada/salida
Más detallesTipos de datos en S. Lógica y Computabilidad. Codificación de variables y etiquetas de S. Codificación de programas en S
Tipos de datos en S Lógica y Computabilidad Verano 2011 Departamento de Computación - FCEyN - UBA Computabilidad - clase 5 Codificación de programas, Halting problem, diagonalización, tesis de Church,
Más detallesabril de 2017 Desarrollo de aplicaciones en Java Tipos de datos primitivos Tipos de datos Elementos de aplicaciones simples
Desarrollo de aplicaciones en Java Generación de código fuente Compilación Ejecución Elementos de aplicaciones simples EII147-01-02 Introducción a las tecnologías de información Escuela de Ingeniería Industrial
Más detallesIntroducción al lenguaje C
Introducción al lenguaje C Programación 2 Profesorado de Informática CeRP del Suroeste, Colonia, Uruguay 15 de marzo de 2016 Programación 2 Introducción al lenguaje C 15 de marzo de 2016 1 / 34 Objetivos
Más detallesMódulo. = Asignación = = Comp. de igualdad!= Com. de desigualdad <= Comp. menor o igual >= Comp. mayor o igual AND lógico OR lógica.
EQUIVALENCIAS BÁSICAS ENTRE PASCAL Y C A continuación se presentan algunas equivalencias básicas entre estos lenguajes de programación : Operadores en lenguaje C: Operador Descripción % Módulo = Asignación
Más detallesAlgoritmos y Estructuras de Datos Tema 2: Diseño de Algoritmos
Algoritmos y Estructuras de Datos Tema 2: Diseño de Algoritmos 1! 1. Algoritmos recursivos " 1.1 Algoritmos recursivos. Recursión simple " 1.2 Algoritmos con vuelta atrás y ejemplos! 2. Complejidad de
Más detallesEstructura repetitiva while
Estructura repetitiva while Hasta ahora hemos empleado estructuras SECUENCIALES y CONDICIONALES. Existe otro tipo de estructuras tan importantes como las anteriores que son las estructuras REPETITIVAS.
Más detallesTipos de Datos de python (2ª parte):
Tipos de Datos de python (2ª parte): Enteriormente hemos visto algunos de los tipos de datos que maneja python. Vimos: int, float, chr, str, bool También vimos como convertir datos a cada uno de estos
Más detallesProgramación II Recursividad Dr. Mario Rossainz López
5. RECURSIVIDAD 5.1. Introducción La recursividad es una técnica en la que una función o método se hace llamadas a sí misma en el proceso de la realización de sus tareas. La recursividad da al programador
Más detallesLenguajes de Programación Programación funcional
Lenguajes de Programación Programación funcional Roberto Bonvallet Departamento de Informática Universidad Técnica Federico Santa María Concepto de función En el paradigma imperativo: Una función es una
Más detallesAnálisis de algoritmos. Recursividad
Análisis de algoritmos Recursividad 1 Matrushka La Matrushka es una artesanía tradicional rusa. Es una muñeca de madera que contiene otra muñeca más pequeña dentro de sí. Ésta muñeca, también contiene
Más detallesOperadores aritméticos
Bloque 3.2 Operadores aritméticos Suma : x + y Resta : x y Multiplicación : x * y División : x / y Módulo : x % y (resto de la división Si los operandos son enteros tipo del resultado
Más detallesPara entender la recursividad primero tenemos que entender la recursividad
Para entender la recursividad primero tenemos que entender la recursividad Funcional Clase 1 Matias Reparaz, Agustín Nieto Departamento de Computación, FCEyN,Universidad de Buenos Aires. 20 de Septiembre
Más detallesOperadores de comparación
Operadores de comparación Los operadores de comparación en C son: Igual (==) Distinto (!=) Mayor (>) y Mayor o igual (>=) Menor (
Más detallesAlgoritmo, Estructuras y Programación I Ing. Marglorie Colina
Unidad II: Fundamentos de la Programación Estructurada Algoritmo, Estructuras y Programación I Ing. Marglorie Colina Estructura General de un Programa Zona de ficheros de cabecera de las librerías Zona
Más detallesANEXO XVII DE LA RESOLUCION N
Hoja 1 de 7 UNIVERSIDAD NACIONAL DE CÓRDOBA Facultad de Ciencias Exactas Físicas y Naturales República Argentina Programa de: Código: Informática Carrera: Materia común Res. Nº Plan: Puntos:3.5 Escuela:
Más detallesControl de Flujo. Estructuras de Control! Experiencia Educativa de Algorítmica CONTROL DE FLUJO
Control de Flujo Estructuras de Control Experiencia Educativa de Algorítmica 1 Introducción El estilo de como escribimos y analizamos un algoritmo se convierte en una de las principales características
Más detallesMultiplicación de matrices simétricas
Multiplicación de matrices simétricas La traspuesta de una matriz A n n es definida como una matriz A T n n tal que A T [i, j] =A[j, i] paracadai, j 2{1,...,n} Además, una matriz A es simétrica si A =
Más detallesPHP: Lenguaje de programación
Francisco J. Martín Mateos Carmen Graciani Diaz Dpto. Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla Tipos de datos Enteros Con base decimal: 45, -43 Con base octal: 043, -054
Más detallesCiclos. Recordando Estructuras de Control Básicas: SELECCIÓN (condición) SECUENCIAL
Ciclos Fundamentos de Programación Recordando Estructuras de Control Básicas: Una secuencia es una serie de estatutos que se ejecutan uno después de otro. Selección (condición) ejecuta diferentes estatutos
Más detallesTipos algebraicos y abstractos. Algoritmos y Estructuras de Datos I. Tipos algebraicos
Algoritmos y Estructuras de Datos I 1 cuatrimestre de 009 Departamento de Computación - FCEyN - UBA Programación funcional - clase Tipos algebraicos Tipos algebraicos y abstractos ya vimos los tipos básicos
Más detallesPROGRAMACIÓN UNIDADES
PROGRAMACIÓN Semestre: Segundo Horas: 90 horas Hrs/sem: 4.5 Créditos: 9 Clave: AI-02 DESCRIPCIÓN DE LA ASIGNATURA Al finalizar el curso el alumno tendrá el conocimiento y la capacidad de implementar programas
Más detallesBloque 1. Conceptos y técnicas básicas en programación
Bloque 1. Conceptos y técnicas básicas en programación 1. Introducción 2. Datos y expresiones. Especificación de algoritmos 3. Estructuras algorítmicas básicas 4. Iteración y recursión 5. Iteración y recursión
Más detallesBúsqueda Binaria. Universidad de Buenos Aires. Universidad Nacional del Comahue. Training Camp 2017
Búsqueda Binaria Leopoldo Taravilse 1 Juan Cruz Piñero 2 1 Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires 2 Facultad de Informática Universidad Nacional del Comahue Training Camp
Más detallesProgramación Estructurada
Programación Estructurada Técnica de programación que consiste en construir programas de fácil comprensión. Es mucho más sencillo entender la codificación del programa, que se habrá hecho en diferentes
Más detallesTema 2. El lenguaje JAVA
Tema 2. El lenguaje JAVA Nomenclatura habitual Variables Tipos de variables Tipos primitivos Referencias Arrays Operadores Operadores de Java Precedencia de operadores Sentencias de control Sentencias
Más detallesIntroducción a Haskell. Cecilia Manzino
Paradigmas de programación Un paradigma de programación representa un estilo particular o filosofía para la construcción del software. Los más comunes dan lugar a los siguientes tipos de programación:
Más detallesAsignación de Memoria (Allocation) Algoritmos y Estructuras de Datos I. Asignación de Dinámica de Memoria
Asignación de Memoria (Allocation) Algoritmos y Estructuras de Datos I Segundo cuatrimestre de 2014 Departamento de Computación - FCEyN - UBA Programación imperativa - clase 14 Memoria dinámica y listas
Más detallesProgramación Orientada Objetos. Estructuras de control if, If else, switch
Programación Orientada Objetos Estructuras de control if, If else, switch Estructuras de control Las estructuras condicionales controlan si una sentencia o bloque de sentencias se ejecutan, en función
Más detalles1. Programas y funciones computables
Computabilidad 1 Índice 1. Programas y funciones computables 3 1.1. El lenguaje S........................................... 3 1.2. Programas de S......................................... 3 1.3. Macros...............................................
Más detallesTema 6 Control de Flujo
Tema 6 Control de Flujo Contenidos 1. Secuencia de Instrucciones. 2. Sentencias Condicionales. if switch 3. Estructuras de Repetición. while for do while ( break / continue ) 2 1. Secuencia de Instrucciones
Más detallesEstructuras de Datos Lineales y Arborescentes
1/1 Estructuras de Datos Lineales y Arborescentes Josefina Sierra Santibáñez 25 de marzo de 2017 2/1 Estructuras de Datos Lineales y Arborescentes En este tema se utilizan estructuras de datos genéricas
Más detallesApunte Laboratorio ALPI - El lenguaje de programación Pascal
Apunte Laboratorio ALPI - El lenguaje de programación Pascal 1 2 ÍNDICE GENERAL Índice 1. Estructura de un Programa en Pascal 3 2. Sintaxis de Pascal 4 2.1. Uso de mayúsculas.....................................
Más detallesConceptos de Programación Intérprete PYTHON
Introducción a la Computación Conceptos de Programación Intérprete PYTHON M. E. Buemi (mebuemi@dc.uba.ar) Facultad de Ciencias Exactas y Naturales, 23/03/2016 Outline Programar Python Programación imperativa
Más detallesSentencias de control. Condiciones
Sentencias de control Condiciones Son las preguntas básicas a las que se puede responder sí o no Para implementar el control del flujo, son muy útiles unas expresiones que permiten comparar dos variables
Más detallesEspecificación Clase 2
Especificación Clase 2 Lenguaje de especificación Departamento de Computación, FCEyN, Universidad de Buenos Aires. 27 de marzo del 2015 Menú del día Especificación Repaso del lenguaje de especificación
Más detallesSESIÓN DE EJERCICIOS E1
SESIÓN DE EJERCICIOS E1 Primera parte: ejercicios test Ejercicio 1 Qué definición de constantes es la correcta en lenguaje C? a) #define N=25; b) #define N 25 c) int N=25; d) int N 25 Ejercicio 2 La expresión
Más detallesFuncionamiento de las computadoras
Funcionamiento de las computadoras Introducción a las ciencias de la computación Antonio López Jaimes UNIVERSIDAD AUTÓNOMA METROPOLITANA UNIDAD IZTAPALAPA Plan de la presentación El modelo de von Neuman
Más detallesEstructuras de control
Estructuras de control Introducción Los algoritmos vistos hasta el momento han consistido en simples secuencias de instrucciones; sin embargo, existen tareas más complejas que no pueden ser resueltas empleando
Más detallesDefiniciones recursivas Lógica 2017
Definiciones recursivas Lógica 2017 Instituto de Computación 7 de marzo Instituto de Computación (InCo) Definiciones recursivas Curso 2017 1 / 1 Recursión Dado un conjunto inductivo, sabemos exactamente
Más detalles5. ESTRUCTURAS DE REPETICIÓN
5. ESTRUCTURAS DE REPETICIÓN Las estructuras de repetición, permiten la ejecución de una lista o secuencia de instrucciones () en varias ocasiones. El número de veces que el bloque
Más detallesTAD CONJUNTOS Y MULTICONJUNTOS
TAD CONJUNTOS Y MULTICONJUNTOS INTRODUCCIÓN Qué es un conjunto? Un conjunto en matemática es una colección de objetos. Los objetos no mantienen ninguna relación aparente entre ellos y tampoco están obligados
Más detallesfundamentos de programación (unidad 4) programación estructurada en Java
fundamentos de programación (unidad 4) programación estructurada en Java Para ver una copia completa de la licencia, acudir a la dirección http://creativecommons.org/licenses/by-nc-sa/2.5/es/legalcode.es
Más detallesTema 4.- Recursión e iteración
UNIVERSIDAD DE CÓRDOBA ESCUELA POLITÉCNICA SUPERIOR DE CÓRDOBA DEPARTAMENTO DE INFORMÁTICA Y ANÁLISIS NUMÉRICO PROGRAMACIÓN DECLARATIVA INGENIERÍA INFORMÁTICA ESPECIALIDAD DE COMPUTACIÓN CUARTO CURSO PRIMER
Más detallesRESEÑA DE LENGUAJE C
RESEÑA DE LENGUAJE C VARIABLES La función main. Es el punto de entrada al programa. void main(void) Aquí escribo mi programa Tipos de datos. Char. El char es una variable de 1 byte. Almacena números enteros.
Más detallesFundamentos PHP. El término puntuación nos referimos a la sintaxis usada en PHP para la terminación de una línea de código (;)
Tags Fundamentos PHP La Sintaxis de PHP se deriva de muchos lenguajes de programación principalmente de C pero Perl también ha tenido mucha influencia en esta sintaxis Con las últimas incorporaciones agregadas,
Más detallesEstructuras de Control (y su forma en Python y en C) Clase 5 Introducción a la Computación Patricia Borensztejn
Estructuras de Control (y su forma en Python y en C) Clase 5 Introducción a la Computación Patricia Borensztejn Estructuras de Control En el modelo de ejecución secuencial que vimos, el procesador repite:
Más detallesListas y Recursión. Taller de Álgebra I. Primer Cuatrimestre de 2015
Listas y Recursión Taller de Álgebra I Primer Cuatrimestre de 2015 Un nuevo tipo: Listas Tipo Lista Las listas pueden contener elementos de cualquier tipo (incluso listas) [1] :: [Integer] [1, 2] :: [Integer]
Más detallesProblemas fáciles, difíciles e imposibles
Problemas fáciles, difíciles e imposibles La computadora lo resuelve todo? Santiago Figueira Departamento de Computación FCEyN, UBA Semana de la Computación 2015 1 Qué son los métodos efectivos? Intuitivamente
Más detallesObjetivos de la práctica: - Trabajar las estructuras de control repetitivas en la realización de programas.
Objetivos de la práctica: - Trabajar las estructuras de control repetitivas en la realización de programas. Sentencias de Control repetitivas (o bucles) Al igual que las estructuras selectivas, el bucle
Más detallesMientras (expresión lógica) Instrucciones a repetir mientras la expresión lógica es verdadera Fin Mientras
Clase teórica 7 Algoritmos en C Página 1 de 5 INSTRUCCIÓN WHILE Una forma más general que el FOR para realizar iteraciones es el WHILE (mientras), el cual permite repetir una serie de instrucciones mientras
Más detallesInformática. JavaScript: Lenguaje de programación. Fco J. Martín Mateos Carmen Graciani
Informática JavaScript: Lenguaje de programación Fco J. Martín Mateos Carmen Graciani Dpto. Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla Literales Enteros Con base decimal:
Más detallesLenguaje C. República Bolivariana de Venezuela Fundación Misión Sucre Aldea Fray Pedro de Agreda Introducción a la Programación III
República Bolivariana de Venezuela Fundación Misión Sucre Aldea Fray Pedro de Agreda Introducción a la Programación III Lenguaje C 1 Puntos previos Los códigos fuentes generados en C requieren ser compilados
Más detallesREPASO ARRAYS O ARREGLOS UNIDIMENSIONALES EN JAVA. EJEMPLOS DE CÓDIGO. (CU00903C)
APRENDERAPROGRAMAR.COM REPASO ARRAYS O ARREGLOS UNIDIMENSIONALES EN JAVA. EJEMPLOS DE CÓDIGO. (CU00903C) Sección: Cursos Categoría: Lenguaje de programación Java nivel avanzado I Fecha revisión: 2039 Resumen:
Más detallesUniversidad de Valladolid. Departamento de informática. Campus de Segovia. Estructura de datos Tema 1: Recursividad. Prof. Montserrat Serrano Montero
Universidad de Valladolid Departamento de informática Campus de Segovia Estructura de datos Tema 1: Recursividad Prof. Montserrat Serrano Montero ÍNDICE Conceptos básicos Ejemplos recursivos Recursividad
Más detallesIntroducción rápida a la programación (estructurada ) con C++
Introducción rápida a la programación (estructurada ) con C++ A B No A? Si B A Los Bloques pueden ser una línea de código o un modulo (función o subrutina) que pueden estar contenido en otro archivo de
Más detallesEs la estructura que permite ejecutar los comandos solamente si se cumple una determinada condición. La sintaxis más usual:
Más scripts de Shell Además de las herramientas para manejo de variables que se explicaron anteriormente, el shell nos permite utilizar herramientas para manejo de ciclos y para estructuras condicionales,
Más detallesAlgoritmos y Programación Orientada a Objetos I. Contenedoras de tamaño fijo
Algoritmos y Programación Orientada a Objetos I Contenedoras de tamaño fijo Agenda Motivación Contenedoras de tamaño fijo Instrucciones repetitivas Agenda Motivación Contenedoras de tamaño fijo Instrucciones
Más detallesEstructura de datos y Programación
Estructura de datos y Programación Tema: Conceptos Básicos- Estructuras de control - Arreglos Ing. Analia Méndez Ing. Raquel Zarco Año: 2012 ELEMENTOS DE UN PROGRAMA EN JAVA El programa Java consta de
Más detallesEsquemas repetitivos en Fortran 90. Esquemas repetitivos en Fortran 90. Esquemas repetitivos en Fortran 90. Tipos de Esquema
Los esquemas repetitivos permiten implementar iteraciones del lenguaje algorítmico (mientras, repetir, para, hasta). Podemos dividir los esquemas según: - Se conozcan el número de iteraciones a priori,
Más detallesProgramación digital I Escuela de Sistemas Facultad de Ingeniería Gilberto Diaz
Vectores Programación digital I Escuela de Sistemas Facultad de Ingeniería Gilberto Diaz Tipos de Datos: Simples: son las unidades mínimas para almacenar un valor, ejemplo: enteros, caracteres, reales.
Más detalles