EXAMENES RESUELTOS DE PROGRAMACION I

Documentos relacionados
EXAMENES RESUELTOS DE PROGRAMACION I

Apunte Laboratorio ALPI - El lenguaje de programación Pascal

EXAMENES RESUELTOS DE PROGRAMACION I

FUNDAMENTOS DE OBJECT PASCAL

Introducción a la Programación

Módulo. = Asignación = = Comp. de igualdad!= Com. de desigualdad <= Comp. menor o igual >= Comp. mayor o igual AND lógico OR lógica.

Arreglos y Subrangos

Primer Parcial. Programación 1 Instituto de Computación Año 2017

Tipos y Estructuras de Control. Dpto. de Ciencias e Ingeniería de la Computación UNIVERSIDAD NACIONAL DEL SUR

El programa en JavaScript debe ir encerrado entre la marca script e inicializada la propiedad type con la cadena text/javascript:

Manual de turbo pascal

Introducción al Lenguaje de Programación Ada

Primer Parcial. Programación 1 Instituto de Computación Año 2011

SINTAXIS DE MODULA2. Bloque Identificador. END Identificador. [Prioridad] ; Lista_exportados ::= {Lista_importados ;} [Lista_exportados ;]

Arreglos y Subrangos

JavaScript: Operadores

Componentes Básicos. InCo. InCo Componentes Básicos 1 / 28

FUNDAMENTOS DE PROGRAMACIÓN LABORATORIO SESIÓN 2

Resolución de Problemas y Algoritmos

