• Viernes 26 de Abril de 2024, 21:42

Mostrar Mensajes

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


Mensajes - carmamezo

Páginas: 1 [2] 3 4 ... 10
26
Visual C++ / Re: Visual C++
« en: Viernes 4 de Abril de 2008, 12:44 »
Hola,
no lo tengo muy claro pero parece que no refresca la pantalla, obliga a refrescar la pantalla cada vez que pintes un nuevo dato a ver que pasa...

Un saludo.

27
C/C++ / Re: Codigo De Un Ahorcado Principiante
« en: Jueves 20 de Marzo de 2008, 11:59 »
Hola,

podrías hacer lo siguiente, crear un arreglo de igual dimensión que la palabra que buscas y la inicializas a espacios.  Una vez hecho eso, puedes ir rellenando este arreglo con las letras correctas en su correspondiente posición...  Por ejemplo de esta manera:
Código: Text
  1.  
  2.   char palabra[30],solucion[30],fallidas[30]={""},letra;
  3.   unsigned int intentos,i,ok,j=0;
  4.  
  5.   printf("\n\tIntroduce palabra: ");
  6.   gets(palabra);
  7.   strlwr(palabra);
  8.   system("Cls");
  9.  
  10.   for(i=0;i<strlen(palabra);i++)
  11.     solucion[i]='_';
  12.   solucion[i]='\0';
  13.  
  14.   intentos=0;
  15.   while((intentos<5) && (strcmp(palabra,solucion)!=0))
  16.   {
  17.     system("Cls");
  18.     printf("\n\tPalabra: %s",solucion);
  19.     printf("\n\n\tIntentos fallidos: %s",fallidas);
  20.     printf("\n\tNumero de fallos: %d",intentos);
  21.     printf("\n\tIntroduce letra: ");
  22.     scanf("%c",&letra);
  23.     fflush(stdin);
  24.     ok=0;
  25.     for(i=0;i<strlen(palabra);i++)
  26.     {
  27.       if(palabra[i]==letra)
  28.       {
  29.         solucion[i]=palabra[i];
  30.         ok++;
  31.       }
  32.     }
  33.     if(ok==0)
  34.     {
  35.       fallidas[j]=letra;
  36.       intentos ++;
  37.       j++;
  38.     }
  39.  
  40.   }
  41.   system("Cls");
  42.   printf("\n\tPalabra: %s",solucion);
  43.   printf("\n\n\tIntentos: %s",fallidas);
  44.   printf("\n\tFallos: %d",intentos);
  45.  
  46.   printf("\n\n\n\n\tLa palabra correcta es: %s",palabra);
  47.   if(strcmp(palabra,solucion)!=0)
  48.     printf("\n\n\tLo siento, no has encontrado la palabra");
  49.   else
  50.     printf("\n\n\tENHORABUENA!!");
  51.  
  52.   fflush(stdin);
  53.   printf("\n\n\tPulsa <enter> para terminar");
  54.   getchar();
  55.  
  56.  
Ten en cuenta que aqui hay funciones de la librería string.h y otras que no.  Es una posible solución, pero recuerda que AQUI NO SE HACEN TAREAS (que es una de las respuestas más comunes del foro).  Espero que te sirva como comienzo para no empezar con mal pie en esto de la programación...

Un saludo.
 :lightsabre:

28
C/C++ / Re: Generar Un Nuimero (float) Aleatorio
« en: Jueves 20 de Marzo de 2008, 11:17 »
Hola,

acabo de hacer una prueba y a mi me salen números distintos.... Aún así, si lo que quieres son número más distintos puedes hacer lo siguiente...
Código: Text
  1.  
  2. #include <math.h>
  3. #include <time.h>
  4. ...
  5. float valor;
  6. ...
  7. srand((unsigned)time(NULL));
  8. ...
  9. for(...)
  10. ...
  11. valor=(sin((float)rand())+1.0)*50.0;
  12. //esto genera números aleatorios entre 0 y 100.
  13. ...
  14.  
  15.  
