• Miércoles 15 de Mayo de 2024, 02:29

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 - pitukilloloco

Páginas: 1 [2] 3 4 5
26
C/C++ / Re: Necesito Ayuda Por Favor Es Urgente
« en: Jueves 1 de Diciembre de 2005, 23:29 »
Las funciones de c++ para manejar flujos nunca me han gustado y la verdad me ha dado flojera aprenderlas. Cuando hago programas para manejar archivos yo utilizo las funciones de la librería estándar <stdio.h>. Te voy a dar un ejemplo en modo consola que lee un archivo de texto desde la línea de comandos y te lo muestra en la pantalla (bueno, si no lo redireccionas a otra parte), usando estas funciones. Si otro lector pudiera darte un ejemplo pero con la librería de flujos pues bienvenido.
Código: Text
  1.  
  2. #include &#60;stdio.h&#62;
  3. #include &#60;stdlib.h&#62;
  4.  
  5. #define MAXSTR 512
  6.  
  7. int main (int argc, char *argv[])
  8. {
  9.    FILE *fp;                 /* apuntador al archivo */
  10.    char cadena[MAXSTR + 1];
  11.  
  12.    /* verifica que se le dio un nombre de archivo desde la línea de comandos */
  13.    if (argc != 2) {
  14.       fprintf (stderr, &#34;&#092;nDebe proporcinarse el nombre del archivo.&#092;n&#34;);
  15.       exit (EXIT_FAILURE);
  16.    }
  17.  
  18.    /* abre y al mismo tiempo verifica que el archivo exista */
  19.    if ((fp = fopen (argv[1], &#34;r&#34;)) == NULL) {
  20.       fprintf (stderr, &#34;&#092;nError al abrir el archivo %s.&#092;n&#34;, argv[1]);
  21.       exit (EXIT_FAILURE);
  22.    }
  23.  
  24.    while (!feof (fp)) { /* mientra no se alcance el fin de archivo */
  25.       fgets (cadena, MAXSTR, fp);
  26.       printf (&#34;%s&#34;, cadena);
  27.    }
  28.  
  29.    fclose (fp);   /* cierra el archivo */
  30. }
  31.  
  32.  
  Sabiendo leer las líneas de un archivo de texto, sólo es cuestión de ver cómo están los datos dispuestos en él para interpretarlos y escribirlos en las variables adecuadas.
   Por ejemplo, si vas a insertar números enteros al árbol y estos vienen uno tras otro, separados por espacios en cada línea, entonces, suponiendo que tengo una función void Inserta (int num) que inserta un número en el árbol, esta podría ser una manera de hacerlo
Código: Text
  1.  
  2. int numero;
  3. char *p = cadena;
  4. while (1) {
  5.    for (&#59; *p && *p != '&#092;n' && *p == ' '; p++) /* salta todos los espacios */
  6.      &#59;
  7.    if (!*p || *p == '&#092;n')
  8.       break;
  9.    if (sscanf (p, &#34;%d&#34;, &numero) == 1)
  10.       Inserta (numero);
  11.    for (&#59; *p && *p != '&#092;n' && *p != ' '; p++) /* busca el siguiente espacio */
  12.      &#59;
  13. }
  14.  
  15.  
  Con respecto al árbol binario ¿ya sabes cómo se programa o necesitas ayuda?

27
C/C++ / Re: Necesito Ayuda Por Favor Es Urgente
« en: Jueves 1 de Diciembre de 2005, 01:58 »
Yo te puedo ayudar en darte una guía de cómo podrías resolverlo, pero si lo que quieres es que alguien te resuelva una tarea de la escuela, entonces este no es el foro indicado, si eso es lo que quieres puedes poner tu problema en esta liga a otro foro http://www.elrincondelc.com/portal/modules...e=viewforum&f=4, el cual trata de Trabajos de clase, y quizá alguien que haya resuelto un problema similar o alguien que quiera ayudarte te proporcione el código que resuelva tu problema.

28
C/C++ / Re: Necesito Ayuda Por Favor Es Urgente
« en: Miércoles 30 de Noviembre de 2005, 10:59 »
¿cuál es tu problema? ¿no sabes usar las funciones para manejar archivos de texto? ¿no sabes manipular los árboles (binarios supongo)? ¿ambos?

29
C/C++ / Re: Cursor En C
« en: Martes 29 de Noviembre de 2005, 07:21 »
Con "poner el cursor" me imagino que te refieres a una interface con el usuario donde el pueda escoger el directorio que quiere ver ¿es correcto? si es así, entonces hacer esta interface depende del compilador que estés usando, el sistema operativo y si va a ser en modo consola o modo gráfico, y sobre todo depende de la idea que tengas tú de como va a ser esta interface. Por ejemplo, si estás pensando en programar la interface en modo gráfico, quizá tengas en la mente hacerlo parecido al explorer de Windows, o si lo quieres hacer en modo consola, podrías escoger dentro de un grupo de nombres de directorios, navegando entre ellos usando las teclas de dirección, de modo que el cursor represente el nombre resaltado de una carpeta, y al dar [Enter] (u otra tecla que escojas), muestre el contenido de ese directorio

30
C/C++ / Re: Interface Con Puertos
« en: Martes 29 de Noviembre de 2005, 02:58 »
Este programa quizá podría correr si utilizaras el antiguo sistema operativo MS-DOS, el cual te permitía tener control casi total de la máquina. En este caso en particular estás tratando de accesar una dirección baja de la memoria principal, pero si estás usando cualquiera de las versiones de Windows a partir de la 95 (Windows 95, 98, ME, NT, 2000, XP) entonces no vas a poder correr este programa ya que el sistema restringe el que puedas accesar directamente estas áreas. Para hacer esto tienes que informarte de las funciones que ofrece la API de Windows para que a través de ellas tengas acceso.

31
C/C++ / Re: Cin Misterioso
« en: Martes 29 de Noviembre de 2005, 02:45 »
Veo que usas las funciones de entrada y salida de la librería estándar (como getchar) así como las de flujos (usando los operadores sobrecargados << y >>).
Yo siempre uso los de la librería estándar pues no me he acostumbrado a usar los de flujos, pero creo (no estoy seguro) haber leído en alguna parte que no es aconsejable mezclarlos, espero que alguien que sepa algo más al respecto nos aclare este punto. De cualquier manera no creo que esté el error ahí. Las funciones de entrada y salida estándar así como la de flujos estándar he visto que están más enfocadas a entrada y salida de archivos y a interconecciones o tuberías (por ejemplo cuando desde la línea de comandos o consola usas los caracteres <, >, >>, <<, | entre programas y archivos) y no tanto a una interacción entre el programa y el usuario. Cuando, como en este caso, tengo que pedir datos al usuario para que los introduzca por el teclado, prefiero usar funciones no estándar proporcionadas por el compilador pero tener más control en el programa.

32
C/C++ / Re: Librerias De C++
« en: Lunes 28 de Noviembre de 2005, 23:45 »
Las funciones declaradas en el encabezado <complex.h> pertenecen a la librería estándar de C++, pero hay algunos compiladores antiguos que no incorporan esta librería. Puedes investigar si el compilador que usas la incorpora leyendo en la documentación que acompaña a este o podrías buscar en el directorio include de tu compilador el archivo complex.h. Si está ahí entonces si puedes incorporar la instrucción <complex.h> a tus programas fuente para usar las funciones de esta librería.

33
C/C++ / Re: Forma Elegante...
« en: Martes 15 de Noviembre de 2005, 00:04 »
Hablando específicamente del ejemplo que pusiste trataré de responder a tus preguntas.

Lo de que el código en C++ no es tan legible (al escribir i++ en vez de i = i + 1) es algo subjetivo y, según mi experiencia, depende de que tanto has programado en este lenguaje, ya que para mi es más legible un código que utiliza el operador de  incremento ++, el operador de decisión : ? y otros como usar los  peradores de apuntadores * e indirección &, pero creo que eso ya depende del  gusto personal de cada quien, aunque para alguien que comienza a programar en C++ estos les parezcan ilegibles al principío.

Vamos ahora con tus preguntas.

1. ¿es verdad que i++ es mejor que i = i + 1?
Bueno, en este caso, aunque el efecto es el mismo (incrementar la variable i en 1), el primer caso es mejor aunque sólo sea porque tecleas sólo tres caracteres en vez de nueve, pero, a diferencia de los compiladores de antes, en los que sólo eran significativos los primeros 8 o 10 caracteres, en los de ahora se pueden declarar nombres de variables considerablemente más grandes (de 30 caracteres o más) y se recomienda usar identificadores dentro del código que expresen mejor para lo cual se están usando, de modo que es común, al consultar códigos de ejemplos en los libros o en internet, toparse ahora con identificadores de 15, 20 o más caracteres y es más legible y ahorrativo el poner
Código: Text
  1.  
  2. ContadorSecuenciaDisparo++;
  3.  
  4.  
que
Código: Text
  1.  
  2. ContadorSecuenciaDisparo = ContadorSecuenciaDisparo + 1;
  3.  
  4.  
pero hay otras consideraciones aunque no sean tan obvias. La expresión i++ puede usarse dentro de un condicional como bien muestra el siguiente ejemplo de función que copia una cadena en otra
Código: Text
  1.  
  2. /* strcpy: copia t hacia s */
  3. void strcpy (char *s, char *t)
  4. {
  5.    while (*s++ = *t++)
  6.      &#59;
  7. }
  8.  
  9.  
Para hacer lo mismo en otro lenguaje, como por ejemplo el Pascal o el Basic, necesitamos muchas más líneas de código. Este ejemplo lo pueden consultar en la sección 5.5 Apuntadores a caracteres, y funciones del excelente y recomendable libro El Lenguaje de Programación C de los autores Brian W. Kernighan y Dennis M. Ritchie (este último creador del lenguaje C). Otro libro recomendable (desde mi punto de vista) es la tercera edición de El Lenguaje de Programación C++ del creador de este lenguaje Bjarne Stroustrup.
   El operador ++ se utiliza mucho en código que hace uso de apuntadores como bien muestra el ejemplo anterior aunque el uso de estos es, para mucha gente, discutible y me parece que lenguajes como Java y C# restringen totalmente su uso aunque no estoy seguro pues nunca he programado en esos lenguajes.

2. ¿Qué quiere decir esto?
Bueno, eso ya se dijo en la primera respuesta. Incrementa en 1 la variable i

3. ¿Ocurre con todo el código?
Esta pregunta no acabo de entenderla bien, de modo que la respuesta la dejaré en blanco

4. ¿Donde se aprende?
En los libros y con ejemplos de código de terceras personas. Yo te recomiendo los libros que te mencioné en la primera respuesta

5. ¿Resulta mas rápida la ejecución?
La mayoría de los compiladores actuales están muy avanzados en lo que a ptimización de código se refiere por lo que i++ o i = i + 1 probablemente generarán las mismas líneas de código binario de máquina.

6. ¿Para que se utilizaría?
Bueno, creo que en la primera respuesta queda contestada esta

7. ¿Sólo es un asunto de un buen diseño?
Me parece que también en la primera respuesta se responde esta.

34
C/C++ / Re: Bcw......
« en: Lunes 11 de Julio de 2005, 18:13 »
El paquete Borland C++ 3.1 viene con dos IDE (Integrated Development Environment, Ambiente Integrado de Desarrollo), uno es BC.EXE, el cual es para trabajar en modo texto (o modo consola bajo windows) y el otro es BCW.EXE, que es para hacer programas que corran bajo Windows, con el esquema de ventanas y mensajes propios de estos programas. En estos últimos programas las funciones que mencionaste no tienen lugar ya que estas son para el modo texto. En su lugar tienes que usar las API de Windows (Application Program Interface, Interface para Programar Aplicaciones) o las clases OWL (Object Windows Library, Librería de Objetos de Windows) proporcionadas por el compilador. Hacer un programa bajo Windows, usando el esquema de ventanas y mensajes, no es tan sencillo como cuando programas en modo texto. Por ejemplo, para desplegar una cadena, en modo texto no te tienes que preocupar por el tipo y tamaño de la fuente de las letras con la cual vas a mostrar la cadena, ya que esta es fija, mientras que en Windows puedes escojer entre una amplia variedad de fuentes y de tamaños; tampoco te tienes que preocupar en donde colocar la cadena: esta comienza a mostrarse a partir de donde se encuentra el cursor, mientras que en Windows no existe el concepto de cursor y tienes que indicar necesariamente a partir de qué coordenadas gráficas va a comenzar a desplegarse. Esta y muchas otras cuestiones más cambian cuando pasas de programar de modo texto al ambiente de Windows, sobre todo el esquema de mensajes que es una forma completamente distinta de programar que cuando lo haces en modo texto. Te recomiendo que consigas alguno de los libros de Charles Petzold como Programación en Windows 95 o Programación en Windows 98 (no sé si ya sacó uno para Windows XP) para que comiences a aprender a programar en este ambiente.

35
Visual C++ / Re: Como Eliminar Un Cadro De Dialogo Automaticamente
« en: Jueves 30 de Junio de 2005, 22:32 »
Cuando llamas a un diálogo generalmente este tiene un botón de OK o Cancel, ¿qué sucede cuando presionas cualquiera de estos botones? pues se llama a la función EndDialog para terminar este diálogo. Entonces lo que tienes que hacer es llamar a esta función cuando termines el proceso que estés haciendo.

36
C/C++ / Re: Pasar Un Vector Como Argumento De Funcion
« en: Miércoles 29 de Junio de 2005, 00:12 »
Hay varios errores en la función recursiva. El principal es que nunca hay una terminación de la recursividad y esta termina hasta que se derborda la pila en donde se depositan los datos cada vez que se llama recursivamente esta función. Otro error es que si la función BuscarN regresa un entero entonces cada vez que se llama recursivamente a esta función debe de llamarse con un return y no solamente invocando a la función como si esta no regresara valor alguno. Otra observación que se puede hacer a este ejemplo es que es muy artificial. Cuando se enseña la recursividad se ponen ejemplos que por su definición son recursivos, como los árboles binarios, el cálculo del factorial, el cálculo del máximo cómun divisor entre dos enteros o el ejemplo de las torres de Hanoi, pero en este caso con una simple iteración secuencial del vector desde el inicio hasta el final se puede determinar si hay un número en él y no es necesario la recursividad.

37
C/C++ / Re: Matriz De Tres Dimensiones En C
« en: Miércoles 22 de Junio de 2005, 23:09 »
Para calcular el número de estudiantes es muy fácil. Dices que es un archivo binario, entonces me imagino que debes de tener el tamaño en caracteres del nombre y el otro campo ha de ser un entero ¿no? entonces sólo divides el tamaño de este archivo entre el número de bytes que tiene cada registro (tamaño en bytes del campo nombre más el tamaño en bytes que ocupa el entero del identificador) y el resultado es el número de estudiantes. Lo que no está claro en lo que expusiste es de donde se va a sacar la información de las calificaciones de cada alumno. Tampoco me queda claro lo que entiendes por "cursos" y "asignaturas". Cuando llevé la carrera de computación esta se componía de ciertas materias (por ejemplo Cálculo I, Álgebra I, Programación I, Hardware I) que tenías que cursar cada semestre, y cada semestre iban cambiando estas materias ¿qué podría entender por cursos y asignaturas con este esquema?

38
C/C++ / Re: Conversion De Tipos
« en: Domingo 19 de Junio de 2005, 00:21 »
itoa te convierte un entero en una cadena que representa este entero con opción a 4 bases distintas: binario, octal, hexadecimal y decimal. También están las funciones ltoa para convertir enteros largos a cadenas,  ultoa para convertir enteros largos sin signo a cadena y por último tienes a la función sprintf, que funciona lo mismo que la función printf, pero en vez de mandar la cadena formateada a la pantalla te la manda a una cadena.

39
C/C++ / Re: Como Pasar Un Programa Ejecutable
« en: Sábado 18 de Junio de 2005, 09:57 »
Eso depende de que librerías dinámicas (DLL) esté usando tu programa. En Windows hay unas librerías de enlace dinámico estándar que cualquiera que tenga instalado Windows en su pc y use programas que utilicen estas librerías no va a tener problemas con ellos. Pero si usas una DLL que no sea estándar entonces vas a tener que proporcionar también esta librería a quien quiera usar tu programa para que lo pueda correr. Por ejemplo esto pasa mucho con las aplicaciones que generas con Visual Basic, que al generar el ejecutable tienes que tener una librería de enlace dinámico que viene con el paquete para poder correrlo en otra pc.

40
C/C++ / Re: Trabajando Con Numeros Base Hexadecimal
« en: Sábado 18 de Junio de 2005, 02:35 »
Cuando tu declaras una variable entera (sea esta como int, short, long, char, unsigned o una combinación de estas) su valor numérico se almacena como una combinación de 1's y 0's y es el mismo valor no importa si lo interpretas como decimal, hexadecimal, octal, binario u otra base que tu elijas. De modo que eso que dices de "almacenar un numero entero en base hexadecimal en una variable" no tiene sentido. Cuando por el teclado introduces un valor a una variable entera usando por ejemplo la función scanf esta por defecto lee valores en base decimal, si quieres que lo introducido se interprete en otra base tendrías que hacer una función que dada una cadena te la interpretara en la base que tu quieres y almacenara su valor en una variable. Para el caso contrario ya existe una función. Esto es, dada una variable entera, la función itoa convierte este valor a una cadena en las bases 10, 8, 16 y 2.

41
C/C++ / Re: Busquedas En Una Estrucutra Dentro De Un Archivo
« en: Sábado 18 de Junio de 2005, 00:39 »
En este mismo foro puse un ejemplo sencillo de un programa en C para dar de alta, baja y modificar registros en un archivo. En él puedes ver que al dar de alta o modificar busco secuencialmente en el archivo el registro. Espero te sirva el ejemplo. Esta es la liga
http://foros.solocodigo.com/index.php?showtopic=15531

42
C/C++ / Re: Crear Dll En Visual C++ 6.0
« en: Sábado 18 de Junio de 2005, 00:30 »
Cuando creas un nuevo proyecto con el Visual C++ hay varias opciones,  como generar una aplicación Win32, una aplicación en modo consola, etc. Dentro de estas opciones aparecen dos para generar DLL's una con Win32 y otra cons las clases MFC, ¿si conoces estas opciones? ¿tu problema es generar un archivo DLL o, ya generado este, usar las funciones de la DLL con un programa en Visual Basic?

43
C/C++ / Re: Busquedas En Una Estrucutra Dentro De Un Archivo
« en: Sábado 18 de Junio de 2005, 00:17 »
No entiendo tu pregunta ¿quieres buscar una estructura en un archivo? por ejemplo, que tuviera en un archivo guardada la información de varios registros con cierta información y encontrar alguno de ellos ¿te refieres a eso?

44
C/C++ / Re: Memoria Dinamica
« en: Martes 14 de Junio de 2005, 07:10 »
Cuando defines una estructura o una clase si estás programando en C++ (o una unión pera estas ya casi no se usan) usas al punto '.' para referenciar un campo de esta cuando tienes una variable de ese tipo. Pero si haces que una variable apunte a una estructura, clase o unión, entonces usas al guión seguido del símbolo mayor que -> para referenciar a los campos. Te muestro un ejemplo sencillo donde también uso memoria dinámica.
Código: Text
  1.  
  2. #include &#60;stdio.h&#62;
  3. #include &#60;stdlib.h&#62;
  4. #include &#60;string.h&#62;
  5.  
  6. struct alumno {
  7.   char nombre[80];
  8.   int matricula;
  9. };
  10.  
  11. int main ()
  12. {
  13.   struct alumno a, *pa;
  14.  
  15.   strcpy (a.nombre, &#34;El Napster&#34;);
  16.   a.matricula = 1;
  17.  
  18.   pa = (struct alumno *)malloc (sizeof (struct alumno));
  19.   if (pa == NULL) {
  20.     fprintf (stderr, &#34;&#092;nMemoria Insuficiente!!!&#092;n&#34;);
  21.     exit (EXIT_FAILURE);
  22.   }
  23.   strcpy (pa-&#62;nombre, &#34;Otro alumno&#34;);
  24.   pa-&#62;matricula = 2;
  25.  
  26.   printf (&#34;alumno: %s,&#092;tmatricula: %d&#092;n&#34;, a.nombre, a.matricula);
  27.   printf (&#34;alumno: %s,&#092;tmatricula: %d&#092;n&#34;, pa-&#62;nombre, pa-&#62;matricula);
  28.  
  29.   free (pa);
  30.   return EXIT_SUCCESS;
  31. }
  32.  

45
C/C++ / Re: Algoritmo De Mezcla Natural Con Ficheros Para C
« en: Domingo 12 de Junio de 2005, 05:24 »
Nunca he oído de tal algorimo, conozco las funciones para manejar archivos (o ficheros) en el lenguaje C, pero eso de "Mezcla Natural" no sé a que te refieras ¿podrías explicar de que se trata este algoritmo?

46
C/C++ / Re: Reserva De Memoria
« en: Sábado 11 de Junio de 2005, 03:56 »
Te paso un programa de ejemplo que hace lo que quieres
Código: Text
  1.  
  2. #include &#60;stdio.h&#62;
  3. #include &#60;stdlib.h&#62;
  4. #include &#60;string.h&#62;
  5.  
  6. int main ()
  7. {
  8.   FILE *fp;
  9.   char ch;
  10.   int i;
  11.   char *cadenas[] = {
  12.     &#34;cadena 0. Cero&#34;,
  13.     &#34;cadena 1. Cero Uno&#34;,
  14.     &#34;cadena 2. Cero Uno Dos&#34;,
  15.     &#34;cadena 3. Cero Uno Dos Tres&#34;,
  16.     &#34;cadena 4. Cero Uno Dos Tres Cuatro&#34;,
  17.     &#34;cadena 5. Cero Uno Dos Tres Cuatro Cinco&#34;,
  18.     &#34;cadena 6. Cero Uno Dos Tres Cuatro Cinco Seis&#34;,
  19.     &#34;cadena 7. Cero Uno Dos Tres Cuatro Cinco Seis Siete&#34;,
  20.     &#34;cadena 8. Cero Uno Dos Tres Cuatro Cinco Seis Siete Ocho&#34;,
  21.     &#34;cadena 9. Cero Uno Dos Tres Cuatro Cinco Seis Siete Ocho Nueve&#34;,
  22.   };
  23.   int ncadenas = sizeof (cadenas) / sizeof (char *);
  24.   char **caddin = (char **)malloc (ncadenas);
  25.     for (i = 0; i &#60; ncadenas; i++) {
  26.     caddin[i] = (char *)malloc (strlen (cadenas[i]) + 1);
  27.     strcpy (caddin[i], cadenas[i]);
  28.   }
  29.   fp = fopen (&#34;cadenas.txt&#34;, &#34;w&#34;);
  30.   for (i = 0; i &#60; ncadenas; i++)
  31.     fprintf (fp, &#34;%s&#092;n&#34;, caddin[i]);
  32.   fclose (fp);
  33.  
  34.   for (i = 0; i &#60; ncadenas; i++)
  35.     free (caddin[i]);
  36.   free (caddin);
  37.  
  38.   fp = fopen (&#34;cadenas.txt&#34;, &#34;r&#34;);
  39.   while ((ch = fgetc (fp)) != EOF)
  40.     putchar (ch);
  41.   fclose (fp);
  42.   system (&#34;pause&#34;);
  43.   return EXIT_SUCCESS;
  44. }
  45.  
  46.  

47
C/C++ / Re: Color De Letra
« en: Sábado 11 de Junio de 2005, 02:03 »
Las respuestas de RadicalEd y mbrenes son para cambiar el color de las letras y el fondo de los programas que generas con el compilador de Visual C++ (aunque me parece que las funciones que menciona RadicalEd no funcionan en este compilador), pero si tu pregunta es cómo cambiar los colores, el fondo y el tipo de letra del editor de Visual C++ lo puedes hacer (en la versión 6 que es la que yo uso) en la opción del menu Tools, después en Options... y en la ventana de diálogo que te sale pones la pestaña Format. Ahí tienes la opción de cambiar los colores de las letras y el fondo, las fuentes y su tamaño, no sólo del editor sino de todas las ventanas de mensajes y otras cosas que te salen en el compilador.

48
C/C++ / Re: Capturar La Hora Del Sistema
« en: Sábado 11 de Junio de 2005, 01:46 »
Aquí está una forma sencilla para capturar la fecha y las horas, minutos y segundos
Código: Text
  1.  
  2. #include &#60;stdio.h&#62;
  3. #include &#60;time.h&#62;
  4. #include &#60;stdlib.h&#62;
  5.  
  6. int main ()
  7. {
  8.   time_t ltime;
  9.   char semana[4], mes[4];
  10.   int dia, hora, minutos, segundos, agno;
  11.     time (&ltime);
  12.     printf( &#34;Fecha y hora: %s&#34;, ctime (&ltime));
  13.   sscanf (ctime (&ltime), &#34;%s %s %d %d:%d:%d %d&#34;, semana, mes, &dia, &hora, &minutos, &segundos, &agno);
  14.     printf( &#34;Fecha y hora: %s %s %d %d:%d:%d %d&#092;n&#34;, semana, mes, dia, hora, minutos, segundos, agno);
  15.   system (&#34;pause&#34;);
  16.   return EXIT_SUCCESS;
  17. }
  18.  
  19.  
otra forma de hacerlo
Código: Text
  1.  
  2. #include &#60;stdio.h&#62;
  3. #include &#60;stdlib.h&#62;
  4. #include &#60;sys/timeb.h&#62;
  5. #include &#60;time.h&#62;
  6.  
  7. int main( void )
  8. {
  9.    struct _timeb timebuffer;
  10.    char *timeline;
  11.  
  12.    _ftime( &timebuffer );
  13.    timeline = ctime( & ( timebuffer.time ) );
  14.  
  15.    printf( &#34;The time is %.19s.%hu %s&#34;, timeline, timebuffer.millitm, &timeline[20] );
  16.    
  17.    system (&#34;pause&#34;);
  18.    return EXIT_SUCCESS;
  19. }
  20.  
  21.  

49
C/C++ / Re: Ayuda Con Automatas
« en: Miércoles 8 de Junio de 2005, 23:49 »
No acabo de entender la descripción del  lenguaje que pusiste ¿podrías poner algunas cadenas que cumplen con esta descprición y otras que no para enteder mejor las cadenas que genera?

50
C/C++ / Re: Problema Con Matrices
« en: Miércoles 8 de Junio de 2005, 23:34 »
Bueno, ya vi la clase que me mandaste pero sigo sin entender qué es lo qué quieres hacer con esta clase. Veo que al llamar a la función setMatrixTiles lo haces dándole como 1er agumento una matriz de 2x2, y 25 y 19 como los demás argumentos. Dentro de la función solicitas memoria para, al parecer, tener una matriz de ancho x alto, que en este caso sería 25 x 19 ¿para qué? eso sólo su lo sabes. Tienes un ciclo que va de 0 hasta alto - 1 y dentro de este otro más que va de 0 hasta ancho - 1, y le asignas los valores de la matriz que le envías como argumento, en este caso la matriz de 2x2, pero tu recorres el ciclo desde 0 hasta 24 y desde 0 hasta 18, pero siendo la matriz sólo de 2x2, entonces estás accesando valores de la memoria que ya no son de la matriz pasada como argumento. Dependiendo del compilador y del sistema operativo en que estés trabajando esto te puede marcar o no error en tiempo de ejecución. Veamos ahora como asignas la memoria. Primero pides memoria  para tener un arreglo de alto apuntadores (estos apuntadores apuntan a un entero).  Después solicitas, para cada uno de estos apuntadores,  un arreglo de ancho enteros. Cuando liberas la memoria de MatrixTiles con el destructor, estás liberando la memoria para el arreglo de apuntadores, pero no liberas la memoria que solicitaste para cada uno de estos apuntadores. La expresión que usas *(MatrixTiles + 2*i + j) es incorrecta, lo correcto es *(MatrixTiles[j] + j), aquí no es necesario multiplicarlo por 2 ya que no solicitaste la memoria linealmente sino que primero solicitaste un arreglo de apuntadores y después un arrreglo de enteros para cada apuntador. Esto nos lleva de nuevo al asunto del error que te he mencionado (es la tercera vez que te lo digo). Sólo necesitas declarar a MatrixTiles como un apuntador y no como un doble apuntador, y solicitar la memoria linealmente así MatrixTiles = new [alto * ancho].  Ahora ya estaría bien cuando liberas la memoria con el destructor aunque ahí veo otro error, pues preguntas antes si MatrixTiles es nulo, pero esta variable no la inicializas en ninguna parte. Lo corrector sería declarar un constructor e inicializar esta variable a NULL. Si lo que quieres es incializar a la variable MatrixTiles con los valores de una matriz y y sus dimensiones, esta sería una forma de hacerlo
Código: Text
  1.  
  2. class CTiles {
  3. public:
  4.  CTiles () { MatrixTiles = NULL; }
  5.  ~CTiles();
  6.  void setMatrixTiles(int* matrix, int ancho, int alto);
  7. private:
  8.  int* MatrixTiles;
  9. };
  10.  
  11. void CTiles::setMatrixTiles(int* matrix, int ancho, int alto) {
  12.  
  13.  MatrixTiles = new int[alto * ancho];
  14.  for(int j=0;j&#60;alto;j++) {
  15.    for(int i=0;i&#60;ancho;i++) {
  16.      *(MatrixTiles + ancho*j + i) = *(matrix + ancho*j + i);
  17.    }
  18.  }
  19. }
  20.  
  21. CTiles::~CTiles() {
  22.  if(MatrixTiles != NULL ){
  23.    delete[] MatrixTiles;
  24.  }
  25. }
  26.  
  27.  
y llamarías así a la función
Código: Text
  1.  
  2. int fondo[2][2] = {{1,2},{2,2}}
  3.  
  4.  tile.setMatrixTiles((int *)fondo,2,2);
  5.  
  6.  

Páginas: 1 [2] 3 4 5