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

#751
Cita de: flony en 26 Mayo 2013, 04:59 AM
lei algo que talvez te interese
http://foro.elhacker.net/programacion_cc/como_encontrar_la_duracion_de_un_mp3-t390797.0.html
aca en el foro

¿No te has dado cuenta que GoBrit es el autor de dicho tema?. :rolleyes:

La verdad es que no entiendo porque abrió otro hilo con el mismo tema, espero pueda explicar ese hecho, más que nada por curiosidad sociológica. :silbar:

Saluditos!. ... ..
#752
Cita de: josri en 26 Mayo 2013, 06:30 AM
Saludos, Tengo la siguiente duda: Digamos que en un if pregunto por una variable y ahora quiero ocupar el valor de la variable pero en otro if
**Existe alguna forma de poder traer el valor obtenido dentro del if anterior para usarlo aqui??????????????


Ningún problema. Por ejemplo observa esta salida:

Código (cpp) [Seleccionar]

Contiene alguna bifurcacion (s/n)(?) ?:
s
b= n
hola



Código (cpp) [Seleccionar]
#include <stdio.h>
int main()
{
   char a,b;
   printf ("\n\nContiene alguna bifurcacion (s/n)(?) ?: \n");
   scanf ("%c",&a);
   if(a=='s'){
       printf ("b= ");
       scanf (" %c",&b);
   }
   if (a=='n'){
               puts("a=n");
   }
   if(a=='s'){
       if(b=='n'){
           puts("hola");
        }
       else if(b=='s'){
           puts("adios");
        }
   }
   return 0;
}


Creo que si no te funcionaba era porque en el scanf ponlas %s en lugar de %c.

Saluditos! ... ..[/size]
#753
Cita de: mr.blood en 25 Mayo 2013, 23:19 PM
Maquinón? Uso archlinux con LXDE sobre un Acer TravelMate 291. (Pentium M a 1.4Ghz)

Las pruebas de tiempos se hacen siempre sin nada más ejecutándose ;).

Sa1uDoS

;-) ;-) ;-)

Lo siento pero soy una persona altamente HiperActiva, si no estoy en diez cosas a la vez me aburroo ...... ;) ;) ;)

Por cierto, ¿te gusto la solución para elegir 100 entre 1000 aleatoriamente y sin comparar?
;)

Un fuerte Saludo! .... ..
#754
Cita de: Khronos14 en 25 Mayo 2013, 22:41 PM
El fallo es que a partir del número 47 los números son muy grandes y no se pueden representar con 4 bytes. Puedes probar con unsigned long long que son 8 bytes, pero llegará un momento en el que vuelvas a tener el mismo problema.

Puedes buscar librerías matemáticas para C que te permitan trabajar con números más grandes, van a ser lentas, pero te darán esa opción.



No,no tienen que ser necesariamente lentas. C incorpora una librería básica para manejar números algo más grandes de lo habitual:  #include <inttypes.h>.

Una salida para la que tu planteabas de 70 es:


Dame un numero :70

1       1       2       3       5       8       13      21      34      55
89      144     233     377     610     987     1597    2584    4181    6765
10946   17711   28657   46368   75025   121393  196418  317811  514229  832040
1346269 2178309 3524578 5702887 9227465 14930352        24157817        39088169
       63245986        102334155       165580141       267914296       43349443
7       701408733       1134903170      1836311903      2971215073      48075269
76      7778742049      12586269025     20365011074     32951280099     53316291
173     86267571272     139583862445    225851433717    365435296162    59128672
9879    956722026041    1548008755920   2504730781961   4052739537881   65574703
19842   10610209857723  17167680177565  27777890035288  44945570212853  72723460
248141  117669030460994 190392490709135

Que si no he revisado mal se corresponde con el resultado más poderoso del programa Mathmatica:


{1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040, 1346269, 2178309, 3524578, 5702887, 9227465, 14930352, 24157817, 39088169, 63245986, 102334155, 165580141, 267914296, 433494437, 701408733, 1134903170, 1836311903, 2971215073, 4807526976, 7778742049, 12586269025, 20365011074, 32951280099, 53316291173, 86267571272, 139583862445, 225851433717, 365435296162, 591286729879, 956722026041, 1548008755920, 2504730781961, 4052739537881, 6557470319842, 10610209857723, 17167680177565, 27777890035288, 44945570212853, 72723460248141, 117669030460994, 190392490709135}


Pero sí, el tema de los números grandes es una pena que no venga implementado en el propio C. Pero menos es nada, con lo anterior ya tienes valores bastantes más altos.

Saluditos!. ... ..
#755
Cita de: GoBrit en 25 Mayo 2013, 11:24 AM
Hola,
..................................................
En fin el problema es que no se como leer un archivo *.wav para luego poder reproducirlo.
............................................

Perdona pero te puse por error la respuesta en e otro tema, Pero vamos, no hay problema y te la repito;

