Departamento de Lenguajes y Sistemas Informáticos E.T.S. de Ingeniería Informática Universidad de Sevilla Avda Reina Mercedes, s/n. 41012 SEVILLA
IP1 2005-2006
Práctica 4. TABLAS Ejercicios de SINTAXIS TABLAS. SOLUCIONES 1.) No habrá inicialización. Para las 4 primeras tablas, declarar solo la variable. Para las dos últimas declarar tipo y variable. Alternar el uso de constantes. #include <stdio.h> #define CTEMP 24 #define CNOM 20 #define CAJE 8 #define CMESES 12 #define CALFA 27 typedef int TDiasMes[CMESES]; typedef char TAlfa[CALFA]; void main(void) { float temperaturas[CTEMP]; char nombre[CNOM]; int ajedrez[CAJE][CAJE]; TDiasMes diasmes; TAlfa alfabeto; } Ejemplo: #include <stdio.h> #define CTEMP 24 #define CNOM 20 #define CAJE 8 #define CMESES 12 #define CALFA 27 typedef int TDiasMes[CMESES]; typedef char TAlfa[CALFA]; void main(void) { float temperaturas[CTEMP]; char nombre[CNOM]; int ajedrez[CAJE][CAJE]; int v[5]={1,2,3,4,5}; // Inicializacion en la propia declaracion. solo en la // declaracion int w[3][3]={1,2,3,4,5,6,7,8,9}; int i,j; TDiasMes diasmes; TAlfa alfabeto;
Página 1 de 8
Departamento de Lenguajes y Sistemas Informáticos E.T.S. de Ingeniería Informática Universidad de Sevilla Avda Reina Mercedes, s/n. 41012 SEVILLA
IP1 2005-2006
printf("%d\n",ajedrez[0][0]); // Acceso a un elemento sin inicializar // Inicialización de un vector for(i=0;i #define TAM 10 typedef int Vector[TAM]; typedef int Matriz[TAM][TAM]; void InicializaVector(int,Vector); void ImprimeVector(Vector); void InicializaMatriz(int,int,Matriz); void ImprimeMatriz(int,int,Matriz); void main (void) { Vector v; int v2 [TAM]; int m [TAM][TAM]; InicializaVector(5,v); ImprimeVector(v); InicializaMatriz(TAM,TAM,m); ImprimeMatriz(TAM,TAM,m);
Página 2 de 8
Departamento de Lenguajes y Sistemas Informáticos E.T.S. de Ingeniería Informática Universidad de Sevilla Avda Reina Mercedes, s/n. 41012 SEVILLA
IP1 2005-2006
} void InicializaVector(int n, Vector v) { int i; for(i=0;i
3) Cambiamos el enunciado. En vez de 50 elementos que sean 10. Cuando se introduzca un número negativo dejaremos de recoger números enteros. Eso o que lleguemos a 10 #include <stdio.h> #define TAM 10
Página 3 de 8
Departamento de Lenguajes y Sistemas Informáticos E.T.S. de Ingeniería Informática Universidad de Sevilla Avda Reina Mercedes, s/n. 41012 SEVILLA
IP1 2005-2006
typedef int Tabla[TAM]; void OrdenaTabla(int,Tabla); void ImprimeTabla(int,Tabla); void main(void) { Tabla t={0,0,0,0,0,0,0,0,0,0}; //¿Es necesario inicializarla?? int x,i=0,l=0; printf("\nPor favor, introduzca 10 numeros enteros\n"); while(i
if(x<0) l=1; else { t[i]=x; i=i+1; } } OrdenaTabla(TAM,t); ImprimeTabla(TAM,t);
} void OrdenaTabla(int n, Tabla t) {
}
int i,l,temp; l=0; while(!l) { l=1; for(i=0;i<(n1);i++) { if (t[i]>t[i+1]) { temp=t[i]; t[i]=t[i+1]; t[i+1]=temp; l=0; } } }
void ImprimeTabla(int n, Tabla t) { int i; for(i=0;i
Página 4 de 8
Departamento de Lenguajes y Sistemas Informáticos E.T.S. de Ingeniería Informática Universidad de Sevilla Avda Reina Mercedes, s/n. 41012 SEVILLA
IP1 2005-2006
}
Ejercicios de ALGORÍTMICA TABLAS. SOLUCIONES 17) #include <stdio.h> #define TAM 4 typedef int Matriz[TAM][TAM]; int RecibeValores(Matriz); void RecorreEImprime(int,Matriz); void main(void) { Matriz m; int i=0; i=RecibeValores(m); RecorreEImprime(i,m); } int RecibeValores(Matriz m) { int i,j,n; printf ("\nEscriba dimension para la tabla cuadrada menor que %d\n", TAM); scanf("%d",&n); while(n<0 || n>4) { printf("\n Escriba dimension para la tabla cuadrada menor que %d\n", TAM); scanf("%d",&n); } printf("\nPor favor, introduzca los numeros\n"); for(i=0;i=0;i) { for(j=i;j
Página 5 de 8
Departamento de Lenguajes y Sistemas Informáticos E.T.S. de Ingeniería Informática Universidad de Sevilla Avda Reina Mercedes, s/n. 41012 SEVILLA
IP1 2005-2006
} }
Ejercicio de EXAMEN -¿Cual es el contenido final del vector v?? int v[4]={1,2,3,4}; int *p; p=v; p[v[0]]++;
-Definimos int t[5]={1,2,3,4,5}; e invocamos al procedimiento: intercambia(t[2],&t[4]); que tiene el siguiente código: void intercambia (int x, int *y) { int aux=x; x=*y; *y=aux; } ¿Cuánto valdría t[2] después de la llamada a intercambia? ¿Y t[4]?
- Suponga las declaraciones:
int i,j; int t[10];
, este código: for(i=1;i<=6;i++) scanf(“%d”,&t[i]); for(j=3;j>0;j--) printf(“%d”,t[2*j]); y esta entrada por teclado: 3 7 ¿Qué resultado aparece por pantalla?
4
-1
0
6
. 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? Inicialice el contador
♣Dado el trozo de código scanf("%d",&i); j=0; while (i<200 || i> 300 || j < 10) { j++; Página 6 de 8
Departamento de Lenguajes y Sistemas Informáticos E.T.S. de Ingeniería Informática Universidad de Sevilla Avda Reina Mercedes, s/n. 41012 SEVILLA
IP1 2005-2006
scanf("%d",&i); } ¿Cuántos números se van a leer? Justifica la respuesta
Sea el siguiente código void mmm (int ___); void main(void) { int a,b; mmm (___a) mmm (___b); printf ("%d", ____a + ____b); } void mmm (int ___ x) { scanf ("%d", ___x); } Si se introducen desde el teclado los valores 1 y 2, el resultado en pantalla es un 3. Teniendo en cuenta que algunos de los subrayados pueden no contener nada, escriba los símbolos & y * que faltan en el código. Escríbalos sobre el enunciado.
Se necesita un procedimiento que tome en el siguiente orden: una tabla de enteros como parámetro de entrada, una tabla de enteros como parámetro de entrada/salida, un entero como parámetro de entrada y un double como parámetro de entrada/salida. Escriba su prototipo. Pasar a C el siguiente código escrito en LEA correspondiente a la función que implementa la búsqueda binaria en tablas de numeros reales func busqueda_binaria(t:tabla [n] de reales; n:entero;x: real) dev (enc:logico) var i,d,m: entero prin i,d,enc:=1,n,falso mientras i<=d y no enc m:=(i+d)/2 Si t[m]=x: enc:=cierto | t[m]<x: i:=m+1 | t[m]>x: j:=m-1 fsi fm fin
Suponemos las siguientes declaraciones: #define N 10 typedef double Tabla[N]; typedef enum{falso,cierto} Logico; Página 7 de 8
Departamento de Lenguajes y Sistemas Informáticos E.T.S. de Ingeniería Informática Universidad de Sevilla Avda Reina Mercedes, s/n. 41012 SEVILLA
IP1 2005-2006
Logico BusquedaBinaria(Tabla,int,double); … Logico BusquedaBinaria(Tabla t, int n, double x) { int i,d,m; Logico enc=falso; i=0; d=n; while(i
Página 8 de 8