Issuu on Google+

INSTITUTO TECNOLÓGICO SUPERIOR DE LIBRES Organismo Público Descentralizado del Gobierno del Estado de Puebla

INGENIERÍA EN SISTEMAS COMPUTACIONALES

EXAMEN 1 PARCIAL

PRESENTAN:

RODRIGUEZ HERNÁNDEZ JAQUELINNE HUGO DANIEL VALDEZ MOLINA

LIBRES, PUEBLA, FEBRERO 2012

1


Recursividad Es aquella que se llama a si misma para resolverse. Dicho de otra manera, una función recursiva se resuelve con una llamada a sí misma, cambiando el valor de un parámetro en la llamada a la función. A través de las sucesivas llamadas recursivas a la función se van obteniendo valores que, computados, sirven para obtener el valor de la función llamada originalmente.

El proceso de llamadas recursivas siempre tiene que acabar en una llamada a la función que se resuelve de manera directa, sin necesidad de invocar de nuevo la función. Esto será siempre necesario, para que llegue un momento que se corten las llamadas reiterativas a la función y no se entre en un bucle infinito de invocaciones.

Quizás en la teoría cueste más ver lo que es una función recursiva que por la práctica. Un ejemplo típico de recursividad sería la función factorial. La factorial es una función matemática que se resuelve multiplicando ese número por todos los números naturales que hay entre él y 1.

Enfoques diferentes de recursividad

. ADONDE.bat: un comando DOS recursivo Como los discos duros de los computadores personales son cada vez más grandes, contienen más y más programas. Por ejemplo, el disco duro tiene 1,400 archivos y programas diferentes. Para organizar el disco duro, y evitar que los programas aparezcan todos juntos, el sistema operativo DOS permite distribuir los archivos y programas en directorios. C:\ +----+----+----+----+----+----+---------+ | | | | | | | | BAT BIN DOS JGO LEN OS2 UTL WINDOWS |--NU |--ICON |--NU4 +--SYSTEM +--XTG

°Fact (): una función Pascal recursiva

2


Un ejemplo que con frecuencia se usa para explicar la recursividad es la función entera factorial, que se denota n!. La factorial de "n" se calcula multiplicando todos los números desde "1" hasta "n". Fact (n) := n * (n-1 * ... * 2 * 1) Fact (n-1):= (n-1 * ... * 2 * 1) Fact (n)

:= n * Fact (n-1)

:= n! := (n-1)! :=

n!

CODIFICACION using using using using using using

System; System.Collections.Generic; System.Linq; System.Text; Tao.FreeGlut; Tao.OpenGl;

