Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - leosansan

#111
Cita de: Baal_30 en 19 Julio 2014, 12:07 PM
Buenas, hace nada hice una "alarma" en C, con temporizador. El post está por aquí ya que necesité ayuda. Ahora, me gustaría que cuando sonara, en vez del pitido ("\a"), sonase una canción o un archivo de audio que yo quiera, supongo que se podrá, y pediría que alguien me guiase un pelín o me de alguna ayuda sobre el tema.

Gracias de antemano.

Una forma simple sería:

Código (cpp) [Seleccionar]
system("MiCancion.mp3");

si está en la misma carpeta, si no tendrás que especificar la ruta, algo como

Código (cpp) [Seleccionar]
system("C:\\carpeta\\OtraCarpeta\\MiCancion.mp3");

¡¡¡¡ Saluditos! ..... !!!!


#112
Cita de: BlackM4ster en 19 Julio 2014, 06:13 AM
Hola, llevo un tiempo intentando dar con un algoritmo para detectar el punto de intersección (si existe) entre una linea (rayo) y un triángulo. ¿Alguno tiene implementado ya ésto?
Los parámetros a pasar serían:

Código (cpp) [Seleccionar]
Vec3f InterseccionRayoTriangulo(Vec3f T1, Vec3f T2, Vec3f T3, Vec3f R1, Vec3f R2)

Siendo T1, T2 y T3 los vértices del triángulo y R1 y R2, los puntos de la linea.

Alguna idea?

Supongo que T1 y compañía son tipo estrctura donde tienes los vértices de cada uno.

Lo primero es la nomenclatura:

Código (cpp) [Seleccionar]

a = ( y2 - y1 ) / ( x2 - x1 ) ///para recta R1 R2
b = y1 - a * x1               ///para recta R1 R2

A = ( Y2 - Y1 ) / ( X2 - X1 ) ///para una de las Tini Tfinal
B = Y1 - A * X1               ///para una de las Tini Tfinal


donde con minúsculas represento a la recta R1 R2 y con mayúsculas a una de las rectas del triángulo y habrá que hacerlo para cada una de las tres rectas del triángulo, siempre con la misma R1 R2.

Y al meollo de la cuestión, dónde se cortan:

Código (cpp) [Seleccionar]
if ( a = A )
  /** no se corta pues son paralelas // **/
else
  /** se cortan y el punto de corte es: **/

  x = ( B - b ) / ( a - A )
 
  y = ( a * B - A * b ) / ( a - A )


Así de simple. Existen otros métodos pero como supongo que trabajas con las coordenadas de los vértices me parece el mejor.

Espero no haberla pifiado al copiar los datos, no obstante lo he comprobado con un par de casos y va bien.

¡¡¡¡ Saluditos! ..... !!!!



#113
Programación C/C++ / Re: Temporizadores
18 Julio 2014, 16:56 PM
Sin conio.h pero con:

Código (cpp) [Seleccionar]
#include <windows.h>
#include <iostream>
#include <iomanip>
#include <unistd.h>
#include <pthread.h>


Creo un hilo para el contador, que sigo usando Sleep por ganseria en lugar de cronos, y poco más. Sólo que el "Quedan" podemos evitarlo ya que distorsiona un poco la impresión. Pero bueno, como intento sin usar conio y que no espere hasta que se dé al ENTER creo que vale.....y ojo que no soy especialista en hilos, así que las críticas suaves, please  ;)

Código (cpp) [Seleccionar]

using namespace std;

void *hilo1(void *X){
 int i , ss = 10 ;
 cout << "Creando hilo " << endl;
 while( 1 ){
   for( i = ss ; i>= 0 ; i-=2 ){
     Sleep(2000);
   cout << "   Quedan: " << setw(2) << i << " segundos.\r"  ;
   }
   if ( i == -1 ) break;
 }
 cout << endl << "Tiempo excedido\n" << endl;
 exit(1) ;
}

int main(){
 int  algo = 0 ;
 pthread_t hilo ;
 pthread_create (& hilo , NULL , hilo1 , NULL );
 cout << endl << "No te olvides del ENTER " << endl;
 cin >> algo ;
 cout << endl << endl << "algo = " << algo << endl;
 return 0;
}


¡¡¡¡ Saluditos! ..... !!!!