Estructura de un programa en Java. Tipos de datos básicos. class miprimerprograma{ // comentario, no es parte del programa

U nidad 6: A rreglos: U nidim ensionales y m ultidim ensionales

1. Lenguaje Pascal. 2. Módulos de un Programa. 3. Tipos de Datos más utilizados. 4. Declaración de Variables

Tema 1 INTRODUCCIÓN A LOS LENGUAJES DE PROGRAMACIÓN

Introducción al lenguaje C

Resolución de Problemas y Algoritmos Segundo cuatrimestre 2015 Clase 11: Construcción de primitivas (Funciones)

1. ESTRUCTURA DE UN PROGRAMA PASCAL Todo programa escrito en lenguaje Pascal, del más simple al más complejo, tiene la siguiente estructura:

APUNTES DE CÁTEDRA: ARREGLOS MULTIDIMENSIONALES

21/03/2018. Variables y Constantes. Los datos de un programa están representados por variables o constantes y tienen asociado un tipo.

Enunciado de la tercera práctica de programación I

Resolución de Problemas y Algoritmos

Fundamentos 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 (;)

Estructuras de Control. Secuencia y Selección

Repetición Condicional

Enteros. Son los números que no contienen componentes fraccionarios y, por tanto, no contienen punto decimal.

Programación. Test Autoevaluación Tema 3

Esquemas repetitivos en Fortran 90. Esquemas repetitivos en Fortran 90. Esquemas repetitivos en Fortran 90. Tipos de Esquema

TEMA 0 Gestión de Memoria Dinámica

FUNDAMENTOS DE INFORMÁTICA

Programación Web Tema 3.2 Java Script Estructura del Lenguaje. Ramón Alcarria ETSI en Topografía, Geodesia y Cartografía - UPM

La resolución de problemas es una tarea únicamente humana comprobable en todos los casos con los mismos resultados.

ALGORÍTMICA. Dpto. Ingeniería de Sistemas y Automática Facultad de Ciencias Universidad de Valladolid.

Recursión. Recursión continuación

FACULTADE DE INFORMÁTICA Departamento de Computación Estructura de Datos e da Información. Ejercicios de punteros: SOLUCIONES

Esquemas repetitivos en Fortran 90

Autoestudio 2: Variables y Operadores

Introducción a Fortran

Introducción al lenguaje C

Instituto de Computación. Facultad de Ingeniería. Universidad de la República Examen de Programación 2 03 de Agosto de 2006 Generalidades:

LENGUAJE FORTRAN. FUNCIONES Y SUBRUTINAS

Estructuras de Control. Secuencia y Selección

2.2 Nombres, Ligado y Ámbito

ARBOLES BINARIOS ORDENADOS. REPRESENTACIÓN Y OPERACIONES

Tema 2. El lenguaje JAVA

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

Unidad 1. Análisis de Algoritmos. Ing. Leonardo R. L. Estructura de datos - Generalidades Unidad I Pág 1

Introducción a PL/SQL

Fundamentos de Programación

Sentencias de control de flujo

JavaScript Básico. Elementos Básicos: Comentarios: Literales: Valores que puede tomar una variable o una constante.

Programación. Test Autoevaluación Tema 6

UNIDAD 2 Descripción de un programa

Dra. Jessica Andrea Carballido

Es un lenguaje estructurado, tiene una abundante cantidad de operadores y tipos de datos.

abril de 2017 Desarrollo de aplicaciones en Java Tipos de datos primitivos Tipos de datos Elementos de aplicaciones simples

24/8/2018. cuota monto/cantcuotas

Iteración Diagrama de SINTAXIS: IF

Tema 3. Estructuras de control

Informática General 2016 Cátedra: Valeria Drelichman, Pedro Paleo, Leonardo Nadel, Norma Morales

Programación en Pascal. Memoria dinámica

Módulo 7: Sentencias de control en Pascal

Examen de Programación 2 Diciembre de 2012

Capítulo 2: Introducción al lenguaje.

Algorítmica y Lenguajes de Programación. Punteros Introducción a estructuras dinámicas

Donde Condicion es una expresión booleana, es decir, que puede tomar el valor verdadero (true) o falso (false).

FUNDAMENTOS DE INFORMÁTICA

Módulo 8: Primitivas en Pascal

Este es un arreglo de números enteros, o sea que guarda una serie de variables de tipo INTEGER, todas agrupadas en una sola estructura.

ALGORITMOS II PSEUDOCODIGOS INTRODUCCION AL PSEINT CORPODICES VICTOR ANDRES OCHOA CORREA

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

28/08/2018. Dra. Jessica Andrea Carballido. cuota monto/cantcuotas

LENGUAJES DE PROGRAMACIÓN. Solución al Ejercicio de Autocomprobación 1

PHP: Lenguaje de programación

Informática General 2018 Cátedra: Valeria Drelichman, Pedro Paleo, Leonardo Nadel, Norma Morales

Tema 4. Control de flujo. Programación Programación - Tema 4: Control de Flujo

El lenguaje C. 1. Identificadores, constantes y variables

Centro Universitario UAEM Zumpango Ingeniería en Computación

Tema 2: Desarrollo de Algoritmos. E.E. de Algorítmica

Estructuras de Programación

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

Iteración Diagrama de SINTAXIS: IF

LENGUAJE FORTRAN. ESTRUCTURAS Y SENTENCIAS

Informática. JavaScript: Lenguaje de programación. Fco J. Martín Mateos Carmen Graciani

El FORTRAN da la posibilidad de subdividir las tareas de un programa complejo en partes simples y claras. Procedimientos Externos SUBRUTINAS

Instituto Tecnológico de Celaya

Programación I. Ingeniería Técnica Informática. Ejercicios de los Temas 4, 5, 6 y 7

Trata siempre de documentar tus funciones, pues es ayuda para el usuario.

GENERACIÓN DE CÓDIGO ORIENTADO A OBJETOS

Estructura de Datos y de la Información. Tema 1: Gestión dinámica de la memoria. Departamento de Computación Universidade da Coruña, España.

Transcripción:

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 [1..5] OF CHAR; B : ARRAY [2..6], [0..4] OF CHAR; A[0, 2] := B[3, 1]; a) La declaración de A. b) No hay ningún error. c) La declaración de B. d) La sentencia de asignación. Texto base, Tema 11.3. Formaciones anidadas. Matrices. Las dos definiciones de variables son correctas, según se ve en la página 294, y luego se asigna un elemento válido de B a un elemento válido de A, usados tal y como aparece en la página 295. Por lo tanto, no hay errores. 2.- Dadas las siguientes declaraciones: TYPE Tipo1 = RECORD CASE i : INTEGER OF -1 : x : INTEGER 1 : z : REAL; VAR a : Tipo1; Qué valores toman las componentes de a tras ejecutar: a.i := 1; a.z := 13.0; a.x := 5; a) a.z indeterminado y a.x vale 5 b) a.z vale 13.0 y a.x vale 5 c) a.z indeterminado y a.x indeterminado d) a.z vale 13.0 y a.x indeterminado Texto base, Tema 12.5 Registros con variantes. Aunque en el texto base no está demasiado claro, las variables que están en la parte variante no comparten las mismas posiciones de memoria, sino que se definen todas una tras otra. Lo que se está definiendo es una estructura igual a esta: TYPE Tipo1 = RECORD i : INTEGER ; x : INTEGER; z : REAL; El discriminante no es mas que otra variable mas, que se usa para calificar que parte es la que DEBERIA usarse, pero ambas se pueden usar indiscriminadamente. 1

