GUIA_DE_PRACTICA_IC246_2011_II_05

Embed Size (px)

Citation preview

PRACTICA 5

Races de Polinomios

5.1.

Objetivos

En la presente prctica utilizar el Lenguaje de Programacin Visual C# desde ShapDevelop 4.2 RC, Usted aanzar: Crear una solucin para una Aplicacin Windows desde SharpDevelop 4.0 Trabajar con una solucin en consola Denir variables y distinguir su mbito de uso. Mostrar los resultados en la consola Uso de datos tipo cadena de caracteres (string) Denir mtodos. Llamada a mtodos. Mtodos con valor retorno, especicar el tipo de valor de retorno de los mtodos. Mtodos sin valor de retorno y el mbito de uso de los mtodos. Instrucciones de decisin. Sintaxis para su creacin y edicin desde el entorno de desarrollo integrado

5.2.

Aplicacin propuesta

Dado un polinomio de segundo grado de la forma f (x) = ax2 +bx+c, obtener las races de ste, es decir valores x para las cuales la funcin f (x) se anula (f (x) = 0). La solucin se obtendr mediante la frmula cuadrtica y establece quelos vab2 lores de la variable x que hacen nulo a la funcin estn dadas por x1,2 = b 2a 4ac , donde la expresin b2 4ac es denominado discriminate () y del valor que tome depende los resultados de la funcin. Las races dependiendo de la discriminate, pueden ser: 1. Si > 0 entonces las races son nmeros reales y distintos entre s, que estn dados mediante: x1 = b+ y x2 = b 2a 2a 35

2. Si = 0 entonces las races son nmeros reales e iguales y est dado por b x1 = x2 = 2a 3. Si < 0 las races son nmeros complejos conjugados, las mismas que estn dados mediante: x1 = b + i 2a y x2 = b i 2a 2a 2a

5.2.1.

Datos Requeridos

Los argumentos requeridos son tres nmeros reales que representan los coecientes de la funcin f (x) = ax2 + bx + c a es nmero real distinto de cero b es un nmero real c es un nmero real

5.2.2.

Resultados

Los resultados obtenidos sern las races de la ecuacin de segundo grado, dependiendo de la discriminate raz uno x1 raz uno x2

5.3.

Procedimiento

El procedimiento que se recomienda seguir es: 1. Crear la solucin en consola desde SharpDevelop 4.2 RC 2. Crear los mtodos necesarios que reciba de datos tres nmeros reales que representa los coecientes de la ecuacin de segundo grado, teniendo en cuenta que el coeciente de la expresin cuadrtica debe necesariamente ser distinto de cero. 3. Declarar las variables a nivel de clase 4. Utilizar las instrucciones de decisin para la obtener las races

5.3.1.

Diagrama de ujo

Para implementar el mtodo que obtenga las races de la funcin, tener en cuenta el diagrama de ujo mostrado en la Figura 5.1

5.3.2.

Pseudocdigo

El pseudocdigo para obtener las erices de un polinomio de segundo grado muestra en el Pseudocdigo 1 36

INICIO DATOS: a,b,c b 2 4 ac

>0

SI

x1,2

b 2ab 2a

NO

=0

SI

x1 x2

NO

x1,2

b i 2a 2a

RESULTADO: X1, X2

FIN

Figura 5.1: Races de una funcin cuadrtica - diagrama de ujo

Pseudocdigo 1 pseudocdigo races de una funcin cuadrtica Entrada: Coecientes de la funcin f (x) = ax2 + bx + c Salida: Las races de la ecuacin x1 , x2 1: Inicio 2: Ingresar los coecientes a, b, c 3: b2 4ac 4: si > 0 entonces 5: x1 b+ 2a 6: x2 b 2a 7: si no, si = 0 entonces b 8: x1 2a b 9: x2 2a 10: si no 11: x1 b + i 2a 2a 12: x2 b i 2a 2a 13: n si 14: imprimir x1 y x2 15: Fin

37

Figura 5.2: Races de una funcin cuadrtica - Interfaz principal

5.4.

Ventana principal de la aplicacin

La aplicacin en la presente prctica se realiza en modo consola, una captura nal de la ventana muestra la Figura 5.2

5.5.

Cdigo fuente

El cdigo fuente de la aplicacin, se muestra seguidamente