#114
Cita de: Baal_30 en 17 Julio 2014, 11:50 AM
............................
Ya he corregido los detalles esos, pero el if no lo puedo quitar, si lo hago me suenan los pitidos desde el principio, hasta el final de la cuenta :/
.................................

Fíjate en el código que te puse que sin el if el printf va después del cierre de las llaves de los for, así sonará sólo al acabar los mismos es decir cuando ss=, mm=0 y hh=0 lo que equivale al if, por eso está de más.

Y por cierto, ahora que me fijo mejor es:

Código (cpp) [Seleccionar]
printf("La alarma sonara en: %02d:%02d:%02d\r",ii,ij,ik);

Así cuando queden, por ejemplo, nueve o menos segundo aparecerá 00:00:09 en lugar de 00:00:90 como lo tienes ahora.  ;)

Un fuerte saludo Baal_30!.
#115
Muy bueno lo del bool Miseryk, pero el tema era:

Cita de: carlosabcs18 en  9 Julio 2014, 05:12 AM
Necesito una función que valide una edad entre 8 a 11 años, y que rechace numeros decimales, negativos, etc.

....o letras y tu código valida presuponiendo que la entrada es un entero.  ;)... y no es una crítica, sólo una observación.

En realidad tu propuesta es equivalente a:

Código (cpp) [Seleccionar]
******************
int edad;

cout << "Edad: >" << endl;

cin >> edad;

if (edad < 8 || edad > 11 )
{
cout << "Este software no es adecuado para tu edad, para solucionar tu problema ingresa a http://www.spammmmmm.com" << endl;
}
*******************************


Por lo que te podrías ahorrar el bool asd y, como ya comenté, queda pendiente la validación indicada por el autor del tema.

¡¡¡¡ Saluditos! ..... !!!!



#116
Te ha quedado "guay".  ;)

Sólo unos detallitos: te falta el prototipo de la función "cuenta", el return de la función main y te podrías ahorrar el último if de la función cuenta:

Código (cpp) [Seleccionar]
  for(ii=hh,i=0;ii>=0;ii--,i++){
    if(i>0) {mm=59,ss=59;}
    for(ij=mm,j=0;ij>=0;ij--,j++){
      if(j>0) ss=59;
      for(ik=ss;ik>=0;ik--){
        Sleep(x);
        printf("La alarma sonara en: %d:%d:%d\r",ii,ij,ik);
      }
    }
  }
  printf("\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a");


Sólo he probado la función cuenta y te reitero que está guay. ¡¡¡Enhorabuena¡¡¡¡

¡¡¡¡ Saluditos! ..... !!!!



#117
Programación C/C++ / Re: funcion tangente
16 Julio 2014, 21:44 PM
Cita de: MessageBoxA en 16 Julio 2014, 21:01 PM
BUENAS ESTOY REALIZANDO UN CODIGO DONDE GRAFIQUE LA FUNCION SENO, COSE Y TANGENTE, YA TENGO HECHAS LAS 2 PRIMERAS PERO NO SE ME OCURRE COMO PODRIA GRAFICAR LA TANGENTE YA QUE ES EN FORMA VERTICAL, ME PODRIAN DAR ALGUN TIPS O IDEA DE COMO GRAFICARLA DE FORMA GENERAL, ES DECIR, SI INTRODUCIR PARAMETROS POR EL USUARIO. GRACIAS DE ANTE MANO

Antes que nada recordarte que escribir en mayúsculas no es de buena educación.

Si has podido graficar el seno y el coseno no entiendo qué problema te da la tangente, es como las anteriores sólo que con discontinuidades en los múltiplos impares de pi/2, pero saltando esos valores todo sería igual.

Además otra duda, ¿estas usando sólo el modo consola o alguna librería específica para gráficos?.

¡¡¡¡ Saluditos! ..... !!!!


#118
Programación C/C++ / Re: Temporizadores
16 Julio 2014, 21:11 PM
Cita de: Juan821 en 15 Julio 2014, 20:19 PM
...........................estoy en windows ..........................

Pues si estas en Windows podrías usar windows.h para "Sleep" y conio.h para kbhit:

Código (cpp) [Seleccionar]
#include <windows.h>
#include <iostream>
#include <conio.h>
#include <iomanip>

using namespace std;