3.- Una Lavadora con diferentes programas de lavado es una máquina: a) Virtual. b) Automática. c) De control manual. d) Programable. Texto base, Tema 1.1.1., Máquinas programables, página 4: Las máquinas automáticas actúan por si solas, sin necesidad de operador, aunque pueden responder a estímulos externos Otras máquinas automáticas se denominan programables, y su comportamiento no siempre es el mismo. Primero decir que esto va a juicio del equipo docente, y no tiene mucha lógica en el examen, ya que su definición de máquina programable no es muy buena, incluso diría que es muy mala. Por un lado, a la definición de máquina automática le sigue el ejemplo de un ascensor, que responde a los botones que se le pulsan, de forma mecánica y prefijada. La lavadora también responder de forma mecánica y prefijada a la selección del programa de lavado que elijamos, y la confusión puede venir del término programa de lavado, que no tiene nada que ver con un programa de ordenador. Pero ponen como ejemplo de máquina programable un tocadiscos, ya que se puede elegir el orden de los discos cuando queramos. Por eso la lavadora debe ser también una máquina programable, ya que podemos elegir el programa que deseemos en la lavadora cada vez. 4.- Dado el siguiente procedimiento: PROCEDURE Calcular(X : INTEGER; VAR B : INTEGER); B := X DIV 2; X := X * X + 3 * B + 1; END Calcular; El valor de Z tras ejecutar: Z := 5; Calcular(Z, Z); será: a) 32 b) 2 c) 5 d) Ninguna respuesta anterior es correcta Texto base, Tema 7.4.2. Paso de argumentos por referencia. Cuando entramos en el procedimiento, el valor de X se toma por valor, mientras que el de B se toma por referencia. Cualquier cambio que hagamos en B se reflejará al salir del procedimiento. Lo primero que se hace es B:= X DIV 2, y ese valor se modifica en la variable en la que se efectúa la llamada. Por eso Z pasa a valer 2. Lo que luego se hace con X ya no influye para nada. 5.- Dados los siguientes módulos de programa: DEFINITION MODULE Modulo1; TYPE Tipo1; PROCEDURE Leer; END Modulo1. IMPLEMENTATION MODULE Modulo1; PROCEDURE Leer; VAR cadena : Tipo1; cadena := datos ; END Leer; END Modulo1. a) La definición del Tipo1 es incorrecta. b) La variable cadena deberá estar declarada como ristra global en el módulo principal. c) La definición completa del Tipo1 se debe dar en el módulo principal. d) Falta el argumento del procedimiento Leer. Texto base, Tema 9.1. Definición de tipos. Página 223: Declaración_de_tipos ::= TYPE { Definición_de_tipo; } Definición_de_tipo ::= Identificador = Esquema_de_tipo Una definición de tipo, en la notación BNF deja claro que debe ser TYPE nombre = tipo y eso no se cumple en el módulo de definición. 2

