• Domingo 22 de Diciembre de 2024, 17:35

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

Páginas: 1 2 3 [4] 5
76
C/C++ / Re: Funciones para dar color a letra y fondo.
« 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
Otras Bases de Datos / Re: Normalizacion
« 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
C/C++ / Re: comprobar que me queda una pieza en un tablero de ajedrez
« en: Martes 16 de Septiembre de 2008, 14:35 »
Cita de: "rfog"
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?

Cita de: "m0skit0"
Cita de: "pacorubio77"
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
Otras Bases de Datos / Re: Normalizacion
« 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
C/C++ / Problema de Byte NULL con archivos
« 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:

Código: Text
  1. #include <stdio.h>
  2. #include <ctype.h>
  3. #include <stdlib.h>
  4.  
  5. #define PATH "/home/rombus/Escritorio/sample.c"
  6. #define TERMINADO "/home/rombus/Escritorio/prueba.c"
  7.  
  8. #define FALSE 0
  9. #define TRUE !FALSE
  10.  
  11. #define INCLUDE 1
  12. #define DEFINE  2
  13. #define UNKNOWN -1
  14.  
  15. #define STD     3
  16. #define LOCAL   4
  17.  
  18. #define hastaEOL(a)             while((fgetc(a)!= 'n') && (fgetc(a)  != EOF))
  19. #define unoParaAtraz(a)         fseek(a,(long)-1,SEEK_CUR)
  20. #define dosParaAtraz(a)         fseek(a,(long)-2,SEEK_CUR)
  21. #define unoParaAdelante(a)      fseek(a,(long)1,SEEK_CUR)
  22. #define dosParaAdelnate(a)      fseek(a,(long)2,SEEK_CUR)
  23.  
  24. typedef char boolean;
  25. typedef char macroType;
  26.  
  27. ///-Prototypes-///
  28. char *getLine(FILE *a);
  29. macroType define_o_include(FILE *a);
  30. macroType std_o_local(FILE *a);
  31. boolean esMacro(FILE *a);
  32. void comeBlancos(FILE *a);
  33. boolean saltoMacros(FILE *a);
  34.  
  35. void pasaIncludesStd(FILE *a, FILE *b, boolean *flagLocal){
  36.     long pos, inicio = ftell(a),len;
  37.     char c; //Variable de control
  38.     char *cadena = (char *)malloc(sizeof(char)*255);
  39.     macroType control;
  40.    
  41.     while(esMacro(a)){
  42.         pos = (ftell(a));      
  43.         control = define_o_include(a);
  44.         if(control == INCLUDE){
  45.             c = std_o_local(a);
  46.             if(c == STD){
  47.                 hastaEOL(a);        //Me paro al final de la linea
  48.                 len = ftell(a)-pos; //Me da la cantidad de bytes q se corrio del principio
  49.                 fseek(a,(long)pos,SEEK_SET);
  50.                 cadena = getLine(a);
  51.                 fwrite(cadena,sizeof(char),len,b);  //Tener cuidado con esto, posible nido de bugs
  52.                 printf("escribio: %s - n",cadena);
  53.             }
  54.             else if(c == LOCAL)
  55.                 (*flagLocal) = TRUE;
  56.         }
  57.         else if(control == DEFINE)  //Si es un define salto toda la linea
  58.             hastaEOL(a);       
  59.     }
  60.     fseek(a,inicio*-1,SEEK_CUR);    //Voy a donde estaba cuando me lo pasaron
  61. }
  62.  
  63. int main(void){
  64.     FILE *a = fopen(PATH,"rb");
  65.     FILE *b = fopen(TERMINADO,"wt");
  66.     boolean flagLocal = FALSE;
  67.    
  68.     pasaIncludesStd(a,b,&flagLocal);    //pasar los includes <> 
  69.    
  70.     fclose(a);
  71.     fclose(b);
  72.     return 0;
  73. }
  74.  
  75. ///-FUNCIONES-///
  76. char *getLine(FILE *a){
  77.     char *l = (char*)malloc(255*sizeof(char));
  78.     int i = 0;
  79.    
  80.     do{
  81.         l[i] = fgetc(a);
  82.     }while((l[i] != 'n') && (l[i++] != EOF));
  83.     return l;
  84. }
  85. macroType define_o_include(FILE *a){
  86.     char c =fgetc(a);
  87.    
  88.     if(c == '#')        //Por si cuando invocan la funcion no saben si es macro
  89.         c = fgetc(a);
  90.        
  91.     if(c == 'i')
  92.         return INCLUDE;
  93.     if(c == 'd')
  94.         return DEFINE;
  95.     return UNKNOWN;
  96. }
  97. macroType std_o_local(FILE *a){
  98. #define LEN_INCLUDE 8   //Largo de la palabra "#include "
  99.     int i=0;
  100.     char c = fgetc(a);
  101.        
  102.     if(c == '#')            //Si llamo a la funcion sin antes haber leido el '#'
  103.         unoParaAtraz(a);
  104.     else                    //Si llamo a la funcion antes habiendo leido el '#'
  105.         dosParaAtraz(a);
  106.        
  107.     while(i++<LEN_INCLUDE)  //Salto el "#include "
  108.         fgetc(a);
  109.        
  110.     c = fgetc(a);   //Leo el "" o el <>
  111.     printf("el caracter es: %cn",c);
  112.    
  113.     if(c == '"')
  114.         return LOCAL;
  115.     else if(c == '<')
  116.         return STD;
  117.     return UNKNOWN;
  118. }
  119. boolean esMacro(FILE *a){
  120.     char c; 
  121.    
  122.     comeBlancos(a);
  123.     c = fgetc(a);
  124.     unoParaAtraz(a);
  125.     if(c == '#')
  126.         return TRUE;   
  127.     return FALSE;
  128. }
  129. void comeBlancos(FILE *a){
  130.     char b;
  131.    
  132.     while( (b = fgetc(a)) == ' ' || b == 'n' || b == 't');
  133.     printf("salio del comeBlancos con un %cn",b);
  134.     unoParaAtraz(a);
  135. }
  136. boolean saltoMacros(FILE *a){
  137.     char c;
  138.     boolean flag = FALSE;
  139.    
  140.     do{
  141.         if(flag)            //Leo toda la linea una vez que leyo el primer caracter
  142.             hastaEOL(a);
  143.         else
  144.             flag = TRUE;    //Cuando es la primera vez habilito la bandera
  145.            
  146.         comeBlancos(a);
  147.         c = fgetc(a);
  148.     }while(c =='#');
  149.     unoParaAtraz(a);
  150.     return FALSE;   //Terminaron los macros
  151. }
  152.  


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
C/C++ / Re: help
« 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
C/C++ / Re: Violacion de segmento al sumar 2 listas.
« en: Lunes 15 de Septiembre de 2008, 21:17 »
hola Hammerstrike

