INTRODUCCIÓN A LA PROGRAMACIÓN 1. CURSO 1998/99 EXAMEN DE DICIEMBRE. 22/11/1999. PRÁCTICAS APELLIDOS NOMBRE EJERCICIO 1 Dadas las definiciones de los tipos Cadena, Logico, Fichero, Pint y Pfloat vistas en clase, y las siguientes definiciones y declaraciones (donde todas las constantes se suponen ya definidas) typedef struct { int r, c; } TComplejo; typedef struct { int c1; Cadena c2; } R1; typedef R1 TR1[MAX1]; typedef R1 * PR1; typedef struct { int c3; TR1 c4; Cadena c5; } R2; typedef R2 TR2[MAX2]; int i, j; char ch; Fichero fdat, ftex, f; R2 r, *pr; TR2 tr; Cadena palabra1, palabra2, palabra3, s, c; TComplejo c1, c2, t[2][3], suma; Y considerando que las tres primeras líneas del fichero de texto referenciado por f son Convocatoria de Diciembre. Curso 1999/2000 5+3i,2+0i -5-2i,4-1i Responda a las siguientes preguntas: 1. ¿Cuál es la sentencia que abre un fichero binario fdat de nombre datos.dat para entrada/salida? 2. Si palabra1 es “mi” y palabra2 es “carro”, ¿qué secuencia de sentencias C es necesaria para que palabra3 sea “mi carro”? Nótese el blanco entre las dos palabras. 3. Dados dos intervalos cerrados [x1,y1] e [x2,y2], ¿Cuál es la expresión lógica que vale falso si un número x no está en ninguno de los dos intervalos y cierto en caso contrario? 4. Dada una matriz N × N de enteros denominada tabla, ¿Cuál es la condición de parada que hace que un bucle while termine cuando encuentre en la diagonal principal dos elementos consecutivos que sean iguales o cuando acabe la tabla? 5. Dado el siguiente trozo de código, responda si produce errores de compilación y/o ejecución y por qué. char i=’a’, n; n=2; float m=1; 6. Dado un vector de N enteros, ¿qué problemas puede presentar el siguiente código C en tiempo de ejecución? ¿Cómo los solucionaría? for (i=1;i==N;i++) vector[i]=(i-1+N)/N; 7. Indique una única sentencia de lectura sobre el fichero f que consiga la siguiente asignación de valores: s=“Convocatoria de Diciembre. Curso 1999/2000” 8. Indique una única sentencia de lectura sobre el fichero f que consiga la siguiente asignación de valores: c1={5,3}, c2={2,0}, ch=’\n’ (Considere que el puntero de lectura está al comienzo de la segunda línea). 9. Indique el prototipo del procedimiento sumar_complejos2 que recibirá dos números complejos y devolverá la suma de ambos. 10. Indique la invocación que debe realizarse a la función sumar_complejos que consiga la siguiente asignación de valores: suma= t[0][0]+ t[0][1] 11. Indique la definición completa (cuerpo de la función) anteriormente. del procedimiento sumar_complejos2 indicado 12. Indique cómo se debería de haber declarado la variable t para que se consiga la siguiente asignación de valores: t[0][0]={2,2}, t[0][1]={1,1}, t[1][0]={4,4}, t[1][1]={3,3} 13. Dada la siguiente llamada a función, indique el prototipo de la misma funcion1 (c[i], r.c4, &tr[i].c4[j]); 14. Dada la siguiente llamada a función, indique el prototipo de la misma tr[i].c3 = funcion2 (tr[i].c5, tr[i].c4[j].c1); 15. Escriba la llamada a función necesaria para leer el registro i-ésimo de la tabla tr del fichero binario fdat. 16. Escriba la llamada a función necesaria para escribir tres números enteros a, b, c en un fichero de texto ftex separándolos por retornos de carro. 17. Defina un tipo estructura Imagen con los siguientes campos: • anchura y altura, de tipo entero • paleta, tabla de MAXC elementos de tipo entero • fuente, de tipo cadena Defina un tipo TImagen tabla bidimensional de MAXFIL filas y MAXCOL columnas de elementos de tipo Imagen. 18. Escriba la expresión para obtener el valor del campo c2 del elemento i-ésimo de la tabla que corresponde al campo c4 de la estructura apuntada por el puntero pr. 19. Escriba la expresión para obtener la dirección de memoria del campo c1 del elemento j-ésimo de la tabla que corresponde al campo c4 de la estructura i-ésima de la tabla tr. 20. Siga la traza del siguiente código, indicando la salida en pantalla. Cadena s=”esto es una prueba”; int i=0; Logico m=cierto; while (s[i]!=’\0’) { if (m) { s[i]=toupper(s[i]); /* convierte el carácter a mayúsculas */ m = !m; } if (s[i]==’ ’) /* espacio en blanco */ m = !m; i++; } puts (s); Valoración: 10 puntos (0.5 puntos por pregunta)