Cita de: GoBrit en 17 Mayo 2013, 22:26 PM
Hola,
...........................................................................
Aquí viene el kit de la cuestión: Como puedo hacer una interrupción al timer que me ponga música en modo background. El objetivo es a partir de un archivo .wav y haciendo una interrupción al timer (0x08 -> Tema interrupción dominado) hacer sonar el la canción que contiene el fichero .wav.
..........................................................

No me he aclarado mucho con tu problema. Por lo que entiendo está en "reproducir" el archivo .wav, para lo cual la única información necesaria es su ruta de acceso. Pues eso, si lo que quieres es reproducir un .wav o un ,mp3 o lo que sea hay varias posibilidades:

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

int main()
{
   system("C:\\WINDOWS\\Media\\notify.wav");
   sndPlaySound("C:\\WINDOWS\\Media\\notify.wav",0);
   system("C:/219.mp3");
   return 0;
}


Las barras las pongo de una forma u otra, según me da,

Hay un porrón de funciones en las API relacionadas con la reproducción, para empezar.

No sé si es algo de lo que buscas, pero or intentarlo que no quede.

Saluditos!. ... ..
#756
Cita de: GoBrit en 17 Mayo 2013, 22:26 PM
Hola,
...........................................................................
Aquí viene el kit de la cuestión: Como puedo hacer una interrupción al timer que me ponga música en modo background. El objetivo es a partir de un archivo .wav y haciendo una interrupción al timer (0x08 -> Tema interrupción dominado) hacer sonar el la canción que contiene el fichero .wav.
..........................................................

No me he aclarado mucho con tu problema. Por lo que entiendo está en "reproducir" el archivo .wav, para lo cual la única información necesaria es su ruta de acceso. Pues eso, si lo que quieres es reproducir un .wav o un ,mp3 o lo que sea hay varias posibilidades:

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

int main()
{
   system("C:\\WINDOWS\\Media\\notify.wav");
   sndPlaySound("C:\\WINDOWS\\Media\\notify.wav",0);
   system("C:/219.mp3");
   return 0;
}


Las barras las pongo de una forma u otra, según me da,

Hay un porrón de funciones en las API relacionadas con la reproducción, para empezar.

No sé si es algo de lo que buscas, pero or intentarlo que no quede.

Saluditos!. ... ..
#757
Programación C/C++ / Re: [C]funciones
25 Mayo 2013, 22:34 PM
Cita de: k0b3 en 25 Mayo 2013, 18:12 PM
es eso lo extraño, le puse void a todas y en la linea de mensaje no me permitio ponerle void..

No termino de entender lo que quieres decir, pero con la observación de rir3760 el programa furula bien, es decir así:


Código (cpp) [Seleccionar]
#include <stdio.h>

void mensaje(void);

int main(void){
    int x0;
    printf("Ingrese un numero: ");
    scanf("%d",&x0);
    if (x0==1)
        mensaje();
    else
        printf("Error.");
    return 0;
}
void mensaje(void){
    printf("hola mundo");
}


Saluditos! .... ..
#758
Cita de: mr.blood en 24 Mayo 2013, 10:37 AM
.............................................................................................
Quitando los cout y los printf mi código anda sobre los 0.002s y el tuyo sobre los 0.006s ;).

Esta tarde intentaré arreglarlo para que funcione con más cifras;).


Tienes un "maquinón" para que te den esas cifras, o bien yo dejo de tener abiertas a la vez treinta páginas, mínimo, música y cuatro o cinco programas a la vez. ::)

Me picó la curiosidad e hice una comparativa de tiempos sin impresión, del puro y duro cálculo. Y estos son los resultados:

* Con tu código del if y matriz de 10x10 tomando sólo 100:



* Con el do-while del mío:



* Con la función de CCross:



* Con la función de CCross pero declarada como inline:



* Con mi do-while pero tomando aleatorios entre 1000:




Aquí me paro para un pequeño comentario.

La verdad es que la igualdad entre tu if y mi do-while es un resultado esperado pero lo que me sorprendió fue que con la función de CCross se obtenga un valor similar, teniendo en cuenta que hace uso de una llamada a la función para cada uno de los 100 valores aleatorios que se necesitan, Y más aún que con la función inline se obtenga el mismo valor que ella, ya que se presupone que al declararla como tal sustituye, si el compilador lo considera, las llamadas a la función por código dando como resultado un .exe mayor a costa de ganar en velocidad. ¿Qué ha pasado para que los valores obtenidos con el código con función, tanto con inline como sin ella, salgan tan igualados a los presumiblemente "más eficientes" códigos del if y del do-while'?.

Creo que la respuesta está aquí:



Se observa que los eficientes códigos if y do-while tienen tamaño considerablemente más pequeños que los códigos con función, es decir  "creo" que ha sustituido las llamadas a la función en el código "aún en el caso de no declararla como inline", con lo que compensa tamaño con velocidad !!!!.

Supongo que el aburrimiento y la curiosidad por saber qué pasa me han llevado a todo lo anterior.
:laugh:

Y para que no se diga, a continuación un ligero avance del problema que le propusieron a hxcbps y que ha originado todo este rollo. Pero antes "una imagen coloreada"de la salida del código que viene después:



Código (cpp) [Seleccionar]

/*generar una matriz de 10x10 con números
no repetidos entre 1 y 10000 indicando
el minimo y .............*/

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>

int color (int n);

int main()
{
       srand(time(NULL));
int n,matriz[10][10]={0}, i=rand()%9+1, j=0, x, y,minimo=10001,i_min=0,j_min=0;
/***************  CALCULO  ***********/
do{

x=rand()%10;
y=rand()%10;
if(matriz[x][y]==0 ){
           matriz[x][y]=i;
           if (i<minimo)
           {
               minimo=i;
               i_min=x;
               j_min=y;
           }
         i+=rand()%18+1;
           j++;
       }
}while (j<100);
/***************  IMPRESION CON COLOR  ***********/
for(i=0;i<10;i++)
{
       putchar('\n');
for(j=0;j<10;j++)
       {
           if (i==i_min && j==j_min)
               n=228;
           else
               n=113;
           color (n);
           printf(" %i ", matriz[i][j]);
           color (7);
           printf("\t");
       }
}
   color (96);
   printf("\n\nminimo = %d en la posicion ",minimo);
   color (228);
   printf(" (%d,%d) \n",i_min+1,j_min+1);
   color (7);
   return 0;
}
int color (int n)
{
       SetConsoleTextAttribute(GetStdHandle (STD_OUTPUT_HANDLE), n );
}


En este código "ya" se rellena la matriz de 10x10 con aleatorios entre 1 y 1000, así como se calcula el mínimo y su posición para que el amigo hxcbps pueda continuar con el resto de la tarea que me trae sin cuidado. En realidad lo que me ha resultado interesante es el cómo rellenar la dichosa matriz con números del 1 al 1000. Si alquien encuentra un método alternativo mejor, please comunicarlo pero tener en cuenta que lo he hecho sin realizar ninguna comparación.

Saluditos!. .... ..


#759
Cita de: edr89 en 25 Mayo 2013, 03:35 AM
....................................
El detalle del incremento ++ no lo termino de entender.


Sencillamente incrementa en una unidad el valor de la variable, Por ejemplo i++ = i+1.

Te dejo un código con "for". Es un bucle lógico y más claro que while cuando se conoce el rango de valores, como es tu caso, ya que conoces de antemano el número de alumnos y notas que vas a introducir.

Por otro lado, la función main debe ser declarada cono int con su correspondiente return.

No necesitas de un bucle exclusivo para calcular alumno[r], que yo llamo suma_medias, me parece que el nombre hace mejor referencia a la variable que cacula.

En fin, el código está bastante bien, pero para mi gusto los while lo hacen menos entendible:


Código (cpp) [Seleccionar]
#include <stdio.h>
int main()
{
   int i=0,j=0,n=0;
   float media_alumno[10]={0},nota=0,suma_medias=0,sum_notas=0;
   printf("Cuantos alumnos quieres registrar?: ");
   do{
       scanf("%d,",&n);
       if(n>10)
       {
           printf("El sistema no permite registrar mas de 10 alumnos por sesion.\n");
           printf("Cuantos alumnos quieres registrar?: ");
           scanf(" %d,",&n);
       }
   }while(n>10);
   for(i=0;i<n;i++)
   {
       for(j=0;j<5;j++)
       {
           printf("Teclea la nota %d del alumno %d:",j+1,i+1);
           do{
               scanf(" %f",&nota);
               if(nota>10 || nota<0)
               {
                   printf("La nota ha de ser entre 0 y 10.\n");
                   printf("Vuelva a teclear la nota %d  del alumno %d:",j+1,i+1);
                   scanf(" %f,",&nota);
               }
           }while(nota>10 || nota<0);
           sum_notas+=n;
       }
       puts ("");
       media_alumno[i]=sum_notas/5.;
       suma_medias+=media_alumno[i];
   }
       puts ("");
       for(i=0;i<n;i++)
            printf("Promedio Alumno %d: %.2f\n",i+1,media_alumno[i]);
       printf("\n\nPomedio general: %.2f\n\n",suma_medias/2.);
       return0;


Saluditos! .... ..
#760
Cita de: superkorlas en 22 Mayo 2013, 19:56 PM
Vale he metido lo de cin.getline(cadena,100) pero ahora me da un numero mas raro y sin sentido ( en el tamaño), por ejemplo si pongo como cadena "hola amigo" me devuelve 6 de tamaño... :huh: me tiene perplejo no se...


¿Y qué querías que te devolviera?. Si lo observas con atención el primer cin "pilla" todos los caracteres "hasta" que encuentra un espacio en blanco, es decir la palabra" hola". Lo demás que queda en el buffer "_amigo" son seis caracteres que cin.get "vuelve" a meter como variable cadena y ese es el resultado que devuelve la función que calcula la longitud. Así de sencilla es la explicación de ese número que te tenía perplejo.

Saluditos! ....