No olvides que la función rand() devuelve enteros, de esta forma consigues número reales con decimales y algo bastante útil, como es poder regular el itervalo de los números aleatorios gracias a que la función sin() siempre devuelve un número real entre -1 y 1 (de todas formas la función rand() siempre devuelve números entre 0 y RAND_MAX, 0x7fff)...
Quizás tambien te ayude hacer una espera activa dentro de los bucles mediante un Sleep() sin cambiar nada.

Espero que te sirva.

Un saludo,
 :lightsabre:

29
Visual C++ / Re: Números Imaginarios
« en: Lunes 17 de Marzo de 2008, 13:29 »
Hola,
por qué no creas una estructura llamada numero imaginario que contenga la parte real y la parte imaginaria?
Código: Text
  1.  
  2. typedef struct numero_imag
  3. {
  4. double parte_real;
  5. double parte_imag;
  6. double mod;
  7. double arg;
  8. }st_numero_imag;
  9.  
  10.  
y a partir de ahí la cosa es sencilla...
Sumar dos números:
Código: Text
  1.  
  2. st_numero_imag num1,num2,res;
  3.  
  4. res.parte_real=num1.parte_real+num2.parte_real;
  5. res.parte_imag=num1.parte_imag+num2.parte_imag;
  6. res.mod=sqrt(pow(res.parte_real,2)+pow(res.parte_imag,2));
  7. res.arg=atan(res.parte_imag/res.parte_real);
  8.  
  9.  
Como verás he introducido en la estructura el formato módulo y exponente que
facilita las operaciones de multiplicación y división.
Dentro de la librería math.h de microsoft (MSDN) puedes encontrar la estructura _complex y alguna otra función para operar con estos números (siempre y cuando uses el visual studio de microsoft)...

Si programas en C++ puedes crear una clase con bastante potencia que haga todo lo anterior y mucho más, automáticamente (sobrecargando los operadores)...   Supongo que incluso encuentres alguna clase que lo haga por ti (como la clase complex de microsoft)

El resto corre de tu parte...

Un saludo.
 :lightsabre:

30
Visual C++ / Re: Insertar Activex En Mfc
« en: Domingo 16 de Marzo de 2008, 22:35 »
Gracias,

lo solucioné con la última opción usando el instalador installshield del paquete visual studio.

Un saludo.
 :lightsabre:

31
Visual C++ / Insertar Activex En Mfc
« en: Jueves 13 de Marzo de 2008, 16:27 »
Hola a todos, :hola:

Me encuentro con el siguiente problema, he hecho una aplicación mediante MFC y he introducido un par de controles activex...  Concretamente un "Microsoft ADO data control" y un "Microsoft datagrid control"...

El programa funciona correctamente en mi PC, pero cuando lo intento ejecutar en otro PC, ni siquiera arranca y no da ningún mensaje de error, realmente el programa no se ejecuta en ningún PC que no tenga instalado el Microsoft visual studio...

Las dll de MFC las he linkado estáticamente para poder ejecutar el programa en otro PC...
Por lo que he leido parece que el problema se debe a que los controles activex que se insertan en un programa de tipo MFC no se auto registran en el sistema y es por eso que cuando los intento ejecutar en otro PC fallan...

¿alguien sabe si el problema es realmente este y cómo se puede solucionar?

Gracias y un saludo.  :lightsabre:

32
C/C++ / Re: Programa Sencillo En C
« en: Miércoles 27 de Febrero de 2008, 09:26 »
Hola,
Código: Text
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. int main(void)
  5. {
  6. double a,b,c,r;
  7.  
  8. fflush(stdin);
  9. printf("Introduzca el valor de a: ");
  10. scanf("%lf", &a);
  11.  
  12. fflush(stdin);
  13. printf("Introduzca el valor de b: ");
  14. scanf("%lf", &b);
  15.  
  16. fflush(stdin);
  17. printf("Introduzca el valor de c: ");
  18. scanf("%lf", &c);
  19.  
  20. r = (-b + sqrt(b*b - 4*a*c))/(2*a);
  21. printf("Resultado: %lf\n", r);
  22.  
  23. return 0;
  24. }
  25.  
y por el momento olvídate de lo que devuelve la función main... los parámetros de entrada y salida de la función main se usan para su uso mediante el prompt del sistema en el viejo MS-DOS, de hecho, el verdadero prototipo de la función main debiera ser:
Código: Text
  1.  
  2. int main(int argc, char *argv)
  3.  
  4.  
