scanf y printf en C con math.h
Clase 8 de 12 • Curso de Funciones en C
Contenido del curso
Clase 8 de 12 • Curso de Funciones en C
Contenido del curso
Juan Sebastian Ortiz Santacoloma
Reinaldo Mendoza
Hamlet Santana
Oscar Jaramillo
Carlos Nassif Trejo Garcia
Giovanni José Santana Bolaños
Eduardo López Melo
Juan Francisco
Angel Martinez Chavez
Mario Arciniegas Mejia
Reyes Molina
Luis Alejandro Vera Hernandez
Carlos Eduardo Gomez García
Luis Alejandro Vera Hernandez
Stiven Andres Arevalo
Abdel Mejia
Cindy Johanna Herrera Parra
Valente IA
Josué Esteban Cordero Ruvalcaba
code.soft 😶
Gerald Zamora
Carlos Lefin Henriquez
Cristian Blandon
Victor Vidal Visitacion Lacherre
Reyes Molina
Dino Damianoff
Danny López
Maximiliano Javier Alberto Carrizo
Marcel Nahir Samur
Maximiliano Javier Alberto Carrizo
Joaquim Jair Merlo Luque
Cristian Blandon
Juan Francisco
Gabriel Obregón
Pablo Cervantes Bohórquez
Erik Ucenik
Horacio Arias Hernández
Por defecto sin y cos esta en radianes, por eso le hice este cambio al programa para pasarlo a grados.
Notese que math.h tiene el valor de pi guardado y se llama M_PI
#include <stdio.h> #include <math.h> int x; double result; int main() { printf("Ingrese el valor de x: \n"); scanf("%d", &x); // Recibe un valor de entrada, asignamos el valor a la variable x result = cos(x*M_PI/180); printf("El valor ingresado es: %d \n", x); printf("El valor del sin de x es: %f \n", result); return 0; }
Adicional estoy usando linux, y no me dejaba usar bien las funciones de la libreria de C. Como explican mas adelante en los comentarios hay que ponerle -lm al final de la instruccion. Por ende mi archivo tasks.json de VSCODE quedo asi:
{ "tasks": [ { "type": "shell", "label": "C/C++: gcc build active file", "command": "/usr/bin/gcc", //g++ for cpp "args": [ "-g", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}", "-lm" ], "options": { "cwd": "/usr/bin" }, "problemMatcher": [ "$gcc" ], "group": { "kind": "build", "isDefault": true }, "detail": "Generated task by Debugger" } ], "version": "2.0.0" }
Gracias por el aporte, tambien estoy usando la terminal de ubuntu
Muchísimas gracias, aclarado antes de que se convirtiera en una confusión.
Vamos, que es el mismo libro que estoy usando como material de apoyo en el curso de Ricardo Celis. 🤓
Para los que no pudieron compilar, como a mi. Utilicen el siguiente comando:
gcc -o math math.c -lm
Algo de lo que me di cuenta haciendo pruebas es que la librería trabaja con radianes, por eso al poner sin(90) no os saldrá 1. Para ello hice un método que sirve de conversor de grados a radianes.
Gracias!
Esta bien el codigo pero lo que retorna metematicamente son radiantes no grados sexagesimales, solo hay un error de semantica no de codigo, en vez de grado escribes radiantes y listo, otros entenderan mejor la conversion.
Normalente pensamos en grados sexagesimales asi que en el scanf escribimos pensando en grados pero la funcion sin(x) toma valores en radiantes, paro lo cual debemos pasar a la funcion sin() los numeros en radiantes, la formula con la semantica correcta seria con este simpe cambio:
float conversor(float x){
float rad; // rad per radiantes
rad=(x/180)*3.1415926535;
return rad;
}
los amo gracias por lo de el -lm en la terminal de linux <3 tenia un problema al compilar
Hola, estoy teniendo este error:
Estoy trabajando en Windows 10 Pro v2004 VS Code 1.57.1 Utilizo la extensión Code Runner para compilar y según parece está trabajando sobre el entorno de WSL Ubuntu 20.04 (No se cómo cambiar esa configuración) Intenté agregar el comando -lm a la linea de ejecución de la extensión pero al ejecutar el programa se queda "running" y no responde.
Agradezco de antemano cualquier ayuda
Con este post puedes resolver lo que te sucede, configurando para que se ejecute en la terminal https://platzi.com/tutoriales/1469-algoritmos/2765-compilando-cc-desde-visual-studio-code-windows-10/
Que es %d? Yo creia que al ser una variable integer habia que pasarle %i, entonces cual se usa en cuales casos?
%d se usa para especificar dígitos en general :D
Entonces para ahorrarme saber el tipo de dato que tengo que pasarle mejor le pongo %d?
Donde esta el enlace del libro que menciona Celis o alguien que sepa donde buscarlo?
Libro “C Programming Language” escrito por Brian W. Kernighan y Dennis M. Ritchie (Creador del lenguaje C) C Programming Language, 2nd Edition
Comparto link del libro "The C programming language"
Para realizar los ejercicios estoy utilizando una raspberrypi, con el sistema operativo raspbian. Al tratar de compilar el programa, me marca el siguiente error:
pi@raspberrypi:~/Platzi/Escuelas/DesarrolloSoftware/ProgramacionEstructurada $ gcc -o mathDemo mathDemo.c /usr/bin/ld: /tmp/ccg38xMX.o: en la función `main': mathDemo.c:(.text+0x34): referencia a `sin' sin definir collect2: error: ld returned 1 exit status
Buscando en internet, encontré esta página; Para poder compilar tuve que agregar la opción -lm al final:
pi@raspberrypi:~/Platzi/Escuelas/DesarrolloSoftware/ProgramacionEstructurada $ gcc -o mathDemo mathDemo.c -lm
El seno y coseno están en radianes :v
Pasar esos radianes a grados es problema tuyo
como debe de ser xd
Porque a pesar de que quito las etiquetas de las librerias y vuelvo a guardar, compilo y ejecuto, pero de todas maneras el programa ejecuta todo normal. Porque tanta insistencia de poner las etiquetas si luego el programa de todas maneras las ejecuta sin ellas?
Si no importas la librería, el compilador lo hará de forma "implícita" por ti (si es una librería conocida).
Como se ha dicho en clases anteriores, al compilador le dan igual muchas cosas, si indentas, si importas (algunas librerías), si escribes todo en una línea... Y por eso, hay algo que se llama buenas prácticas, las cuales no están pensadas en el compilador ni en el momento de ejecutar un programa, sino en las personas que leerán y trabajarán con tu código (incluyéndote en el futuro).
Por eso la insistencia de importar las librerías, porque le ayudarás a los demás a entender tu código, no estás dando por hecho que una función que estás usando viene por defecto incluida y estás evitando errores (especialmente si usas librerías que no son conocidas).
Te comparto el warning que me aparece a mi cuando quito el statement para importar math.h:
Es como si te dijera "por favor conduce hasta allá" Si me conoces, probablemente vas a saber a qué estoy haciendo referencia con "allá", pero si no, te va a costar.
¡Saludos!
#include <stdio.h> #include <math.h> float x; int main() { printf("ingrese el valor de x: "); scanf("%f", &x); float conv = ((x/180)*3.141593); printf("valor es %f\n",conv); float resul = sin(conv); printf("el valor ingresado es: %f\n",x); printf("seno de x es: %f",resul); return 0; }
Si alguien necesita el libro, lo tengo en español en formato. epub
Nice. Podrías pasarmelo? Mi telegram es TeiV2
Por favor compartir, correo: dalx117@gmail.com
no entiendo que pasa ejecuto el programa y me sale el error descripto al final #include <stdio.h> #include <math.h>
int x; float result;
int main() {
printf( "ingrese el valor de x: "); scanf("%d ",&x); printf (" el valor de x es: %d",x); result= sin(x); printf("el valor del coseno de x es: %f\n", result); return 0;
}
[Error] ld returned 1 exit status
Si estas utilizando Linux como ya, quizá te esté ocurriendo como a mi que el compilador gcc no reconoce la librería math.h. Te dejó la respuesta que hallé en un foro https://askubuntu.com/questions/332884/how-to-compile-a-c-program-that-uses-math-h
Básicamente, debes agregar el modificador -lm al final de la instrucción, algo así:
No estoy usando windows
sin esta clase no se podía resolver los retos de hace un par de clases
¿Qué retos? :D
Mi ejercicio teniendo en cuenta los grados sexagesimales y los valores en radiantes (rad),
𝜋 rad = 3.1415.... rad= 180°
x en grados
1 radiante= (x/180)*3.1415926535 // FORMULA DE CONVERSION DE GRADOS A RADIANTES
#include <stdio.h> #include <math.h> double x, y, result, resultInputGrades; int main() { printf("Ingrese el valor de x en radiantes: "); scanf("%lf", &x); // Lee un valor entero desde la entrada estándar, &x es la dirección de memoria de x result = sin(x); // Llama a la función sin del archivo math.h pero el resultado es en radiantes, no grados sexagesimales. printf("Ingrese el valor de x en grados sexagesimales: "); scanf("%lf", &y); resultInputGrades = sin((y/180)*3.1415926535); // Convierte grados a radianes printf("El valor ingresado es: %lf rad\n", x); printf("El valor del sin di x es: %lf\n", result); printf("El valor ingresado es: %lf grados\n", y); printf("El valor del sin di x es: %lf\n", resultInputGrades); return 0; }
📌Biblioteca math.h en C
🔹 ¿Qué es math.h?
✨ Biblioteca estándar de C para operaciones matemáticas avanzadas.
📖 Con ella puedes:
🔹 Cómo incluir math.h
📌 Siempre junto con stdio.h:
#include <stdio.h>
#include <math.h>
int main() {
// código aquí
}
🔹 Capturar valores del usuario
💻 Para leer datos desde el teclado → scanf
#include <stdio.h>
int main() {
int x;
printf("Ingrese el valor de x: ");
scanf("%d", &x);
printf("El valor ingresado es %d\n", x);
return 0;
}
🔹 Ejemplo: uso del seno
#include <stdio.h>
#include <math.h>
int main() {
int x;
printf("Ingrese el valor de x: ");
scanf("%d", &x);
float result;
result = sin(x); // Seno de x
printf("El seno de x es %f\n", result);
return 0;
}
📌 Función usada: sin(x)
🔹 Otras operaciones comunes
✅ cos(x) → coseno
✅ sqrt(x) → raíz cuadrada
✅ pow(a, b) → potencia
Ejemplo con cos(x):
#include <stdio.h>
#include <math.h>
int main() {
int x;
printf("Ingrese el valor de x: ");
scanf("%d", &x);
float cosValue;
cosValue = cos(x);
printf("El coseno de x es %f\n", cosValue);
return 0;
}
🔹 Más funciones para explorar
una duda. porque me sale diferente resultado
Por si a alguien le pasa lo mismo: el problema está en la línea 16. Tendría que ser %f y no %d, ya que el primero es para números con decimales (floats o doubles) mientras que el otro es para números enteros (ints)
#include<stdio.h>#include<math.h> int x;float result1;float result2;float result3;float result4; int main(){ printf("ingrese el valor de x: "); scanf("%d", &x); result1 = sin(x); result2 = cos(x); result3 = tan(x); result4 = log(x); printf("El valor ingresado es:%d \n", x); printf("El valor del seno de X es:%f\n", result1); printf("El valor del coseno de X es:%f\n", result2); printf("El valor del tangente de X es:%f\n", result3); printf("El valor del logaritmo de X es:%f\n", result4); return 0;}