Ejercicio : SOLUCIÓN DE LA ECUACIÓN DE

Anuncio
COMPUTACIÓN
Ejercicio 1 : SOLUCIÓN DE LA ECUACIÓN DE SEGUNDO GRADO.
Dada la ecuación de segundo grado:
hay que calcular el discriminante:
Se pueden presentar tres casos distintos:

Si discr >0.0 las dos raíces son reales y distintas, y valen:


Si discr = 0.0 las dos raíces son reales e iguales, y valen:
Finalmente, si discr < 0.0 las dos raíces son complejas conjugadas. Las partes real e
imaginaria valen:
Teclea y compila el siguiente programa para resolver la ecuación de segundo grado. Llámalo ec2.c.
Compila y ejecuta este programa cambiando los valores de a, b y c, de modo que se prueben las tres
opciones del programa.
Solución comentada al Ejercicio
// resolución de la ecuación de segundo grado
#include <stdio.h>
#include <math.h>
// incluye decl. de la función sqrt()
void main(void)
{
double a, b, c;
double discr, x1, x2, xd, xr,xi;
printf("Escribe los valores de los coeficientes A, B y
C\n");
scanf("%lf%lf%lf", &a, &b, &c);
discr = b*b - 4.0*a*c;
if (discr>0.0) {
x1 = (-b+sqrt(discr))/(2.0*a);
x2 = (-b-sqrt(discr))/(2.0*a);
printf("\nLas dos raíces reales son: %12.6e y %12.6e \n",
x1, x2);
}
else if (discr<0.0) {
xr = -b/(2.0*a);
xi = sqrt(-discr)/(2.0*a);
printf("\nRaices complejas:\n");
printf("(%12.6e, %12.6ei) y (%12.6e,
%12.6ei)\n",
xr, xi, xr, -xi);
}
else {
x1 = -b/(2.0*a);
printf("\nLas dos raíces son iguales y valen: %12.6e \n", x1);
}
}
Comentario: Incluyendo la librería math.h se puede usar las funciones matemáticas tales como
sqrt(), para la raíz cuadrada; cos() para calcular el coseno de un ángulo, etc. La instrucción if...else
permite hacer una bifurcación, dependiendo de la cual se realizarán diferentes actividades.
Ingeniería Eléctrica y Electrónica
1
COMPUTACIÓN
Ejercicio 2: PROGRAMA QUE SUMA LOS CINCO PRIMEROS NÚMEROS
NATURALES.
Se presenta a continuación un programa que utiliza la sentencia while para definir un bucle. El
programa sumará de forma automática los cinco primeros números naturales. Sálvalo con el nombre
suma_int.c.
Solución comentada al Ejercicio
// Programa para calcular la suma de los enteros del 1 al 5
#include <stdio.h>
void main(void)
{
int i = 1, suma = 0;
while (i <= 5) {
// se ejecuta el bloque mientras i<=5
suma += i;
// equivale a suma=suma+i;
++i;
// equivale a i=i+1;
}
printf("suma = %d\n", suma);
}
Comentario: El bucle while realiza la sentencia simple o compuesta que le sigue mientras la
condición definida entre paréntesis sea verdadera (es decir distinta de cero). El bucle while del
programa anterior podía también haberse escrito en la siguiente forma (más compacta):
while (i <= 5)
suma += i++;
// se ejecuta el bloque mientras i<=5
// equivale a suma=suma+i e i=i+1;
No hacen falta las llaves porque sólo hay una sentencia simple detrás del while.
Ejercicio 3: Varias formas de utilizar el bucle for.
En el siguiente programa se muestran distintas formas de escribir un bucle for para sumar los
enteros del 1 al 5.
Solución comentada al Ejercicio
/* Programa para sumar los enteros del 1 al 5 */
#include <stdio.h>
main()
{
int i=1, suma = 0;
for ( ; i <= 5 ; )
/* primera forma */
{
suma += i;
++i;
}
printf("suma 1 = %d\n", suma);
suma = 0;
/* segunda forma */
for ( i = 1; i <= 5; ++i)
suma += i;
Ingeniería Eléctrica y Electrónica
2
COMPUTACIÓN
printf("suma 2 =
for( i = 1, suma
;
printf("suma 3 =
for( i = 1, suma
;
printf("suma 4 =
%d\n", suma);
= 0; i <= 5 ; ++i, suma+=i)
/* tercera forma */
%d\n", suma);
= 0; i <= 5 ; suma+=i, ++i)
/* cuarta forma */
%d\n", suma);
}
Comentario: Para definir un bucle hace falta un contador o variable de control (que casi siempre es
un entero y suele nombrarse con las letras típicas de subíndices: i, j, k, l,...). Esta variable de control
es la que se chequea cada vez que comienza el bucle y la que permite continuar o no realizando las
operaciones de dentro del bucle.
Por otra parte, en C, el bucle for tiene tres componentes separadas por punto y coma: la primera es
una inicialización de la variable de control (u otras que pudieran afectar al bucle), la segunda es la
sentencia de chequeo de la variable de control que siempre es necesaria (véase la primera forma);
por último, la tercera son sentencias de actualización que se ejecutan al final del bucle (que también
se podrían poner entre las llaves del bucle, detrás de las demás sentencias). Conociendo estas
características, la forma más habitual de expresar un bucle es la segunda, ya que el bucle for
contiene las instrucciones pertinentes a la variable de control.
La forma primera es más asimilable a un bucle while, ya que la instrucción for contiene sólo el
chequeo de la variable.
La diferencia entre las formas tercera y cuarta es el orden en que se ejecutan las instrucciones: la
forma tercera ejecuta antes el incremento de la variable que el chequeo y la suma, por tanto cuando
i vale 6 ya se ha sumado a la variable suma y, por eso el resultado sale 20 en lugar de 15.
Ejercicio 4: Máximo elemento de un conjunto de números.
Este programa calcula el máximo entre un conjunto de números enteros. Para ello se sigue el
siguiente algoritmo: se crea una variable llamada max, a la que se da inicialmente el valor de
conjunto[0]. Luego se recorren paso a paso todas las posiciones del vector, comparando el valor
almacenado en la posición considerada del vector con el valor de la variable max. Si el valor de la
posición considerada del vector es mayor que max entonces se copia (se sustituye el valor) en la
variable max este valor. De esta forma, una vez recorrido todo el vector, la variable max contendrá
el máximo valor. Guárdalo con el nombre maximo.c.
Solución comentada al Ejercicio
/* Programa para calcular el m ximo de un conjunto de n£meros */
#include <stdio.h>
#define SIZE 5
void main(void)
{
int i, max, imax;
int conjunto[SIZE];
printf("Introduzca %d valores:\n", SIZE);
for (i=0; i<SIZE; i++) {
Ingeniería Eléctrica y Electrónica
3
COMPUTACIÓN
printf("%d: ", i+1);
scanf("%d", &conjunto[i] );
printf("\n");
}
max = conjunto[0];
imax = 0;
for (i=0; i<SIZE ; i++) {
if (conjunto[i] > max) {
max = conjunto[i];
imax = i;
}
}
printf("\nEl máximo valor del conjunto es: %d.\n", max);
printf("\ny está en la posición %d.\n", imax+1);
}
Comentario: Este programa es muy sencillo, si se entiende el algoritmo. La variable max acabará
siendo igual al elemento mayor del conjunto, e imax indicará la posición del máximo.
Ejercicio 5: Escriba un programa que halle el menor de dos números pedidos al
usuario.
/* Calculo del menor de dos numeros dados */
#include <stdio.h>
main()
{
int menor, numero1, numero2;
printf("\nEscriba el primer numero y pulso INTRO: ");
scanf("%d",&numero1);
printf("\nEscriba el segundo numero y pulso INTRO: ");
scanf("%d",&numero2);
if (numero1 < numero2) menor=numero1;
else menor=numero2;
/* la sentencia if-else es equivalente a: menor=numero1<numero2 ? numero1 : numero2; */
printf("\nEl menor de %d y %d es %d\n",numero1, numero2, menor);
}
Ejercicio 6: Escriba un programa que calcule el factorial de un número.
/* Factorial de un numero */
#include <stdio.h>
main()
{
int i, numero, factorial=1;
printf("\nEscriba un numero entero para calcular su factorial: ");
scanf("%d",&numero);
for (i=numero; i>1; --i) factorial *= i;
Ingeniería Eléctrica y Electrónica
4
COMPUTACIÓN
printf("\n%d! = %d\n",numero,factorial);
}
Ejercicio 7: Escriba un programa que muestre una tabla de conversiones de
temperatura de grados Farenheit a grados Celsius, de 0ºF a 300ºF de 20 en 20ºF.
/* Sistema de temperaturas */
#include <stdio.h>
main()
{
int i;
float c;
for (i=0;i<=300;i+=20)
{
c=(5./9)*(i-32);
printf("%3d grados Farenheit equivalen a %4.4f grados Celsius\n",i,c);
}
Ingeniería Eléctrica y Electrónica
5
Descargar