• Jueves 25 de Abril de 2024, 14:29

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

Páginas: [1] 2 3 ... 10
1
C/C++ / Re:Información fichero Linux
« 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.

Citar
lsof nombre_proceso

Saludos

2
C/C++ / Re: Problema con fread()
« 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

Código: C
  1.  
  2. ret = fwrite(&matriz, object_size, object_count, flujo); //OK "ret" devuelve 25
  3.  
  4. ret = fread(&matriz, object_size, object_count, flujo); //FALLO "ret" devuelve 12
  5.  
  6.  

deberia ser

Código: C
  1.  
  2. ret = fwrite(matriz, object_size, object_count, flujo); //OK "ret" devuelve 25
  3.  
  4. ret = fread(matriz, object_size, object_count, flujo); //FALLO "ret" devuelve 12
  5.  
  6.  

ya que si tu matriz es dinamica estarias escribiendo y lellendo de cualquier lado.

Saludos

3
C/C++ / Re: programacion avanzada de C?
« en: Jueves 23 de Junio de 2011, 22:12 »
Te debo el español, pero con este tenes para entretenerte por un rato  :comp:

http://www.cs.cf.ac.uk/Dave/C/

4
C/C++ / Re: Problema Segmentation Fault
« 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]

Código: C
  1.  
  2. for(i=0; i<=xmax+1; i++){ //Inicialmente lleno TODO x
  3. for(j=0; j<=ymax+1; j++){
  4. for(p=0; p<=2*Nmax+1; p++){
  5. for(q=0; q<=2*Mmax+1; q++){
  6.  
  7.  

eso trandria que ser

Código: C
  1.  
  2. for(i=0; i<=ymax+1; i++){ //Inicialmente lleno TODO x
  3. for(j=0; j<=xmax+1; j++){
  4. for(p=0; p<=2*Nmax+1; p++){
  5. for(q=0; q<=2*Mmax+1; q++){
  6.  
  7.  

Saludos

5
C/C++ / Re: Complementos(1 y 2)
« 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 :P

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
C/C++ / Re: Complementos(1 y 2)
« 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
C/C++ / Re: Que me recomiendan para programar un "piano"
« 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 :P

funciones de multimeda de la winapi, fijate al final estan las waveout:
http://msdn.microsoft.com/en-us/library/dd743586%28v=vs.85%29.aspx

ejemplo de como usar las wave out:
http://www.tmsoft.com/tutorial-sound.html

Esta parte la tendrias que sacar para no tener que esperar a que termine un sonido:
Código: C
  1.  
  2.  
  3.     // ** Wait until sound finishes playing
  4.     if (WaitForSingleObject(Done,INFINITE) != WAIT_OBJECT_0)
  5.     {
  6.         Message("Error waiting for sound to finish");
  7.         return TRUE;
  8.     }
  9.  
  10.  

Si lo probas deja comentarios de que tal andubo.

Saludos

8
C/C++ / Re: Que me recomiendan para programar un "piano"
« en: Viernes 22 de Abril de 2011, 01:12 »
en que plataforma estas programando?

9
C/C++ / Re: Sobre funcion piso y techo con matrices
« 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  :comp:

10
C/C++ / Re: problema con shellexecute
« 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
C/C++ / Re: Error en contructor de copia
« en: Martes 29 de Marzo de 2011, 18:19 »
La verdad me mataste jaja  :hitcomp:
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  :rolleyes:

Saludos

12
C/C++ / Re: Error en contructor de copia
« 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 + B);

en lugar de

matrix C = A + B;

Saludos

13
C/C++ / Re: Problema inversa
« en: Miércoles 23 de Marzo de 2011, 23:13 »
jaja, que bueno que hayas entendido con esa "pseudo" explicacion jaja  :good:

Estudio Ingenieria en Sistemas de Informacion. O por lo menos eso intento  :P jajaja

Saludos

14
C/C++ / Re: Problema inversa
« 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 :P

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.

Código: C++
  1.  
  2. #include <iostream>
  3. using namespace std;
  4. int main ()
  5. /*Este programa pide al usuario una matriz de orden n la diagonaliza por el
  6. metodo de Gauss-Jordan sin pivote*/
  7. {
  8.     //Genero las variables, la matriz, la pido al usuario y la muestro por pantalla
  9.     int n, w, q;
  10.     long double t;
  11.  
  12.     cout<<"Introduzca el orden de la matriz:"<<endl;
  13.     cin>>n;
  14.  
  15.     q=n;
  16.  
  17.     double A[n][2*n];
  18.  
  19.     for(int i=0;i<n;i++){
  20.             for(int k=0;k<n;k++){
  21.                     cout<<"Introduzca el elemento de la fila "<<i<<" y la columna "<<k<<endl;
  22.                     cin>>A[i][k];
  23.             }
  24.     }
  25.     cout<<endl<<endl;
  26.     for(int i=0;i<n;i++){
  27.             for(int k=0;k<n;k++){
  28.                     cout<<A[i][k]<<" ";
  29.                     if(k==n){cout<<endl;}
  30.             }
  31.     }
  32.  
  33.     //Acoplo la matriz identidad para trabajar con ella
  34.     for(int j = 0; j < n; j++){
  35.             for(int i = n; i < 2*n; i++)
  36.         {
  37.                   if(j == (i-n))
  38.                         A[j][i] = 1;        
  39.                   else
  40.                         A[j][i] = 0;
  41.             }
  42.     }
  43.  
  44.  
  45.     //Muestro la matriz con la que voy a trabajar
  46.     cout<<endl<<endl<<"La matriz introducida con la identidad acoplada es:"<<endl<<endl;
  47.     for(int i=0;i< n;i++){
  48.             for(int k=0;k<2*n;k++){
  49.                     cout<<A[i][k]<<" ";
  50.             }
  51.             cout<<endl;
  52.             }
  53.     cout<<endl<<endl;
  54.  
  55.     //Triangulo la matriz
  56.     for(int i=0;i<n;i++){
  57.             for(int k=i+1;k<n;k++){
  58.                     t=A[k][i]/A[i][i];
  59.                     for(int j=0;j<2*n;j++){
  60.                             A[k][j]=A[k][j]-t*A[i][j];
  61.                     }
  62.             }
  63.     }
  64.         cout<<endl<<endl;
  65.         //Muestro la matriz triangulada
  66.     cout<<"La matriz triangulada es:"<<endl<<endl;
  67.     for(int i=0;i<n;i++){
  68.             for(int k=0;k<2*n;k++){
  69.                     cout<<A[i][k]<<" ";
  70.             }
  71.             cout<<endl;
  72.             }
  73.            
  74.         cout<<endl<<endl;
  75.     //Aplico Gauss-Jordan
  76.     for(int i=0;i < n;i++){
  77.             q--;
  78.         w=q;
  79.             for(int k = i+1; k < n; k++){
  80.                     w--;
  81.                     t=A[w][q]/A[q][q];
  82.                     for(int j=0;j<2*n;j++){
  83.                             A[w][j]=A[w][j]-t*A[q][j];
  84.                     }
  85.             }
  86.     }
  87.     for(int i=0;i<n;i++){
  88.             for(int j=n;j<2*n;j++){
  89.                     A[i][j]=A[i][j]/A[i][i];
  90.             }
  91.         A[i][i] = 1;
  92.     }
  93.  
  94.     //Muestro la matriz diagonalizada y la inversa:
  95.     cout<<"La matriz diagonalizada y la inversa de A es:"<<endl<<endl;
  96.     for(int i=0;i<n;i++){
  97.             for(int k=0;k<2*n;k++){
  98.                     cout<<A[i][k]<<" ";
  99.             }
  100.             cout<<endl;
  101.             }
  102.    
  103.      return 0;
  104. }    
  105.  
  106.  

Saludos

15
C/C++ / Re: Problema inversa
« 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
Código: C++
  1.  
  2.     for(int i=0;i<n;i++){
  3.             for(int j=0;j<2*n;j++){
  4.                     A[i][j]=A[i][j]/A[i][i];
  5.             }
  6.     }
  7.  
  8.  

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:
Código: C++
  1.  
  2.     for(int i=0;i<n;i++){
  3.             for(int j=n;j<2*n;j++){
  4.                     A[i][j]=A[i][j]/A[i][i];
  5.             }
  6.             A[i][i] = 1;
  7.     }
  8.  
  9.  

Me alegra haber sido de ayuda  :good:

Saludos

16
C/C++ / Re: PROBLEMA AL REALIZAR UN MENÚ EN C++
« 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

Citar
int cont = 1;
...
while (cont != '2'){
...
if(cont == '1'){
...

Saludos

17
C/C++ / Re: Problema inversa
« 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 :P
Corregi eso y si aparece otro problema avisa.

Saludos

18
C/C++ / Re: Problema con sockets
« en: Miércoles 12 de Enero de 2011, 19:08 »
Buenas

Citar
char recvbuf[1024] = "";

Citar
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
C/C++ / Re: Problema funciones en C (arrays)
« en: Sábado 18 de Diciembre de 2010, 11:28 »
Cita de: "morfus_bedxhed"
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  :good:

Saludos :beer:

20
C/C++ / Re: ¿Arreglos o archivos?
« 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 :P 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
C/C++ / Re: ¿Arreglos o archivos?
« 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
C/C++ / Re: Problema funciones en C (arrays)
« en: Viernes 17 de Diciembre de 2010, 04:58 »
Cita de: "morfus_bedxhed"
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

Código: C
  1.  
  2.     for(i=0; i<(N - 1); i++)
  3.         if(vec[i]<=vec[i+1])
  4.         contador++;
  5.  
  6.  

 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.

Cita de: "morfus_bedxhed"
    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
C/C++ / Re: Problema funciones en C (arrays)
« 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

Código: C++
  1.  
  2. int ordenados(int vec[N])
  3. {
  4.     int i, contador=0;
  5.  
  6.     for(i=0; i<(N - 1); i++)
  7.         if(vec[i]<=vec[i+1])
  8.         contador++;
  9.  
  10.     if(contador== (N -1))
  11.       return 1; //Están ordenados sus elementos
  12.     return 0;
  13. }
  14.  
  15.  

Saludos

24
C/C++ / Re: Imprimir texto mostrado en la consola.
« 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
C/C++ / Re: Teclas especial
« en: Domingo 5 de Diciembre de 2010, 21:43 »
Te vuelvo a repetir.

Proba poner lo siguiente en la consola:
Citar
sudo aptitude install libncurses5 libncurses5-dev

Páginas: [1] 2 3 ... 10