|
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 - punteroNULO
2
« en: Jueves 17 de Marzo de 2011, 19:38 »
3
« en: Martes 4 de Enero de 2011, 21:51 »
Bueno, en mi opinión no es muy adecuado ese modo de operar.
En cuanto al otro problema debes darte cuenta que cuando k > 30 en malloc probablemente se supera el límite para un entero (de 4 bytes) y el valor es indeterminado, por lo que puede que estes reservando menos memoria o ninguna, y a la hora de acceder a los datos tengas un fallo de segementación.
4
« en: Lunes 3 de Enero de 2011, 18:06 »
Lo de reservar esa cantidad de memoria es porque tengo que generar 2^k palabras de tamaño n, es decir de n bits cada una y necesito tenerlas todas a mano durante la ejecucion del programa. Había probado ha guardarlas todas en un fichero pero esto hacía al programa muy lento y por eso opte por la opción de guardarlas en memoria. Supongamos n=8 y k=10. Deberías reservar: 2^10 * 8 = 8192 bits = 1024 bytes. Pero en realidad estas reservando (suponemos tamaño int = 4 bytes): buffer =(int *)malloc((int)pot *n *sizeof(int));
2^10 * 8 * 4 = 32768 bytes (¡32 veces más de lo necesario!). Lo primero que debes hacer es averiguar cuantos bytes te hacen falta para almacenar una "palabra de n bits" y luego reservar la memoria necesaria.
5
« en: Jueves 16 de Diciembre de 2010, 10:23 »
Puede que me equivoque, pero me parece que el fallo está en que a la hora de enlazar el código objeto con las bibliotecas no encuentra estas. Echale un vistazo a esto: http://www.jesusllor.es/?p=24
6
« en: Miércoles 15 de Diciembre de 2010, 11:40 »
¿Le indicaste al compilador que enlazara la biblioteca OpenCV ?
7
« en: Sábado 11 de Diciembre de 2010, 11:40 »
en scanf en vez de %c (leer un carácter) debes utilizar %s para leer una cadena de texto. scanf("%c",name );//se guarda en name el nombre del archivo de texto
La variable name tiene que tener memoria reservada.
9
« en: Jueves 9 de Diciembre de 2010, 11:34 »
primer error: por la condicion anterior a esta es evidente que nuca se cumplirá (si es monor o igual a "d" no puede se mayor). Lo correcto sería comprobar si es mayor de 1. Cuando es día 1 y estamos en enero el día anterior será el 31 de diciembre del año anterior. if (mes==1) { dia=31; mes=12; anio--; }
finalmente en otro caso restamos un mes y calculamos el último día de ese mes. else { mes--; switch (mes) { case 4: case 6: case 9: case 11: dia=30; break; case 2: if (bisiesto(anio)) dia=29; else dia=28; break; default: dia=31; } }
todo junto: if (dia<=d) { if (dia>1) dia--; else { //dia=1; if (mes==1) { dia=31; mes=12; anio--; } else { mes--; switch (mes) { case 4: case 6: case 9: case 11: dia=30; break; case 2: if (bisiesto(anio)) dia=29; else dia=28; break; default: dia=31; } } } printf("nEl dia anterior sera:%2d-%2d-%d.",dia ,mes ,anio ); return TRUE; } else return FALSE;
10
« en: Lunes 6 de Diciembre de 2010, 18:51 »
Como dije anteriormente tienes que cambiar todo el código. Pondré un trozo para empezar. if (dia < 1) // no es el día primero { dia--; } else // día primero { // tenemos que calcular el último día del mes anterior y restar un mes a la fecha // en el caso de que estemos en enero también hay que restar un año }
11
« en: Sábado 4 de Diciembre de 2010, 18:16 »
Estás presuponiendo que usa Windows Utilizando dev-c++, es más que probable.
12
« en: Viernes 3 de Diciembre de 2010, 20:03 »
Si buscas el día anterior deberías restar en vez de sumar. Y cambiar todas las condiciones, que están pensadas para calcular el día siguiente (¿código copiado?).
La ventana se cierra porque termina de ejecutarse el código. Utiliza el recurrido "system("pause") de la bibliteca "stdlib.h" al final para que no se cierre la ventana.
13
« en: Martes 16 de Noviembre de 2010, 18:03 »
El problema es que la variable s es un puntero que no tiene reservada una posición de memoria, sino que apunta a cualquier lugar (probablemente 0) provocando ese fallo de segmentación cuando intentas escribir en ella. Inicializa con el operador new la variable.
14
« en: Lunes 15 de Noviembre de 2010, 19:15 »
La función para calcular si es capicúa funciona, pero los cálculos cuantos más sencillos mejor: Como es de tres cifras para que sea capicua tiene que coincidir las unidades con las centenas, o sea: if (suma % 10 == suma/100) es capicua
(como "suma" es un entero, "suma/100" devuelve las centenas sin decimales, también se puede asegurar mediante casting o una función de redondeo). Por otro lado para leer el número de tres cifras lees tres números, que pasa si introduzco 1 22 1? Lo correcto es leer un número y luego se comprueba si es de tres cifras: while(suma!=0 ) //salir si cero { // comprobamos que el número sea de tres cifras. if (suma >99 && suma <1000) comprobar si es capicua; }
15
« en: Domingo 14 de Noviembre de 2010, 18:21 »
Con el último ejemplo que pones es verdad que el algoritmo no funciona. (No me había fijado en el número de elemento sino solamente en los ejemplos). Supongo que para n = 5 entonces * ** * *** * ** * **** * ** * *** * ** * ***** * ** * *** * ** * **** * ** * *** * ** *
Si te das cuenta hay unos patrones que se repiten: para ** antes y después * para *** antes y después * ** * y así sucesivamente. por lo que se deduce que tiene que ser una función recursiva para ir repitiendo los patrones para cada nivel: funcion recursiva(cont) { si (cont == 1) { escribir("*n"); } sino { recursiva(cont -1); para i=1 hasta cont avance +1 escribir("*"); escribir("n"); recursiva(cont -1); } } int main () { leer(n); recursiva(n); }
16
« en: Sábado 13 de Noviembre de 2010, 13:04 »
Una forma sencilla seria medainte unos bucles. Uno para aumentar el número de asteriscos y otro para disminuir. leer(cont); para i = 2 hasta cont avance +1 { escribir("*n"); para j = 1 hasta i avance +1 { escribir("*"); } escribir("n"); } para i = cont - 1 hasta 2 avance -1 { escribir("*n"); para j = 1 hasta i avance +1 { escribir("*"); } escribir("n"); } escribir("*n");
17
« en: Viernes 24 de Septiembre de 2010, 11:37 »
El problema está en las líneas 52 y 61. En vez de una compración estás realizando una asignación con lo que a continuación hay una división por cero. Lo correcto: por otro lado yo no utilizaria tanto goto, que no ayuda a seguir el flujo de la ejecución (con tanto salto se puede perder el hilo), y utilizar la estructura while, por ejemplo.
18
« en: Lunes 6 de Septiembre de 2010, 20:26 »
Si me compila muy bien gracias... solo que parece que esto va en contra de la ley de reutilizabilidad del código y así no es valido... como podria retornar sin afectar lo que es la programacion orientada a objetos? Si te refieres a que devolviendo el puntero, desde fuera de la clase se puede modificar el valor. Es verdad. Pero se puede solucionar facilmente copiando en otro puntero que será la salida. char * Persona::mostrar_nombre() { char *aux; aux = (char *)malloc(sizeof(char)* strlen(nombre )+1); //asignamos espacio: longitud del texto más caracter de fin de cadena strcpy(aux ,nombre ); // copiamos el contenido return aux; }
19
« en: Sábado 4 de Septiembre de 2010, 09:44 »
Si quieres que la función devuelva una cadena de caracteres simplemente indica que el tipo de retorno: char * Persona::mostrar_nombre() { return nombre; }
y modificar finalmente: cout<<Pedro.mostrar_nombre()<<endl;
20
« en: Jueves 2 de Septiembre de 2010, 21:00 »
La idea es ir restandole al número sucesivamente 1, 2, 3, .... Cada vez que se resta una cifra comprobamos el resultado: * si es cero: el número cumple la condición (es igual a la suma). * si es menor que cero: no cumple (no es la suma de los elementos). * si es mayor que cero: continuamos restando. Solo hay que modificar la función: int num_guay(int n, int cont) { int aux = n - cont; // realizamos la resta if (n == 0) return 1; else if (n < 0) return 0; else return num_guay(aux, ++cont); // continuamos restando lo que queda por la cifra siguiente. }
La primera llamada a la función será con los datos: donde n es el número y 1 la primera cifra a descontar.
21
« en: Miércoles 23 de Junio de 2010, 18:24 »
En el primer for estás cambiando el valor de i, aumentandolo hasta que tiene el valor de b. Por lo que en el segundo bucle se inicia con un valor de i que no es el proporcionó el usuario. La solución es una variable auxiliar: #include <stdio.h> #include <conio2.h> main(){ int i, b, x; denuevo: printf("Ingrese un valor inicial "); printf("Ingrese un valor final "); if(i < 1 || b < 0){ printf("Ingrese un numero positivo"); getche(); clrscr(); goto denuevo;} else{ for(x=(i+1); x<b; x++) for(b=(b-1); i<b; b--) getche(); } }
22
« en: Domingo 30 de Mayo de 2010, 01:06 »
En: y else if((s2>s3)&&(s2>s3))
estas haciendo dos veces la misma comparación. ¿No deberías comparar cada sueldo con los otros dos?
23
« en: Lunes 1 de Febrero de 2010, 20:28 »
24
« en: Jueves 28 de Enero de 2010, 18:32 »
document.body.clientHeight no es equivalente a window.innerHeight. Por ejemplo, para lo que estoy creando se obtienen los siguientes valores:
Firefox: document.body.clientHeight -> 2087 window.innerHeight -> 801
Explorer: document.body.clientHeight -> 2083 window.innerHeight -> undefined
No tienen el mismo valor. Por tanto no son iguales.
Encontre la equivalencia. Es la propiedad: document.documentElement.clientHeight
No todo lo que está en Internet tiene que ser cierto.
25
« en: Martes 26 de Enero de 2010, 20:15 »
En primer lugar la propiedad document.body.clientHeight ya la probe.No es la información que necesito, quiero saber el tamaño del área visible, no del documento. P.D.: anda que... Me gustaría que aclarase el porque del comentario.
|
|
|