fijate que lo que te dice moskito es que al hacer
Código: Text
  1.  
  2. *a[MAXCOL]=(int *) malloc(nfilas * ncols * sizeof(int));
  3.  

estas alocando la memoria en el ultimo elemento de a

debido a esto:

Código: Text
  1. *a[MAXCOL] = . . .
  2.  

y lo que dice tu libro esta bien

pero presta atencion que no es a[MAXCOL], sino a a secas

Código: Text
  1. *a=(int *) malloc(nfilas * ncols * sizeof(int));
  2.  


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
C/C++ / Re: SUMA DIAGONAL
« 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:

Código: Text
  1. for(i=0; i<N; i++)
  2.     aux += mat[i][i];
  3.  

habiendo antes declarado N,  aux inicializada en 0, suponiendo una matriz cuadrada


;)

84
C/C++ / Re: SUMA DIAGONAL
« en: Lunes 15 de Septiembre de 2008, 02:41 »
hey! no hay problema para eso estamos XD

claro, la onda seria que hagas un
Código: Text
  1.  
  2. for (i = 0; i<N;i++)
  3.     for(j=0;j <M; j++){
  4.         if(i==j)
  5.             aux +=  mat[i][j];
  6.     }
  7.  
  8.  


existen formas mas eficientes para hacerlo pero te respondo rapido antes de irme a comer JOJO, pero eso deberia andar



saludos!

85
Otras Bases de Datos / Normalizacion
« 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
C/C++ / Re: SUMA DIAGONAL
« 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
C/C++ / Re: problemilla con matriz
« 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:
Código: Text
  1. void buskar(int mat[3][3]){
  2.     for (c=0;c<3;c++)
  3.         for(c1=0;c1<3;c1++){
  4.             printf("Introduce el numero a buscar: ");
  5.             scanf("%d",&mat[c][c1]);
  6.         }
  7.     for(s=0,q=0;s<3;s++)
  8.         for( s1=0;s1<3;s1++)
  9.             if (mat[s][s1]==mat[f][c]) {
  10.                 q++;
  11.             }
  12.     printf("El numero se repite %d veces",q);
  13.     getchar();
  14. }
  15.  
  16. void main (void) {
  17.     ...
  18.     ...
  19. }
  20.  

o bien:

Código: Text
  1. void buskar(int mat[3][3]);
  2.  
  3. void main (void) {
  4.     ...
  5.     ...
  6. }
  7.  
  8. void buskar(int mat[3][3]){
  9.     for (c=0;c<3;c++)
  10.         for(c1=0;c1<3;c1++){
  11.             printf("Introduce el numero a buscar: ");
  12.             scanf("%d",&mat[c][c1]);
  13.         }
  14.     for(s=0,q=0;s<3;s++)
  15.         for( s1=0;s1<3;s1++)
  16.             if (mat[s][s1]==mat[f][c]) {
  17.                 q++;
  18.             }
  19.     printf("El numero se repite %d veces",q);
  20.     getchar();
  21. }
  22.  
  23.  


