ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Programacion funcional con recursividad


Enviado por   •  25 de Septiembre de 2011  •  8.449 Palabras (34 Páginas)  •  526 Visitas

Página 1 de 34

ALCANCE DE VARIABLES. LOCALIDAD Y GLOBALIDAD

1.- En el siguiente programa usted debe verificar que las declaraciones de las variables son correctas, luego hacer la corrida del programa con el objeto de visualizar el alcance de las variables.

/* archivo p1 */

int k,x;

void r1(int a, int b)

{

int i;

i=0;

a=2*b;

r3(i);

printf("%d %d,x,y);

}

main()

{

k=1;

x=2;

r1(x,x);

printf("%d",x);

}

/*archivo p2*/

int r2(int i)

{

i=i+3;

if (k <= 2)

printf("%d %d",i,k)

return(i+k+a);

}

void r3(int a)

{

int x,y;

a=i+k;

x=r2(a);

y=r2(2*a);

printf ("%d %d",x,y);

}

2.- A continuación se presentan varios programas ilustrativos de lo que ocurre al combinar las reglas de alcance de variables y pasaje de parámetros en una forma no muy organizada. Su actividad concreta es dar los resultados de la corrida de estos programas atendiendo a dichas reglas. Escriba de nuevo los programas usando reglas de buen estilo de programación

a)

void pr(int x,int y,int *z);

main() {

int a=5,b=8,c=3;

pr(a,b,&c);pr(7,a+b+c,&a); pr(a*b,a /b,&c);

}

void pr(int x,int y,int *z)

{*z=x+y+*z; printf("%d%d%d",x,y,*z);}

b)

void r1(int *a; int b);

int r2(int i,int a,int k);

void r3(int *a, int i, int k);

main()

{

int k=1,x=2;

r1(&x,x,k);

printf(“%d”,x);

}

void r1(int *a, int b,int y)

{

int i=0;

a=2*b;

r3(&i,a,y);

printf(“%d %d”,x,y);

}

c) main() {

int i,j,k;

i=0; j=1; k=2;

p2(0,&k);p2(1,&i); p2(2,&j);

}

void p1(int *i,int j,int k)

{ (*i)++;

printf(“%d %d %d”,*i,j,k);

}

void p2(int h,int *j,int k) {

int i=j;

if (h==0) p1(*j,j,k)

else if (h==1) p1(&i,*j,k);

else p3(&i,*j,k);

printf(“%d %d %d”,i,j,k);

}

void p3(int *i)

{ (*i)++;}

3.- ¿Es este un programa correcto en C?, de no serlo señales los errores e indique posibles correcciones. Si fuera correcto, entonces haga la corrida del programa

main ()

{

int f=2,h=10;

a(f,h,'1'); a(h,f,'2');

}

void int A(int *x,int *y,char s)

{

int b,c;

b=x;

if (G(b) >= 40) c=D(-5);

else c=D(b*2);

}

void D int p

{

f=f+1; p=p+f; printf(f);

}

void G(int *r)

{

int a,f;

a=10; f=a*a;

r=r*a; printf(r);

return(r);

}

APUNTADORES Y ARREGLOS

1.- Conteste cada una de las siguientes preguntas. Cada parte del ejercicio deberá utilizar los resultados de las partes anteriores donde sea apropiado:

a) Declare un arreglo de tipo float, llamado numbers con 10 elementos, e inicialice los elementos a los valores 0.0, 1.1, 2.2,...9.9. Suponga que la constante simbólica SIZE ha sido definida como 10.

b) Declare un apuntador nPtr, que apunte a un objeto de tipo float.

c) Imprima los elementos del arreglo numbers, utilizando notación de subíndice de arreglos. Utilice una estructura for, y suponga que se ha declarado la variable de control entera i.

d) Proporcione dos instrucciones por separado, que asignen la dirección inicial del arreglo numbers a la variable de apuntador nPtr.

e) Imprima los elementos del arreglo numbers, utilizando únicamente la variable nPtr.

f) Imprima los elementos del arreglo numbers, utilizando el nombre del arreglo como un apuntador.

g) Imprima los elementos del arreglo numbers mediante subíndices del apuntador nPtr.

h) Suponiendo que nPtr apunta al principio del arreglo numbers, ¿cuál es la dirección referenciada por nPtr+8 ? ¿ cuál es el valor almacenado en esa posición?

i) Suponiendo que nPtr apunta a numbers[5], ¿qué dirección es referenciada por nPtr=nPtr-4 ? ¿cuál es el valor almacenado en esta posición?

2.- Encuentre el error en cada uno de los segmentos de programas siguientes. Suponga:

int *zPtr;

int *aPtr = NULL;

void *sPtr = NULL;

int number,i;

int z[5] = {1,2,3,4,5};

sPtr=z;

++z;

number = zPtr; /* uso del apuntador para obtener el

primer valor del arreglo */

number = *zPtr[2]; /* asigna el valor 3 a number*/

number = *sPtr;/* asigna el valor apuntado por sPtr a number */

for (i=0;i<=5;i++) /* imprime el arreglo z */

printf(“%d”,zPtr[i]);

3.- Para cada uno de los siguientes enunciados, escriba el trozo de código correspondiente. Suponga que se han declarado las variables num1 y num2 de tipo flotante.

a) Declare la variable fPtr como apuntador a un flotante

b) Asigne la dirección de la variable num1 a la variable fPtr

c) Imprima el valor del objeto señalado por fPtr

d) Asigne el valor del objeto señalado por fPtr a la variable num2

e) Imprima el valor de num2

f) Imprima la dirección de num1. Utilice el especificador de conversión %p

g) Imprima la dirección almacenada en fPtr utilizando %p ¿Es el valor impreso el mismo de la dirección de num1?

4.- Realice la corrida del siguiente programa para observar los cuatro métodos para referenciar los elementos de un arreglo. Diga la diferencia entre los cuatro métodos:

#include <stdio.h>

main()

{

int i, b[]={10,20,30,40,50};

int *bPtr = b;

printf("Arreglo impreso con notación de subíndices");

for (i=0; i<=4; i++)

printf("b[%d] = %d \n",i,b[i]);

printf("\n");

printf("Arreglo como apuntador y desplazamiento");

for (i=0; i<=4; i++)

printf("*(b+%d) = %d \n",i,*(b+i));

printf("\n");

printf("Notación apuntador-subíndices");

for (i=0; i<=4; i++)

printf("bPtr[%d] = %d \n",i,bPtr[i]);

...

Descargar como (para miembros actualizados) txt (55 Kb)
Leer 33 páginas más »
Disponible sólo en Clubensayos.com