donde argc te da el número de parámetros recibidos desde la interfaz de comandos (+ uno debido a que el primer parámetro siempre es la ruta de tu programa) y el segundo parámetro es una serie de apuntadores a una serie de textos recibidos desde la interfaz... Este mecanismo lo puedes comprobar con el programa ipconfig de tu ordenador, si llamas al programa sin pasarle parámetros te devuelve la info básica de tu IP, si en cambio, le pasas /all verás que te da info más detallada.
Sobre el int que devuelve el programa, se usa para usar multiproceso, esto es, cuando desde un programa llamas a otro mediante una función (p.ej. CreateProcess()) cuando la función que has llamado finalice su ejecución, te devolverá el valor que hayas puesto, de esta manera sabes si la función que has llamado ha finalizado correctamente o no... Imagina que tu función devuelve un -1 en caso de que lo de dentro de la raíz cuadrada sea negativo, si llamaras a este programa desde otro programa sabrías que en caso de recibir un 0 al término de la ejecución, funcionó perfectamente y si recibes un -1 es que el programa no finalizó correctamente.

Por este motivo, al principio todo el mundo programa con el siguiente prototipo:
Código: Text
  1.  
  2. void main()
  3.  
  4.  
y así te olvidas de momento de estas posibilidades...

Un saludo.
 :lightsabre:

33
C/C++ / Re: Creacion Y Visualizacion Fichero
« en: Viernes 22 de Febrero de 2008, 11:45 »
Hola,
prueba con esto...
Código: Text
  1.  
  2. void Creacion()
  3. {
  4.   // 3) Cabecera Titulo del proceso
  5.   system("Cls");
  6.   printf(" CREACION DE FICHERO SECUENCIAL \n");
  7.   printf("=============================== \n");
  8.  
  9.   // 4) Apertura del fichero
  10.   if ((pf=fopen("FALMACEN.DAT","wb"))== NULL)
  11.   {
  12.     printf(" No se puede abrir el archivo ...\n");
  13.     exit(0);
  14.   }
  15.  
  16.   do
  17.   {
  18.     /*5)Tecleo de datos del registro para alamacebarlas en var.de memo,principal*/
  19.     printf("Introduce ALMACEN (fin = f):");
  20.       gets(reg.almacen);
  21.  
  22.     if(strcmp(reg.almacen,"f") != 0)
  23.     {
  24.       printf("Introduce Cod.Pro :");gets(reg.codpro);
  25.       printf("Introduce Descripcion :");gets(reg.descri);
  26.       printf("Introduce Existencias :");scanf("%d",&reg.exis);
  27.       printf("Introduce Precio_unit :");scanf("%ld",&reg.exis);
  28.       fflush(stdin);
  29.       fwrite(&reg,sizeof(reg),1,pf);
  30.     }
  31.   }while(strcmp(reg.almacen,"f")!=0);
  32.   /* Cierre delfichero */
  33.   fclose(pf);
  34.   printf("Fichero creado"); getch();
  35.  
  36. }
  37.  
  38.  
  39.  
El system("Cls") es la variante de clrscr() del MS-DOS.
El resto del código no lo he mirado... de todas formas la operativa para crear un programa (dado que veo que no tienes mucha experiencia) es primero hacer la primera función y probarla hasta que funciona, luego la siguiente y así sucesivamente.  Si haces el programa completo y luego te pones a buscar fallos vas a tardar mucho en encontrarlos...  También te recomiendo que uses el debugger para buscar fallos (normalmente con F11 ejecutas el programa paso a paso...)  Te hubieras dado cuenta rápido de que habías creado un bucle infinito con While(1), y nunca salías de él...  Podrías haberlo solucionando poniendo un break debajo del if (que lo has puesto con un punto y coma y por tanto no hace nada de nada).  Por otra parte no te recomiendo que uses este método, usa siempre condiciones en los bucles while y do while....



Un saludo.
 :lightsabre:

34
Visual C++ / Re: Crear Archivo Excel Mediante Ado
« en: Miércoles 20 de Febrero de 2008, 15:42 »
Hola de nuevo,