no me fije todo lo que es algoritmia, solo esos problemas que te tiraba, si te sigue dando problemas avisame ;)

88
C/C++ / Re: problemilla con matriz
« en: Miércoles 10 de Septiembre de 2008, 17:06 »
Fijate que en la linea 13 escribiste:

Código: Text
  1. scanf("%i",&n),
  2.  

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:

Código: Text
  1. #include<conio.h>
  2. #include<stdio.h>
  3. int n,f,c,m,y,mat[3][3];
  4. void buskar();
  5. void main () {
  6.     clrscr();
  7.     printf("Introduce el valor de m: ");
  8.     scanf("%i",&m);
  9.     printf("Introduce el valor de n: ");
  10.     scanf("%i",&n);
  11.     clrscr();
  12.     for (f=0;f<m;f++){
  13.         for (c=0;c<n;c++){
  14.             printf(" Introdusca los valores para la matriz A en la posicion %d y %d : ",f,c);
  15.             scanf("%d",&mat[f][c]);
  16.             y++;
  17.             buskar(mat);
  18.         }
  19.     }
  20.     void buskar(){
  21.         for (int c=0;c<3;c++)
  22.             for(int c1=0;c1<3;c1++){
  23.                 printf("Introduce el numero a buscar: ");
  24.                 scanf("%d",&mat[c][c1]);
  25.             }
  26.         for(int s=0,q=0;s<3;s++)
  27.             for(int s1=0;s1<3;s1++)
  28.                 if (mat[s][s1]==mat[f][c]) {
  29.                     q++;
  30.                 }
  31.     printf("El numero se repite %d veces",q);
  32.     getch();
  33.     }
  34. }
  35.  


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
C/C++ / Re: problemilla con matriz
« 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:

Código: Text
  1. void main ()
  2. int n,f,c,m,y,mat[3][3];
  3.  
  4. void buskar();{
  5.  

al void main() tendrias que agregarle las llaves, pq sino no te va a andar, dspues dice
Código: Text
  1. void buskar();{
  2.  
osea, prototipo funcional, pero despues llaves, eso esta mal,  y despues como  que volves a declarar la void buskar :o

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
C/C++ / Re: Crear varios ficheros de texto
« 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
C/C++ / Re: Crear varios ficheros de texto
« 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:  
Código: Text
  1. char buffer = '9'
  2.  
;  y no
Código: Text
  1. char buffer = 9;
  2.  
por lo que el valor entero del buffer es el codigo ascii del 9 y no el numero 9.

saludos ;)!

92
C/C++ / Re: matrices c++
« 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
C/C++ / Re: matrices c++
« en: Domingo 7 de Septiembre de 2008, 03:38 »
el problema es que vos haces esto:

Código: Text
  1. vectorf[f]=vectorf[f]+m[f][c];
  2.  

y vector[f] no esta inicializado, osea, tiene basura adentro

agrega este codigo al principio despues de las declaraciones de variables

Código: Text
  1. for(f=0; f<3; f++){
  2.     vectorf[f] = 0;
  3.     vectorc[f] = 0;
  4. }
  5.  

entonces una vez inicializado todo el vector con 0 en sus posiciones tu codigo anda ;)

94
C/C++ / Re: Crear varios ficheros de texto
« en: Viernes 5 de Septiembre de 2008, 15:46 »
hola!

lo que podrias hacer es tener unas variables asi:

Código: Text
  1.  
  2.     char nombre[LENGTH] ={"tablaEnrutamiento"};
  3.     int i =0;
  4.  
  5.  

donde le incrementas en uno a i cuando entras a una posible funcion creaFichero, o devuelveNombreFIchero, que podria hacer simplemente unos
Código: Text
  1.     
  2.     strcat(nombre,i);
  3.     strcat(nombre,".txt");
  4.  

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:

Código: Text
  1.  
  2. char *devuelveNombre(int *i,char *nombre){
  3.    (*i)++;
  4.     strcat(nombre,i);
  5.     strcat(nombre,".txt");
  6.  
  7.     return nombre;    
  8. }
  9.  

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
C/C++ / Re: Conversion de caracter a int
« 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
C/C++ / Re: como leer una linea en un fichero de texto
« 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
C/C++ / Re: como leer una linea en un fichero de texto
« 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
C/C++ / Re: funcion system en linux
« 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
C/C++ / Re: funcion system en linux
« 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
C/C++ / funcion system en linux
« 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.

Código: Text
  1. #include <stdlib.h>
  2.  
  3. int main (void){
  4.     system("cd /home");
  5.     system("dir > /home/rombus/Escritorio/aaa.txt");
  6.  
  7.     return 0;
  8. }
  9.  

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!

Páginas: 1 2 3 [4] 5