Listing 5.1: Cdigo fuente - Races de una funcin cuadrtica1 /* 2 * 3 * 4 * 5 * 6 * 7 *

Created by SharpDevelop. User: EDMUNDO Date: 04/05/2012 Time: 12:48 p.m.

To change this template use Tools | Options | Coding | Edit Standard Headers. 8 / * 9 using System;10 11 namespace PRACTICA05 12 { 13 class Program 14 { 15 public static void Main(string[] args) 16 { 17 Console.WriteLine("PRCTICA NRO 05"); 18 Console.WriteLine("OBTENCIN DE LAS RAICES DE ECUACIONES

DE SGUNDO GRADO");

38

19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59

Console.WriteLine("DE LA FORMA F(x)=A^2+BX+C"); // para almacenar los coeficientes A, B, C string A, B, C; // ingreso de datos por teclado Console.WriteLine("INGRESE EL COEFICIENTE A (DISTINTO DE CERO)"); A=Console.ReadLine(); Console.WriteLine("INGRESE EL COEFICIENTE B"); B=Console.ReadLine(); Console.WriteLine("INGRESE EL COEFICIENTE C"); C=Console.ReadLine(); // Obtiene resultado Console.WriteLine("LOS RESULTADOS SON"); MetodoCuadratico(double.Parse(A), double.Parse(B), double .Parse(C)); Console.Write("Presione cualquier tecla para salir . . . "); Console.ReadKey(true); }

static void MetodoCuadratico(double a, double b, double c) { /* 1) OBJETIVO: * Mtodo para obtener las raices de una ecuacin de segundo grado, de la forma ax^2 + bx + c * 2) DATOS: * Los coeficintes de la ecuacin, ax^2 + bx + c, "a" distinto de cero * 3) RESULTADO * Las raices de la ecuacin, x1,x2 */ // raices de las ecuaciones nmeros reales (oarte real) double x1, x2; // raices de las ecuaciones (parte compleja) double x11=0, x22=0; // los resultados dependern del valor de la discriminante // llamada a mtodo double discriminante = MetodoDiscriminante(a,b,c);

39

60

61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83

// las condiciones para obtener las raices se eligen segn el valor de la discriminante : dis>0, dis=0, dis 0) { /* se ejecuta cuando discriminante es mayor a cero * en este caso, la ecuacin dispone de dos raices reales y distintos * que estn datos por: */ x1=(-b+Math.Sqrt(discriminante))/(2*a); x2=(-b-Math.Sqrt(discriminante))/(2*a); } else if (discriminante==0) { /* se ejecuta cuando discriminante es igual a cero * en este caso, la ecuacin dispone de dos raices que son iguales * y estn datos por: */ x1=-b/(2*a); x2=x1; } else { /* se ejecuta cuando discriminante es menor a cero -- por defecto, cuando ninguna de las anteriores se cumple * en este caso, la ecuacin dispone de dos raices conplejos conjugados y estn datos por: * */ // parte real x1=-b/(2*a); x2=-b/(2*a); // parte compleja x11=Math.Sqrt(-discriminante)/(2*a); x22=Math.Sqrt(-discriminante)/(2*a); } // Muestra los resultados MuestraResultado(x1,x2,x11,x22); }

84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99

40

100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136