6.- Cuál de las siguientes sentencias no es correcta? (el _ representa un espacio en blanco). a) WriteString( ); b) Write( ); c) Write( _ ); d) WriteString( _ ); Texto base, Tema 2.6.3.Procedimientos Write y WriteString Tanto las cadenas como los caracteres individuales se pueden encerrar entre comillas simples o dobles. La sentencia WriteString imprime una cadena. La cadena vacía o una cadena de un espacio en blanco son cadenas válidas. La sentencia Write imprime un solo carácter. Un espacio en blanco es un carácter, pero una cadena bacía no contiene ningún carácter en su interior, por lo que no es un carácter válido. 7.- Es correcto el siguiente fragmento de programa?: CONST INTEGER = 10; NUMERO = INTEGER DIV 3; VAR NIVEL : INTEGER; a) No, la declaración de la constante INTEGER es incorrecta. b) No, la declaración de la variable NIVEL es incorrecta. c) Sí, es correcta. d) No, la declaración de la constante NUMERO es incorrecta. Texto base, Tema 3.2 El vocabulario de Modula-2. Un elemento de Modula-2 puede usar como identificador un tipo de dato, ya que no son palabras reservadas del lenguaje. Por ello la redefinición de INTEGER como constante es correcta. Una constante se puede usar para definir el valor de otra, por ello la definición de NUMERO como constante es correcta (al ir justo tras otra constante, no hay que volver a indicar CONST en su definición). Una variable se define como VAR nombre : tipo_de_dato, pero en este caso INTEGER ya no es un tipo de dato, sino que es una constante, por lo que se puede usar en estas definiciones. 3

8.- Dado el siguiente fragmento de código: TYPE Ptr = POINTER TO Dato; Dato = RECORD x : INTEGER; sgte : Ptr; VAR a, b : Ptr; NEW(a); NEW(b); a^.x := 7; b^.x := 13; b^.sgte := a; a^.sgte := b; El valor de la expresión a^.sgte^.sgte^.x es: a) La expresión no tiene valor definido. b) Las asignaciones son incorrectas. c) 7. d) 13. Texto base, Tema 13.3. Variable dinámicas. Parece complejo, pero es muy sencillo. Si seguimos el programa, vemos que hace lo siguiente: TYPE Ptr = POINTER TO Dato; = RECORD x : INTEGER; sgte : Ptr; VAR a, b : Ptr; NEW(a); NEW(b); a^.x := 7; b^.x := 13; b^.sgte := a; a^.sgte := b; se define una estructura que contiene un entero, y un puntero a si misma, para que un elemento pueda apuntar a otro y realizar una estructura encadenada de registros. Se definen dos punteros con esta estructura Se crean los dos punteros Se asigna 7 al entero de una variable, y 13 al entero de la segunda Se hace que el puntero a siguiente de cada una de las estructuras apunte a la otra a^.sgte^.sgte^.x Mediante a^.sgte^ se llama al registro al que apunta a, que es b. Luego se llama al registro que se apunta mediante b^.sgte^, que nuevamente es a. Finalmente queda a.x que es el valor x del registro de la variable a, que es 7. Para verlo mas sencillo, podemos decir que a apunta a un registro que contiene (7, apunto a b ). Mientras que b apunta a un registro que vale (13, apunto a a ). 9.- El uso de comentarios en un programa es: a) Necesario para no tener errores de compilación. b) Conveniente para aumentar las líneas de programa. c) Imprescindible para documentar el programa. d) Una pesadez innecesaria. Texto base, Tema 2.7.1, página 46: Estos comentarios sirven solo como documentación del programa fuente Pregunta tonta, ya que las otras tres opciones son indiotas. 4

10.- El valor de RES tras ejecutar el siguiente fragmento será: RES := 1; FOR i := 1 TO 6 BY 2 DO LOOP j := 1; RES := RES * j; INC( j ); UNTIL j = 3 IF (RES MOD i) = 0 THEN EXIT; ELSE RES := RES DIV i; a) El uso del no es correcto. b) 0. c) El uso del EXIT no es correcto. d) 27. Texto base, Tema 10.1.2, Sentencias LOOP y EXIT El bucle LOOP no contiene ningún EXIT en su interior, sino tras el END (no confundir con el END del, ya que esta instrucción no usa el END, sino el UNTIL), y por tanto el EXIT no se usa correctamente, ya que queda fuera del bucle. EJERCICIO Realizar en Modula-2 un programa que dados los resultados de los 10 partidos de fútbol de una jornada de liga, actualice la tabla de clasificación, en la que se guarda para los 20 equipos su nombre (compuesto de un carácter) y el número de puntos hasta ese momento. 5