Ya está resuelto, os dejo la solución que he encontrado por si alguien la necesita...

Para crear hojas de excel auomáticamente mediante ADO, se usan una serie de queries de SQL, para excel el proceso es el siguiente:

Conectar de la siguiente forma:
Código: Text
  1.  
  2. Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\nuevo_archivo.xls;Extended Properties=\"Excel 8.0;HDR=Yes\"
  3.  

Una vez conectados mediante Open(), hacemos una serie de llamadas nuevas a la función Open() pero agregando las queries:

Crear una hoja de cálculo en el nuevo libro (realmente una tabla):
Código: Text
  1. RsEXCEL->Open("Create Table Datos (V1 LONG, V2 LONG)",vtMissing,adOpenDynamic,adLockOptimistic,adCmdUnspecified);
  2.  
En este caso crearíamos una hoja en el libro con el nombre de Datos y dos columnas de datos llamadas V1 y V2...

Una vez creado el formato de la tabla no hay más que llamar sucesivamente a Open() con la query INSERT INTO:
Código: Text
  1. sqlquery="INSERT INTO Datos(V1, V2) VALUES (" + valor1 + ", " + valor2 + ")";
  2.       RsEXCEL->Open(sqlquery,vtMissing,adOpenDynamic,adLockOptimistic,adCmdUnspecified);
  3.  

Pues eso es todo, por si a alguien le interesa el mundo de las bases de datos mediante ADO hay un magnífico artículo enYerba mate y Visual C++

Un saludo.
 :lightsabre:

35
Visual C++ / Crear Archivo Excel Mediante Ado
« en: Lunes 18 de Febrero de 2008, 13:35 »
Hola a todos,
no sé si será este el mejor sitio para postear este asunto, si no lo es lo siento mucho. :unsure:
En fin, estoy haciendo un programa para sacar datos desde una base de datos SQL mediante ADO (usando la funcionalidad de #import para la libreria msado15.dll)... Hasta aqui ningún problema, el caso es que al mismo tiempo quiero exportar esos datos filtrados a un documento excel...  He conseguido abrir un excel que ya existe y escribir datos en él mediante JET OLEDB de microsoft sin problemas, pero me gustaría crear un nuevo documento excel por cada exportación....
¿Es posible crear un nuevo documento excel mediante la funcionalidad ADO y JET OLEDB? si es así, agradecería que me indicaseis cómo.

Un saludo.
 :lightsabre:

36
C/C++ / Re: Problema Con Funciones
« en: Domingo 25 de Noviembre de 2007, 23:37 »
Hola,

Código: Text
  1. #include <stdio.h>
  2.  
  3. int menu (void)
  4. {
  5. int opcion;
  6. float masa;
  7.  
  8. printf("\nMENU:");
  9. printf("\n1. Calcular densidad si el volumen es un rectangulo");
  10. printf("\n2. Calcular densidad si el volumen es un triangulo");
  11. printf("\n3. Calcular densidad si el volumen es un cilindro");
  12. printf("\n4. Salir");
  13. printf("\nIntroduzca opcion a elegir: ");
  14.  
  15. scanf("%d",&opcion);
  16.  
  17. return(opcion);
  18. }
  19.  
  20. void rellenamasa(float *masa)
  21. {
  22. printf("\nIntroduzca masa: ");
  23. scanf("%f",masa);
  24. }
  25.  
  26. void drect(float masa)
  27. {
  28. float v,a,b,h,dr;
  29.  
  30.  
  31. printf("Introduce a: ");
  32. scanf("%f",&a);
  33. printf("Introduce b: ");
  34. scanf("%f",&b);
  35. printf("Introduce h: ");
  36. scanf("%f",&h);
  37.  
  38. v=a*b*h;
  39. dr=v*masa;
  40.  
  41. printf("La densidad es: %f",dr);
  42. }
  43.  
  44. void dtrian(float masa)
  45. {
  46. float v,a,b,h,dt;
  47.  
  48.  
  49. printf("Introduce a: ");
  50. scanf("%f",&a);
  51. printf("Introduce b: ");
  52. scanf("%f",&b);
  53. printf("Introduce h: ");
  54. scanf("%f",&h);
  55.  
  56. v=(a*b*h)/2;
  57. dt=v*masa;
  58.  
  59. printf("La densidad es: %f",dt);
  60. }
  61.  
  62. void dcilin(float masa)
  63. {
  64. float v,r,h,dc;
  65.  
  66. printf("Introduce r: ");
  67. scanf("%f",&r);
  68. printf("Introduce h: ");
  69. scanf("%f",&h);
  70.  
  71. v=3.14*(r*r)*h;
  72. dc=v*masa;
  73.  
  74. printf("La densidad es %f",dc);
  75.  
  76. }
  77.  
  78. int main()
  79. { /*programa principal*/
  80.  
  81. int opcion=0;
  82. float masa;
  83.  
  84. rellenamasa(&masa);
  85.  
  86. do
  87. {
  88. opcion= menu();
  89.  
  90.  
  91. switch(opcion)
  92. {
  93. case 1: drect(masa);
  94.  
  95. break;
  96. case 2: dtrian(masa);
  97.  
  98. break;
  99. case 3: dcilin(masa);
  100.  
  101. break;
  102. case 4:
  103.  
  104. break;
  105. default: printf("\nERROR al escoger opcion");
  106. break;
  107.  
  108. }
  109. }
  110. while(opcion<=4);
  111.  
  112. fflush(stdin);
  113. getchar();
  114. return(1);
  115. } /*fin del cuerpo principal*/
  116.  

No lo he compilado para comprobar que este bien, el verdadero fallo está en la función rellenamasa(), el parámetro masa al pasarlo directamente, pasas el valor que masa tuviera en ese momento y en la función rellenamasa() se crea la variable masa de forma local a la función (una vez que la función termine esa variable desaparece) con ese valor que le pasas... como lo que quieres es que la función te devuelva el valor de masa tienes dos opciones:
- la primera te la he indicado (con punteros)
- la segunda:
Código: Text
  1.  
  2. float rellenamasa()
  3. {
  4. float masa;
  5. printf("\nIntroduzca masa: ");
  6. scanf("%f",&masa);
  7. return masa;
  8. }
  9.  
y a la hora de llamar a la función desde la rutina principal lo haces de esta forma:
Código: Text
  1.  
  2. masa=rellenamasa();
  3.  
  4.  

Espero que te sirva de ayuda,
Un saludo  :lightsabre:

37
C/C++ / Re: Activex
« en: Domingo 25 de Noviembre de 2007, 23:23 »
Hola,
dado que usas una TAD de national instruments, no tienes ningún problema, junto con la tarjeta vienen una serie de librerías...  Yo usé este tipo de TADs en la universidad y recuerdo que había dos librerías que venían con la tarjeta:
nidaq32.lib
nidaq.h
Ambas se encontraban en C:\win32app\NI-daq una en lib y la otra en include...

No creo que sean las mismas que las tuyas pero será algo parecido, lo único que hay que hacer es linkar la librería en el Visual C (o el compilador que uses) y llamar a las funciones que integran la librería, sus prototipos se encuentran en el archivo nidaq.h...
Configurar el puerto, leer señales, cerrar el puerto....

En la página de National instruments podrás encontrar las librerías seguramente en caso de que no las tengas...

De esta forma tendrás total acceso a la tarjeta, realmente la librería no deja de ser los drivers de la tarjeta y es lo que usa Labview internamente para manejar las tarjetas...

De todas formas, como veo que te interesa usar Labview, aqui te dejo un enlace a la página de National Instruments donde quizás encuentres respuesta:

National Instruments

38
C/C++ / Re: Activex
« en: Miércoles 21 de Noviembre de 2007, 17:44 »
Cómo va conectado ese encoder al PC???  si usas una TAD (tarjeta de adquisición de datos) con un canal analógico puedes usar en C las librerías que vienen con esa TAD. Si bien usas un protocolo de comunicaciones puedes implementar desde 0 la comunicación con el encoder:
-serie RS-232 mediante la API de windows con CreateFile.
-TCP/IP con Sockets.

En fin, en mi opinion es más fácil reprogramar tú mismo la comunicación con el encoder que reusar un ejecutable cerrado...

Un saludo.  :lightsabre:

39
C/C++ / Re: Busqueda Binaria
« en: Miércoles 14 de Noviembre de 2007, 12:03 »
Hola,
yo estoy buscando una morena de 1,80m de altura de ojos verdes y 90-60-90 de medidas... :whistling:

Aqui no se hacen tareas!!!!!!!!!!!!!!!! :angry:

Un saludo.
 :lightsabre:

40
C/C++ / Re: Detener Un Programa C Pulsando Una Tecla
« en: Miércoles 14 de Noviembre de 2007, 11:58 »
Pues tienes varias posibilidades...

Hacer tu programa de forma cíclica con un bucle while(), pon un sleep() al final para que el consumo de CPU no sea muy grande y controla la finalización del programa para evitar fallos como bucles infinitos, además ten en cuenta cómo realizas tu programa pues normalmente los programas son secuenciales y tú necesitas realizarlo de forma cíclica, es como programar un PLC (programmable logic controller) que se usa habitualmente para control de procesos en la industria.
La otra solución un poco más avanzada es usar un hilo (multiproceso) que se encargue de mirar si has pulsado una tecla mediante un evento del sistema operativo o de forma menos "bonita" haciendo que el hilo se ejecute de forma cíclica y en paralelo al proceso principal, aunque si eres capaz de lanzar hilos creo que serás capaz de atrapar eventos de tipo keyboard...

un ejemplo:

Código: Text
  1.  
  2. do
  3. {
  4. ...
  5. if(kbhit())
  6. c=getch();
  7. sleep(0);
  8. }while(c!='p');
  9.  
  10.  

donde están los puntos suspensivos añades tu código, la función kbhit() te devuelve un 1 en caso de que se haya pulsado una tecla, en ese caso miras qué tecla se ha pulsado, y haces lo que tengas que hacer...  No tengo muy claro si kbhit() es dependiente del SO... Seguro que alguno de los foreros nos puede sacar de dudas... :whistling:

Un saludo.
 :lightsabre:

41
C/C++ / Re: Como Puedo Hacer
« en: Lunes 29 de Octubre de 2007, 13:00 »
Por cierto, como bien dice Eternal idol, debugea... ese va a ser tu mejor amigo a la hora de programar, aprende a debugear y aprenderás a programar...

Un saludo.
 :lightsabre:

42
C/C++ / Re: Como Puedo Hacer
« en: Lunes 29 de Octubre de 2007, 12:55 »
Lo prometido es deuda, no tengas reparos en postear tus códigos, todos empezamos desde 0 y muy pocos son realmente buenos en esto (no me incluyo)...

- Lo primero, en C no se pueden hacer dos else-s (piensa que si no se cumple lo del if entrará al else directamente, no puede haber dos elses seguidos), y los if-s van con paréntesis...
Prueba lo siguiente:

if()
else if ()
else

de esta forma:
Código: Text
  1.  
  2. if (num>0)
  3. ;//positivo
  4. else if (num<0)
  5. ;//negativo
  6. else
  7. ;//cero
  8.  
  9.  
Te falta hacer la rutina para introducir el número por teclado...  Bien puedes usar printf() o scanf() de C o cin cout de C++...

en C sería algo así:
Código: Text
  1.  
  2. printf("Introduce numero: ");
  3. scanf("%d",&num);
  4.  
  5.  

El programa en C podría ser así:
Código: Text
  1.  
  2. void main()
  3. {
  4. int num;
  5.  
  6. printf("Introduce numero: ");
  7. scanf("%d",&num);
  8.  
  9. if(num>0)
  10. printf("\n\tEl numero %d es positivo.",num);
  11. else if(num<0)
  12. printf("\n\tEl numero %d es negativo.",num);
  13. else
  14. printf("\n\tEl numero %d es cero.",num);
  15. printf("\n\n\tPulsa cualquier tecla para finalizar");
  16. fflush(stdin);
  17. getch();
  18. }
  19.  
  20.  

Un saludo.
 :lightsabre:

43
C/C++ / Re: Como Puedo Hacer
« en: Domingo 28 de Octubre de 2007, 20:21 »
Hola,

Aqui se resuelven dudas, no tareas.... si tienes dudas sobre tu código postéalo y los simpáticos "foreros" te contestarán sin duda.

Por cierto, el código es realmente sencillo así que inténtalo, que no es que dude de tu sinceridad al decir que has echo un intento, es simplemente que me huele mal, demuestra que me equivoco...

A ver si tu código se parece al nuestro y no al revés.

Un saludo,
 :lightsabre:

44
C/C++ / Re: Cuidao Con Los Punteros
« en: Domingo 28 de Octubre de 2007, 20:16 »
Resumiendo...

Los punteros no son más que contenedores de direcciones de memoria, la memoria puede ser más o menos grande dependiendo del sistema...
así en un procesador de 32 bits se pueden direccionar 2^32 direcciones y en uno de 64 2^64... por tanto un puntero ocupará 32 o 64 bits dependiendo de la arquitectura de la CPU.
Si te fijas con los procesadores de 32 bits no se podía poner más de 4GB de memoria RAM en el equipo, no es una limitación de la placa base o de la RAM es una limitación de la arquitectura de la CPU que permitía direccionar 2^32 direcciones de un byte.

La diferencia entre un puntero a char o a int no es el tamaño que ocupan pues ambos ocupan lo mismo sino la "profundidad" en bytes a la que apuntan... Así un puntero a char apunta un byte más la dirección inicial, y uno a int apunta 4 bytes más la dirección inicial (suponiendo 32 bits)...   Puedes probarlo de la siguiente manera:

Código: Text
  1. int *pa;
  2. char *pb;
  3. int dim;
  4.  
  5. dim = sizeof(pa);
  6. dim = sizeof(pb);
  7.  
Verás como dim es igual en ambos casos...

Ahora bien, si haces lo siguiente:
Código: Text
  1. int *pa,a=10;
  2. char *pb,b='c';
  3. int dim;
  4.  
  5. pa=&a;
  6. pb=&b
  7. dim = sizeof(*pa);
  8. dim = sizeof(*pb);
  9.  
Verás que en este caso dim en el primer caso vale 4 (en caso de 32 bits) y 1 en el segundo caso.

Un saludo.

 :lightsabre:

45
C/C++ / Re: Holaaaaa
« en: Domingo 29 de Abril de 2007, 23:54 »
en math.h creo que tienes la función
double acos(double)

46
Windows / Re: Que So Ocupan Los Windows Superiores Al 98??????
« en: Domingo 29 de Abril de 2007, 18:47 »
Recomiendo encarecidamente a la gente que lea mucho antes de sentenciar, de verdad que hay mucha info en la red... Tienes un lío bastante importante al respecto de lo que es Windows y su historia...
Windows nunca ha sido una GUI... puede que un SO Windows se base en el núcleo de MS-DOS o en el núcleo NT, pero nunca ha dejado de ser un SO en si mismo.

Windows no es una interfaz... es un OS, como te oiga algún programador de microsoft que su trabajo se basa en hacer una simple GUI porque al fin y al cabo el SO sigue siendo MS-DOS igual te contesta algo que no te gusta.

No voy a seguir diciendo más porque se trata de un problema de base y pareces negarte a aceptar que te equivocas.

Que lo sepas:
Hay dos formas de participar en un foro, afirmando o preguntando.  Tú has afirmado desde el principio y los compañeros te han indicado que te equivocas (quizás de una manera que no te gusta) pero me apuesto lo que quieras a que si hubieras empezado este hilo preguntando y no afirmando las respuestas hubieran sido iguales pero más relajadas y hubieras aprendido de verdad lo que es windows.  Los cuadraditos azules que aparecen debajo de los nombres de los compañeros foreros indican el número de veces que han participado en este foro, eso vale como aval de sus respuestas, si varios compañeros te indican que lo que dices es falso, es muy posible que lo que dices sea falso.  Si no te gusta equivocarte, lo sentimos, pero en este foro se aprende mucho y para aprender es necesario equivocarse.

Si la info que te dan no la quieres en Inglés, pídela en español, pero ya te aseguro que desgraciadamente la mayoría de la info que realmente merece la pena está en inglés.  No sé si tu problema es que no sabes inglés o es que no te gusta leer porque amigo oyes campanas pero no sabes dónde...

En fin al compañero Eternal Idol le aconsejo que deje de gastar fuerzas en este hilo puesto que creo que ha quedado claro que a kamiel_69 no le interesa aprender lo que es windows y es perder el tiempo continuar con este tema.

Al menos que valga como ejemplo de como no empezar a postear en este foro...

Un saludo.  :lightsabre:

47
La taberna del BIT / Re: ¿porqué Los Nicks?
« en: Sábado 21 de Abril de 2007, 21:26 »
Muy bonito el hilo... Es gracioso ver de donde salen los nicks...

El mio también tiene algo de historia, fue en la universidad mientras me sacaba el carnet de conducir atropellé a una chica en moto (era gitana y realmente no la atropellé sino que yo giraba a la izquierda y ella no me vió, iba adelantando a todos los coches y se topó con el mio...) la pobre chica salió volando unos cuantos metros tras arrancar el parachoques del coche de la autoescuela. No le pasó nada y salió huyendo antes de que llegara la policía... En fin, por aquel entonces estaba de moda el juego carmagedon que basicamente trataba de atropellar a gente y a mis compañeros de la uni se les ocurrió hacer un juego de palabras con mi apellido (mezo) y el título del juego, de ahí carmamezo, aunque a veces lo reduzco y uso sólo carma


Un saludo.  :lightsabre:

48
C/C++ / Re: Hilo Corriendo Por Detras Del Hilo Primario
« en: Sábado 21 de Abril de 2007, 20:50 »
Mucho ojo a la hora de "debugear" cuando se trata de hilos...  Como dice Eternal no creo que se trate de un problema de Windows...  Yo que tu trabajaba con break-points, colocalos en los hilos de tal forma que el debugger se pare cuando se ejecuten, no compiles paso a paso sino que ejecuta todo el programa y utiliza los break-points para detenerlo en los hilos que te interesen... No olvides que cada hilo se ejecuta cuando el SO lo cree pertinente según una serie de reglas y mientras tu debugeas un hilo otro sigue ejecutándose en segundo plano, aunque sea parte del mismo programa...

Por otra parte, antes de finalizar tu proceso main deberías hacer una llamada a todos los hilos para que mueran antes (o realizar esa espera que mencionabas para esperar a que finalicen)... sino Windows se encargará de matarlos al finalizar el hilo principal que los llamó (pero siempre es más "profesional" cerrar todo aquello que has abierto o reservado...  :whistling: , lo mejor es mandar un evento de finalización y esperar un tiempo concreto, sino han finalizado en ese tiempo es que algo va mal y entonces simplemente los matas).

Un saludo. :lightsabre:

49
C/C++ / Re: Ayuda D:!!!!!!
« en: Sábado 21 de Abril de 2007, 20:38 »
Pobre hombre... acaba de empezar y ya le estais metiendo en mente el asm??  

Como bien dijo Amilus
Citar
Pero... tienes algo en contra de usar los operadores <<, >> ???

el operador << (bitwise shift left) corre los bits a la izquierda tantas posiciones como indique el valor siguiente:
Para correr 2 bits a la izquierda de la variable "variable_1" sería lo siguiente:
Código: Text
  1.  
  2. int variable_1=5;
  3. variable_1&#60;&#60;=2;//variable_1 vale ahora 20
  4.  
  5.  
El operador << (bitwise shift right) corre los bits de la misma manera pero a la derecha. Siguiendo con el ejemplo anterior:
Código: Text
  1.  
  2. int variable_1=5;
  3. variable_1&#62;&#62;=2;//variable_1 vale ahora 1
  4.  
  5.  

Ojo, por el otro lado entran siempre ceros, no es una instrucción de rotación de bits sino de correr bits, los bits que salen no entran por el otro lado...

Un saludo. :lightsabre:

50
Windows / Re: Cosa Extrana !!
« en: Sábado 10 de Febrero de 2007, 11:22 »
Parece ser que la versión de explorer son distintas, por eso no lo reconoce como un único programa.

Un saludo. :lightsabre:

Páginas: 1 [2] 3 4 ... 10