|
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 - Rombus
76
« en: Jueves 18 de Septiembre de 2008, 03:45 »
si, la conio.h te habilita la funcion gotoxy();
igual tene en cuenta que conio.h es de borland, no es ANSII C, asique tu codigo va a ser poco portable.
saludos;)
77
« en: Miércoles 17 de Septiembre de 2008, 22:38 »
igual: fechaTerminado(id_corresp, dni, diaMesAño), analizando las dependencias funcionales me dice como que no esta en NF2.
osea, diaMesAño no depende de dni, solo depende de id_corresp.
tiene sentido pensar q el dia en que se termina una correspondencia no tiene nada que ver con el dni del que la termina?
o es que si el resultado de normalizar me da dos relaciones 1 a 1 ya es porque lo anterior esta en NF?
gracias por responder!
78
« en: Martes 16 de Septiembre de 2008, 14:35 »
Pues si lo que quieres es, a partir de la lista de jugadas, saber qué piezas quedan en el tablero, ve reconstruyendo los movimientos o mejor, hazte una lista con las piezas de cada jugador, recorre los movimientos y cuando veas una captura, eliminas la pieza capturada. parece bastante razonable no? que solo me quede una pieza por cada jugador Entonces esa pieza es forzosamente el rey (el rey no puede quitarse del tablero) y como ya te comenté en el anterior post (si lo has leído), es tablas automáticamente, no hay que contar nada.
Si adaptas tu codigo a lo que pareciera los mas razonable (si te sacan el rey el juego termina), entonces la ultima pieza que te puede quedar, es necesariamente el rey como dijo moskito.
79
« en: Martes 16 de Septiembre de 2008, 14:28 »
hola F_Tanori! gracias pro responder, te muestro la relacion que me planteo esta duda: - fechaTerminado( id_corresp, dni, diaMesAño) esa una relacion asosiativa en bruto, podriamos decir NF0. como fruto de la normalizacion, me quedan dos relaciones que son: - analistaTermino( id_corresp, dni) - cuandoTermino( id_corresp, diaMesAño) el atributo de JOIN seria id_corresp. las dos relaciones resultantes tienen una cardinalidad 1 a 1... entonces, no se si es correcto, capaz la relacion fechaTerminado si estaba en NF3. (que al analizarlo no lo veo asi) Lei en algun lado que cuando las relaciones son 1 a 1 hay que plantearse el asunto nuevamente, ya que hay algo que no esta bien espero que me puedas ayudar! gracias PD: mi objetivo es dejar todas las relaciones en NF3
80
« en: Martes 16 de Septiembre de 2008, 03:13 »
Hola gente! tengo un problema al intentar practicamente duplicar un archivo donde se cumpla una condicion, si la line del archivo es una directiva, y mas especificamente si es un include <...>. Intento hacer un programa que posea un preset para acomodar todos los codigos fuente que me pasen o que baje de internet a mi gusto, indentados, posicion de llaves, orden, etc... pero mi problema es que en la "duplicacion" cuando intento abrir el archivo duplicado me tira un error diciendome que en el archivo hay un byte NULL y que se abrio solo lectura. abro el archivo en un editor Hexadecimal y efectivamente hay un byte null. (totalmente involuntario) este es mi codigo: #include <stdio.h> #include <ctype.h> #include <stdlib.h> #define PATH "/home/rombus/Escritorio/sample.c" #define TERMINADO "/home/rombus/Escritorio/prueba.c" #define FALSE 0 #define TRUE !FALSE #define INCLUDE 1 #define DEFINE 2 #define UNKNOWN -1 #define STD 3 #define LOCAL 4 #define hastaEOL(a) while((fgetc(a)!= 'n') && (fgetc(a) != EOF)) #define unoParaAtraz(a) fseek(a,(long)-1,SEEK_CUR) #define dosParaAtraz(a) fseek(a,(long)-2,SEEK_CUR) #define unoParaAdelante(a) fseek(a,(long)1,SEEK_CUR) #define dosParaAdelnate(a) fseek(a,(long)2,SEEK_CUR) typedef char boolean; typedef char macroType; ///-Prototypes-/// char *getLine(FILE *a); macroType define_o_include(FILE *a); macroType std_o_local(FILE *a); boolean esMacro(FILE *a); void comeBlancos(FILE *a); boolean saltoMacros(FILE *a); void pasaIncludesStd(FILE *a, FILE *b, boolean *flagLocal){ long pos, inicio = ftell(a),len; char c; //Variable de control char *cadena = (char *)malloc(sizeof(char)*255); macroType control; while(esMacro(a)){ pos = (ftell(a)); control = define_o_include(a); if(control == INCLUDE){ c = std_o_local(a); if(c == STD){ hastaEOL(a); //Me paro al final de la linea len = ftell(a)-pos; //Me da la cantidad de bytes q se corrio del principio fseek(a,(long)pos,SEEK_SET); cadena = getLine(a); fwrite(cadena,sizeof(char),len,b); //Tener cuidado con esto, posible nido de bugs printf("escribio: %s - n",cadena); } else if(c == LOCAL) (*flagLocal) = TRUE; } else if(control == DEFINE) //Si es un define salto toda la linea hastaEOL(a); } fseek(a,inicio*-1,SEEK_CUR); //Voy a donde estaba cuando me lo pasaron } int main(void){ FILE *a = fopen(PATH,"rb"); FILE *b = fopen(TERMINADO,"wt"); boolean flagLocal = FALSE; pasaIncludesStd(a,b,&flagLocal); //pasar los includes <> fclose(a); fclose(b); return 0; } ///-FUNCIONES-/// char *getLine(FILE *a){ char *l = (char*)malloc(255*sizeof(char)); int i = 0; do{ l[i] = fgetc(a); }while((l[i] != 'n') && (l[i++] != EOF)); return l; } macroType define_o_include(FILE *a){ char c =fgetc(a); if(c == '#') //Por si cuando invocan la funcion no saben si es macro c = fgetc(a); if(c == 'i') return INCLUDE; if(c == 'd') return DEFINE; return UNKNOWN; } macroType std_o_local(FILE *a){ #define LEN_INCLUDE 8 //Largo de la palabra "#include " int i=0; char c = fgetc(a); if(c == '#') //Si llamo a la funcion sin antes haber leido el '#' unoParaAtraz(a); else //Si llamo a la funcion antes habiendo leido el '#' dosParaAtraz(a); while(i++<LEN_INCLUDE) //Salto el "#include " fgetc(a); c = fgetc(a); //Leo el "" o el <> printf("el caracter es: %cn",c); if(c == '"') return LOCAL; else if(c == '<') return STD; return UNKNOWN; } boolean esMacro(FILE *a){ char c; comeBlancos(a); c = fgetc(a); unoParaAtraz(a); if(c == '#') return TRUE; return FALSE; } void comeBlancos(FILE *a){ char b; while( (b = fgetc(a)) == ' ' || b == 'n' || b == 't'); printf("salio del comeBlancos con un %cn",b); unoParaAtraz(a); } boolean saltoMacros(FILE *a){ char c; boolean flag = FALSE; do{ if(flag) //Leo toda la linea una vez que leyo el primer caracter hastaEOL(a); else flag = TRUE; //Cuando es la primera vez habilito la bandera comeBlancos(a); c = fgetc(a); }while(c =='#'); unoParaAtraz(a); return FALSE; //Terminaron los macros }
si alguien me puede dar alguna pista, se lo agradesco. saludos! EI: Juntando mensajes.nadie sabe en que momento es que estoy escribiendo el byte NULL? me di cuenta que donde el archivo se corta a la mitad debido a este byte NULL es cuando en el archivo fuente, osea el archivo que estoy duplicando hay un "n", un enter.
81
« en: Martes 16 de Septiembre de 2008, 03:06 »
si por inferior te referis a secundaria, fijate en este post, ahi deje una idea de como hacerlo: viewtopic.php?f=18&t=36759
82
« en: Lunes 15 de Septiembre de 2008, 21:17 »
hola Hammerstrike fijate que lo que te dice moskito es que al hacer *a[MAXCOL]=(int *) malloc(nfilas * ncols * sizeof(int));
estas alocando la memoria en el ultimo elemento de a debido a esto: y lo que dice tu libro esta bien pero presta atencion que no es a[MAXCOL], sino a a secas *a=(int *) malloc(nfilas * ncols * sizeof(int));
esa forma igual es para declarar un vector de la cantidad de posiciones que tenga tu matriz, pero es un solo vector. yo preferiria alocar el primer vector que sea el ancho, y luego por cada posicion alocar el alto saludos
83
« en: Lunes 15 de Septiembre de 2008, 21:11 »
claro, yo puse M y N en mayuscula haciendo referencia a alguna constante simbolica declarada por ahi la forma un poco mas eficiente que te decia es: for(i=0; i<N; i++) aux += mat[i][i];
habiendo antes declarado N, aux inicializada en 0, suponiendo una matriz cuadrada
84
« en: Lunes 15 de Septiembre de 2008, 02:41 »
hey! no hay problema para eso estamos XD claro, la onda seria que hagas un for (i = 0; i<N;i++) for(j=0;j <M; j++){ if(i==j) aux += mat[i][j]; }
existen formas mas eficientes para hacerlo pero te respondo rapido antes de irme a comer JOJO, pero eso deberia andar saludos!
85
« en: Domingo 14 de Septiembre de 2008, 20:23 »
Hola!
tengo una duda sobre la normalizacion de relaciones. cuando como fruto de una normalizacion me quedan dos relaciones 1 a 1, es correcto?
o en esos casos es pq ya estaba normalizado y no hacia falta la normalizacion?
gracias!
86
« en: Domingo 14 de Septiembre de 2008, 20:15 »
sumar en diagonal te referis a sumar la diagonal principal o secundaria?
la diagonal principal es facil, sumas los valores cuando i = j;
y la diag secundaria es i = MAX - (j - 1) y j empieza en MAX--
saludos;)
87
« en: Miércoles 10 de Septiembre de 2008, 17:45 »
bien, perdon por no haberlo mirado mas a fondo, pero el error de parametro que te tira es pq vos le estas pasando mat como parametro, pero el prototipo funcional de buskar(); es void como parametro, osea si le queres pasar mat el prototipo deberia ser int buscar(mat_t mat[][M]); digo que es de tipo int porque calculo que seria de gran utilidad que devuelva verdadero si lo encontro y falso si no. y el error de sintaxis es porque como dije las dos veces anteriores, en C no se puede anidar subprogramas. el cuerpo de la funcion buskar(); deberia estar, o bien antes del main, o bien, despues, no dentro de la funcion main. una onda asi: void buskar(int mat[3][3]){ for (c=0;c<3;c++) for(c1=0;c1<3;c1++){ printf("Introduce el numero a buscar: "); scanf("%d",&mat[c][c1]); } for(s=0,q=0;s<3;s++) for( s1=0;s1<3;s1++) if (mat[s][s1]==mat[f][c]) { q++; } printf("El numero se repite %d veces",q); getchar(); } void main (void) { ... ... }
o bien: void buskar(int mat[3][3]); void main (void) { ... ... } void buskar(int mat[3][3]){ for (c=0;c<3;c++) for(c1=0;c1<3;c1++){ printf("Introduce el numero a buscar: "); scanf("%d",&mat[c][c1]); } for(s=0,q=0;s<3;s++) for( s1=0;s1<3;s1++) if (mat[s][s1]==mat[f][c]) { q++; } printf("El numero se repite %d veces",q); getchar(); }
no me fije todo lo que es algoritmia, solo esos problemas que te tiraba, si te sigue dando problemas avisame
88
« en: Miércoles 10 de Septiembre de 2008, 17:06 »
Fijate que en la linea 13 escribiste: pusiste coma en vez de puto y coma. cuando compilas que te dice los errores le das doble click al error y te marca en que linea esta. enotnces es mas facil detectarlos bien, lo acomode un poco con indentados mas """"correctos"""" (muchas comillas pq esto es muy relativo) asi se puede ver bien que llave deberia cerrar que cosa: #include<conio.h> #include<stdio.h> int n,f,c,m,y,mat[3][3]; void buskar(); void main () { clrscr(); printf("Introduce el valor de m: "); scanf("%i",&m); printf("Introduce el valor de n: "); scanf("%i",&n); clrscr(); for (f=0;f<m;f++){ for (c=0;c<n;c++){ printf(" Introdusca los valores para la matriz A en la posicion %d y %d : ",f,c); scanf("%d",&mat[f][c]); y++; buskar(mat); } } void buskar(){ for (int c=0;c<3;c++) for(int c1=0;c1<3;c1++){ printf("Introduce el numero a buscar: "); scanf("%d",&mat[c][c1]); } for(int s=0,q=0;s<3;s++) for(int s1=0;s1<3;s1++) if (mat[s][s1]==mat[f][c]) { q++; } printf("El numero se repite %d veces",q); getch(); } }
aqui sigues haciendo lo de anidar subprogramas, esto no se puede hacer en C, osea, la definicion de void buskar(){ .... } no puede estar dentro del main. si la podes llamar dentro del main, pero no puede estar el cuerpo de esa funcion ahi dentro
89
« en: Miércoles 10 de Septiembre de 2008, 13:43 »
uff... te recomiendo usar algun editor que coloree la sintaxis donde te marque que llave termina con cual. fijate q tu codigo dice: void main () int n,f,c,m,y,mat[3][3]; void buskar();{
al void main() tendrias que agregarle las llaves, pq sino no te va a andar, dspues dice osea, prototipo funcional, pero despues llaves, eso esta mal, y despues como que volves a declarar la void buskar En C no se pueden anidar subprogramas como si se puede en Pascal, osea, no podes declrarar dentro del main() un void buscar(){ ... } lo que puedo interpretar es quiza, que deberias poner las el void buskar(); antes que el main (como el prototipo funcional), o solamente la declaracion de tal funcion (como tenes una sola funcion no hace falta declarar el prototipo, excepto que quieras escribirla debajo del main). y despues agregarle a tu void main() unas llaves.. espero que te sirva saludos!
90
« en: Domingo 7 de Septiembre de 2008, 19:56 »
pff te respondi cualquier cosa
jaja, eso me pasa por leer mientras miro la Tv
91
« en: Domingo 7 de Septiembre de 2008, 19:54 »
de nada sin ese itoa(); no andaba? pq creo que no es nesesario, ya que en la inicializacion del buffer pones: ; y no por lo que el valor entero del buffer es el codigo ascii del 9 y no el numero 9. saludos !
92
« en: Domingo 7 de Septiembre de 2008, 03:41 »
ah! te recomiendo programar en ANSII, asi somos todos felices jaja la funcion getch(); en la forma que la usas se puede reemplazar por getchar(); de stdio.h y el clrscr(); no es muy necesario que digamos saludos!!
93
« en: Domingo 7 de Septiembre de 2008, 03:38 »
el problema es que vos haces esto: vectorf[f]=vectorf[f]+m[f][c];
y vector[f] no esta inicializado, osea, tiene basura adentro agrega este codigo al principio despues de las declaraciones de variables for(f=0; f<3; f++){ vectorf[f] = 0; vectorc[f] = 0; }
entonces una vez inicializado todo el vector con 0 en sus posiciones tu codigo anda
94
« en: Viernes 5 de Septiembre de 2008, 15:46 »
hola! lo que podrias hacer es tener unas variables asi: char nombre[LENGTH] ={"tablaEnrutamiento"}; int i =0;
donde le incrementas en uno a i cuando entras a una posible funcion creaFichero, o devuelveNombreFIchero, que podria hacer simplemente unos strcat(nombre,i); strcat(nombre,".txt");
asegurate que LENGTH sea un numero lo suficientemente grande como para almacenar el nombre mas el numero mas la extension. no se si me exprese bien, a ver capaz asi: char *devuelveNombre(int *i,char *nombre){ (*i)++; strcat(nombre,i); strcat(nombre,".txt"); return nombre; }
empieza con un i++ suponiendo que i esta inicializada en 0 y suponiendo tambien que queres que el nombre empieze con 1. lo que obtendrias con esto es una cadena que contiene: "tablaEnrutamiento1.txt" la primera vez, "tablaEnrutamiento2.txt" la segunda vez, y asi susecivamente. epero haberte podido ayudar
95
« en: Jueves 4 de Septiembre de 2008, 20:01 »
Claro,
lee tu char en la variable obviamente char y mostralo como int como el codigo que escribieron mas arriba. Un char es un numero, como tambien dijeron arriba, asique solo tenes que cambiar la forma de mosrtrarlo por pantalla, en ves de char, int.
96
« en: Miércoles 3 de Septiembre de 2008, 17:08 »
ah, ayer justo hice una funcion de sacar palabra. Che, fijate cuando escribas un mensaje, arriba del campo de texto, hay unos botones que son como de texto embebido, uno dice "Code", pegas todo tu codigo ahi adentro y es mas agradable para leerlo jaja saludos
97
« en: Martes 2 de Septiembre de 2008, 19:17 »
no conocia la funcion getline(), pero para este caso parece ser perfecta aunque siempre puedes quemarte un poco la cabeza y lograr lo mismo. otra manera de la cual podrias hacerlo (sabiendo el orden de los datos de antemano) con un while que almacene caracteres leidos mientras no sea un ':' y despues asignas al dato que corresponda la cadena resultante , duplicarias ese bucle la cantidad de veces igual a la cantidad de datos que tengas, capaz podrias meterlo dentro de una funcion para hacerlo mas prolijo. saludos
98
« en: Domingo 24 de Agosto de 2008, 22:34 »
Excelente!
anda perfectamente, y en sima mas corto que con el metodo que planteaba yo.
muchas gracias a ambos!
sobretodo por responder tan rapido
saludos!
99
« en: Domingo 24 de Agosto de 2008, 17:40 »
que buen dato! gracias! no sabia que existia el ls, yo probe con dir y como andubo pense que tenia las mismas instrucciones. En cuanto a lo de | en ves de > me tira el siguiente error rombus@Rombus:~/Escritorio$ ls | aa.txt bash: aa.txt: orden no encontrada estoy utilisando mal en | ? gracias por responder tan rapido
100
« en: Domingo 24 de Agosto de 2008, 17:08 »
hola gente! estoy haciendo un programa que compare dos directorios y diga si son iguales o no, y si no lo son que muestre la ruta del/los archivo/s que difieren, para hacerlo pense en usar la funcion system que recibe una cadena como parametro y la ejecuta como si estubieras en la terminal, pero al hacerlo (trabajo bajo ubuntu 8.04) me tira errores, o simplemente me duestra el directorio raiz y no el directorio que le digo. Viendo esto, pense en emular simplemente una terminal (para eliminar cualquier problema ajeno a esa funcion) y sigo teniendo el mismo problema. #include <stdlib.h> int main (void){ system("cd /home"); system("dir > /home/rombus/Escritorio/aaa.txt"); return 0; }
En el codigo anterior lo que pretendo es hacer un cd al directorio /home y luego hacer un dir redireccionando la entrada/salida estandar a un fichero que esta en mi escritorio. Lo que obtengo es el fichero con los directorios del escritorio (donde esta el programa) no los directorios del /home. Alguien sabe a que se puede deber este problema? gracias!
|
|
|