MODULE Examen; FROM InOut IMPORT Write, WriteString, WriteLn, WriteInt, Read; TYPE EQUIPO = RECORD (* Para guardar datos de un equipo *) Nombre : CHAR; Puntos : INTEGER; PARTIDOS = RECORD (* Para guardar datos de un partido *) Local : CHAR; Visitante : CHAR; Resultado : CHAR; VAR Tabla : ARRAY [1..20] OF EQUIPO; (* Tabla de equipos *) Partido : ARRAY [1..10] OF PARTIDOS; (* Tabla de partidos de una jornada *) Nombres : ARRAY [0..19] OF CHAR; (* Nombres de los equipos *) Local : CHAR; (* Equipo local *) Visitante : CHAR; (* Equipo visitante *) Resultado : CHAR; (* Resultado del partido *) i : INTEGER; aux : CHAR; (* Auxiliares *) (* Busca un equipo y si es correcto lo coloca en su lugar *) PROCEDURE Buscar(equipo:CHAR;numero,tipo:INTEGER) : BOOLEAN; VAR j : INTEGER; salida : BOOLEAN; salida := FALSE; FOR j:=1 TO 20 DO (* Mira que exista el equipo *) IF (equipo = Tabla[j].Nombre) THEN salida := TRUE; FOR j:=1 TO 10 DO (* Mira que no se haya usado ya *) IF (equipo = Partido[j].Local) THEN salida := FALSE; IF (equipo = Partido[j].Visitante) THEN salida := FALSE; IF (salida) THEN IF (tipo = 0) THEN Partido[numero].Local:= equipo; IF (tipo = 1) THEN Partido[numero].Visitante:= equipo; RETURN (salida); END Buscar; PROCEDURE Sumar(equipo:CHAR;puntos:INTEGER); (* Sumar los puntos a un equipo *) VAR j : INTEGER; FOR j:=1 TO 20 DO IF (equipo = Tabla[j].Nombre) THEN Tabla[j].Puntos:=Tabla[j].Puntos + puntos; END Sumar; Nombres := "ABCDEFGHIJKLMNOPQRST"; (* Inicializamos los nombres *) FOR i:=1 TO 20 DO (* Inicializamos la tabla *) Tabla[i].Nombre := Nombres[i-1]; Tabla[i].Puntos:=0; LOOP WriteString("Comenzar Nueva jornada (S/N): ");Read(aux); UNTIL (aux = 'S') OR (aux = 'N'); IF (aux = 'N') THEN EXIT; FOR i:=1 TO 10 DO (* Inicializamos los partidos *) Tabla[i].Nombre := Nombres[i-1]; Tabla[i].Puntos:=0; FOR i:=1 TO 10 DO WriteLn;WriteLn;WriteString("Datos del partido ");WriteInt(i,2); WriteLn; WriteString("Equipo Local...: ");Read(Local);WriteLn; UNTIL (Buscar(Local,i,0)); WriteString("Equipo Visitante.: ");Read(Visitante);WriteLn; UNTIL (Buscar(Visitante,i,1)); WriteString("Resultado (1-X-2): ");Read(Resultado);WriteLn; UNTIL (Resultado = '1') OR (Resultado = 'X') OR (Resultado = '2'); IF (Resultado = '1') THEN Sumar(Local,3); IF (Resultado = 'X') THEN Sumar(Local,1); Sumar(Visitante,1); IF (Resultado = '2') THEN Sumar(Visitante,3); END Examen. 6

No es nada elegante, ya que le faltan algunas verificaciones, pero funciona. Primero crea una tabla con los 20 equipos, sus nombres y los puntos a cero. Necesita usar una cadena auxiliar con los nombres, para ocupar solo una línea, aunque deberíamos asumir que ya existen los equipos. Luego para cada jornada, inicializa un vector con la estructura de la jornada, que usará luego para ir guardándose los resultados de la jornada. Va pidiendo nombres de los equipos local y visitante, verificando que los equipos existan, y que no se hayan usado en la misma jornada. Luego pide el resultado, y suma los puntos a cada equipo. No hay sitio para mas en una hoja, ni para imprimir la tabla de resultados al final. Como mejoras, habría que considerar: a) Poder meter datos en mayúsculas o minusculas. b) Nombres de equipos completos, no de un solo carácter. c) Guardarse todas las jornadas del campeonato. d) Verificar que no se repitan jornadas una vez introducidas e) Imprimir las tablas clasificatoria de cada jornada y la final, ordenadas por los puntos de cada equipo. 7