static void MuestraResultado(double x1, double x2, double x11, double x22) { /* 1) OBJETIVO: * Mtodo que muestra los resultados en la pantalla de consola 2 DATOS: * * las raices de la ecuacin, parte real: x1 y x2, parte compleja: x11, x22 / * // raices de las ecuaciones string r1, r2; if ((x11==0)&&(x22==0)) { /* * Si x11=0 y x22=0, * entonces son raices reales */ r1= " X1=" + x1.ToString(); // concatena cadenas r2= " X2=" + x2.ToString(); } else { /* * caso contrario, las raices son nmeros complejos * */ r1= " X1=" + x1.ToString() + "+" + x11.ToString() + "i" ; r2= " X2=" + x2.ToString() + "-" + x22.ToString() + "i" ; } // Imprime los resultados en pantalla Console.WriteLine(r1); Console.WriteLine(r2); }

137 138

static double MetodoDiscriminante(double a, double b, double c) { /* 1) OBJETIVO * Mtodo para obtener la discriminante para la solucin de una ecuacin de segundo grado, desarrollado por el mtodo cuadrtico (b^2-4ac)^1 * * 2) DATOS

41

139 140 141 142 143 144 145 146 147 148 149 150 } 151 152 } 153 }

* Los coeficintes de la ecuacin, ax^2 + bx + c, "a" distinto de cero * 3) RESULTADO * La discriminante, que es igual a (b^2-4ac)^1 */ // declara valor double retorno; // asigna valor retorno = Math.Pow(b,2)-4*a*c; // valor de retono de la funcin return retorno;

5.6.5.6.1.

Explicacin de las rdenes necesariasImportar de espacio de nombre

Mediante la palabra reservada using se importa un espacio de nombre (un espacio de nombre contiene mtodos, interfaces, ect), para una aplicacin en modo consola es suciente importar el espacio de nombre System como se muestra seguidamente.

Listing 5.2: Importar espacio de nombre1 using System;

5.6.2.

Obtener datos desde el teclado

Para pedir datos en modo consola, se requiere utilizar el mtodo ReadLine de la clase Console que se encuentra en el espacio de nombre System, tal como se muestra en el cdigo fuente siguiente.

Listing 5.3: Obtener datos desde el teclado en modo consola1 public static void Main(string[] args) 2 { 3 // ingreso de datos por teclado 4 Console.WriteLine("INGRESE EL COEFICIENTE A (DISTINTO DE CERO 5 6 7 8

)"); A=Console.ReadLine(); Console.WriteLine("INGRESE EL COEFICIENTE B"); B=Console.ReadLine(); Console.WriteLine("INGRESE EL COEFICIENTE C");

42

9 C=Console.ReadLine(); 10 }

En el cdigo A=Console.ReadLine(); el mtodo ReadLine() devuelve una cadena que es almacenado en la variable A que previamente fue declarado de tipo string.

5.6.3.

Mostrar resultados

El mtodo WriteLine() requiere de dato una cadena de caracteres para mostrar en la pantalla de consola. Por defecto mostrar en la lnea disponible siguiente forzando a un cambio de lnea. Listing 5.4: Mostrar resultados en modo consola1 2 3

// Imprime los resultados en pantalla Console.WriteLine(r1); Console.WriteLine(r2);

r1 y r2 son cadena de caracteres.

5.6.4.

Denicin de mtodo sin valor de retorno

El cdigo fuente que se muestra seguidamente, establece un mtodo1 sin valor de retorno, para su creacin es necesario cumplir la sintaxis establecido por Visual C#.

Listing 5.5: Denicin de mtodo sin valor de retorno1 2 3 4 5 6 7 8 9 10 11 12 13 14 151

static void MetodoCuadratico(double a, double b, double c) { /* 1) OBJETIVO: * Mtodo para obtener las raices de una ecuacin de segundo grado, de la forma ax^2 + bx + c 2) DATOS: * * Los coeficintes de la ecuacin, ax^2 + bx + c, "a" distinto de cero 3) RESULTADO * * Las raices de la ecuacin, x1,x2 */ // raices de las ecuaciones nmeros reales (oarte real) double x1, x2; // raices de las ecuaciones (parte compleja) double x11=0, x22=0;

Un mtodo es una secuencia, un conjunto de instrucciones que reciben un mismo nombre. Cada vez que se requiera ejecutar aquel conjunto de instrucciones solamente se debe referir con el identicador del mtodo(nombre del mtodo)

43

16 17 18 19 20

// los resultados dependern del valor de la discriminante // llamada a mtodo double discriminante = MetodoDiscriminante(a,b,c); // las condiciones para obtener las raices se eligen segn el valor de la discriminante : dis>0, dis=0, dis 0) { /* se ejecuta cuando discriminante es mayor a cero * en este caso, la ecuacin dispone de dos raices reales y distintos * que estn datos por: */ x1=(-b+Math.Sqrt(discriminante))/(2*a); x2=(-b-Math.Sqrt(discriminante))/(2*a); } else if (discriminante==0) { /* se ejecuta cuando discriminante es igual a cero * en este caso, la ecuacin dispone de dos raices que son iguales * y estn datos por: */ x1=-b/(2*a); x2=x1; } else { /* se ejecuta cuando discriminante es menor a cero -- por defecto, cuando ninguna de las anteriores se cumple en este caso, la ecuacin dispone de dos raices * conplejos conjugados y estn datos por: * */ // parte real x1=-b/(2*a); x2=-b/(2*a); // parte compleja x11=Math.Sqrt(-discriminante)/(2*a); x22=Math.Sqrt(-discriminante)/(2*a); }

21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43

44 45 46 47 48 49 50 51 52 53 54

44

55 56 57

// Muestra los resultados MuestraResultado(x1,x2,x11,x22); }

En el mtodo anterior se distingue: static, es un modicador del mtodo, lo que hace posible que sea accesible desde otros mtodos que pertenecen a la misma clase void indica que no hay ningn valor de retorno MetodoCuadratico es el identicador del mtodo, nombre del mtodo double a, double b, double c son los parmetros, argumentos o datos de entrada requeridas por el mtodo El cuerpo del mtodo est denido por la regin delimitada por { llave de inicio y } llave de cierre

5.6.5.

Denicin de mtodo con valor de retorno

El cdigo siguiente establece un mtodo con valor de retorno en Visual C#

Listing 5.6: Denicin de mtodo con valor de retorno1 2 3 4

static double MetodoDiscriminante(double a, double b, double c) { /* 1) OBJETIVO * Mtodo para obtener la discriminante para la solucin de una ecuacin de segundo grado, desarrollado por el mtodo cuadrtico (b^2-4ac)^1 * * 2) DATOS * Los coeficintes de la ecuacin, ax^2 + bx + c, "a" distinto de cero * 3) RESULTADO * La discriminante, que es igual a (b^2-4ac)^1 */ // declara valor double retorno; // asigna valor retorno = Math.Pow(b,2)-4*a*c; // valor de retono de la funcin return retorno; }

5 6 7 8 9 10 11 12 13 14 15 16 17 18

En el mtodo anterior se distingue: 45

static, es un modicador del mtodo, lo que hace posible que sea accesible desde otros mtodos que pertenecen a la misma clase double indica el tipo de valor de retorno, en este caso un nmero real MetodoDiscriminante es el identicador del mtodo, nombre del mtodo double a, double b, double c son los parmetros, argumentos o datos de entrada requeridas por el mtodo El cuerpo del mtodo est denido por la regin delimitada por { llave de inicio y } llave de cierre La palabra reservada return indica la variable de retorno, tal como muestra la variable anterior

5.6.6.

Llamada a mtodos sin valor de retorno

Llamar un mtodo equivale a ejecutar las instrucciones que contiene. Es necesario tomar el cuenta la sintaxis para la llamada de los mtodo en Visual C#, el cdigo fuente Llamada a mtodo sin valor de retorno que se muestra seguidamente ejecuta las instrucciones contenidas por el mtodo cuyo identicador es MuestraResultado y para su ejecucin requiere como datos de entrada los valores de x1, x2, x11, x22. La llamada al mtodo es mediante MuestraResultado(x1,x2,x11,x22).

Listing 5.7: Llamada a mtodo sin valor de retorno1 2

// Muestra los resultados MuestraResultado(x1,x2,x11,x22);

5.6.7.

Llamada a mtodos con valor de retorno

En el cdigo fuente que se muestra se realiza una llamada al mtodo cuyo identicador es MetodoDiscriminante, mediante MetodoDiscriminante(a,b,c). ste mtodo fue establecido para devolver un valor de retorno de tipo double, un nmero real, cuyo valor es almacenado en la variable discriminante.

Listing 5.8: Llamada a mtodo con valor de retorno1 2 3 4 5 6

// los resultados dependern del valor de la discriminante // llamada a mtodo double discriminante = MetodoDiscriminante(a,b,c); // las condiciones para obtener las raices se eligen segn el valor de la discriminante : dis>0, dis=0, dis0) { /* se ejecuta cuando discriminante es mayor a cero * en este caso, la ecuacin dispone de dos raices reales y distintos * que estn datos por: */

47

8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

x1=(-b+Math.Sqrt(discriminante))/(2*a); x2=(-b-Math.Sqrt(discriminante))/(2*a); } else if (discriminante==0) { /* se ejecuta cuando discriminante es igual a cero * en este caso, la ecuacin dispone de dos raices que son iguales * y estn datos por: */ x1=-b/(2*a); x2=x1; } else { /* se ejecuta cuando discriminante es menor a cero -- por defecto, cuando ninguna de las anteriores se cumple * en este caso, la ecuacin dispone de dos raices conplejos conjugados * y estn datos por: */ // parte real x1=-b/(2*a); x2=-b/(2*a); // parte compleja x11=Math.Sqrt(-discriminante)/(2*a); x22=Math.Sqrt(-discriminante)/(2*a); }

23 24 25 26 27 28 29 30 31 32

48