Está en la página 1de 11

Convertir segundos a horas, minutos y segundos

#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

Supongo que ya es hora de retomar el blog y ponerme a hablar de funciones en c++.


Una función es un pedazo de código fuera del main, con un nombre y que puede ser
‘llamado’ desde otra parte de nuestro programa.

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.

Nuestra función sería algo así:

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ó.

Si pudieran leerle la mente a un compilador, este diría:

Linea 1. Incluir la librería iostream. OK


Linea 2. Usar el namespace estándar. OK
Linea 3. Oh! una función llamada hola, la recordaré.
Linea 4. Llave. Parte de la función. Ignorar
Linea 5. Imprimir “Hola Mundo!”. Parte de la función. Ignorar
Linea 6. Llave. Parte de la función. Ignorar
Linea 7. ¡Por fin el main!
Linea 8. Llave. Entrar
Linea 9. Esta función se me hace conocida… oh sí ya recuerdo. Ejecutar lineas 4, 5 y 6
Linea 10. Llave. Salir

Ahora veamos una función que sí nos es útil:

#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);
}

Primero pedimos un nombre, lo guardamos en una variable y se le mandamos a la


función para que lo muestre.

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

Cómo pasar una matriz o arreglo como parámetro a


una función
Guardado en: Programas el 28 de octubre del 2010 Etiquetas: arreglos, funciones
Bueno, casi creo que nunca he hablado de matrices, parámetros o funciones en este
blog, pero este post es una petición de Rodrigo que me dijo por email que tenía
problemas con su tarea porque no sabe cómo pasar una matriz como parámetro a
una función en c++. Es algo sencillo, pero difícil de deducir. Veamos.

Si tu arreglo es de una dimensión…


int matriz[4];
… la forma de declarar la función es la siguiente:
void fx(int m[4]) { ...código... }
Y la forma de llamar la función sería:
fx(matriz);

Si el arreglo es de dos dimensiones…


int matriz[4][3];
… pues es lo mismo:
void fx(int m[4][3]) { ...código... }
Y la forma de llamar la función sería:
fx(matriz);

Si la función retorna una matriz…


int matriz[4];
… se declara normal:
void fx(int m[4]) { return matriz[4]; }
Y la forma de llamar la función sería:
matriz[4] = fx(matriz);

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

Gráfica de Seno y Coseno en C++


Guardado en: Programas el 4 de octubre del 2010 Etiquetas: gotoxy, math, seno coseno

Juand a través de un comentario me pidió ayuda con un programa que grafique


utilizando gotoxy las gráficas de seno y coseno en c++. El programa me pareció
interesante y, aunque tuve que desempolvar el Borland C++ que usaba en la prepa, lo
hice… feo, pero lo hice.

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

Calcular ángulos de un triángulo en C++


Guardado en: Programas el 3 de octubre del 2010 Etiquetas: math, triángulos

En el post anterior vimos cómo saber si un triángulo es rectángulo, acutángulo u


obtusángulo en C++, y les anticipé que haría una nueva versión del mismo programa
pero que nos calculara además los ángulos del triángulo.

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.

Bueno, pues fue un programa bastante entretenido, me gustó hacerlo :)

Sin comentarios

Saber si un triángulo es rectángulo, acutángulo u


obtusángulo en C++
Guardado en: Programas el 3 de octubre del 2010 Etiquetas: triángulos

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:

El triángulo 1 es un clásico triángulo rectángulo. Si aumentáramos el lado c de 5 a


6 obviamente el ángulo aumentaría y por lo tanto sería un triángulo obtusángulo (2). Si
por el contrario, disminuyéramos el lado de c 5 a 4, el ángulo disminuiría y por lo tanto
sería un triángulo acutángulo (3).

Sabiendo esto veamos cómo se comporta Pitágoras en cada caso (o sea no él, su
teorema):

Si despejamos su famoso teorema obtenemos que a2 + b2 – c2 = 0.

Veamos como se comporta este teorema en nuestro triángulo 1:


32 + 42 - 52 = 0
¡Listo!, ya sabemos que el triángulo es rectángulo, porque el teorema de Pitágoras sólo
sirve para triángulos rectángulos.

Ahora con el triángulo 2 (obtusángulo):


32 + 42 - 62 = -11
¡Un número negativo! Con los triángulos obtusángulos el teorema de Pitágoras da
números negativos.

Y por último el triángulo 3 (acutángulo):


32 + 42 - 42 = 9
¡Un número positivo! Con los triángulos acutángulos el teorema de Pitágoras da
números positivos.

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.

Ahora si, veamos el programa:

#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. ";
 
}

La única parte no explicada es la de las condiciones. Si en cualquiera de los tres formas


de tomar el teorema nos resulta 0 es rectángulo, por lo tanto se usa ||. Para ser
acutángulo, las tres formas del teorema deben ser mayores a 0, se usa &&. Con una sola
forma del teorema que resulte menor a 0 es obtusángulo, se usa ||. Para mayor
información de esos operadores leer esto: Operadores lógicos es C++.

¿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.

Primo o no ¡SIN CICLOS! en C++


Guardado en: Programas el 9 de septiembre del 2010 Etiquetas: if else, primos

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";
}
}
}
}
}
}

 Como vemos, primeramente checa si n es igual a 2; si no, checa si el residuo de


n/2 es cero. Si si, no es primo; si no, sigue.
 Luego checa si n es igual a 3; si no, checa si el residuo de n/3 es cero. Si si, no es
primo; si no, sigue.
 Lo mismo con el 5, el 7 y el 11.

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)

Como identificar un palíndromo en C++


Guardado en: Programas el 20 de noviembre del 2009 Etiquetas: cadenas, medio,
string.h

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

Ordenar arreglo de manera ascendente o descendente


(burbuja)
Guardado en: Programas el 19 de noviembre del 2009 Etiquetas: arreglos, burbuja,
funciones

Programa que lee un arreglo de 10 números y los ordena con el método de la


burbuja de manera ascendente o descendente según se elija. Para esto utiliza una
función que recibe el arreglo y la varible ‘ord’ (1=asc, 2=desc), luego utiliza otra
función para imprimirlo.

#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*/

También podría gustarte