namespace ConsoleApplication1 { class Program { static double x1, y1, x2, y2, x3, y3; static double x9, y9, x8, y8, x7, y7,x6,y6,x5,y5; static void Main(string[] args) { Console.WriteLine("................EL TRIANGULO................"); Console.WriteLine("INSERTE EL VALOR DE X1"); x1 = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("INSERTE EL VALOR DEe Y1"); y1 = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("INSERTE EL VALOR DE X2"); x2 = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("INSERTE EL VALOR DE Y2"); y2 = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("INSERTE EL VALOR DE X3"); x3 = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("INSERTE EL VALOR DE Y3"); y3 = Convert.ToDouble(Console.ReadLine());

//---VALORES PARA EL PENTAGONO------------------------Console.WriteLine("..................EL PÈNTAGONO............."); Console.WriteLine("INSERTE EL VALOR DE X1"); x9 = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("INSERTE EL VALOR DE Y1"); y9 = Convert.ToDouble(Console.ReadLine());

3


Console.WriteLine("INSERTE EL VALOR DE X2"); x8 = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("INSERTE EL VALOR DE Y2"); y8 = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("INSERTE EL VALOR DE X3"); x7 = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("INSERTE EL VALOR DE Y3"); y7 = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("INSERTE EL VALOR DE X4"); x6 = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("INSERTE EL VALOR DE Y4"); y6 = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("INSERTE EL VALOR DE X5"); x5 = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("INSERTE EL VALOR DE Y5"); y5 = Convert.ToDouble(Console.ReadLine()); Glut.glutInit(); Glut.glutInitDisplayMode(Glut.GLUT_SINGLE | Glut.GLUT_RGB); Glut.glutInitWindowSize(660, 500); Glut.glutCreateWindow("...............EXAMEN DE GRAFICACION ............ "); //llamamos a la funcion dda Glut.glutDisplayFunc(dda); Glut.glutMainLoop(); } public static void dda() { Gl.glClear(Gl.GL_COLOR_BUFFER_BIT); Gl.glColor3f(0.2F, 0.2F, 0.2F); Gl.glLoadIdentity(); Gl.glPointSize(6.0f); Gl.glBegin(Gl.GL_POINTS); float z = -1, w = 1, c = 1; for (int i = 0; i < 200; i++) { Gl.glColor3f(w, c, z); Gl.glVertex2d(z, 0); Gl.glVertex2d(0, w); z += .01f; w -= .01f; c += .1f; } Gl.glEnd(); Gl.glPointSize(6.0f); Gl.glColor3f(0.2f, 1.0f, 0.2f); //DIBUJAR EL TRIANGULO ddaDibujar(x1, y1, x2, y2); ddaDibujar1(x2, y2, x3, y3); ddaDibujar2(x3, y3, x1, y1);

4


//DIBUJAR EL PENTAGONO ddaDibujar3(x9, y9, x8, ddaDibujar4(x8, y8, x7, ddaDibujar5(x7, y7, x6, ddaDibujar6(x6, y6, x5, ddaDibujar7(x5, y5, x9,

y8); y7); y6); y5); y9);

} public static void ddaDibujar(double x1, double y1, double x2, double y2) { double xinicial = x1, yinicial = y1, xfinal = x2, yfinal = y2, x, y; double deltax, deltay, xincremento, yincremento; double pasos; deltax = xfinal - xinicial; deltay = yfinal - yinicial; if (Math.Abs(deltax) > Math.Abs(deltay)) pasos = Math.Abs(deltax); else pasos = Math.Abs(deltay); xincremento = (deltax / pasos) / 10; yincremento = (deltay / pasos) / 10; x = xinicial; y = yinicial; Gl.glBegin(Gl.GL_POINTS); Gl.glVertex2d(x, y); for (double k = .11; k <= pasos; k += .11) { x = (x + xincremento); y = (y + yincremento); Gl.glVertex2d(x, y); } Gl.glEnd(); }

public static void ddaDibujar1(double x2, double y2, double x3, double y3) { double xinicial = x2, yinicial = y2, xfinal = x3, yfinal = y3, x, y; double deltax, deltay, xincremento, yincremento; double pasos; deltax = xfinal - xinicial; deltay = yfinal - yinicial;

5


if (Math.Abs(deltax) > Math.Abs(deltay)) pasos = Math.Abs(deltax); else pasos = Math.Abs(deltay); xincremento = (deltax / pasos) / 10; yincremento = (deltay / pasos) / 10; x = xinicial; y = yinicial; Gl.glBegin(Gl.GL_POINTS); Gl.glVertex2d(x, y); for (double k = .11; k <= pasos; k += .11) { x = (x + xincremento); y = (y + yincremento); Gl.glVertex2d(x, y); } Gl.glEnd(); }

