|
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
76
« en: Miércoles 1 de Junio de 2005, 02:44 »
Te aconsejo que cuando tengas una duda seas más específico y pongas más datos de lo que quieres hacer, qué entrada va a recibir tu programa y qué salida va a realizar, si acaso poner un código corto en donde pienses que pueda estar la falla. Pero tal como lo estás haciendo, preguntando algo que, al menos a mi no me queda claro, y adjuntando un programa de más de 400 líneas de código, pues dudo que alguien se vaya a tomar la molestia de tratar de entender tu programa. Dices que quieres que un vector contenga a otro, pues eso me suena a algo como una matriz, pues la puedes ver como un arreglo de vectores, donde cada elemento del arreglo es a su vez un vector, pero no sé si sea eso lo que estás preguntando.
77
« en: Miércoles 1 de Junio de 2005, 02:27 »
No sé porque haces una distinción entre C y C++ ¿acaso no sabes que C++ es un superconjunto de C?, esto significa que cualquier programa que realices en C va a funcionar en C++. En particular la librería estándar de entrada y salida de C, la cual tiene como encabezado al archivo <stdio.h> también lo es de C++, y por lo tanto las funciones que te mencionamos anteriormente te van a funcionar en C++. Que tú lo quieras hacer con flujos utilizando la librería de C++ cuyo encabezado es <iostream.h> es otra cosa, pero para esto tendrías que investigar cómo hacer lo mismo que se puede hacer tal como te lo mostramos. Yo siempre he trabajado con las funciones de <stdio.h>, aún programando en C++, y nunca he sentido la necesidad de aprender la de los flujos, pero eso creo que es cuestión de gustos.
78
« en: Martes 31 de Mayo de 2005, 21:04 »
sizeof se aplica a tipos integrales del lenguaje como int o float y a arreglos y estructuras definidas por el usuario pero nunca a archivos ¿será que quieres hacer algo como esto #include <stdio.h> ... main () { ... FILE *fp; fp = fopen (nomarch, "r"); sizeof (fp); ... }
para encontrar el tamaño de un archivo? Esto no se puede hacer de esta manera. Si quieres encontrar el tamaño del archivo puedes usar la función ftell para hacerlo. Este es un ejemplo sencillo que te muestra el tamaño de un archivo dando el nombre de este desde la línea de comandos #include <stdio.h> #include <stdlib.h> main(int argc, char *argv[]) { FILE *fp; long int nTamArch; if (argc != 2) { fprintf (stderr, "Se debe proporcionar el nombre de un archivo.\n"); exit (EXIT_FAILURE); } if ((fp = fopen (argv[1], "r")) == NULL) { fprintf (stderr, "Error al abrir el archivo %s.\n", argv[1]); exit (EXIT_FAILURE); } fseek (fp, 0L, SEEK_END); nTamArch = ftell (fp); fclose (fp); printf ("El tama\xA4o del archivo %s es de %ld bytes\n", argv[1], nTamArch); system ("pause"); exit (EXIT_SUCCESS); }
79
« en: Martes 31 de Mayo de 2005, 20:40 »
No está claro lo que quieres ¿a qué función Window te refieres? ¿acaso el compilador que usas te proporciona esta función? ¿a qué te refieres cuando dices que quieres borrar toda la pantalla? dices que se borra parte de la ventana ¿será que estás trabajando bajo Windows y tu programa está corriendo en una ventana de consola y quieres borrar toda la pantalla junto con las demás ventanas que en ese momento estén abiertas?
80
« en: Martes 31 de Mayo de 2005, 18:33 »
Si es un inventario simple con muy pocas cosas entonces puedes hacerlo sin implementar índices para las búsquedas y con una búsqueda secuencial te bastaría. Con las funciones de entrada y salida de la librería estándar de C lo puedes implementar, funciones como fopen, fclose, fwrite, fread, etc ¿sabes usarlas?
81
« en: Sábado 28 de Mayo de 2005, 21:10 »
Con pregunta así tan general te recomiendo que busques en la bibliografía tan extensa que sobre estructuras de datos hay. Existen muchos libros con código en C++ de estructuras de datos que siempre tienen al menos un capítulo dedicado a los árboles.
82
« en: Sábado 28 de Mayo de 2005, 21:05 »
No mencionas en que sistema operativo estás probando los puertos seriales Si lo estás haciendo bajo Windows XP me parece que ahí no puedes directamente hacer uso de los puertos seriales (por ejemplo con las instrucciones outp de Turbo C). Yo construí hace tiempo un cable para comunicarme a través del puerto paralelo y uní los pines de las clavijas de acuerdo a una información que bajé de internet. Si lo pruebo en MS-DOS con los programas INTERSVR.EXE e INTERLNK.EXE si me funciona. Pero si quiero hacer lo mismo con Windows utilizando el software de conexión directa que viene con el sistema (con el cual puedes conectar dos máquinas a través de un puerto paralelo o serial) el cable simplemente no me funciona. Yo sospecho que es porque deben de ser distintos cómo están conectados lo pines, pero como las máquinas que tengo conectadas las tengo por red pues ya no me ha interesado investigar esto. Aunque te diré que hace poco estos cables me sacaron de un apuro, pues un amigo quería que le instalara un software que venía en un cd en su laptop, pero resulta que había perdido un drive externo que se conectaba a su laptop para leer los cd's. Quise conctarla a través de la red con mi pc pero tampoco tenía tarjeta de red la laptop. O sea que para meterle cosas o sacarlas de su laptop sólo depende de un drive externo que lee floppies. Fue aquí cuando me sirvieron los cables y le transferí el cd completo a su disco duro y desde ahí lo instalé.
83
« en: Sábado 28 de Mayo de 2005, 20:42 »
cuando dices que lo instalas bajo DOS, ¿te refieres a que lo instalas en una pc que sólo tiene instalado el MS-DOS? ¿no estás corriendo el Borland C++ 3.1 en una sesión de consola bajo Windows? Suponiendo que estás trabajando sólo en MS-DOS, ¿a que te refieres cuando dices que no puedes hacer nada? ¿no puedes editar un programa? ¿no puedes compilarlo? Tienes que instalar un manejador del ratón si quieres usarlo en Borland C++ 3.1 bajo MS-DOS. Este es un pequeño programa que al correrlo se queda residente en memoria. Cuando corres Borland C++ 3.1 bajo Windows XP en una sesión de consola, este detecta el manejador del ratón de Windows y hace uso de él, es por eso que si funciona el ratón ahí. Antes de que Windows se hiciera muy popular, cuando sólo se trabaja en MS-DOS principalmente, al comprar un ratón este venía con un disquette en donde estaba el programa para manejar el ratón. Este generalmente era un pequeño programa con extensión .COM, extensión que ahora ya no existe en el Windows, pero que en aquellos años se usaban mucho, ya que eran pequeños programas que no podían tener un tamaño mayor, sumando datos y código, a 64K, y que eran muy apropiados porque en ese entonces no se contaban con las grandes cantidades de espacio en memoria y disco duro como ahora. Si te interesa por ahí todavía tengo uno de estos programas que venían con un ratón que compré hace muchos años. El ratón obviamente ya no lo tengo, pero el programa si, y lo he probado con varios ratones de distintos modelos y si ha funcionado en MS-DOS.
84
« en: Sábado 28 de Mayo de 2005, 20:20 »
No sé por que lo dices, hay muchas respuestas a las dudas que se ponen en los foros, no sólo este, en donde se pone código. Yo mismo he puesto muchas veces parte de un programa o un programa completo para contestar las dudas. Pero aquí hay que hacer una distinción. Muchas veces alguien pone un "post" en con la esperanza que le resuelvan la tarea o ejercicio que le dejaron en la escuela sin poner nada de su parte en la resolución del problema, y obviamente a esta clase de gente nadie le va a contestar y si acaso llega a tener respuesta es con una grosería o algo como que mejor sería que lo hiciera el. En los foros se trata de ayudarnos con las dudas que nos surjan al intentar resolver un problema, pero no esperemos que pasivamente nos vaya cayendo del cielo las respuestas, debemos de poner algo de nuestra parte tratando de resolver el o los problemas que tengamos, leyendo libros, manuales, preguntándoles a un amigo o conocido y consultando la abundante información que hay en internet de FAQ's, HOWTO's, etc., y después, si todavía no llegamos a una solución satisfactoria, entonces si consultar en los foros.
85
« en: Viernes 27 de Mayo de 2005, 04:37 »
Tienes que ponerle una pausa al final de la función main o antes de cualquier función con la cual te salgas del programa para que puedas ver los resultados de tu programa estando dentro del ambiente del Dev C++. Lo que sucede es que en los programas que haces en visual c++ ellos le ponen las pausa por ti. Pero prueba a salirte del ambiente del Dev C++ y ejecutar tu programa desde la línea de comandos y vas a ver que tu programa si se ejecuta bien (bueno suponiendo que lo has programado bien y hace lo que quieres). Prueba a ponerle la línea system ("pause");
y verás que con esto se detiene hasta que presionas alguna tecla. (no se te olvide agregarle el archivo <stdlib.h> que es donde está declarada esta función).
86
« en: Jueves 26 de Mayo de 2005, 22:50 »
Para evitar contar los caracteres C te permite declarar una constante de cadena sin especificar el número de bytes. Por ejemplo, en tu caso lo declararías así: char frase[] = "Hola, me llamo ";
Al declararlo de esta manera, el compilador se encarga de solicitar el suficiente espacio para que la cadena Hola, me llamo más el caracter nul '\0' quepan en el arreglo de caracteres frase
87
« en: Jueves 26 de Mayo de 2005, 09:05 »
Consulta el libro "Programación en Windows 95" de Charles Petzold (ya sacó el mismo libro para Windows 98 y no sé si para posteriores versiones). En el capítulo 15, dedicado completamente a manejar la impresora, explican dos métodos, con ejemplos completos hechos en C, de cómo imprimir bajo este sistema operativo. Imprimir bajo este sistema es relativamente fácil, pues las mismas funciones GDI que usas de la API de Windows para dibujar, las puedes usar para la impresora, solamente cambiando el contexto de dispositivo por un contexto de dispositivo de impresora. Claro que no es lo mismo escribir en la pantalla que en la impresora, ya que la impresora no puede mostrar la salida al mismo tiempo varios programas, como ocurre en la pantalla, ni la pantalla está fuera de línea o se tiene que cuidar de escribir más allá del monitor, como ocurre en la impresora hablando de las hojas. Pero en general el proceso es el mismo y sólo necesitas conocer algunas funciones adicionales que manejan la impresora como StartDoc, EndDoc, StartPage y EndPage
88
« en: Miércoles 25 de Mayo de 2005, 08:21 »
Te paso una versión en clases de tu programa, es sólo un borrador que puedes pulirlo más. Espero que te pueda ayudar para que te des una idea del cambio que sufre un programa orientado a procedimientos como es tu programa en lenguaje C a un programa orientado a objetos en C++. Definí una clase Libro idéntica a la que tu definiste como la estructura libro, sólo le añadí dos funciones miembro: una para obtener los datos del objeto Libro y otro para imprimirlos. Definí la clase Biblioteca conteniendo N objetos de la clase Libro (bueno en realidad cambié la constante N que habias definido por el nombre NLIBROS) y un entero nLibros que contiene el número de libros que tiene la clase Biblioteca. Esta es la definición más lógica, ya que una biblioteca en el mundo real se compone de varios libros. Ademas definí un constructor que inicializa nLibros a 0 y dos funciones miembro: una que lee los libros que va a tener la biblioteca y otra que los imprime. Por último defini la clase Escuela conteniendo una biblioteca (pero en realidad puede tener más de una, definiendo la constante NBIBLIOS mayor que 1) y una variable nombre que va a contener el nombre de la escuela. Esta clase de escuela tiene 3 funciones miembro: Una función para darle el nombre de la escuela, otra para regresar el nombre que tiene la escuela y una última que da de alta los libros de las bibliotecas. Otra vez, esto es lo más lógico, ya que una escuela puede tener más de una biblioteca, aunque por norma general sólo cuenta con una. Aquí te paso el código. Espero no te sea muy difícil entenderlo y por los errores que tenga, pues perdóname, ya que lo hice a la carrera sin meditar mucho. Hasta luego y suerte #include<iostream.h> #include<conio.h> #include<stdio.h> #include<string.h> const int NLIBROS = 100; const int NBIBLIOS = 1; char *namescuels[] = { "ESIME", "ESIT", "ESIQIE" }; // ************** Clase Libro ********************** class Libro { char nombre[20]; char autor[20]; char editorial[20]; int edicion; public: void ObtenerDatos (); void ImprimeLibro(); }; void Libro::ObtenerDatos () { cout<<"Dame el nombre del libro \n"; gets(nombre); cout<<"Dame el autor \n"; gets(autor); cout<<"Dame la editorial \n"; gets(editorial); cout<<"Dame el numero de edicion \n"; cin>>edicion; } void Libro::ImprimeLibro() { cout<<"NOMBRE: "<<nombre<<"\n"; cout<<"AUTOR: "<<autor<<"\n"; cout<<"EDITORIAL: "<<editorial<<"\n"; cout<<"EDICION: "<<edicion<<"\n"; } // ************** Clase Biblioteca ***************** class Biblioteca { Libro libros[NLIBROS]; int nLibros; public: Biblioteca () { nLibros = 0; } void ObtenerLibros (int nlibros); void ImprimeLibros(); }; void Biblioteca::ObtenerLibros (int nlibros) { clrscr(); for(int i=0;i<nlibros;i++) libros[i].ObtenerDatos (); } void Biblioteca::ImprimeLibros() { for(int i=0;i<nLibros;i++) { libros[i].ImprimeLibro (); getch(); } } // ************** Clase Escuela **************** class Escuela { Biblioteca bibliotecas[NBIBLIOS]; char nombre[10]; public: void PonNombre (char *name) { strcpy (nombre, name); } char *DameNombre () { return nombre; } void ObtenerBiblios (); }; void Escuela::ObtenerBiblios () { for (int i = 0; i < NBIBLIOS; i++) { cout << nombre << ": Datos de la bilioteca #" << i + 1 << "\n"; do { int opc2, contact; clrscr(); cout<<"1. Introducir Datos\n\n"; cout<<"2. Imprimir Datos\n\n"; cout<<"3. Salir\n\n"; cout<<"Escoge: "; cin>>opc2; switch(opc2) { case 1: cout<<"Cuantos contactos vas a introducir? "; cin>>contact; bibliotecas[i].ObtenerLibros (contact); break; case 2: bibliotecas[i].ImprimeLibros(); break; case 3: char opc3; cout<<"Quieres regresar al menu principal?\n"; cin>>opc3; if(opc3=='s') return; break; default: cout<<"Vuelve a intentarlo"; getch(); break; } } while(1); } } // ************************************************* const int nescuelas = sizeof (namescuels) / sizeof (char **); Escuela escuelas[nescuelas]; int menu(void) { int opc; clrscr(); for (int i = 0; i < nescuelas; i++) cout<< i + 1 << ". " << escuelas[i].DameNombre () << "\n\n"; cout<< i + 1 << ". Salir\n\n"; cout<<"Escoge: "; cin>>opc; return(opc); } void main(void) { for (int i = 0; i < nescuelas; i++) escuelas[i].PonNombre (namescuels[i]); int opc; do { opc=menu(); if (opc > nescuelas) { cout<<"Vuelve a intentarlo"; getch(); } else if (opc == nescuelas) { cout<<"Adios"; getch(); } else escuelas[i].ObtenerBiblios (); } while(opc!=nescuelas); }
89
« en: Martes 24 de Mayo de 2005, 08:42 »
No sé si te entiendo bien. Por ejemplo, bajo Windows, puedo manipular imágenes con un apuntador HBITMAP. Si deseo tener una matriz de apuntadores a imágenes, digamos de 2 x 2, sólo tengo que declarar HBITMAP hbmpArrayImages[2][2] y con hbmpArrayImages[0][0] estoy referenciando al primer elemento de la matriz ¿es a lo que te refieres?
90
« en: Sábado 14 de Mayo de 2005, 20:04 »
Aquí te pongo el ejemplo, es de botones, también hay otro donde manejan barras deslizantes con colores y otro de controles de edición por si te interesan. Hasta luego y suerte /*---------------------------------------- VERBOTON.C -- Programa Ver Botones (c) Charles Petzold, 1996 ----------------------------------------*/ #include <windows.h> struct { long style; char *text; } button[] = { BS_PUSHBUTTON, "PUSHBUTTON", BS_DEFPUSHBUTTON, "DEFPUSHBUTTON", BS_CHECKBOX, "CHECKBOX", BS_AUTOCHECKBOX, "AUTOCHECKBOX", BS_RADIOBUTTON, "RADIOBUTTON", BS_3STATE, "3STATE", BS_AUTO3STATE, "AUTO3STATE", BS_GROUPBOX, "GROUPBOX", BS_AUTORADIOBUTTON, "AUTORADIO", BS_OWNERDRAW, "OWNERDRAW" }; #define NUM (sizeof button / sizeof button[0]) LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { static char szAppName[] = "VerBoton"; HWND hwnd; MSG msg; WNDCLASSEX wndclass; wndclass.cbSize = sizeof (wndclass); wndclass.style = CS_HREDRAW | CS_VREDRAW; wndclass.lpfnWndProc = WndProc; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hInstance = hInstance; wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION); wndclass.hCursor = LoadCursor (NULL, IDC_ARROW); wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH); wndclass.lpszMenuName = NULL; wndclass.lpszClassName = szAppName; wndclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION); RegisterClassEx (&wndclass); hwnd = CreateWindow (szAppName, "Ver Botón", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); ShowWindow (hwnd, iCmdShow); UpdateWindow (hwnd); while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg); DispatchMessage (&msg); } return msg.wParam; } LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) { static char szTop[] = "iMsg wParam lParam", szUnd[] = "____ ______ ______", szFormat[] = "%-16s%04X-%04X %04X-%04X", szBuffer[50]; static HWND hwndButton[NUM]; static RECT rect; static int cxChar, cyChar; HDC hdc; PAINTSTRUCT ps; int i; TEXTMETRIC tm; switch (iMsg) { case WM_CREATE : hdc = GetDC (hwnd); SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT)); GetTextMetrics (hdc, &tm); cxChar = tm.tmAveCharWidth; cyChar = tm.tmHeight + tm.tmExternalLeading; ReleaseDC (hwnd, hdc); for (i = 0; i < NUM; i++) hwndButton[i] = CreateWindow ("button", button[i].text, WS_CHILD | WS_VISIBLE | button[i].style, cxChar, cyChar * (1 + 2 * i), 20 * cxChar, 7 * cyChar / 4, hwnd, (HMENU) i, ((LPCREATESTRUCT) lParam) -> hInstance, NULL); return 0; case WM_SIZE : rect.left = 24 * cxChar; rect.top = 2 * cyChar; rect.right = LOWORD (lParam); rect.bottom = HIWORD (lParam); return 0; case WM_PAINT : InvalidateRect (hwnd, &rect, TRUE); hdc = BeginPaint (hwnd, &ps); SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT)); SetBkMode (hdc, TRANSPARENT); TextOut (hdc, 24 * cxChar, cyChar, szTop, sizeof (szTop) - 1); TextOut (hdc, 24 * cxChar, cyChar, szUnd, sizeof (szUnd) - 1); EndPaint (hwnd, &ps); return 0; case WM_DRAWITEM : case WM_COMMAND : ScrollWindow (hwnd, 0, -cyChar, &rect, &rect); hdc = GetDC (hwnd); SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT)); TextOut (hdc, 24 * cxChar, cyChar * (rect.bottom / cyChar - 1), szBuffer, wsprintf (szBuffer, szFormat, iMsg == WM_DRAWITEM ? "WM_DRAWITEM" : "WM_COMMAND", HIWORD (wParam), LOWORD (wParam), HIWORD (lParam), LOWORD (lParam))); ReleaseDC (hwnd, hdc); ValidateRect (hwnd, &rect); break; case WM_DESTROY : PostQuitMessage (0); return 0; } return DefWindowProc (hwnd, iMsg, wParam, lParam); }
91
« en: Viernes 13 de Mayo de 2005, 12:57 »
En Windows XP también cuentas con el asistente de tareas programadas para que establescas cuando se ejecutará el programa que desees, ya sea al iniciar el equipo, a diario, cada semana, etc. Este lo encuentras en las herramientas del sistema (Inicio --> Todos los programas --> Accesorios --> Herramientas del sistema --> Tareas programadas). Para Unix ya existía hace mucho una herramienta desde la línea de comandos que realizaba lo mismo, entonces me imagino que en Linux debe de existir una cosa parecida.
92
« en: Jueves 12 de Mayo de 2005, 07:44 »
Bueno, en este último ejemplo que pones defines al comienzo un apuntador genérico pero no lo haces que apunte a algo, por lo que cuando le pasas ese apuntador a la función FE_Procesarpues lógicamente va a haber un error, pues esta función supone que el parámetro que está recibiendo está apuntando a una parte válida de memoria. Lo correcto es inicializarlo asignándole la dirección de una variable que hayas creado antes de cualquiera de las dos estructuras, por ejemplo struct TFiltroExtraer tfe; void *e; e = (struct TFiltroExtraer *)&tfe;
o crear la variable de la estructura dinámicamente y asignarle la dirección a e así void *e; e = (struct TFiltroContar *)malloc (sizeof (struct TFiltroExtraer));
Si usas malloc no se te olvide incluír <malloc.h>, que es el encabezado que usa dev c++ y microsoft C para manejar la memoria dinámica (bueno, estoy suponiendo que estás programando en C, ya que en C++ en vez de usar la función malloc para solicitar memoria dinámica puedes usar la palabra reservada new para hacer lo mismo) Corrí este último código que pusiste haciendo la 2a corrección que te indiqué (la que usa malloc) y me corrió sin ningún problema dándome como salida n: 2 cantidad: 1
93
« en: Jueves 12 de Mayo de 2005, 00:46 »
Corrí tu ejemplo con el compilador dev c++ y no me dio problemas, este es el ejemplo que puse #include <stdio.h> #include <conio.h> struct TFiltroExtraer { int n; }; struct TFiltroContar { int cantidad; }; int FE_Procesar (void *datos_filtro) { TFiltroExtraer *Filtro = (TFiltroExtraer*)datos_filtro; Filtro->n=2; return 0; }; int FC_Procesar (void *datos_filtro) { TFiltroContar *Filtro = (TFiltroContar*)datos_filtro; Filtro->cantidad=1; return 0; }; main () { struct TFiltroExtraer e; struct TFiltroContar c; FE_Procesar (&e); FC_Procesar (&c); printf ("\ne.n: %d\tc.cantidad: %d", e.n, c.cantidad); getch(); }
me dio como resultado e.n: 2 c.cantidad: 1 por lo que no veo problema.
94
« en: Lunes 9 de Mayo de 2005, 22:36 »
Con "objetos" ¿te refieres a los controles como botones, radiobutton, checkbox, etc? Si quieres ponerlos en tu ventana principal tienes que usar la función CreateWindow con el tipo de control apropiado. Generalmente la llamas en el mensaje WM_CREATE. Charles Petzold ha sacado varios libros para programar en Windows y ahí pone ejemplos sencillos de cómo hacer esto. Yo compré hace años uno de ellos llamado "Programación en Windows 95", el cual incluía un CD con los ejemplos. Si te interesa te puedo poner en este foro, tal como te estoy poniendo este mensaje, el programa de ejemplo.
95
« en: Jueves 5 de Mayo de 2005, 23:41 »
aj  , si, ya me di cuenta, lo que pasa es que como estaba haciendo otras cosas en la computadora (como siempre)  , y como cuando puse el post inmediatamente vi la respuesta, pues pensé que era andreina. Esperemos que el ejemplo que pusiste le aclare las dudas.
96
« en: Jueves 5 de Mayo de 2005, 22:16 »
Este código que pusiste no tiene errores de sintaxis. Lo compilé sin problemas. Me parece que mencionaste que te daba un error en el parámetro 5 por lo que me imagino que tu problemas es con la declaración de otras funciones con más parámetros ¿podrías poner la declaración de éstas?, sólo la declaración, no las llaves { } ni las instrucciones encerradas en ellas.
97
« en: Jueves 5 de Mayo de 2005, 21:37 »
¿podrías poner las declaraciones de las dos funciones? no el cuerpo de las dos funciones, para poder ayudarte
98
« en: Jueves 5 de Mayo de 2005, 06:20 »
especifica mas detalladamente qué es lo que quieres hacer para poder ayudarte
99
« en: Martes 3 de Mayo de 2005, 03:08 »
No te entiendo bien, dices "...para correr mis programas de c++ en linux necesito también su ejecutable...". ¿A que te refieres con el ejecutable? ¿te refieres al ejecutable del compilador que usas bajo windows para compilar tu programa, o te refieres al ejecutable que genera tu compilador cuando compilas? Ni el compilador que uses bajo Windows ni el ejecutable que genera al compilar un programa en C++ van a correr en linux. Para correr tus programas de C++ solamente necesitas un compilador de C++. Estos existen tanto en la plataforma Windows como en linux (y otras muchas más como los Unix de la máquinas Solaris, el Mc Os de la Apple, etc.) Obviamente, si usas una característica no transportable del compilador que estés usando, pues el programa fuente en C++ no va a correr con otro compilador. Por ejemplo, si los programas que haces en Windows XP hacen uso de las MFC de Microsoft o API's de Windows para que corran en una ventana, entonces nunca correrá en linux. A menos que hagas uso de un emulador de Windows bajo linux, aunque eso sólo un usuario de linux te lo podría decir ya que yo uso el XP. Pero si tu preocupación es que no vayas a poder programar en C++, pues debes dejar de hacerlo, ya que según he leído, en el entorno de linux existen compiladores de C++ y muy buenos que no le piden nada a los que usas en el entorno Windows.
100
« en: Martes 3 de Mayo de 2005, 02:03 »
Eso que deseas hacer no los vas a resolver con una sóla lectura en alguna posición del archivo, ya que cuando escribes en el disco usando las funciones estándar, éstas no sólo escriben los bytes de que se compone el archivo, sino también información relacionada a los sectores físicos del disco en donde se encuentran estos bytes y la manera en cómo se ligan estos sectores para formar el archivo, así como el número de bytes. De manera que, ¿qué crees que pasaría si con una simple instrucción como poner el EOF en alguna parte del archivo que quieres truncar pudieras dividirlo? el nombre que tiene ese archivo sería el de la primera parte ¿cómo sabría el sistema operativo qué nombre ponerle a la segunda? Y en caso de que desecharas la segunda parte ¿cómo sabría el sistema operativo, que los sectores físicos del disco en donde está la segunda parte desechada, ya están listos para usarse por otro archivo? Dices que quieres que sea portable a varios sistemas operativos pero ya al querer usar ensamblador te estás contradiciendo porque el ensamblador es propio de cada máquina. Si quieres que sea portable tienes que usar necesariamente las librerías estándar que manejen archivos y éstas, por lo que yo sé, son las que se encuentran en stdio.h Al poner una respuesta en este foro no pretendo criticar sino tratar de proponer una sólución pero por más que le pienso no hallo la manera en que puedas hacer un programa portable para lo que quieres sin generar otro archivo auxiliar. El antiguo sistema operativo MS-DOS usaba un sistema de archivos que llamaba FAT16. En éste había una parte del sistema en donde guardaba los nombres de los directorios y archivos, y otra en donde estaba la información de los clústeres (grupos de sectores físicos de disco) que componían cada archivo. En este sistema operativo uno podía hacer un programa en C que escribiera directamente en esas partes. Aquí si se podría hacer eso que tu quieres pero de ninguna manera portable. Para hacer esto mismo en los sistemas de archivos de los sistemas operativos actuales (FAT32, NTFS, de linux, de Unix, etc.) tendrías que conocer la forma de hacerlo y eso suponiendo que se pueda hacer ya que en estos sistemas no te permiten manejar directamente el sistema de archivos, manejo que está reservado al kernel de cada SO. Si encuentras la forma de hacerlo te agradecería publicaras tu respuesta. Disculpa el no poder ayudarte.
|
|
|