int main(){
  int i , ss = 5 , algo = 0 ;
  while( !kbhit() ){
    for( i = ss ; i>= 0 ; i-- ){
      if (kbhit()){
        cout << endl;
        break;
      }
    Sleep(1000);
    cout << "Quedan: " << setw(2) << i << " segundos.\r" ;
    }
    if ( i == -1 ) break;
  }
  if ( i> -1){
    cin >> algo;
    cout << endl << "algo= " << algo << endl;
  }
  else cout << endl << "Tiempo excedido\n" << endl;
  return 0;
}


Y reitero lo de kutcher, sí ya sé que no es aconsejable usar conio, pero no se me apetece meterme ahora con las API de Windows.   ;)

¡¡¡¡ Saluditos! ..... !!!!



#119
Cita de: Baal_30 en 16 Julio 2014, 13:56 PM
.........................................
no me funciona, me el primer printf, pongo el tiempo, me sale el segundo printf correcto, pero el printf del bucle me sale sólo una vez y con la misma hora que el 2º printf
..................................................

Si no me equivoco es debido al valor de X=1. Tendrías que poner x=1000.

Pero hay un error lógico y es que si introduces como tiempo 0:2:15 el cronómetro se inicia bien en justamente 0:2:15, pero al llegar a 0:2:0 pasaría a continuación a 0:1:15 en lugar de 0:1:59. Y análogamente con la hora .

Creo que lo puedes remediar con:

Código (cpp) [Seleccionar]

**********************************
  int hh,mm,ss;
  int i,j,ii,ij,ik;
  int x = 1000;
  printf("Introduzca el tiempo para realizar la cuenta atras(HH:MM:SS) :\n");
  scanf("%d:%d:%d",&hh,&mm,&ss);
  printf("La alarma sonara en %d:%d:%d\n",hh,mm,ss);
  for(ii=hh,i=0;ii>=0;ii--,i++){
    if (i>0) mm=59,ss=59;
    for(ij=mm,j=0;ij>=0;ij--,j++){
      if (j>0) ss=59;
      for(ik=ss;ik>=0;ik--){
        Sleep(x);
printf("Quedan: %02d:%02d:%02d\r",ii,ij,ik);
      }
    }
  }
*****************************


¡¡¡¡ Saluditos! ..... !!!!


#120
La verdad es que ando dándole vueltas a qué tiene que ver el código que propones con una Distribución binomial negativa .

En esencia el cálculo de los pseudo-aleatorios se resume a:

Cita de: peyong3 en 15 Julio 2014, 06:37 AM
.............................................
 srand((unsigned)time(NULL));
 for(i=1;i<=k;i++){
   r=sin((float)rand());
   rc=fabs(r);
.............................................


Es decir al cálculo de sin y claro así se obtienen salidas como éstas:

Citar
el r1 es:0.988268
el r2 es:0.999706
el r3 es:0.972046
el r4 es:0.901397
el r5 es:0.876692
el r6 es:0.820528
el r7 es:0.994781
el r8 es:0.237657
el r9 es:0.772648
el r10 es:0.566853
el r11 es:0.220925
el r12 es:0.750848
el r13 es:0.743281
el r14 es:0.986598
el r15 es:0.847679

OTRA SALIDA:

el r1 es:0.358369
el r2 es:0.453992
el r3 es:0.882949
el r4 es:0.891008
el r5 es:0.766046
el r6 es:0.965927
el r7 es:0.587786
el r8 es:0.754711
el r9 es:0.939694
el r10 es:0.544640
el r11 es:0.906309
el r12 es:0.207912
el r13 es:0.809018
el r14 es:0.882949
el r15 es:0.945520

Donde se observa la preponderancia de valores superiores a 0.5 respecto a valores inferiores al mismo. Y es que al usar la función "sin" hay que recordar que, en grados sexagesimales para entenderlo mejor, para ángulos de 0-30 el valor del sin es inferior o igual a 0.5 mientras que para ángulos de 30-90 el valor es superior a 0.5. Es decir, y a lo breve, existen el doble de probabilidad de que el sin sea superior a 0.5 a que sea inferior, de ahí los resultados obtenidos.

¿No habrás querido decir otra cosa con eso de "Números aleatorios con una distribución binomial negativa"?.

¡¡¡¡ Saluditos! ..... !!!!