public static double y1) { double y1, x, y; double double deltax deltay

void ddaDibujar2(double x3, double y3, double x1, xinicial = x3, yinicial = y3, xfinal = x1, yfinal = deltax, deltay, xincremento, yincremento; pasos; = xfinal - xinicial; = yfinal - yinicial;

if (Math.Abs(deltax) > Math.Abs(deltay)) pasos = Math.Abs(deltax); else pasos = Math.Abs(deltay); xincremento = (deltax / pasos) / 10; yincremento = (deltay / pasos) / 10; x = xinicial; y = yinicial; Gl.glBegin(Gl.GL_POINTS); Gl.glVertex2d(x, y); for (double k = .11; k <= pasos; k += .11) { x = (x + xincremento); y = (y + yincremento); Gl.glVertex2d(x, y); } Gl.glEnd();

6


} //PENTAGONO public static void ddaDibujar3(double x9, double y9, double x8, double y8) { double xinicial = x9, yinicial = y9, xfinal = x8, yfinal = y8, x, y; double deltax, deltay, xincremento, yincremento; double pasos; deltax = xfinal - xinicial; deltay = yfinal - yinicial; if (Math.Abs(deltax) > Math.Abs(deltay)) pasos = Math.Abs(deltax); else pasos = Math.Abs(deltay); xincremento = (deltax / pasos) / 10; yincremento = (deltay / pasos) / 10; x = xinicial; y = yinicial; Gl.glBegin(Gl.GL_POINTS); Gl.glVertex2d(x, y); for (double k = .11; k <= pasos; k += .11) { x = (x + xincremento); y = (y + yincremento); Gl.glVertex2d(x, y); } Gl.glEnd(); } public static void ddaDibujar4(double x8, double y8, double x7, double y7) { double xinicial = x8, yinicial = y8, xfinal = x7, yfinal = y7, x, y; double deltax, deltay, xincremento, yincremento; double pasos; deltax = xfinal - xinicial; deltay = yfinal - yinicial; if (Math.Abs(deltax) > Math.Abs(deltay)) pasos = Math.Abs(deltax); else pasos = Math.Abs(deltay); xincremento = (deltax / pasos) / 10; yincremento = (deltay / pasos) / 10;

7


x = xinicial; y = yinicial; Gl.glBegin(Gl.GL_POINTS); Gl.glVertex2d(x, y); for (double k = .11; k <= pasos; k += .11) { x = (x + xincremento); y = (y + yincremento); Gl.glVertex2d(x, y); } Gl.glEnd(); } public static void ddaDibujar5(double x7, double y7, double x6, double y6) { double xinicial = x7, yinicial = y7, xfinal = x6, yfinal = y6, x, y; double deltax, deltay, xincremento, yincremento; double pasos; deltax = xfinal - xinicial; deltay = yfinal - yinicial; if (Math.Abs(deltax) > Math.Abs(deltay)) pasos = Math.Abs(deltax); else pasos = Math.Abs(deltay); xincremento = (deltax / pasos) / 10; yincremento = (deltay / pasos) / 10; x = xinicial; y = yinicial; Gl.glBegin(Gl.GL_POINTS); Gl.glVertex2d(x, y); for (double k = .11; k <= pasos; k += .11) { x = (x + xincremento); y = (y + yincremento); Gl.glVertex2d(x, y); } Gl.glEnd(); } public static void ddaDibujar6(double x6, double y6, double x5, double y5) { double xinicial = x6, yinicial = y6, xfinal = x5, yfinal = y5, x, y; double deltax, deltay, xincremento, yincremento; double pasos;

8


deltax = xfinal - xinicial; deltay = yfinal â&#x20AC;&#x201C; yinicial; if (Math.Abs(deltax) > Math.Abs(deltay)) pasos = Math.Abs(deltax); else pasos = Math.Abs(deltay); xincremento = (deltax / pasos) / 10; yincremento = (deltay / pasos) / 10; x = xinicial; y = yinicial; Gl.glBegin(Gl.GL_POINTS); Gl.glVertex2d(x, y); for (double k = .11; k <= pasos; k += .11) { x = (x + xincremento); y = (y + yincremento); Gl.glVertex2d(x, y); } Gl.glEnd(); } public static void ddaDibujar7(double x5, double y5, double x9, double y9) { double xinicial = x5, yinicial = y5, xfinal = x9, yfinal = y9, x, y; double deltax, deltay, xincremento, yincremento; double pasos; deltax = xfinal - xinicial; deltay = yfinal - yinicial; if (Math.Abs(deltax) > Math.Abs(deltay)) pasos = Math.Abs(deltax); else pasos = Math.Abs(deltay); xincremento = (deltax / pasos) / 10; yincremento = (deltay / pasos) / 10; x = xinicial; y = yinicial; Gl.glBegin(Gl.GL_POINTS); Gl.glVertex2d(x, y); for (double k = .11; k <= pasos; k += .11) { x = (x + xincremento); y = (y + yincremento); Gl.glVertex2d(x, y); } Gl.glEnd(); }

9


} } Ejecucion del programa como se muestra en la Figura 1.1

Figura 1.1

10


REFERENCIAS BIBLIOGRAFICAS

www.desarrolloweb.com Miguel Ángel Álvarez

http://www.di-mare.com/adolfo/p/recurse1.htm

11


Examen