|
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 - ProfesorX
Páginas: 1 ... 13 14 [15] 16 17 ... 32
351
« en: Viernes 23 de Abril de 2010, 20:27 »
Quisiera saber si alguien tiene idea de esto. y q toy haciendo mal ¿qué ocurre si se acaba el espacioa un enteros largos en C sin signo ? ¿qué sucede cuando un entero sin signo llega a su valor máximo y se le suma 1? Acompañe con el código que utilizó para realizar la prueba.
Para empezar tu ccodigo esta mal, empezando por el ciclo for. Este ciclo es un ciclo infinito, ya que preguntas si i >= 0, pero nunca cambias el valor de "i", ya que estas incrementando "a" en lugar de "i", asi que no hay forma de salir del ciclo ya que "i" siempre sera = 0. Aun asi, si incrementas "i" tampoco saldras, ya que le estas diciendo que sea mayor, y al incrementarlo, siempre sera mayor. Ahora, respecto a lo que pasa si un entero llega a su maximo valor, la respuesta es que se produce lo que en ingles se llama un overflow o desbordamiento, y dependiendo del compilador, puede marcar un error en ejecucion, o no mostrar ningun error, y simplemente "comenzar desde el principio" con el numero mas bajo que puede representar. Por ejemplo, el valor mas alto para un unsigned long int es 4294967295, esto, si es que llevaste matematicas de la computacion, sabras que viene de 2^32 - 1, siendo 32 el numero de bits utilizados para representar el numero de tipo long int y - 1, porque incluyes el cero. Dicho esto, el siguiente programa, si lo compilas en Visual C++, al incrementa el valor de a, te dara cero, ya que no puede representar un valor mayor a ese y como dje arriba, comenzara desde el numero mas bajo. Quizas otros compiladores marquen error de ejecucion, dependiendo de las opciones para depuracion con que haya sido compilado el programa. #include <stdio.h> int main (void) { unsigned long int a; a = 4294967295; a= a + 1; printf ("%d",a); return 0; }
Saludos
352
« en: Lunes 19 de Abril de 2010, 20:23 »
Estas definiendo mal el arreglo, el arreglo debe ser definido de la siguiente manera, primero, el numero de filas que contendra el arreglo, y segundo, la longitud de la cadena mas larga de tu archivo. Si no lo haces asi, lo que pasa es que en el mejor de los casos, sobreescribes parte de las cadenas siguientes (que es lo que creo que te esta sucediendo) y en el peor de los casos, corrupcion de memoria y de codigo, que te puede llevar a un error de segment fault, fallo de segmento. Suponiendo que tu archivo tiene 50 filas, y que la cadena mas larga es de 100 caracteres, la definicion del arreglo deberia ser: Saludos
353
« en: Jueves 15 de Abril de 2010, 19:55 »
aux[0] es la primera posición de una variable declarada como char *aux[2];
Fallo de segmentación indica corrupcion de memoria. Dices que tienes declarada una variable como char *aux[2], (osea, un puntero a char). Yo creo que puede ser una de dos cosas: 1. No le has asignado espacio de memoria a la variable mediante malloc o new, el que tu declares una variable como puntero a char no significa que el compilador automaticamente asigne espacio, al declarar la variable como char * solo estas asignando espacio para el apuntador, mas no estas asignando espacio para el lugar donde apunta el apuntador, no se si me explique. Como no asignas espacio, el apuntador apunta a cualquier parte, y entonces al querer guardar algo en la variable, corrompes la memoria 2. Si solo asignaste espacio para 2 caracteres, y la cadena que lees tiene mas de 2, entonces seguira leyendo el resto de datos, corrompiendo la memoria. Ademas recuerda que las cadenas requieren un caracter nulo al final de la cadena, si tu cadena tiene longitud de 2, necesitas en realidad espacio para 3, 2 y el caracter nulo de fin de cadena. Si tu cadena tiene longitud 3, necesitas espacio para 4, y as sucesivamente.
354
« en: Jueves 15 de Abril de 2010, 18:56 »
Aqui no se hacen tareas.
355
« en: Viernes 9 de Abril de 2010, 20:47 »
El problema viene porqe en realidad al hacer la copia, copias la direccion de la variable, no su valor, entonces cada vez que modificas la instancia de OtherClass, automaticamente se refleja ese cambio en myAttribute. La solucion seria que implementes la interface ICloneable en OtherClass, y luego utilices el metodo Clone() para obtener un duplicado verdadero de la instancia de OtherClass en myAttribute. Puesto en codigo seria algo como: public class OtherClass : ICloneable { public object Clone() { return MemberwiseClone(); } } public class Myclass { public OtherClass myAttribute; public void metodo(OtherClass att) { myAttribute = (OtherClass)att.Clone(); } }
Saludos
356
« en: Jueves 8 de Abril de 2010, 19:24 »
El mensaje "unresolved external symbol protected" que significa en español "simbolo externo de tipo protected sin resolver" quiere decir que el linker no puede encontrar la variable o metodo en tu codigo ni en ninguna libreria externa. Lo mas probable es que hayas borrado o escrito mal la variable Simulation::temperatura. Verifica que no la hayas borrado o escrito mal (mayuscula por minuscula, una letra en lugar de otra, que te hayas comido una letra o escrito una letra de mas) la variable temperatura Saludos
357
« en: Jueves 8 de Abril de 2010, 19:12 »
No ha nada mejor como revivir un tema de hace 5 AÑOS (sarcasmo)
358
« en: Jueves 25 de Marzo de 2010, 00:36 »
frpintf escribe en modo texto, para escribir en modo binario se utiliza fwrite(), y para leer de nuevo, fread()
359
« en: Jueves 25 de Marzo de 2010, 00:25 »
Muchas gracias. Cual es la diferencia entre sacar algo por pantalla usando el printf o el cout?? El resultado es el mismo en realidad, la diferencia seria que con printf estas usando funciones de lenguaje C, y con cout, metodos y objetos de lenguaje C++
360
« en: Miércoles 24 de Marzo de 2010, 19:20 »
No vi que ya te habian contestado
361
« en: Miércoles 24 de Marzo de 2010, 19:19 »
printf("%d", nElementos );
362
« en: Miércoles 24 de Marzo de 2010, 19:15 »
JaviMarciano por favor NO PUBLIQUES EL MISMO MENSAJE EN 2 SUBFOROS A LA VEZ, elige el que creas que es el mas adecuado para tu mensaje, pero POR FAVOR, NO PUBLIQUES EL MISMO MENSAJE DOS VECES. Con una vez que lo pongas se te lee, y si nadie contesta, es que o estamos ocupados, o nadie sabe la respuesta, pero se considera de mala educacion preguntar dos veces lo mismo en dos subforos diferentes. Bueno, por esta vez te daremos un mano, espero no lo repitas. Creo que segun lo que pides, la siguiente consulta podria servirte: SELECT productos.* FROM productos LEFT JOIN ventas ON Producto.id_Producto = Ventas.Id_Producto WHERE Fecha_Ingreso < fecha AND Ventas.Id_Producto IS NULL
Cambia fecha por el parametro que deseas como fecha. Investiga tambien mas sobre los JOIN (INNER, LEFT, RIGHT), son muy utiles Saludos
363
« en: Jueves 18 de Marzo de 2010, 23:23 »
Pero ese "repaso" (para que no se reproduzca mas de 24 veces por segundo), ¿como podría hacerle? ¿alguna idea? Busca alguna funcion timer, las librerias que te mencione antes tiene funciones para timer. Generalmente miden el tiempo en milisegundos. O busca cualquier libreria que implemente timers.
364
« en: Jueves 18 de Marzo de 2010, 19:04 »
No existe una funcion que haga eso, debes programarlo tu paso por paso. El procedimiento que se sigue seria algo como lo que se realiza en la animacion tradicional. 1. Dibujas el rectangulo en la posicion original, 2. Borras el rectangulo 3. Dibujas el rectangulo, en la nueva posicion. 4. Repites los pasos 2 y 3. al hacerlo varias veces, se creara la "ilusion" de movimiento, ya que el ojo humano no detecta imagines fijas si su velocidad es mayor de 24 veces por segundo. En caso de que la animacion sea muy rapida, deberas añadir algun tipo de "retraso", para que la animacion no se reproduzca a mas de 24 veces por segundo. Es cuestion de experimentar, hasta que obtengas el resultado deseado. Si tu programa es en entorno grafico o algun tipo de juego, hay algunas librerias que te ayudaran a conseguirlo, allegro. SDL o si quieres animacion 3D, Open GL. Saludos y suerte
365
« en: Jueves 18 de Marzo de 2010, 00:13 »
Deberias usar Console.ReadLine() en lugar de Console.Read(), el primero lee cadenas (string) enteras (hasta que pulses enter), y el segundo solo lee caracter por caracter, por eso no puedes leer el numero completo, solo el primer digito Saludos
366
« en: Viernes 12 de Marzo de 2010, 01:30 »
Hola patosi bueno, el problema esta aca: for (i = 0; i < lineas; i++) { for (j = 0; j < MAXCOLUMNAS; j++) { fscanf(fichero , "%c", &caracter); printf("%c", caracter); } }
Mismo error de la vez pasada, estas leyendo caracter por caracter en lugar de linea por linea, cambialo por: char cadena[80]; for (i = 0; i < lineas; i++) { fgets(cadena, MAXCOLUMNAS + 1, fichero); printf("%s", cadena); }
Utililza fgets en lugar de fscanf, ya que si usas fscanf("%s", cadena), solamente te leera una palabra, y no toda la linea como queremos. Espero que eso ayude. Saludos
367
« en: Jueves 11 de Marzo de 2010, 19:41 »
Estas en lo correcto, no existe tal funcion, debes programarla tu. Si estas programando bajo windows, puedes utilizar las funciones FindFirstFile() y FindNextFile() de la APi de windows, que te ayudaran en esa tarea. A continuacion un hilo en este foro donde encuentras mas informacion, o prueba buscando tu mismo FindFirstFile y FindNextFile: http://foros.solocodigo.com/viewtopic.php?t=29044
368
« en: Jueves 11 de Marzo de 2010, 19:24 »
Bueno para empezar, para ti necesitarias una licencia de Visual Studio, y una licencia de SQL Server, aunque dejame decirte que para desarrollar puedes usar las versiones Express, son gratuitas y no requieres licencia, y puedes distribuir tu aplicacion (archivos ejecutables) sin ningun problema. Ahora, tu cliente solo necesitaria una licencia de SQL sever, no necesita licencia de Visual Studio, solo requeriria que descargue en su maquina el .NET Framework, si es que no lo tiene ya instalado en su maquina. Aunque mi recomendacion seria que mejor utilizaras algun otra alternativa libre y gratuita para tu manejador de bases de datos en lugar de SQL Server, ya que la licencia mas barata (Edicion Standard) cuesta 6,000 dolares, que creo que seria mucho mas caro que lo que le cobrarias por el desarrollo  , aunque si tu cliente no tiene problemas de dinero o ya tiene una licencia legal de SQL Server, adelante. Si la aplicacion que vas a desarrollar es monousuario y no es una aplicacion de red, podrias utilizar SQLite, Postgresql o Firebird (recomiendo SQLite ya que es muy sencillo de utilizar, y no consume muchos recursos) Si la aplicacion que vas a desarrollar es multiusuario y es una aplicacion de red, podrias utilizar Postgresql o Firebird. Tambien podrias usar MySQL, pero esta solo es gratuita si el codigo que vas a desarrollar es de licencia libre, si no lo es, tienes que pagar una licencia, aunque esta licencia es mucho mas economica que la de SQL Server. Bueno, ahi estan lo datos y la decision es tuya ahora, saludos
369
« en: Miércoles 10 de Marzo de 2010, 19:07 »
mau, que no ves qu ese usuario no se ha parado aqui en cinco meses? hay quy fijarse antesde revivir hilos viejos
370
« en: Lunes 8 de Marzo de 2010, 00:38 »
Pero no tengo la idea de comparar con la base de datos
Necesitas hacer una consulta SQL a tu base de datos con los datos de tus textbox, si regresa filas, entonces el usuario existe y continuas, si no regresa filas, entonces muestras mensaje de que ese usuario no existe. Suponiendo que tu base de datos se llama usuarios y los campos de usuario y contraseña se llaman nombre y password respectivamente, podria ser algo como: comando.CommandText = "SELECT nombre, password FROM usuarios WHERE nombre = '" + txtNombre.Text + "' AND password = '" + txtPassword.Text + "'";
Es solo un ejemplo, aunque recomiendo que uses consultas parametrizadas, en lugar de los textbox directos, para evitar inyecciones SQL  pero es tu desicion. Saludos  Editado, no vi que te habian contestado ya, de todas formas repito mi consejo, trata de usar consultas parametrizadas en lugar de directas
371
« en: Lunes 8 de Marzo de 2010, 00:18 »
El problema esque el problema es que el programa tiene que repetirse hasta que el usuario quiera, por eso necesito el while.
Entonces estas definiendo mal el while, y probablemente necesitarias un do..while en lugar de un while, algo como: char final; do { Leer(libro); printf("Terminr programa (s/n)n"); final = getchar(); } while (final != 's');
El programa tiene que mostrar el texto nada mas comenzar el programa y no lo hace
Esto es porque no lo estas haciendo, deberias de añadir codigo para mostrar todo el texto, justo despues de IniciarMatriz(texto) y antes de Escribir(libro,texto), seria una funcion adicional a void Leer (FILE *fichero) pero que te muestre el texto en la pantalla antes de escribir en el archivo. y otro problema es a la hora de decir quiero que muestre X lineas las muestra pero sin respetar los saltos de linea que yo he definido en el codigo..
Pues dejame decirte que en tu programa NUNCA defines saltos de linea, el hecho de que separas las lineas de texto de tu matriz, no significa que se separan por arte de magia, debes añadir manualmente los saltos de linea. Ademas descubri otros problemas con tu codigo: Uno es que estas escribiendo las lineas de manera incorrecta en tu programa, tu estas escribiendo caracter por caracter, cuando deberias hacerlo linea por linea. Si te pidieron que escribieras caracter por caracter, tendrias que agregar una verificacion adicional para cuando llegues al final de la cadena, insertar el salto de linea y leer la siguiente cadena. Si no es asi, y te permiten escribir lineas enteras, entonces reemplaza el siguiente codigo: for (i = 0; i < MAXFILAS; i++) { for (j = 0; j < MAXCOLUMNAS; j++) { fprintf( fichero, "%c", texto [ i ][ j ] ); } }
Por este que escribe lineas enteras, con su salto de linea n for (i = 0; i < MAXFILAS; i++) { fprintf( fichero, "%sn", texto [ i ]); }
El otro problema es que no estas definiendo suficiente espacio para tus cadenas, tu usas #define MAXCOLUMNAS 80, como si tus lineas tuvieran 80 caracteres de longitud, y en la realidad la mas larga mide 125 caracteres de longitud, entonces deberias hacer una de 2 cosas: 1. recortar tu cadenas de manera que no pasen de 79 caracteres (hay que guardar un espacio para el fin de cadena ' ') o 2. cambiar tu MAXCOLUMNAS a un valor mas grande, diria que 130, para que te cupiera toda la linea completa. Bueno, creo que tienes bastante trabajo que hacer y corregir, espero que te sirva la ayuda y manos a la obra. Saludos
372
« en: Jueves 4 de Marzo de 2010, 19:14 »
Hola patosi, prmero que nada un consejo, cuando publiques codigo, utiliza las etiquetas [ code][ /code] (sin espacio en los corchetes) para encerrar tu codigo, eso hace que sea mas legible. Ahora revisando tu programa, diria que tienes dos errrores basicos, el primero esta en esta parte: while (final != 0 ) IniciarMatriz(texto);
En esta parte tienes un ciclo while que se ejecuta solo si la variable "final" no es igual a cero, pero como arriba la inicializas con un valor a cero, entonces la condicion del ciclo es falsa, por lo que nunca entra al ciclo while, y al no entrar, nunca inicializa la matriz, entonces la matriz contendra basura, y al guardarla en el archivo guardara basura, es por eso que obtienes "simbolos extraños". Ademas ese ciclo no lo necesitas (en mi opinion) para nada, asi que simplemente borra la linea del while y deja la linea de IniciarMatriz(texto); El otro error es que en la funcion escribir nunca cierras el archivo, asi que simplemente agrega un fclose(fichero); despues de que hayas terminado de escribir la matriz para cerrar el archivo. Bueno eso es lo que encontre a simple vista. Saludos y suerte
373
« en: Miércoles 3 de Marzo de 2010, 03:50 »
Cuando tienes valores nulos, debes usar el operador especial IS NULL/IS NOT NULL.Dicho esto, la consulta quedaria asi: SELECT * FROM clientes WHERE mail IS NOT NULL
Ojo, no es lo mismo un campo vacio, que un campo nulo, tenlo en cuenta. Lo siguiente lo he sacado del manual de referencia de MySQL A common error when working with NULL is to assume that it is not possible to insert a zero or an empty string into a column defined as NOT NULL, but this is not the case. These are in fact values, whereas NULL means “not having a value.”
Saludos
374
« en: Martes 2 de Marzo de 2010, 19:33 »
No es posible acceder a miembros PRIVADOS (private) fuera de la clase, por eso se llaman PRIVADOS.
Declaralos como PUBLICOS (public).
375
« en: Martes 23 de Febrero de 2010, 18:41 »
No se hacen tareas. Si no sabes como hacerlo, es hora de que consigas un buen libro de programacon en C++, o bajes algun curso de internet y comiences a aprender, aun estas a tiempo. Cuando ya hayas aprendido algo, comienza a hacerlo, y entonces, si tienes alguna duda o te marca algun error, puedes publicar lo que hayas hecho, y seguro mas de uno te ayudara, de otra forma, nadie te hara el trabajo. Saludos
Páginas: 1 ... 13 14 [15] 16 17 ... 32
|
|
|