Você está na página 1de 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

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<CMESES;i++)
diasmes[i]=0;  //ACCESO Y MODIFICACION

// Inicialización de una matriz
for(i=0;i<CAJE;i++){
for(j=0;j<CAJE;j++)
ajedrez[i][j]=0; //ACCESO Y MODIFICACION

printf("%d\n",ajedrez[0][0]); // Acceso a un elemento inicializado
printf("%d\n",diasmes[0]); // Acceso a un elemento inicializado

ajedrez[0][0]=45;
diasmes[0]=34;

printf("%d\n",ajedrez[0][0]); // Acceso a un elemento inicializado
printf("%d\n",diasmes[0]); // Acceso a un elemento inicializado

i=diasmes[6];
j=ajedrez[5677][456];

printf("%d\n",i);
printf("%d\n",j); // Acceso a un elemento inicializado

ejemplo2: utilizar dicho ejemplo para mostrar las distintas formas que hay de llamar a 
una tabla y matriz como parametro de entrada/salida

#include <stdio.h>

#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<n;i++)
v[i]=i+1;

void ImprimeVector(Vector v)
{

int i;
for(i=0;i<TAM;i++)
printf("\n%d\n",v[i]);

void InicializaMatriz(int f, int c, Matriz m)
{

int i,j;
for(i=0;i<f;i++)
{
for(j=0;j<c;j++)
m[i][j]=1;

void ImprimeMatriz(int f, int c, Matriz m)
{

int i,j;
for(i=0;i<f;i++)
{
printf("\n");
for(j=0;j<c;j++)
printf("%d ",m[i][j]);

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<TAM && !l)
{
scanf("%d",&x); //ATENCION, hay otra forma de recoger los valores para una 
tabla
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<(n­1);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<n;i++)
printf("%d ",t[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<n;i++)
{
for(j=0;j<n;j++)
scanf("%d",&m[i][j]);
}
return n;
}

void RecorreEImprime(int n, Matriz m)
{

int i,j;

for(i=n­1;i>=0;i­­)
{
for(j=i;j<n;j++)
{
printf("%d ",m[j][j­i]);
}

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 4 -1 0 6


¿Qué resultado aparece por pantalla?

. 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<d && !enc)
{
m=(i+d)/2;
if (t[m]==x)
enc=cierto;
else if (t[m]<x)
i=m+1;
else
i=m-1;
}

return enc;
}

Página 8 de 8

Você também pode gostar