Programación Concurrente: Septiembre 2007 David Fernández-Amorós
|
|
- Francisco Godoy Acuña
- hace 5 años
- Vistas:
Transcripción
1 El juego del laberinto concurrente se juega en un tablero rectangular de n filas y m columnas. En cada casilla puede haber una pared, un espacio vacío o un coco. El objetivo de cada coco es salir del laberinto. Cada casilla tiene como máximo ocho posiciones adyacentes (incluyo las diagonales). Un coco se va movio dentro del tablero, siempre que tenga alguna casilla adyacente libre, hasta que consigue llegar a una de las casillas del rectángulo más externo, que se consideran la salida del laberinto. El desplazamiento sólo es posible a una casilla vacía. Cada coco mantiene una lista de las casillas por las que ha pasado. La siguiente casilla para un coco se calcula de la siguiente manera: Se analizan las direcciones de desplazamiento en el orden de las agujas del reloj, empezando por la dirección arriba y a la izquierda. Si la posición actual es (x,y), entonces la primera dirección es la que lleva a (x-1, y-1), después, la de (x,y-1), a continuación la de (x+1,y-1) y así sucesivamente. La primera dirección que proporcione una casilla libre y que no haya sido visitada se utiliza para moverse. Si todas las casillas vecinas han sido visitadas, entonces se levanta esta restricción y el coco se mueve en la primera dirección, según el orden explicado, en la que haya una casilla libre. Si no se encuentra ninguna casilla libre adyacente, el proceso de evaluación de casillas vuelve a empezar. Las casillas adyacentes no pueden cambiar mientras dura el proceso de evaluación de la situación, pero otros cocos pueden examinar el contenido de esas mismas casillas. Evidentemente, dos cocos distintos no pueden moverse al mismo tiempo hacia la misma casilla. Se pide simular el juego del laberinto concurrente mediante un programa concurrente escrito en pseudocódigo utilizando semáforos. Utilizar un único tipo de proceso: coco. Para seguir la simulación, los cocos deben emitir unos mensajes por pantalla. Cada mensaje debe incluir el número de coco, la posición que ocupa y las posiciones de las casillas que ha visitado. Cada coco debe emitir un mensaje indicando en qué posición del tablero empieza. Esta posición inicial se debe elegir aleatoriamente entre las casillas vacías, o bien al iniciarse el proceso, o bien en el programa principal. También deben emitirse mensajes cada vez que un coco decida moverse, especificando de dónde a dónde se produce el movimiento. Los cocos también deben emitir un mensaje antes de salir del laberinto. La simulación debe contar con unas estructuras de datos que permitan resolver razonablemente el problema. Además, se prestará atención para evitar las situaciones de interbloqueo, inanición y espera activa. Se debe procurar el máximo nivel de concurrencia entre los procesos. Si se identifica un problema-tipo (productores/consumidores o lectores/escritores) debe mencionarse explícitamente (incluyo, en su caso, la prioridad más adecuada) antes de proceder con el pseudocódigo. Es muy importante que el comportamiento de los cocos se ajuste al enunciado, tanto en los aspectos específicamente concurrentes como en los demás. Es muy importante leer con atención el enunciado para responder adecuadamente a lo que se nos pide. En principio, la forma óptima de simular el comportamiento que nos piden depería principalmente de la proporción de paredes frente a casillas vacías y a la 1
2 proporción de número de cocos frente a número de casillas vacías. Un programa que fuera muy eficiente en un tablero con muchos cocos y pocas casillas libres, donde podría haber varios cocos mirando la misma casilla, no lo sería en otro contexto donde hubiera pocos cocos, y por tanto, pocas posibilidades de que dos cocos quisieran leer la misma casilla al mismo tiempo. Afortunadamente, no tenemos que darle muchas vueltas a esta cuestión: el enunciado nos dice que debe ser posible que varios cocos evalúen la misma casilla. Esto encaja a la perfección con uno de los dos problemas-tipo de la asignatura: lectores y escritores. El esquema de los lectores y escritores es, en la práctica, la única manera en la que varios procesos pueden leer un recurso concurrentemente. Siempre que no se trate de un recurso de sólo lectura, es decir, de un constante. Si es posible que los procesos puedan leer y puedan escribir en un recurso, entonces o bien se bloquea el recurso antes de acceder a el, o bien tenemos un esquema de lectores y escritores, en el que existen unos protocolos de entrada a la lectura y de entrada a la escritura que preparan el acceso al recurso. Un problema bastante frecuente es el de leer variables compartidas sin pedir exclusión mutua. Esto es un error porque como hemos señalado en el párrafo anterior, si hay un proceso que puede modificar la variable, no podremos saber que el valor que hemos leído es correcto, tampoco podremos saber si ha cambiado desde el momento de la lectura. Otra cuestión interesante es la de la granularidad. Una posibilidad, un tanto simplista, es considerar el tablero como un único recurso. Otra posibilidad que aumenta considerablemente la concurrencia es considerar que cada casilla es un recurso distinto. Lo bueno de este enfoque es que no es mucho más complicado. Se trata de aplicar el esquema lectores y escritores a cada casilla. En este caso, hemos elegido la prioridad para la escritura, con el fin de evitar la inanición, aunque también hay argumentos a favor de la prioridad para la lectura. program laberinto de cocos; const N = 10; M = 15; Ncocos = 10; // Arrays para calcular facilmente las casillas adyacentes vecinas_x = {-1,0,1,1,1,0,-1,-1}; vecinas_y = {-1, -1, -1, 0, 1, 1, 1, 0}; var mutex_mensaje : semaphore; // Las variables del modelo de lectores y escritores mutex, lector, escritor : array [1..N, 1..M] of semaphore; nl, nle, nee : array [1..N, 1..M] of integer; escribio : array[1..n, 1..M] of boolean; // Variables para indices de bucles; i,j : integer; // Para guardar las posiciones iniciales de los cocos, // no se usan fueran del programa principal coordenada_x, coordenada_y : array[1..ncocos] of integer; tablero : array[1..n][1..m] of { vacia, pared, uncoco } 2
3 procedure entrada_lectura(x,y : integer); // Si se está escribio o existen escritores en espera // el lector debe ser bloqueado if (escribio[x,y] or nee[x,y] > 0) then nle[x,y] := nle[x,y] + 1; wait(lector[x,y]) nle[x,y] := nle[x,y] - 1; nl[x,y] := nl[x,y] + 1; if (nle[x,y] > 0) then // Desbloqueo encadenado signal(lector[x,y]) signal(mutex[x,y]) ; // entrada_lectura procedure entrada_escritura(x,y : integer); // Si se está escribio o existen lectores el escritor // debe ser bloqueado if (nl[x,y] > 0 or escribio[x,y]) then nee[x,y] := nee[x,y]+ 1; wait(escritor[x,y]); nee[x,y] := nee[x,y]- 1; escribio[x,y] = true; signal(mutex[x,y]) ; // entrada_escritura procedure salida_lectura(x,y : integer); nl[x,y] := nl[x,y] - 1; // Desbloquear un escritor si es posible if (nl[x,y] = 0 and nee[x,y] > 0) then signal(escritor[x,y]); ;// salida_lectura procedure cierra_escritura(x,y : integer); escribio[x,y] = false; // Desbloquear un escritor que esté a la espera. // Si no, desbloquear un lector en espera if (nee[x,y] > 0) then signal(escritor[x,y]); if (nle[x,y] > 0) then signal(lector[x,y]); // cierra_escritura process type coco(id : integer, coor_x, coor_y : integer); var l,k : integer; // Variables para bucles // La tabla es para uso interno del proceso, //la lista es para imprimir las casillas por las que paso tabla_visitadas : array[1..n][1..m] of boolean; lista_visitadas : array[1..maxlon] of record x,y : integer ; lon_visitadas : integer; // Longitud de la lista de visitadas // En la primera vuelta de inspección de las casillas adyacentes importa // si las hemos visitado ya o no, en la segunda vuelta no importa_visitadas : boolean; salir_de_bucle : boolean; // Nos dice si ya nos hemos movido de casilla o no estoy_mirando_casilla_adyacente_numero : integer; coordenada_x, coordenada_y, candidata_x, candidata_y : integer; 3
4 procedure escribir_lista_visitadas; var k : integer; for k := 1 to lon_visitadas do write('(', lista_visitadas.x[k], ','. lista_visitadas.y[k], ') '); writeln; ; // escribir_lista_visitadas coordenada_x := coor_x; coordenada_y := coor_y; for l:= 1 to N do for k:= 1 to M do tabla_visitadas = false; lon_visitadas = 1; // Primer mensaje wait(mutex_mensaje); writeln( Hola, soy el coco número ',id, y he comenzado en la posición (',coordenada_x,,,coordenada_y, ) ); signal(mutex_mensaje); tabla_visitadas[coordenada_x, coordenada_y] := true; lista_visitadas[lon_visitadas].x := coordenada_x; lista_visitadas[lon_visitadas].y := coordenada_y; // Mientras no estemos en el rectángulo del borde, es decir, en posición de terminar... while coordenada_x > 1 and coordenada_x < N and coordenada_y > 1 and coordenada_y < M) importa_visitadas := true; salir_del_bucle := false; while not salir_del_bucle estoy_mirando_casilla_adyacente_numero := 1; while estoy_mirando_casilla_adyacente_numero < 9 and not salir_de_bucle candidata_x := coordenada_x + vecinas_x[estoy_mirando_casilla_adyacente_numero]; candidata_y := coordenada_y + vecinas_y[estoy_mirando_casilla_adyacente_numero]; if (importa_visitadas and tabla_visitadas[candidata_x][candidata_y] = false) or not importa_visitadas then // Miramos si la casilla candidata esta vacia entrada_lectura(candidata_x, candidata_y); if (tablero[candidata_x, candidata_y] = vacia) then salida_lectura(candidata_x, candidata_y); // Pedimos bloqueo de escritura sobre la candidata // y sobre la casilla actual entrada_escritura(candidata_x,candidata_y); 4
5 entrada_escritura(coordenada_x,coordenada_y); // Hay que darse cuenta de que despues de soltar el bloqueo // de lectura, otro coco puede haberse movido a la casilla, // por lo que nos toca comprobar si sigue vacía despues de // obtener el bloqueo de escritura. // Si la casilla candidata sigue vacia... if (tablero[candidata_x, candidata_y] = vacia) then tablero[candidata_x, candidata_y] := uncoco; tablero[coordenada_x, coordenada_y] := vacia; salida_escritura(coordenada_x, coordenada_y); salida_escritura(candidata_x, candidata_y); wait(mutex_mensaje); write( Soy el coco,id, y me muevo de la casilla (,coordenada_x,,, coordenada_y, ) hasta la (, candidata_x,,, candidata_y, ) y he pasado ya por: ); escribir_lista_visitadas; signal(mutex_mensaje); coordenada_x := candidata_x; coordenada_y := candidata_y; tablas_visitadas[coordenada_x, coordenada_y] := true; lon_visitadas := lon_visitadas + 1; lista_visitadas[lon_visitadas].x := coordenada_x; lista_visitadas[lon_visitadas].y := coordenada_y; salir_del_bucle := true; salida_escritura(coordenada_x, coordenada_y); salida_escritura(candidata_x, candidata_y); ; // if tablero[...] = vacia salida_lectura(candidata_x, candidata_y); // if (importa_visitadas...) estoy_mirando_casilla_adyacente_numero := estoy_mirando_casilla_adyacente_numero + 1; // while estoy_mirando_casilla_adyacente_numero if importa_visitadas = true then // Hemos terminado la primera vuelta de inspeccion // y seguimos sin casilla para mover importa_visitadas := false; // Hemos hecho las dos vueltas y no hemos encontrado nada salir_del_bucle := true; // while not salir_de_bucle; // while coordenada_x... wait(mutex_mensaje); writeln ( Soy el coco,id, como ya he llegado al borde del tablero me voy ); signal(mutex_mensaje); // process coco 5
6 var cocos : array[1..ncocos] of coco; // Programa principal for i:=1 to N do for j:=1 to M do tablero[i][j] := vacia; // Codigo para poner las paredes en su sitio... // Paredes colocadas init(mutex_mensaje, 1); // Ahora elegimos unas coordenadas iniciales para los cocos for i := 1 to Ncocos do repeat // Elegimos al azar dos numeros. La coordenada x entre 2 y N-1 y la y entre 2 y M - 1, // no queremos que la posición inicial esté en la zona de salida del tablero coordenada_x[i] = random (2..N-1); coordenada_y[i] = random(2..m-1); until tablero[coordenada_x[i]][coordenada_y[i]] = vacia; tablero[coordenada_x[i]][coordenada_y[i]] = uncoco; ; // Inicializamos las estructuras para los lectores y escritores for i:= 1 to N do for j:= 1 to M do init(mutex[i,j],1); init(escritor[i,j], 0); init(lector[i,j], 0); nl[i,j] = 0; nle[i,j] = 0; nee[i,j] = 0; escribio[i,j] = false; co for i := 1 to Ncocos do cocos[i] = coco(i, coordenada_x[i], coordenada_y[j]); co. 6
1. Equivalencia de herramientas. Implemente las primitivas de los buzones mediante monitores.(2pt).
1. Equivalencia de herramientas. Implemente las primitivas de los buzones mediante monitores.(2pt). monitor mibuzon; const MAXBUZON =...; export s, receive, empty; buffer : array[1..maxbuzon] of item;
Más detalles1. Enunciado. 2. Trabajo del alumno
1. Enunciado El problema de las ocho reinas consiste en situar ocho reinas en un tablero de ajedrez de forma que ninguna de ellas ataque a otra. Una solución clásica consiste en generar todas las posiciones
Más detallesExamen de Programación Concurrente - Clave: a Junio 2008 Departamento de Lenguajes, Sistemas Informáticos e Ingeniería del Software.
Junio 2008 Programación Concurrente 1/6 Normas Examen de Programación Concurrente - Clave: a Junio 2008 Departamento de Lenguajes, Sistemas Informáticos e Ingeniería del Software Este examen es un cuestionario
Más detallesLección 6: Ejemplos de programación con semáforos
Lección 6: Ejemplos de programación con semáforos El problema de la cena de los filósofos El problema de los lectores y escritores Ejercicios Gestión de concurrencia mediante paso de testigo (implementación
Más detallesSISTEMAS OPERATIVOS I (Sistemas) / SISTEMAS OPERATIVOS (Gestión) septiembre 2009
SISTEMAS OPERATIVOS I (Sistemas) / SISTEMAS OPERATIVOS (Gestión) septiembre 2009 4. (2 p) Dos procesos A y B se ejecutan concurrentemente en un determinado sistema. El proceso A ejecuta unas tareas ( Tareas
Más detallesDonde Condicion es una expresión booleana, es decir, que puede tomar el valor verdadero (true) o falso (false).
SETECIA REPETITIVA (SETECIA WHILE) Condicion while do Sentencia Donde Condicion es una expresión booleana, es decir, que puede tomar el valor verdadero (true) o falso (false). Valores
Más detallesTipos de datos definidos por el usuario. 1. Arreglos
Tipos de datos definidos por el usuario Al definirnos como programadores estamos declarándonos creadores de software y, como tal, tenemos necesidades de herramientas que nos sirvan para este trabajo que
Más detallesEXAMENES RESUELTOS DE PROGRAMACION I
EXAMENES RESUELTOS DE PROGRAMACION I Comentarios por Jose Antonio Vaqué EXAMEN DE septiembre 1994 Soluciones no oficiales 1.- Cuál de las siguientes sentencias es incorrecta?: VAR A : ARRAY [0..3] OF ARRAY
Más detallesPROGRAMACIÓN CONCURRENTE. Tema 5 Monitores
PROGRAMACIÓN CONCURRENTE Tema 5 Monitores 1 Indice Definición de los monitores Sincronización condicional usando monitores Algunos problemas con monitores 2 Problemas de las regiones críticas condicionales
Más detallesMientras duerme, el barbero espera a ser despertado por un nuevo cliente.
1. Enunciado Tres barberos trabajan en una barbería. La barbería cuenta con tres sillones de barbero, cada uno asignado a uno de los barberos. Cada barbero desarrolla el siguiente plan de trabajo: El barbero
Más detallesPráctica de programación concurrente ETSI Informática, UNED David Fernández-Amorós 1.
1. Enunciado Cuando un enfermo quiere a ir al médico, hace lo siguiente; primero necesita que uno de los operadores esté libre. Hay cinco operadores. El operador le indica al enfermo su número de operador
Más detallesPráctica de programación concurrente ETSI Informática, UNED David Fernández-Amorós 1.
1. Enunciado En el bingo hay un presentador y varios jugadores. Antes de comenzar el juego, cada cliente se genera aleatoriamente una cantidad de cartones entre 1 y 10. Obviamente, todos los números de
Más detallesInstituto de Computación. Facultad de Ingeniería. Universidad de la República Examen de Programación 2 03 de Agosto de 2006 Generalidades:
Instituto de Computación. Facultad de Ingeniería. Universidad de la República Examen de Programación 2 03 de Agosto de 2006 Generalidades: La prueba es individual y sin material. La duración es 3 horas.
Más detallesUniversidad de Valladolid. Departamento de informática. Campus de Segovia. Estructura de datos Tema 4: Ordenación. Prof. Montserrat Serrano Montero
Universidad de Valladolid Departamento de informática Campus de Segovia Estructura de datos Tema 4: Ordenación Prof. Montserrat Serrano Montero ÍNDICE Conceptos básicos Elección de un método Métodos directos
Más detallesGrafo acíclico orientado cuyos nodos corresponden a sentencias individuales.
GRAFOS DE PRECEDENCIA Grafo acíclico orientado cuyos nodos corresponden a sentencias individuales. Un arco de un nodo Si al nodo Sj significa que la sentencia Sj puede ejecutarse sólo cuando ha acabado
Más detallesU nidad 6: A rreglos: U nidim ensionales y m ultidim ensionales
ARREGLOS Introducción Primero que todo, es importante conocer el concepto de estructura de datos. Una estructura de datos es "una colección de datos organizados de un modo particular." Las estructuras
Más detallesSISTEMAS OPERATIVOS I (Sistemas) / SISTEMAS OPERATIVOS (Gestión) septiembre 2009
SISTEMAS OPERATIVOS I (Sistemas) / SISTEMAS OPERATIVOS (Gestión) septiembre 2009 4. (2 p) Dos procesos A y B se ejecutan concurrentemente en un determinado sistema. El proceso A ejecuta unas tareas ( Tareas
Más detallesEJEMPLO DE PARTIDA. Pongo en la casilla: 4 El tablero queda como: X
El objetivo de este ejercicio es crear un programa que juegue a tres en raya contra un oponente humano. Tras cada movimiento el programa debe mostrar el tablero y permitir mover al humano. El programa
Más detallesPROBLEMAS CLÁSICOS. EL PROBLEMA DE LOS FILÓSOFOS COMENSALES.
PROBLEMAS CLÁSICOS. EL PROBLEMA DE LOS FILÓSOFOS COMENSALES. Cinco filósofos pasan su vida pensando y comiendo. Los filósofos comparten una mesa circular rodeada por cinco sillas, una para cada uno de
Más detallesIntroducción al Lenguaje de Programación Ada
Instrumentación de Tiempo Real Introducción al Lenguaje de Programación Ada Mario Aldea Rivas Departamento de Electrónica y Computadores Universidad de Cantabria GRUPO DE COMPUTADORES Y TIEMPO REAL Mario
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 detallesTrabajo Práctico Nº 4 Iteración
Trabajo Práctico Nº 4 Iteración Ejercicio 1: Realice una traza y muestre la salida de cada secuencia de instrucciones. for i:= 0 to 0 do for i:= 1 to -1 do for i:= 1 downto 0 do Ejercicio 2: Escriba un
Más detallesProgramación de Sistemas Concurrentes y Distribuidos 1 a Convocatoria curso 12/13
Programación de Sistemas Concurrentes y Distribuidos 1 a Convocatoria curso 12/13 5 de febrero de 2013 Dpto. de Informática e Ingeniería de Sistemas Universidad de Zaragoza Ejercicio 1 (1.5 ptos.) Considérese
Más detallesEquivalencia de herramientas. Implementar las primitivas de los semáforos a partir de las regiones críticas condicionales. (2.5pt)
INGENIERÍA TÉCNICA en INFORMÁTICA de SISTEMAS ASIGNATURA: PROGRAMACIÓN CONCURRENTE CÓDIGO ASIGNATURA: 403182/533012 MATERIAL AUXILIAR: NINGUNO DURACIÓN: 2 horas Fecha 25 de Enero de 2005 CONTACTO : programacion.concurrente@lsi.uned.es
Más detallesFUNDAMENTOS DE PROGRAMACIÓN LABORATORIO SESIÓN 2
FUNDAMENTOS DE PROGRAMACIÓN LABORATORIO SESIÓN 2 EJERCICIO 1 VALIDACIÓN DE DATOS DE ENTRADA Modificar el programa del cálculo del MCD de dos números enteros positivos para validar los datos de entrada
Más detallesUso de recursos compartidos
Uso de recursos compartidos Cada proceso o hebra se ejecuta de forma independiente. Sin embargo, cuando varias hebras (o procesos) han de acceder a un mismo recurso, se ha de coordinar el acceso a ese
Más detallesEste es un arreglo de números enteros, o sea que guarda una serie de variables de tipo INTEGER, todas agrupadas en una sola estructura.
Arreglos en Pascal 1.- Introducción a los Arreglos. Algunos de los tipos de datos que vimos eran los tipos INTEGER, CHAR, BOOLEAN, etc.. Un arreglo, mas que un tipo de dato es una estructura que nos permite
Más detallesAPUNTES DE CÁTEDRA: ARREGLOS MULTIDIMENSIONALES
Facultad de Ciencias Exactas, Ingeniería y Agrimensura (U.N.R.) Escuela de Ciencias Exactas y Naturales Departamento de Matemática Cátedra: Computación (L.M. - P.M.) Prof. responsable: Mgr. María del Carmen
Más detallesConcurrencia, exclusión mutua y sincronización. Capítulo 5 HungriaBerbesi
Concurrencia, exclusión mutua y sincronización Capítulo 5 HungriaBerbesi 1 Concurrencia Múltiples aplicaciones Aplicaciones estructuradas Estructura del sistema operativo 2 Concurrencia 3 Sección Crítica:
Más detallesEjercicios con Monitores
Ejercicios con Monitores 57. Aunque un monitor garantiza la exclusión mutua, los procedimientos tienen que ser reentrantes. Explicar por qué. 58. Demostrar que incluso si la implementación del semáforo
Más detallesSISTEMAS OPERATIVOS: COMUNICACIÓN Y SINCRONIZACIÓN ENTRE PROCESOS. Procesos concurrentes y problemas en la comunicación y la sincronización
SISTEMAS OPERATIVOS: COMUNICACIÓN Y SINCRONIZACIÓN ENTRE PROCESOS Procesos concurrentes y problemas en la comunicación y la sincronización Contenido 2 Concurrencia. Condiciones de carrera. Exclusión mutua
Más detallesEXAMENES RESUELTOS DE PROGRAMACION I
EXAMENES RESUELTOS DE PROGRAMACION I Comentarios por Jose Antonio Vaqué EXAMEN DE septiembre 1994, Reserva Soluciones no oficiales 1.- Determinar los valores reales válidos en Modula-2: a) 56.2F-54 y 2.2
Más detallesEl problema de los Filósofos
El problema de los Filósofos Problemas de Programación Concurrente Solución con Semáforos Para evitar una situación de interbloqueo se limita el número de filósofos en disposición de comer a 4. PROGRAM
Más detallesESTRUCTURA SECUENCIAL ESTRUCTURA SELECTIVA
ESTRUCTURA SECUENCIAL Es aquélla en la que una acción (instrucción) sigue a otra en secuencia. Las tareas se suceden de tal modo que la salida de una es la entrada de la siguiente y así sucesivamente hasta
Más detallesPrimitivas de Sincronización (continuación) MONITORES: Primitiva de alto nivel, es a nivel de lenguajes como: ADA, PASCAL, JAVA.
Primitivas de Sincronización (continuación) MONITORES: Primitiva de alto nivel, es a nivel de lenguajes como: ADA, PASCAL, JAVA. Carácterísticas: Construcción de alto nivel. Estructura de datos estática:
Más detalles*** SOLUCIONES *** SISTEMAS OPERATIVOS Examen Parcial 24 de Abril de 2010
Calificación SISTEMAS OPERATIVOS Examen Parcial 24 de Abril de 2010 1 2 3 4 Nombre *** SOLUCIONES *** Titulación Dispone de tres horas para realizar el examen 1 (5 puntos) Test. En cada uno de los siguientes
Más detallesNombre y Apellidos: Especialidad y Grupo:
Nombre y Apellidos: Especialidad y Grupo: FUNDAMENTOS DE INFORMÁTICA 15-septiembre-2003 PROGRAMA de Estructuras repetitivas y alternativas (2 puntos) 1. Dado el módulo EjForAni.bas, modificarlo para visualizar
Más detallesDepartamento de Informática Universidad de Valladolid Campus de Segovia. TEMA 4: TIPOS ABSTRACTOS DE DATOS (TADs)
Departamento de Informática Universidad de Valladolid Campus de Segovia TEMA 4: TIPOS ABSTRACTOS DE DATOS (TADs) TIPOS ABSTRACTOS DE DATOS (TADs) Introducción Un contraejemplo completo Metodología de la
Más detallesArreglos y Subrangos
Arreglos y Subrangos Programación 1 InCo - FING Contents 1 Tipo subrango 2 1.1 Subrangos de enteros......................... 2 1.2 Subrangos de caracteres....................... 2 1.3 Operaciones con subrangos.....................
Más detallesCalidad del Software. Ejercicios Tema 4 Conceptos de pruebas
Tema 4 Conceptos de Pruebas Calidad del Software Ejercicios Tema 4 Conceptos de pruebas Calidad del Software Enfoque de Caja Blanca: Prueba del camino básico FUNCIÓN PASCAL Especificar un conjunto de pruebas
Más detallesApuntes elaborados por: Aaron Asencio, Eduardo Quevedo, Raquel López Revisado por: Javier Miranda el???
Apuntes elaborados por: Aaron Asencio, duardo Quevedo, Raquel López Revisado por: Javier Miranda el??? Tema 9: rafos Los grafos no son más que la versión general de un árbol, es decir, cualquier nodo de
Más detallesResolución de Problemas y Algoritmos Clase 6: Repetición (continuación)
Resolución de Problemas y Algoritmos Clase 6: Repetición (continuación) Dr. http://cs.uns.edu.ar/~sag Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur Bahía Blanca,
Más detallesPrueba objetiva 2 - Clave b
Normas Prueba objetiva 2 - Clave b Concurrencia 2011-2012 - Segundo semestre Lenguajes, Sistemas Informáticos e Ingeniería de Software Este es un cuestionario que consta de 7 preguntas en 7 páginas. Todas
Más detallesLección 10: Ejemplos de programación con semáforos
Lección 10: Ejemplos de programación con semáforos El problema de la cena de los filósofos El problema de los lectores y escritores Ejercicios Gestión de concurrencia mediante paso de testigo (implementación
Más detallesProgramación de Sistemas Concurrentes y Distribuidos 2 a Convocatoria curso 12/13
Programación de Sistemas Concurrentes y Distribuidos 2 a Convocatoria curso 12/13 13 de septiembre de 2013 Dpto. de Informática e Ingeniería de Sistemas Universidad de Zaragoza Ejercicio 1 (2.0 ptos.)
Más detallesSecciones críticas y exclusión mutua
Secciones críticas y exclusión mutua Lecturas: Andrews, secciones 3.1, 3.2, 3.3, 3.4 Ben-Ari, sección 2.2 Manuel Carro Universidad Politécnica de Madrid Este texto se distribuye bajo los términos de la
Más detallesPrimer Parcial. Programación 1 Instituto de Computación Año 2017
Nº Parcial: Nombre: CI: Primer Parcial. Programación 1 Instituto de Computación Año 2017 a) -1919293949 b) -1-1-1-1-1-1 c) 01020304050 d) No imprime nada e) 012345 Respuesta: 3 Observaciones: Cada ejercicio
Más detallesLENGUAJES DE PROGRAMACIÓN. Trabajo Práctico - Junio de 2016
Trabajo Práctico - Junio de 2016 INSTRUCCIONES El trabajo práctico debe realizarse de manera individual. No debe realizarse en grupo. Se penalizará cualquier uso compartido de las soluciones propuestas
Más detallesProcesamiento de Lenguajes (PL) Curso 2014/2015. Práctica 1: analizador descendente recursivo
Procesamiento de Lenguajes (PL) Curso 2014/2015 Práctica 1: analizador descendente recursivo Fecha y método de entrega La práctica debe realizarse de forma individual, como las demás prácticas de la asignatura,
Más detallesEstructuras de Programación
Apunte del curso ALGORITMOS y PROGRAMACIÓN (FI-UBA, Prof. Ing. F. J. LAGE, J. T. P. Ing. Z. CATALDI; A.T.P. Srta. A Pauluzzi, Sr. C Corradino, Sr. F Gómez Estructuras de Programación Todo programa puede
Más detalles28/10/2016. Procesamiento de Secuencias. Procesamiento de Secuencias. Procesamiento de Secuencias. Procesamiento de Secuencias
Un tipo particular de problemas para el cual resulta adecuada la iteración es el procesamiento de secuencias de valores. Dra. Jessica Andrea Carballi jac@cs.uns.edu.ar Dpto. de Ciencias e Ingeniería de
Más detallesHay tres juegos, que se juegan utilizando las mismas fichas y tablero, pero con distintas estrategias, y complejidad:
Serie 302 del Pacru Idiomas y más información Si esta información no está en su idioma, visite la página web www.pacru.com, seleccione el idioma que quiere e imprima las reglas. En este folleto tiene toda
Más detallesUnidad 1: Gestión de Procesos
Unidad 1: Gestión de Procesos Tema 1, Concurrencia: Exclusión mutua y sincronización. 1.1 Problema de la sección crítica, alternativas al uso de semáforos: - Regiones críticas, Monitores, Variables de
Más detallesREM Visualizar por pantalla los números de Fibonacci REM comprendidos dentro de los límites del intervalo [a,b]. REM
Nombre y Apellidos: Especialidad y Grupo: FUNDAMENTOS DE INFORMÁTICA 9-febrero-2001 PROGRAMA de Estructuras repetitivas y alternativas (2.5 puntos) 1. Los números de Fibonacci constituyen una serie en
Más detallesSi L es recursivo, entonces es recursivamente numerable
Si L es recursivo, entonces es recursivamente numerable Slide 19 program GeneraRec (output); procedure sgte (var x: string); (* calcula la siguiente x en el orden natural *) begin... end; var x: string;
Más detallesProgramación concurrente
Programación concurrente Master de Computación I Conceptos y recursos para la programación concurrente: I.6 Sincronización basada en memoria compartida. J.M. Drake M. Aldea Procesos concurrentes y memoria
Más detalles1.2.4 Listas enlazadas
1.2.4 Listas enlazadas Las listas enlazadas son tipos de datos dinámicos que se construyen con nodos. Un nodo es un registro con al menos, dos campos, uno de ellos contiene las componentes y se le denomina
Más detallesTEMA 7: INICIO A LA PROGRAMACIÓN CON SCRATCH
TEMA 7: INICIO A LA PROGRAMACIÓN CON SCRATCH Scrath es un entorno de programación visual y multimedia destinado a la realización de secuencias animadas con o sin sonido y al aprendizaje de la programación.
Más detallesINICIACIÓN A LA PROGRAMACIÓN: SCRATCH
INICIACIÓN A LA PROGRAMACIÓN: SCRATCH Scrath es un programa gratuito que te permite trabajar online, en su web, o instalando el programa en tu propio ordenador. La versión online http://www.scartach.mit.edu,
Más detallesSISTEMAS OPERATIVOS:
SISTEMAS OPERATIVOS: Lección 6: Procesos concurrentes y problemas en la comunicación y la sincronización Jesús Carretero Pérez Alejandro Calderón Mateos José Daniel García Sánchez Francisco Javier García
Más detallesISO Tema 8,
ISO Tema 8, 2017-2018 Pablo González Nalda Depto. de Lenguajes y Sistemas Informáticos 13 de abril de 2018 Modificado el 27 de abril de 2018 de la presentación 1 2 3 4 5 6 7 2 / 32 1 2 3 4 5 6 7 3 / 32
Más detallesLENGUAJES DE PROGRAMACIÓN. Trabajo Práctico - Septiembre de 2017
Trabajo Práctico - Septiembre de 2017 INSTRUCCIONES El trabajo práctico debe realizarse de manera individual. No debe realizarse en grupo. Se penalizará cualquier uso compartido de las soluciones propuestas
Más detallesEJERCICIOS PARA EMPEZAR CON PHP
EJERCICIOS PARA EMPEZAR CON PHP EJERCICIO 1: MOSTRAR VALORES Cargar en dos variables tu nombre, tu apellido y tu edad e insertarlos en la frase Mi nombre es y tengo años EJERCICIO 2: CALCULAR UN PORCENTAJE
Más detallesComunicación y sincronización
Comunicación y sincronización Son conceptos relacionados con la interacción entre los procesos La comunicación se refiere al paso de información de un proceso a otro La sincronización corresponde al cumplimiento
Más detallesEl objetivo de este ejemplo es cargar 2 arrays aleatoriamente con Random y después mostrar la suma de esos arrays en un nuevo array.
BIDIMENSIONALES VISUAL STUDIO ~ 1 ~ SUMA DE 2 ARRAYS El objetivo de este ejemplo es cargar 2 arrays aleatoriamente con Random y después mostrar la suma de esos arrays en un nuevo array. RANDOM Clase Random:
Más detallesTema 2.- Ordenación (Parte I)
En la elaboración de estos apuntes han participado los siguientes alumnos: Helena Hernández Obregón (Curso 200/2002), Eduardo Quevedo, Raquel González y Aarón Asencio (Curso 2003/200). Actualizado por
Más detallesTipos y Estructuras de Control. Dpto. de Ciencias e Ingeniería de la Computación UNIVERSIDAD NACIONAL DEL SUR
Tipos y Estructuras de Control Dpto. de Ciencias e Ingeniería de la Computación UNIVERSIDAD NACIONAL DEL SUR Datos: variables y constantes Tipos básicos: entero, real, char, lógico Estructuras de control
Más detallesPráctica parcial: el juego del pinball, parte 1
Programación I Práctica parcial: el juego del pinball, parte 1 (ENTREGA OBLIGATORIA) El objetivo de esta práctica es implementar un juego de pinball. Como sabréis el juego consiste en controlar los desplazamientos
Más detallesTitulación: Ingeniero Técnico en Informática de Gestión Curso: 2º
1. Ejercicio (3 puntos) Dado una lista L, cuyo contenido son números enteros y están ordenados en orden ascendente, escribir en Java un programa óptimo que crea y devuelve dos listas: una de pares y otra
Más detallesExamen de Lenguajes de Alto Nivel
Examen de Lenguajes de Alto Nivel Septiembre 2004 Cuestiones (4 cuestiones, 4 puntos en total; contestar brevemente de forma razonada) 1) Se dispone del siguiente paquete con un procedimiento P que puede
Más detallesPrograma-Me 2013 Regional on line Problemas
First, solve the problem. Then, write the code John Johnson. Programa-Me 2013 Regional on line Problemas 6 de marzo de 2013 Universidad Complutense de Madrid I.E.S. Antonio de Nebrija (Móstoles) http://www.programa-me.com
Más detallesPrimer Parcial. Programación 1 Instituto de Computación Año 2011
No. Parcial: Nombre: CI: Primer Parcial. Programación 1 Instituto de Computación Año 2011 Observaciones: Cada ejercicio tiene una única opción correcta. Una respuesta correcta suma 2 puntos Una respuesta
Más detalles1. ESTRUCTURA DE UN PROGRAMA PASCAL Todo programa escrito en lenguaje Pascal, del más simple al más complejo, tiene la siguiente estructura:
1. ESTRUCTURA DE UN PROGRAMA PASCAL Todo programa escrito en lenguaje Pascal, del más simple al más complejo, tiene la siguiente estructura: PROGRAM Nombre_del_programa; ZONA de DECLARACIONES ZONA de INSTRUCCIONES
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 detallesUniversidad Autónoma del Estado de Hidalgo Instituto de Ciencias Básicas e Ingeniería Área Académica de Computación y Electrónica
Universidad Autónoma del Estado de Hidalgo Instituto de Ciencias Básicas e Ingeniería Área Académica de Computación y Electrónica Licenciatura en Sistemas Computacionales Sistemas Operativos Docente: M.G.A.
Más detallesApellidos: Nombre: Matrícula: UNIVERSIDAD POLITÉCNICA DE MADRID
Apellidos: Nombre: Matrícula: Concurrencia (parte 2)/clave: a Curso 2014/2015-2 o semestre (junio 2015) Grado en Ingeniería Informática / Grado en Matemáticas e Informática UNIVERSIDAD POLITÉCNICA DE MADRID
Más detallesInicio del programa. Entrada de datos. Proceso de datos. Salida de datos. Fin del programa
PROGRAMACIÓN 10. Prof. Dolores Cuiñas H. Recuerde que estos son apuntes muy simplificados que deberá completar con la bibliografía recomendada APUNTES Nº 4 ESTRUCTURA SECUENCIAL GENERAL La estructura secuencial
Más detallesTema 7: Árbol Binario
Apuntes elaborados por: Eduardo Quevedo, Aaron Asencio y Raquel López Revisado por: Javier Miranda el???? Tema 7: Árbol Binario En el árbol binario se combina lo mejor del array (acceso rápido a elementos,
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 detallesEstados de un proceso
Semáforos Estados de un proceso Inactivo Listo Ejecutando Completo Escribimos p.state := ready p. state := running Bloqueado Para indicar que un proceso cambia de estado Semáforo Es un tipo de dato abstracto
Más detallescol Type mismatch línea 1 3A Type mismatch c$ + j línea 2
Nombre y Apellidos: Especialidad y Grupo: FUNDAMENTOS DE INFORMÁTICA 6-septiembre-2002 CUESTIÓN de Estructuras repetitivas y alternativas (2 puntos) 1. Suponiendo que el usuario teclea los datos 1, 2,
Más detallesAlgoritmos y Estructuras de Datos II, Segundo del Grado de Ingeniería Informática, Test de Programación Dinámica, 4 de mayo 2017
Algoritmos y Estructuras de Datos II, Segundo del Grado de Ingeniería Informática, Test de Programación Dinámica, 4 de mayo 2017 Para cada uno de los dos problemas siguientes, hay que explicar cómo se
Más detalles1. Lenguaje Pascal. 2. Módulos de un Programa. 3. Tipos de Datos más utilizados. 4. Declaración de Variables
1. Lenguaje Pascal Se procederá a la comparación de las estructuras de programación utilizadas en pseudocódigo con las respectivas en lenguaje Pascal. Para ello, se seguirá de manera análoga a la descripción
Más detallesEJERCICIOS DE GRAFOS DE JUEGO
Universidad de lcalá Departamento de iencias de la omputación lgoritmia y omplejidad EJERIIOS DE GRFOS DE JUEGO Ejercicio 1). Se dispone de una matriz M de tamaño Fx (F es la cantidad de filas y la cantidad
Más detallesEstudiemos el siguiente problema, propuesto por Wirth y desarrollado por Dijkstra: Una lista de las primeras secuencias que cumplen es:
25. Algoritmos heurísticos 25.1 Concepto de heurística. Se denomina heurística al arte de inventar. En programación se dice que un algoritmo es heurístico cuando la solución no se determina en forma directa,
Más detallesTema 6. Gestión de Interbloqueo
Tema 6. Gestión de Interbloqueo Introducción (I) Protocolo de acceso a recursos compartidos: Solicitud. Utilización. Liberación. El sistema operativo suspende a los procesos cuyas solicitudes no pueden
Más detallesUTN FRLP Ing. en Sistemas de Información Algoritmos y Estructura de Datos Trabajos Prácticos Curso 2010
Práctico de Pascal Nº 2 Ejercicios para la ejercitación del Lenguaje Pascal Objetivo: Es que los alumnos conozcan un lenguaje de programación, donde puedan ejercitar los conocimiento adquiridos hasta ahora
Más detallesLa Máquina de Acceso Aleatorio (Random Access Machine)
La Máquina de Acceso Aleatorio (Random Access Machine) Nuestro modelo de cómputo secuencial es la máquina de acceso aleatorio (RAM, Random Access Machine) mostrada en la Figura 2.1, y que consiste de:
Más detallesFUNDAMENTOS DE OBJECT PASCAL
FUNDAMENTOS DE OBJECT PASCAL 1. ASPECTOS GENERALES DE LA SINTAXIS Los bloques de código quedan delimitados por y end. Se usa punto y coma como separador de sentencias de código. Comentarios: - ias líneas:
Más detallesEstructuras de Control. Secuencia y Selección
Estructuras de Control. Secuencia y Selección InCo - FING Programación 1 Contents 1 Estructuras de control 2 1.1 Clasificación.............................. 2 1.2 La secuencia..............................
Más detallesPrueba objetiva 2 - Clave a
Apellidos: Nombre: Matrícula: Normas Prueba objetiva 2 - Clave a Concurrencia 2010-2011 - Primer semestre Lenguajes, Sistemas Informáticos e Ingeniería de Software Este es un cuestionario que consta de
Más detallesPrueba objetiva 2 (4F1M) - Clave a
Apellidos: Nombre: Matrícula: Normas Prueba objetiva 2 (4F1M) - Clave a Concurrencia 2010-2011 - Segundo semestre Dpto. de Lenguajes, Sistemas Informáticos e Ingeniería de Software Este es un cuestionario
Más detallesSentencias iterativas
Sentencias iterativas 1. Objetivos Al finalizar esta actividad, serás capaz de: 1. Utilizar adecuadamente la sentencia while para generar la repetición en la ejecución de grupos de sentencias 2. Motivación
Más detallesArboles. Definiciones formales: 1) un árbol es un grafo acíclico finito T (P, E) tal que. P = E + 1 => todo arco es desconectante.
Arboles Definición: Es una estructura acíclica que, en algún sentido puede ser considerado el siguiente paso en la jerarquía de complejidad estructural. Los árboles tienen son de amplia aplicación en el
Más detallesUbound y Lbound en Visual Basic. Conocer índice superior e inferior de arrays (arreglos) Ejemplos y ejercicios. (CU00343A)
aprenderaprogramar.com Ubound y Lbound en Visual Basic. Conocer índice superior e inferior de arrays (arreglos) Ejemplos y ejercicios. (CU00343A) Sección: Cursos Categoría: Curso Visual Basic Nivel I Fecha
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 detallesModelo de Cómputo. Programación concurrente
Programa concurrente Programa concurrente: conjunto finito de procesos (secuenciales). Un proceso secuencial está escrito con un conjunto finito de acciones atómicas. Ejecución: una secuencia de acciones
Más detalles1. Equivalencia de herramientas. Implemente las primitivas de las regiones críticas condicionales con semáforos. (2pt).
1. Equivalencia de herramientas. Implemente las primitivas de las regiones críticas condicionales con semáforos. (2pt). La respuesta a esta pregunta se encuentra en el texto base de la asignatura em las
Más detallesIngeniería del Software II Ejercicios de OCL
Ingeniería del Software II Ejercicios de OCL Se dispone de un sistema cliente-cliente (no cliente-servidor) que permite jugar al ajedrez entre dos personas situadas en diferentes máquinas. La Figura 1
Más detalles