Está en la página 1de 8

Ejercicio de la ecuación de segundo grado (con validación)

# include <stdio.h>
# include <math.h>
double leerDatoReal(char d);
void mostrarMensaje(char mensaje[50]);
void calcular(double na, double nb, double nc);

int main()
{
double a, b, c;

a = leerDatoReal('a');
b = leerDatoReal('b');
c = leerDatoReal('c');

calcular(a, b, c);

return 0;
}

double leerDatoReal(char d)
{
double dato;

printf("Ingrese un real para %c: ", d);


scanf("%lf",&dato);
return dato;
}

void mostrarMensaje(char mensaje[50])


{
printf(" %s ", mensaje);
}

void calcular(double na, double nb, double nc)


{
double res=0.0;
double discriminante;
char mensaj[50];

discriminante = pow(nb,2) - 4*na*nc;

if(na==0)
{
mostrarMensaje("Ingresó un cero para a, no es posible dividir en cero");
}
else if (discriminante < 0)
{
mostrarMensaje("El resultado es imaginario");
}
else
{
res = (-nb + sqrt(pow(nb,2) - 4*na*nc)) / (2*na);
sprintf(mensaj,"X1 con +b es = %.2lf \n", res);
mostrarMensaje(mensaj);

res = (-nb - sqrt(pow(nb,2) - 4*na*nc)) / (2*na);


sprintf(mensaj, "X2 con -b es = %.2lf \n", res);
mostrarMensaje(mensaj);
}
}

TRATAMIENTO DE DATOS LOGICOS

Ya sabemos que lenguaje C No tiene datos lógicos. Lo que se hace es aprovechar una librería
que alguien creó. Esa librería es:

# include <stdbool.h> Se declara en la cabecera del programa

Ya en la main, ud puede usar el tipo de datos lógico así:

bool esFumador;
bool estaCasado; true, false; (Realmente almacena un cero o un 1)

esFumador = leerDatoLogico();

bool leerDatoLogico()
{
bool esFumador;
char respuesta;

printf(“ Es usted fumador??? Ingrese S de Si o N de NO “);


scanf(“%c”, &respuesta);
if (respuesta==’S’ || respuesta==’s’)
{
esFumador = true;
}
else
{
esFumador = false;
}
return esFumador;
}

Ejemplo completo (corriendo en C)

# include <stdio.h>
# include <stdbool.h>
bool leerDatoLogico();

int main()
{
bool esFumador;

esFumador = leerDatoLogico();

if (esFumador==true)
{
printf("Pilas, va a acabar con sus pulmones");
}
else
{
printf("Lo felicito, le recomiendo que tampoco beba");
}
return 0;
}

bool leerDatoLogico()
{
bool esFumador;
char respuesta;

printf("Es usted fumador??? Ingrese S de Si o N de NO: ");


scanf("%c", &respuesta);

if (respuesta=='S' || respuesta=='s')
{
esFumador = true;
}
else
{
esFumador = false;
}
return esFumador;
}

Ejercicio

Construya un programa en lenguaje C que, con funciones permita saber si una persona con
síntomas de covid 19 se debe quedar o no en la clínica en observación. Cuando un paciente
llega, le preguntan: Es ud mayor de 60 años?, Es usted diabético?, Es ud hipertenso?. Si la
respuesta a las tres preguntas es verdadera, el paciente debe quedarse en estricta observación,
de lo contrario, si el paciente presente dos de estas características, debe quedarse en
observación media, sino, se puede ir para la casa.

# include <stdio.h>
# include <stdbool.h>
# include <string.h>

bool leerDatoLogico(char mensaje[50]);


void diagnosticar(bool esM, bool esD, bool esH);
void mostrarMensaje(char mensaje[50]);

int main()
{
bool esMayor60, esDiabetico, esHipertenso;

esMayor60 = leerDatoLogico(" Es usted mayor de 60 años: S/N ");


esDiabetico = leerDatoLogico(" Es usted diabético: S/N ");
esHipertenso = leerDatoLogico(" Es usted hipertenso: S/N ");

diagnosticar(esMayor60, esDiabetico, esHipertenso);

return 0;
}
bool leerDatoLogico(char mensaje[50])
{
bool dato;
char res;

printf(" %s ", mensaje);


scanf("\n%c", &res);

if (res=='S')
dato = true;
else
dato = false;

return dato;
}

void diagnosticar(bool esM, bool esD, bool esH)


{
if (esM==true && esD == true && esH == true)
{
mostrarMensaje( " Se queda en estricta observacion viejito");
}
else
{
if ((esM==true && esD == true) || (esM==true && esH == true) || (esH==true &&
esD == true))
{
mostrarMensaje( " Se queda en observacion media");
}
else
{
mostrarMensaje( " Vayase pa la casa");
}
}
}

void mostrarMensaje(char mensaje[50])


{
printf(" %s ", mensaje);
}
Ejercicio 2

Construya un programa en lenguaje C con un menú hecho con switch … case que permita hacer
lo siguiente invocando funciones y procedimientos:

Opción 1: pedir dos números enteros de tres digitos

Opción 2: sumar los números

Opcion 3: multiplicar los dos números

Opcion 4: dividir los dos números teniendo en cuenta que el segundo no puede ser cero

Opcion 5: determinar la suma de los tres dígitos de cada número ingresado y encontrar la
mayor de esas dos sumas.

Opcion 6: salir

Variables Banderas

Es una variable que indica si algo ya se hizo o no, si algo ya sucedió o no en la ejecución del
programa. Es de tipo lógico. También recibe el nombre de centinela o switche del Ingles.

# include <stdio.h>
# include <stdbool.h>

int leerEntero(char mensaje[50]);


int sumar(int n1, int n2);
void mostrarMensaje(int n);

int main()
{
int n1, n2, opc, res;
bool yaLeyo;

yaLeyo = false;
n1 = 0;
n2 = 0;

printf("Digite : \n 1. Ingresar dos números de tres cifras "


"\n 2. Sumar los dos números "
"\n 3. Restar los dos numeros ");
scanf("%i", &opc);

switch(opc)
{
case 1: n1 = leerEntero("Ingrese un número de tres cifras: ");
n2 = leerEntero("Ingrese un número de tres cifras: ");
yaLeyo = true;
break;

case 2: if(yaLeyo == true)


{
res = sumar(n1, n2);
mostrarMensaje(res);
}
else
{
printf("No ha leido los números");
}
break;

return 0;
}

int leerEntero(char mensaje[50])


{
int n;

printf("%s", mensaje);
scanf("%i", &n);

if (n<100 || n>999)
{
printf("el numero no es de tres cifras");
return 100;
}
else
{
return n;
}

}
int sumar(int n1, int n2)
{
return (n1+n2);
}

void mostrarMensaje(int n)
{
printf("El resultado es %i ", n);
}

También podría gustarte