|
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 - Epa
1
« en: Jueves 22 de Diciembre de 2011, 01:53 »
Buenas con el comando lsof podes listar los procesos que tienen abierto un archivo. Estube buscando y no encontre una funcion que hago lo mismo, pero con un system lo podes usar. lsof nombre_proceso
Saludos
2
« en: Jueves 23 de Junio de 2011, 22:22 »
Aunque eso te soluciona el problema, sigue habiendo un error. En tu caso no afecta por la forma en que defines la matriz. pero esto ret = fwrite(&matriz , object_size , object_count , flujo ); //OK "ret" devuelve 25 ret = fread(&matriz , object_size , object_count , flujo ); //FALLO "ret" devuelve 12
deberia ser ret = fwrite(matriz , object_size , object_count , flujo ); //OK "ret" devuelve 25 ret = fread(matriz , object_size , object_count , flujo ); //FALLO "ret" devuelve 12
ya que si tu matriz es dinamica estarias escribiendo y lellendo de cualquier lado. Saludos
4
« en: Martes 7 de Junio de 2011, 17:30 »
Buenas Los bucles estan mal, las dos primeras dimensiones tienen Matriz[ymax+2][xmax+2], pero la estas recorriendo Matriz[0 a xmax][0 a ymax] for(i=0; i<=xmax+1; i++){ //Inicialmente lleno TODO x for(j=0; j<=ymax+1; j++){ for(p=0; p<=2*Nmax+1; p++){ for(q=0; q<=2*Mmax+1; q++){
eso trandria que ser for(i=0; i<=ymax+1; i++){ //Inicialmente lleno TODO x for(j=0; j<=xmax+1; j++){ for(p=0; p<=2*Nmax+1; p++){ for(q=0; q<=2*Mmax+1; q++){
Saludos
5
« en: Viernes 13 de Mayo de 2011, 16:36 »
Cre que se va a clarando la cosa, pero todavia hay algo en lo que estas confundido  Nosotros cotidianamente usamos el sistema decimal,y para los numeros negativos usamos el signo - adelante del numero. Los numeros binarios no son mas que numeros en base 2. Si escribis un numero en papel, o se te ocurre empezas a usar el sistema binario, un numero negativo se representa de la misma manera que ne el decimal, con un - adelante. Por ejemplo 22 = 10110(2) y -22 = -10110(2) El tema del complemento es unicamente para los controladores o procesadores. Como solo funcionan con 0's y 1's se busco la forma de representar el signo - Por otro lado, si una pc usa un complemento u otro no es algo que realmente deberia preocuparte como programador. (aunque es bueno saber como funcionan las cosas). Saludos
6
« en: Jueves 12 de Mayo de 2011, 14:02 »
Buenas
El complemento a 1 de un numero se logra invirtiendo todos los bits del numero, o sea (en caso de 8 bits) seria como hacer un N XOR 11111111. Mientras que el complemento a 2 es el complemento a 1 más 1, o sea (N XOR 11111111) + 00000001
El complemento a 2 se empezo a usar ya que ne el complemento a 1 existe una doble represenacion del 0, ( +0 = 00000000 y -0 = 11111111) Por eso es que en complemento a 2 el rango va de -128 a 127, en vez de -127 a 127. Ya que C2 no existe esa doble representacion del 0.
Uno no puede elegir si trabajar con un complemento u otro, es como trabaja internamente el procesador
Espero haber podido dejarte todo un poco mas claro.
Saludos
7
« en: Sábado 23 de Abril de 2011, 03:29 »
Buenas La verdad que no tengo idea de sonido, pero tenes esta opcion que podes probar: la API de windows. tenes las funciones waveOut para manejar dispositivos de audio. te dejo dos link para que veas si te sirve. a falta de windows no lo pude probar  funciones de multimeda de la winapi, fijate al final estan las waveout: http://msdn.microsoft.com/en-us/library/dd743586%28v=vs.85%29.aspxejemplo de como usar las wave out: http://www.tmsoft.com/tutorial-sound.htmlEsta parte la tendrias que sacar para no tener que esperar a que termine un sonido: // ** Wait until sound finishes playing if (WaitForSingleObject(Done,INFINITE) != WAIT_OBJECT_0) { Message("Error waiting for sound to finish"); return TRUE; }
Si lo probas deja comentarios de que tal andubo. Saludos
8
« en: Viernes 22 de Abril de 2011, 01:12 »
en que plataforma estas programando?
9
« en: Viernes 22 de Abril de 2011, 01:11 »
Yo me imagino que podrias hacer algo como: Creas dos matrices del mismo tamaño, una la rellenas con numeros aleatorios entre el 0 y el 1, y luego recorres la matriz y te fijas si es mayor de 0.5, tonces pones 1 en la otr amatriz, sino pones 0. Creo que es bastante claro. Ahora
10
« en: Martes 29 de Marzo de 2011, 18:30 »
Buenas
Fijate que las en las cadenas se representan con \
Proba lo siguiente con el programa en C:
ShellExecute(NULL,"open", "miPrograma.exe",NULL,"C:\", SW_SHOW);
Si funciona vas a tener que pasarle la ruta completa. Lo que podes conseguir facilmente de argv[0] del main.
Saludos
11
« en: Martes 29 de Marzo de 2011, 18:19 »
La verdad me mataste jaja No se tanto de C++ como de C. Per curisamente si cambias el contructor copia por matrix::matrix(const matrix& A) Compila correctamente. Quizas alguien que sepa mas de obejtos pueda dar una explicacion de esto Saludos
12
« en: Martes 29 de Marzo de 2011, 17:49 »
Buenas. El error no esta en el contructor copia (que de hecho ni lo usas) sino en el operador + Este deberia ser: matrix& matrix::operator+ (const matrix& A){ y la instancia de clase C matrix* C= new matrix(A.size); Ya que sino estaria devolviendo un objeto local a ese metodo. Para usar el contructor copia tendiras que hacer matrix C(A +  ; en lugar de matrix C = A + B; Saludos
13
« en: Miércoles 23 de Marzo de 2011, 23:13 »
jaja, que bueno que hayas entendido con esa "pseudo" explicacion jaja Estudio Ingenieria en Sistemas de Informacion. O por lo menos eso intento  jajaja Saludos
14
« en: Miércoles 23 de Marzo de 2011, 22:19 »
En la linea 75 se te escapo un = del <= en el for. Creo que no me explique muy bien en la otra respuesta  Si tenes una matriz, por ejemplo mat[N][M] los elementos de esa matriz van desde mat[0][0] a mat[N-1][M-1] O sea, N y M representa la cantidad de elementos e cada dimension. Pero despues para acceder a cada elemento, se empieza desde 0. Si tenes por ejemplo: int A[5]; los elementos de ese vector son, A[0], A[1], A[2], A[3] y A[4] Te dejo tu codigo con esas cositas corregidas. Fijate que le saque la matriz B, y directamente le agrego la identidad a A. #include <iostream> using namespace std; int main () /*Este programa pide al usuario una matriz de orden n la diagonaliza por el metodo de Gauss-Jordan sin pivote*/ { //Genero las variables, la matriz, la pido al usuario y la muestro por pantalla int n, w, q; long double t; cout<<"Introduzca el orden de la matriz:"<<endl; cin>>n; q=n; double A[n][2*n]; for(int i=0;i<n;i++){ for(int k=0;k<n;k++){ cout<<"Introduzca el elemento de la fila "<<i<<" y la columna "<<k<<endl; cin>>A[i][k]; } } cout<<endl<<endl; for(int i=0;i<n;i++){ for(int k=0;k<n;k++){ cout<<A[i][k]<<" "; if(k==n){cout<<endl;} } } //Acoplo la matriz identidad para trabajar con ella for(int j = 0; j < n; j++){ for(int i = n; i < 2*n; i++) { if(j == (i-n)) A[j][i] = 1; else A[j][i] = 0; } } //Muestro la matriz con la que voy a trabajar cout<<endl<<endl<<"La matriz introducida con la identidad acoplada es:"<<endl<<endl; for(int i=0;i< n;i++){ for(int k=0;k<2*n;k++){ cout<<A[i][k]<<" "; } cout<<endl; } cout<<endl<<endl; //Triangulo la matriz for(int i=0;i<n;i++){ for(int k=i+1;k<n;k++){ t=A[k][i]/A[i][i]; for(int j=0;j<2*n;j++){ A[k][j]=A[k][j]-t*A[i][j]; } } } cout<<endl<<endl; //Muestro la matriz triangulada cout<<"La matriz triangulada es:"<<endl<<endl; for(int i=0;i<n;i++){ for(int k=0;k<2*n;k++){ cout<<A[i][k]<<" "; } cout<<endl; } cout<<endl<<endl; //Aplico Gauss-Jordan for(int i=0;i < n;i++){ q--; w=q; for(int k = i+1; k < n; k++){ w--; t=A[w][q]/A[q][q]; for(int j=0;j<2*n;j++){ A[w][j]=A[w][j]-t*A[q][j]; } } } for(int i=0;i<n;i++){ for(int j=n;j<2*n;j++){ A[i][j]=A[i][j]/A[i][i]; } A[i][i] = 1; } //Muestro la matriz diagonalizada y la inversa: cout<<"La matriz diagonalizada y la inversa de A es:"<<endl<<endl; for(int i=0;i<n;i++){ for(int k=0;k<2*n;k++){ cout<<A[i][k]<<" "; } cout<<endl; } return 0; }
Saludos
15
« en: Miércoles 23 de Marzo de 2011, 22:03 »
Ahi revise el algoritmo. Ademas de los de los bucles, tendrias que modificar el q=n +1; del principio, cambiarlo por q=n; Fijate que los valores iniciales de las variables en los bucles anidados, quedan como estaban. Por ejemplo: for(int i=0;i<n;i++){ for(int k=i+1;k<n;k++){ k=i+1 queda asi, y no k=i Aunque encontre un pequeño error en el algoritmo, no se si ya te habras dado cuenta. En la parte for(int i=0;i<n;i++){ for(int j=0;j<2*n;j++){ A[i][j]=A[i][j]/A[i][i]; } }
Despues da Gauss-Jordan Fijate que estas dividiendo primero la matriz original, por lo que vas poniendo 1's en la diagonal, y despues dividis las filas de la otra matriz por 1, o sea que queda igual. Podrias ahcer algo como: for(int i=0;i<n;i++){ for(int j=n;j<2*n;j++){ A[i][j]=A[i][j]/A[i][i]; } A[i][i] = 1; }
Me alegra haber sido de ayuda Saludos
16
« en: Miércoles 23 de Marzo de 2011, 20:53 »
Buenas. Para empezar al condicion del while esta mal, ya que la idea es que siga mientras que no se elija la opcion de salir, la que es 2. Ademas tendrias que inicializar la variable cont. Ademas no tendrias que usar 1 y 2, sino '1' y '2' Y el switch lo podrias reemplazar por un if int cont = 1; ... while (cont != '2'){ ... if(cont == '1'){ ...
Saludos
17
« en: Miércoles 23 de Marzo de 2011, 20:41 »
Buenas. Los rangos de las variables para los bucles estan mal. En c/c++ los elementos de los vectores van de 0 a N-1. Por ejemplo: # for(int i=1;i<=n;i++){ # for(int k=1;k<=n;k++){ # cout<<"Introduzca el elemento de la fila "<<i<<" y la columna "<<k<<endl; # cin>>A [k]; # } # }
tendria que quedar:
# for(int i=0;i<n;i++){ # for(int k=0;k<n;k++){ # cout<<"Introduzca el elemento de la fila "<<i+1<<" y la columna "<<k+1<<endl; # cin>>A[k]; # } # }
La verdad que ni mire el algoritmo  Corregi eso y si aparece otro problema avisa.
Saludos
18
« en: Miércoles 12 de Enero de 2011, 19:08 »
Buenas char recvbuf[1024] = "";
bytesRecv = recv( mSocket, recvbuf, strlen(recvbuf), 0 );
strlen(recvbuf) devuelve 0, por lo que estarias haciendo: bytesRecv = recv( mSocket, recvbuf, 0, 0 ); Si le decis que el tamaño del buffer es 0 no va a guardar nada. Saludos
19
« en: Sábado 18 de Diciembre de 2010, 11:28 »
Tienes mucha razón en tus observaciones Epa, lo cual pido disculpas por eso y apartir d ehoy le pondré mas atención al código de los demás compañeros
!Saludos! No pasa nada, aca todos estamos para eprender y cometemos algunos errores Saludos
20
« en: Sábado 18 de Diciembre de 2010, 11:25 »
Como dice m0skit0, estas siempre reservando nueva memoria para el mismo vector, y nunca la liberas. Podrias porbar con realloc. Aunque puede traer problemas,hace un tiempo en un programa tenia un realloc en un ciclo bastante grande y llegaba un punto que el sistema se cansaba de darme memoria  Aunque en ese caso mi buffer era de unos 50 megas,si te llega a pasar algo asi podes ir reservando de a bloques. Por ejemplo al inicio reservas 10000*4 bytes. Y llevas un contador de cuento ocupaste. Cuando usas toda esa memoria con un realloc le das un tamaño de 10000*4*2 bytes. Y asi sucesivamente. Saludos
21
« en: Viernes 17 de Diciembre de 2010, 05:21 »
Buenas.
con fseek() podes posicionarte en un lugar cualqueira de un archivo.
Aunque sinceramente, y en mi opinion, me parece que trabajar con esa cantidad de datos desde un archivo no es muy practico. Yo en tu lugar trabajaria en memoria y guardaria a dico cuando sea necesario. Suponiendo que estas trabajando bajo una arquitectura de 32 bits, tu vector va a ocupar (dependiendo el tipo de datos que uses)como muhco 78 KB de memoria, lo que no me parece mucho considerando que tenes poco menos de 4 GB disponibles para tu programa. Yo no me preocuparia tanto por la memoria que ocupa tu proceso, ya que el SO se encarga de administrar eso.
Saludos
22
« en: Viernes 17 de Diciembre de 2010, 04:58 »
checando el código veo que puede producir un pequeño error, cuando i llega a su última posición ( i=9), al hacer la compración
for(i=0; i<(N - 1); i++) if(vec[i]<=vec[i+1]) contador++;
lo que se estaría haciendo en ese punto sería vec[9]<=vec[10] y vec[10] no fue llenado y no sabemos a donde apunta y que dato tendrá en memoria por lo cual podríamos filtrar esa última comparación.
N = 10 N -1 = 9 cuando i toma el valor 9 el ciclo no se ejecuta ya que la condicion es < y no <= O sea, i nunca llega a tomar el valor 9 dentro del ciclo. for(i=0; i<(N - 1); i++) if (i=(N-1)){ if(vec<=vec) contador ++; } else { if(vec<=vec[i+1]) contador++; }
Hay un error logico en ese codigo, al evaluarse el if, i toma el valor 9, en el segundo if vec es siempre igual a ves, por lo que es siempre veradero, entonces se incrementa el contador y se sale del for, ya que i vale 9.
Saludos
23
« en: Jueves 16 de Diciembre de 2010, 02:19 »
Buenas. Para empezar, la funcion scanvector recibe un puntero a un entero. al definir int a[N]; a ya es un puntero, por lo que en scanvector(&a); le estas pasando un puntero a un puntero a int, no un puntero a int. tendrias que haer scanvector(a); La verdad que el algoritmo que usas para comprobar es algo raro, pero tiene un par de errores. Aca te lo dejo, comparalo con el que tenes int ordenados(int vec[N]) { int i, contador=0; for(i=0; i<(N - 1); i++) if(vec[i]<=vec[i+1]) contador++; if(contador== (N -1)) return 1; //Están ordenados sus elementos return 0; }
Saludos
24
« en: Domingo 5 de Diciembre de 2010, 21:57 »
Explica mejor cual es la idea.
Queres imprimir los resultados que tu porgrama saco a pantalla? o despues de haber usado otro programa queres que se imprima lo que quedo en pantalla?
En cualquier caso, si el programa no necesita interaccion podes redirigir la salida a un archivo e imprimir ese
ejecutable > archivo
Saludos
Se me superpuso el post con el de m0skit0. En caso de que tu programa genere los datos esa seria una buena solucion.
25
« en: Domingo 5 de Diciembre de 2010, 21:43 »
Te vuelvo a repetir. Proba poner lo siguiente en la consola: sudo aptitude install libncurses5 libncurses5-dev
|
|
|