Documentos de Académico
Documentos de Profesional
Documentos de Cultura
#include <iostream>
using namespace std;
int main()
{
int sec, hr, min;
cout << "Introduce los segundos: "; cin >> sec;
cout << sec << " segundos son ";
hr = sec / (60*60);
sec %= 60*60;
min = sec / 60;
sec %= 60;
cout << hr << " horas " << min << " minutos y " << sec << "
segundos" << endl;
}
Funciones en C++
Guardado en: Teoría el 6 de noviembre del 2010 Etiquetas: funciones
Imagínense que están entrenando a su perro a hacerse el muertito. Cada vez que ustedes
dicen ‘muertito‘, el perro se tira de espaldas en el suelo, cierra los ojos y saca la lengua.
En programación, el contenido de la función sería tirarse de espaldas, cerrar los ojos y
sacar la lengua; el nombre de la función sería muertito; y cada vez que nosotros
decimos muertito estamos llamando a la función.
void muertito()
{
Perro.Tirarse(posicion='espalda');
Perro[OjoDer].Cerrar();
Perro[OjoIzq].Cerrar();
Perro[Lengua].Sacar();
}
Jajaja, bueno, bueno. Ya en serio vamos a hacer un clásico Hola Mundo pero usando
una función:
#include<iostream>
using namespace std;
void hola()
{
cout << "Hola Mundo!";
}
int main()
{
hola();
}
Como ven, esta función es muy estúpida. No nos beneficia en nada y nos hace escribir
más código del necesario, pero nos sirve para ver cómo actúa una función: al momento
de llamar a la función, el compilador se brinca a la función, la ejecuta y cuando termina,
vuelve al punto desde donde brincó.
#include<iostream>
using namespace std;
void hola(char nombre[50])
{
cout << "Hola " << nombre << "!";
}
int main()
{
char nombre[50];
cout << "Cual es tu nombre?: "; cin.getline(nombre, 50, '\n');
hola(nombre);
}
No se preocupen, si nunca habían visto una función tal vez no entiendan la sintaxis,
pero el objetivo de este post es que sepan qué es una función y para qué se puede usar.
En el siguiente post voy a explicar la sintaxis de los cuatro tipos de funciones en c++.
2 Comentarios
Este programa pide tres números, los almacena en una matriz, le suma 1 a cada
elemento y los muestra, usando para cada acción una función. Así que tenemos
funciones que reciben matrices y que retornan matrices. Chéquenlo.
#include<iostream>
using namespace std;
void pedir(int matriz[3], int len)
{
for(int i=0; i<=len; i++)
{
cout << "Numero " << i+1 << ":? ";
cin >> matriz[i];
}
}
int sumar(int matriz[3], int len)
{
for(int i=0; i<=len; i++)
matriz[i]++;
return matriz[3];
}
void mostrar(int matriz[3], int len)
{
for(int i=0; i<=len; i++)
cout << matriz[i] << " ";
}
int main()
{
int matriz[3]={0}, len = sizeof(matriz)/sizeof(int);
pedir(matriz, len-1);
matriz[3] = sumar(matriz, len-1);
mostrar(matriz, len-1);
return 0;
}
4 Comentarios
A mi parecer, para graficar por ejemplo la función seno, hacen falta 3 pasos:
1. Hacer un ciclo de 0 a 360º (con aumentos de 5 queda muy bien) con for, algo muy
normal.
2. Calcular, obviamente, el seno de cada valor. Para esto la librería math.h nos regala la
función sin(). Su uso es el obvio, pero el asunto es que todas las funciones
trigonométricas que usa c++ trabajan en radianes. Es decir que primero tendremos que
convertir nuestro ángulo en radianes y luego ya sacar el seno. Si la variable ‘i’ contiene
el ángulo y tenemos ya definida la constante PI, la función quedaría así:
sin(i/180*PI)
3. Luego viene la parte más rara, convertir ese valor en un entero que pueda meter como
coordenada en un gotoxy. Si tenemos una variable int y y la igualamos a nuestra
función anterior podría quedar bien si multiplicamos por 10:
int x, y; y = sin(i/180*PI)*10; gotoxy(x,y);
Nos quedaría nuestra gráfica en una escala 1:10, pero al correr el programa veremos que
hay muchos valores de seno que son 10 (por el redondeo) y por lo tanto la gráfica se ve
achatada.
Para mejorar un poco eso (de todos modos queda un poco fea) podemos usar la función
ceil() incluida también en la librería math.h que nos redondea los decimales. Y esta vez
multiplicamos por 20, redondeamos, dividimos entre 2 y convertimos a int. Nos vuelve
a quedar escala 1:10 (¿o 10:1 …? no se) pero ya no hay tantas cantidades amontonadas
en el 10 y -10.
El programa ya listo para graficar seno está aquí abajo, obviamente para graficar coseno
sólo hay que cambiar la función sin por cos, y copiar, pegar y hacer un menú no debe
ser difícil.
#include<stdio.h>
#include<conio.h>
#include<math.h>
#define PI 3.14159265
int main()
{
int x=2, y;
for(float i=0; i<=360; i+=5)
{
y = ceil(sin(i/180*PI)*20)/2;
gotoxy(x, 12-y);printf("o");
x++;
}
getch();
return 0;
}
20 Comentarios
El programa es este.
#include<math.h>
#include<iostream>
using namespace std;
#define PI 3.14159265 // nuNcA cAmbieZz we!!
int main()
{
float a, b, c, A, B, C;
cout << "Introduce lado a: "; cin >> a;
cout << "Introduce lado b: "; cin >> b;
cout << "Introduce lado c: "; cin >> c;
A = acos((b*b+c*c-a*a)/(2*b*c))*180/PI;
B = acos((a*a+c*c-b*b)/(2*a*c))*180/PI;
C = acos((a*a+b*b-c*c)/(2*a*b))*180/PI;
if(A == 90 || B == 90 || C == 90)
cout << "El triangulo es rectangulo. ";
if(A < 90 && B < 90 && C < 90)
cout << "El triangulo es acutangulo. ";
if(A > 90 || B > 90 || C > 90)
cout << "El triangulo es obtusangulo. ";
cout << "\nY sus angulos son: A:" << A << " , B:" << B << " y C:"
<< C;
cin.get();cin.get();
}
Para calcular los ángulos utilizamos la ley de cosenos, de hecho en el anterior también
lo utilizamos pero no completamente (la ley de cosenos es una ‘ampliación’ del
teorema de pitágoras). La ley de cosenos la vemos comúnmente como:
a2 = b2 + c2 -2(b*c)*cos(A)
Si la despejamos en cos(A), nos queda:
cos(A) = (b2 + c2 - a2) / 2(b*c)
Si despejamos A (o sea el ángulo), obtenemos:
A = arccos(b2 + c2 - a2 / 2(b*c))
Que es lo que utilizamos calcular los ángulos, lamentablemente la función que nos da
C++ en su librería math.h, acos() nos devuelve el resultado en radianes. Para
convertirlo a grados solo tenemos que multiplicar el resultado por 180/PI. Ahora que ya
tenemos los tres ángulos de nuestro triángulo, es facilísimo saber cuando es cada tipo de
triángulo.
La función acos() está en la librería math.h y sirve para encontrar el arco coseno. En
esta librería hay muchas funciones muy útiles: math.h
Otro detalle sencillo pero que no habíamos visto es el asunto de PI. Al principio del
programa nos encontramos con:
#define PI 3.14159265
Esto significa que estamos declarando una constante con el nombre PI y con un valor
de 3.14159265. Una constante, como su nombre lo indica, nunca cambia a lo largo del
programa.
Sin comentarios
Emanuel por medio de un comentario me pidió ayuda para hacer un programa en c++
que nos dijera si un triángulo es rectángulo, acutángulo u obtusángulo pidiendo
solamente los lados. El programa me pareció interesante de hacer y pues lo hice :)
El programa resulta bastante sencillo, pero para deducir cómo hacerlo está un poco
complicado. Veamos la siguiente imágen:
Sabiendo esto veamos cómo se comporta Pitágoras en cada caso (o sea no él, su
teorema):
Ahora que ya sabemos cómo identificar cada triángulo nos surge otro problema: El
usuario sólo va a introducir tres lados cualquiera, ¿cómo saber cual es a, cual es b y cual
es c? Pues no hay forma de saberlo, hay que hacer cada paso tres veces tomando el
teorema como a2 + b2 – c2, luego a2 + c2 – b2 y al final b2 + c2 – a2.
#include<iostream>
using namespace std;
int main()
{
int a, b, c, A, B, C;
cout << "Introduce lado 1: "; cin >> a;
cout << "Introduce lado 2: "; cin >> b;
cout << "Introduce lado 3: "; cin >> c;
A = (b*b+c*c-a*a);
B = (a*a+c*c-b*b);
C = (a*a+b*b-c*c);
if(A == 0 || B == 0 || C == 0)
cout << "El triangulo es rectangulo. ";
if(A > 0 && B > 0 && C > 0)
cout << "El triangulo es acutangulo. ";
if(A < 0 || B < 0 || C < 0)
cout << "El triangulo es obtusangulo. ";
}
¿Cómo ven el programita? Está sencillo ¿no? Tal vez después haga una modificación
para que además te calcule los ángulos del triángulo.
Me preguntaban en los comentarios de este post: Primo o no, que si habría alguna forma
de hacer ese mismo programa pero sin ciclos. Mmmm…
Pues mi primera respuesta es no. Pero hay una forma muy burda de aproximarse a él. El
siguiente programa es para calcular si un número es primo o no sin ciclos y es infalible
hasta el 168, a partir de ahí puede que le atine o puede que no.
#include<iostream>
using namespace std;
int main()
{
int n;
cout << "Introduce un numero: "; cin >> n;
if(n!=2 & n%2==0)
cout << "No es primo";
else
{
if(n!=3 & n%3==0)
cout << "No es primo";
else
{
if(n!=5 & n%5==0)
cout << "No es primo";
else
{
if(n!=7 & n%7==0)
cout << "No es primo";
else
{
if(n!=11 & n%11==0)
cout << "No es primo";
else
{
cout << "Es primo";
}
}
}
}
}
}
Con eso obtenemos un buen número de números en los que estamos seguros que no
fallaremos. Si agregamos el 13, agrandamos esa cantidad; y aún mas con el 17, el 19, …
como en esta versión optimizada, que tiene su primer error con el 1681 (que no es
primo)
Lo primero que tendríamos que hacer sería quitar los espacios de nuestra cadena. Luego
ir comparando, el primer caracter con el último, el segundo con el penúltimo, etc. Si
todos los caracteres coinciden, es palíndromo, si no, pues no.
#include<string.h>
#include<iostream>
using namespace std;
int main()
{
char cadena[50],cadenaf[50]={0},*parte;
int c,len,pal=0;
cout<<"Introduce un palíndromo: "; cin.getline(cadena,50,'\n');
parte=strtok(cadena," "); //
strcat(cadenaf,parte); // quita los espacios de
'cadena' y
while((parte=strtok(NULL," ")) != NULL) // guarda el resultado en
'cadenaf'
strcat(cadenaf,parte); //
len=strlen(cadenaf);
for(c=0;c<=len-1;c++)
{
if(cadenaf[len-1-c]==cadenaf[c]) // comparación del primer
caracter con el
pal++; // último, el segundo con el
penúltimo, etc
}
if(pal==len) // si todos las caracteres coinciden, sí es palíndromo
cout<<"Sí es palíndromo!";
else
cout<<"No es palíndromo";
cin.get();
}
/*Creado por THEbatzuk*/
3 Comentarios
#include<iostream>
using namespace std;
int ordenar(int[],int);
int imprimir(int[]);
int main()
{
int c,lista[9],ord;
for(c=0;c<=9;c++)
{
cout<<"Numero "<<c+1<<": "; cin>>lista[c];
}
cout<<"\nAscendente 1\nDescendente 2\n--> Opción: "; cin>>ord;
if(ord==1 || ord==2)
{
ordenar(lista,ord);
imprimir(lista);
}
}
int ordenar(int lista[],int ord)
{
int c1,c2,aux;
for(c1=0;c1<=9;c1++)
{
for(c2=0;c2<9;c2++)
{
if(ord==1)
{
if(lista[c2]>lista[c2+1])
{
aux=lista[c2];
lista[c2]=lista[c2+1];
lista[c2+1]=aux;
}
}
else
{
if(lista[c2]<lista[c2+1])
{
aux=lista[c2];
lista[c2]=lista[c2+1];
lista[c2+1]=aux;
}
}
}
}
return 0;
}
int imprimir(int lista[])
{
int c;
for(c=0;c<=9;c++)
cout<<lista[c]<<" ";
cin.get();cin.get();
}
/*Creado por THEbatzuk*/