• Domingo 5 de Mayo de 2024, 06:01

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] 4 5 ... 10
51
C/C++ / Re: longitud de puntero a char
« en: Miércoles 22 de Septiembre de 2010, 17:01 »
Buenas.

Es dificil explicar esto sin escribir un manual :P

Pero si queres entender por que pasa eso, busca info de como funciona el operador sizeof(), de punteros constantes, y de los diferentes lugares de almacenamiento de datos dentro de un programa (bloque de datos, stack y heap).

Pero para solucionar esto podes usar la funcion strlen()
O hacer tu propia funcion, teniendo en cuenta que todas las cadenas de caracteres llevan el caracter '' al final para identificar donde termina.

Para trabajar con arrays es mucho mas recomendable eso que usar sizeof.

Saludos

52
C/C++ / Re: Librería STL
« en: Jueves 16 de Septiembre de 2010, 20:21 »
la STL no es UNA libraria, sino un conjunto de plantillas. Que son las standard.

Si ya tenes el compilador es muy raro que no las tengas. Es probalbe que geany sea solo un ide, y no un compilador.

Cuelquier cosa pone el la terminal:

sudo aptitude install build-essential

que te instala compiladores, STL y librerias posix entre otras cosas.

Saludos

53
C/C++ / sockets posix, send y recv devuelven -1
« en: Miércoles 15 de Septiembre de 2010, 13:58 »
Buenas

Tengo un pequeño problemita en una aplicacion que estoy haciendo, y la verdad no entiendo por que.
Haber si alguien que maneje un poco mas este tema me puede dar una mano.

Estoy creando una coneccion por sockets entre un cliente y un servidor, algo asi:

Código: C++
  1.  
  2. struct sockaddr_in dir;
  3. int des;
  4.  
  5. dir.sin_addr.s_addr = inet_addr(127.0.0.1);
  6. dir.sin_port = htons(32000);
  7. dir.sin_family = AF_INET;
  8. memset((char *)&(dir.sin_zero), 0, 8);
  9.  
  10. des = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  11.  
  12. bind(des, (struct sockaddr *)&dir, sizeof(dir));
  13.  
  14. listen(des, 10);
  15.  
  16.  

Despues hago el accept() y llamo a recv() dentro de un bucle.

La coneccion entre el servidor y el cliente se establece sin problemas.
Pero a la hora de anviar datos, tanto el recv() del server como el send() del cliente me devuelven -1.

Supuestamente todas las funcionces de la libreria socket guardan en errno el valor del ultimo error que se produjo.
Me fije cual era el valor despues de llamar a las funciones y es 0. Lo que no tiene sentido.

El problema en realidad es que necesito usar las funciones para conocer el estado de la coneccion.

Alguien tiene idea si hay algun error al crear el socket, o si es un tema de configuracion?

EDITO:

Me olvide de decir que el envio de datos se produce sin ningun problema. O sea que supuestemente el valor de retorno de send() y recv() deberia ser la cantidad de byter enviaods/recividos.


Muchas gracias de antemano.
Saludos

54
C/C++ / Re: analizador lexico
« en: Martes 15 de Junio de 2010, 03:23 »
Buenas.

Donde esta concretamente tu problema?

Algo que note en tu codigo, es que algunas expresiones tienen los no-terminales entre {}, por ejemplo:
PROTOCOLO {HTTP}|{FTP}|{HTTPS}|{LDAP}

Lo que en las quasi-gramaticas representa potencia (no se si es el caso del lex)

Por ejemplo IDEN [a-zA-Z]{5} seria una combinacion de 5 caracteres.

El bison tiene integrasion con el lex?
porque sino tendrias que hacer un codigo que haga de link entre en scanner y el parser.

Si amplias un poco mas tu problema quesas se te pueda ayudar un poco mas.

Saludos

55
C/C++ / Re: Sobrecarga del operador [ ]
« en: Martes 8 de Junio de 2010, 23:31 »
Funciona barbaro!
Nunca se me hubiese ocurrido algo asi.

Muchas gracias  :beer:

57
C/C++ / Re: Sobrecarga del operador [ ]
« en: Martes 8 de Junio de 2010, 04:03 »
Buenas.

gracias por la respuesta, pero creo que no entendiste lo que pido.

Voy a tratar de explicarlo un poco mejor, haber si se entiende.

La calse que puse ahi, es de modo ilustrativo, era con la idea de que se entienda el concepto.
La clase real tiene una matriz de tres dimensiones de punteros a otra clase.
Algo como

Código: C++
  1.  
  2. class calse1
  3. {
  4. ...
  5. private:
  6.    clase2 ****punteros;
  7. };
  8.  
  9.  

la idea era poder sobrecargar el operador [ ] de la siguiente forma
Código: C++
  1.  
  2. const clase2* operator[][][](int x, int y, int z){
  3.    return punteros[x][y][z];
  4. }
  5.  
  6.  
para poder despues hacer algo como:
Código: C++
  1.  
  2. clase1[x][y][z]->metodoclase2();
  3.  
  4.  

y evitar tener que hacer algo como:
Código: C++
  1.  
  2. clase2* clase1::getElemento(int x, int y, int z){
  3.    return punteros[x][y][z];
  4. }
  5.  
  6.  
para despues tener que hacer algo como:
Código: C++
  1.  
  2. clase2 * pclase2;
  3. pclase2 = clase1.getElemento(x,y,z);
  4. pclase2->metodoclase2();
  5.  
  6.  

Creo que en todo caso haria algo como:
Código: C++
  1.  
  2. typedef struct
  3. {
  4.    int x,y,z;
  5. } coor;
  6.  
  7. const clase2* operator[](coor c){
  8.    return punteros[c.x][c.y][c.z];
  9. }
  10.  
  11.  

pero lo ideal es la primera opcion, ya que lo necesito para hacer bucles (bastante grandes), y me ahorro andar copiando las variables en la estructura para despues pasarla.

Bueno, espero que se entienda mejor la idea.
Saludos

58
C/C++ / Re: Función Anidada
« en: Lunes 7 de Junio de 2010, 17:25 »
cual es el problema con usarlas por separado.
Que pasa si queres insertar un nodo que ya tenes creado?

Algo que podrias hacer es:

void insertar(nodo *cabeza, nodo *nuevo);
nodo* nuevonodo(tuestructura datos);

y despues llamar:

insertar(cabeza, nuevonodo(dato));

o sino crear una tercera funcion:
Código: C++
  1.  
  2. void creainserta(nodo *cabeza, tuestructura datos)
  3. {
  4.    insertar(cabeza, nuevonodo(datos));
  5. }
  6.  
  7.  

Saludos

59
C/C++ / Sobrecarga del operador [ ]
« en: Lunes 7 de Junio de 2010, 17:12 »
Buenas

Alguien tiene idea si es posible sobrecargar el operador [ ] de forma matricial? (no vectorial)

La idea sera hacer algo como

Código: C++
  1.  
  2. class A{
  3. public:
  4.    int operator[][][](int x, int y, int z){
  5.       return matriz[x][y][z];
  6.    }
  7. private:
  8.    int ***matriz;
  9. };
  10.  
  11.  

Lo probe pero me da el siguiente error:
error: la definición de la función no declara parámetros

Gracias de antemano
Saludos

60
C/C++ / Re: gramatica de clases en C++
« en: Lunes 31 de Mayo de 2010, 20:05 »
El problema ahi, es que cout no es una funcion, es un objeto de tipo class ostream.

61
C/C++ / Re: expresiones c++
« en: Viernes 28 de Mayo de 2010, 21:24 »
Buenas.

Si queres hacerlo bien, tendrias que aberiguar un poco de analizadores lexicos y sintacticos.

Una forma mas sencilla es la siguiente:

Creamos categorias para los distintos operandos y operadores
Por ejemplo

C = constantes
V = variables
O = +, -, * y /
P = (
Q = )

y hace falta un contador (cont) para lo parentesis, cada vez que aparece un ( aumentamos en 1, y cada vez que aparece ) restamos 1

despues  hay que crear reglas de la forma

C -> O o Q (de una constante podemos ir a un operador o cerrar parentesis)
V -> O o Q (de una variable podemos ir a un operador o cerrar parentesis)
O -> V o C o P (de un operador podemos ir a una variable, una constante o abrir parentesis)
P -> V o C o P
Q -> O o Q

despues hay que trensformar la expresion en los tokens

por ejemplo
B + C * (D + E) – 10
VOVOPVOVQOC

y despues hay que evaluar la cadena, si de una determinada posicion no se puede llegar a la siguiente a partir de alguna de las reglas o si al final el contador de parentesis es distinto de coro, entonces la expresion no es valida, en otro caso la expresion es valida.

Espero que te sea util

Saludos

62
C/C++ / Re: Menú en C++
« en: Viernes 28 de Mayo de 2010, 21:05 »
Citar
Mi duda esta en si la ejecucio tiene que ser passada por function o se puede passar de otro metodo ?? Gracias !!

Creo que no se entiende muy bien lo que queres.

metodo en el sentido de forma, o metodo en el sentido de poo?

Dentro de una seleccion  pordes poner tantas sentencias y expresiones como quieras, aunque lo mas recomendable es hacer subrutinas (funciones) para que el codigo sea mas facil de leer y para la reutilizacion de codigo.
Tambien podes llamar a algun metodo de alguna clase,si es a eso a lo que te referis con metodo.

Y si no es a eso, hay formas de hacer saltos condicionales con etiquetas, pero no es para nada recomendable. (en general en lo unico que se acepta es en el switch).

Espero que aclare un poco tus dudas, y sino por favor trata de ser un poco mas especifico.
Saludos

63
C/C++ / Re: Un error con plantillas en GCC y no en Visual Studio
« en: Viernes 28 de Mayo de 2010, 20:55 »
Buenas.

Lo probe y me da el mismo error, el que la verdad no se por que se produce, por mi poca experiencia diria que el codigo es correcto.

Aca te dejo una forma de hacerlo.
No se si es exactamente lo que buscabas, pero deberia dar el mismo resultado que buscas, y deberia compilar en cualquier compilador (yo solo lo probe con g++)

Saludos

Código: C++
  1.  
  2. #include <stdio.h>
  3. #include <typeinfo>
  4.  
  5.  
  6. template <typename T, typename R>
  7. class A
  8. {
  9. public:
  10.     virtual T cc() = 0;
  11.     A(){}
  12.     ~A(){}
  13. public:
  14.    
  15.     T method()
  16.     {
  17.     T t = T();
  18.     R r = R();
  19.     printf( "class Anttypename R: %s nttypename T: %sn", typeid(t).name(), typeid(r).name() );
  20.     return t;
  21.     }
  22.  
  23. };
  24.  
  25.  
  26. template <typename T, typename P = void>
  27. class C : public A<T,P>
  28. {
  29. public:
  30.     C() {}
  31.     ~C(){}
  32. public:
  33.  
  34.     T cc()
  35.     {
  36.         printf("ccn");
  37.         T t = this->method();
  38.         return t;
  39.     }
  40. };
  41.  
  42.  
  43. int main()
  44. {
  45.     C<int, char> *c;
  46.     c = new C<int, char>();
  47.     int i = c->cc();
  48.     printf("i value: %dn", i);
  49.  
  50.     return 0;
  51. }
  52.  
  53.  

64
C/C++ / Re: Expresiones regulares
« en: Lunes 24 de Mayo de 2010, 03:52 »
Que es lo que queres hacer con las expresiones?

Algo que quizas te sirva es flex, que sirve para pasar expresiones regulares a lenguaje c y hacer analizadores lexicos.

65
C/C++ / Re: gramatica de clases en C++
« en: Lunes 24 de Mayo de 2010, 03:49 »
Buenas.

El . es tambien el operador miembro de las clases.

Por ejemplo si la interfase de la clase es una funcion y una variable, usarias
clase.funcion()
y
clase.variable
para llamar la funcion y obtener el valor de la variable.

Para entender bien el operador :: te sugiero que busques info de los espacios con nombre (namespace). Ya que es un operador de ambito, y no de miembro.
En http://www.conclase.net hay un manual en donde lo explican.

Saludos

66
C/C++ / Re: No me deja leer del fichero.
« en: Viernes 14 de Mayo de 2010, 14:36 »
Aunque decis que el archivos lo abris con otra aplicacion, probaste crear un nuevo archivo? o copiar el que tenes y cambiarle el nombre?

67
C/C++ / Re: Sobre la función "fflush(stdin)"
« en: Viernes 14 de Mayo de 2010, 14:32 »
sscanf es una funcion de c, que esta definida en la libreria stdio

otra forma, que creo que no tiene inconvenientes es hacer algo como:
Código: C
  1.  
  2. void limpiarbuffer()
  3. {
  4.    while(getchar() != 'n');
  5. }
  6.  
  7.  
saludos

68
C/C++ / Re: Generador de palabras con unas letras especificas
« en: Jueves 13 de Mayo de 2010, 17:22 »
Perdon, no era el polinomio de taylor, era el binomio de newton  :ph34r: (es que el polinomio de taylor para campos escalares usa el de newton y se me mescalron los nombres)
La idea de eso es la sumatoria y los coeficientes de cada termino (que es cada uno es una combinacion).

69
C/C++ / Re: Generador de palabras con unas letras especificas
« en: Jueves 13 de Mayo de 2010, 00:46 »
Buenas.

Busca un poco de info de Combinaciones (tema de analisis combinacional),el polinomio de taylor tambien te puede ayudar.

Si tenes en claro la idea del algoritmo, implementarlo en c es bastante sencillo.

Saludos

70
C/C++ / Re: No logro regresar el resultado en llamado a función
« en: Lunes 10 de Mayo de 2010, 20:30 »
Buenas.

Por un lado, en el llamado a funcion no estas asignando el valor de retorno a ninguna variable..

Por otro lado, la funcion devuelve un puntero a double, y estas devolviendo un putero a "memoria", lo que es una variable local a la funcion y cuando se sale de esta, esa memoria deja de estar reservada. El compilador deberia tirarte un warning en la linea del return.

Si la idea es registrar los cambios en la variable, podes hacer las siguientes modificaciones:

definir la funcion:
double opciones(double memoria,double resultado);
y hacer al llamado:
mamoria = opciones(memoria, resultado);

o
definir la funcion:
void opciones(double *memoria,double resultado);
y hacer el llamado a funcion:
opciones(&memoria, resultado);

para esta ultima hace falta cambiar el cuerpo de la funcion para que memoria sea tratada como un puntero.

Espero que sirva.
Saludos

71
C/C++ / Problema con ifstream
« en: Domingo 9 de Mayo de 2010, 04:10 »
Buenas, aca aparesco con una nueva duda :P

Estoy haciendo un pequeño programita y estoy teniendo problemas con la clase ifstream.

Estoy tratando de abrir un archivo que se pasa como parametro a la aplicacion con esa clase, pero resulta que si no le paso la ruta completa con la ubicacion del archivo no lo encuentra.
Alguien sabe como hacer para que busque el archivo en el directorio actual?
Lo que me llama la atencion es que si trato de abrir un archivo con la clase ofstream no tengo ningun problema.

O sino, como puedo obtener la ruta en donde esta el programa?

Estoy usando Ubuntu 8.10

Gracias de antemano.
Saludos

72
C/C++ / Re: Eratostenes
« en: Jueves 6 de Mayo de 2010, 17:59 »
Buenas


creo que esto implementa lo que decis al principio:


Código: C++
  1.  
  2. int i,j,N=800;
  3. int vec[800];
  4.  
  5. for(i = 0; i < N; i++)
  6.     vec[i] = 2*(i+1)+1;
  7.  
  8. for(i = 0; i < sqrt(N); i++)
  9.     if(vec[i] != -1)
  10.         for(j = (i + vec[i]); j < N; j += vec[i])
  11.             vec[j] = -1;
  12.  
  13. for(i=0; i<N; i++)
  14.     if(vec[i] != -1) printf(" %i", vec[i]);
  15.  
  16.  
  17.  

Primero lleno el vector con los numeros impares, despues recorro el vector buscando los numeros que no tache, desde la posicion 0 hasta la raiz de N, despues desde la posision del SIGUIENTE multiplo del numero actual recorro el vector incrementando tantos lugares como el numero que busco los multiplos y lo cambio por -1.

Espero se entienda la idea

Saludos

73
C/C++ / Re: Hacer una matriz dinamica de un tipo definido en struct?
« en: Jueves 6 de Mayo de 2010, 17:18 »
cuando la variable es una estructura se usa . y cuando la variable es un puntero a una estructura se usa ->

ejemplo:

Código: C++
  1.  
  2. struct estructura {
  3.   int a;
  4. }
  5.  
  6. struct estructura var1;
  7. struct estructura* var2;
  8.  
  9. var2 = &var1;
  10.  
  11. var1.a;    //es equivalente a
  12. var2->a;
  13.  
  14.  

saludos

74
C/C++ / Re: codigo de ecuacion senosoidal en c++
« en: Domingo 2 de Mayo de 2010, 09:32 »
Buenas

La abscisa y la ordenada al origen son los puntos en que la que el grafico de la funcion intersecta a los ejes x e y respectivamente.

Para calcular la ordenada al origen, lo unico que tenes que hacer es calcualr el valor de f(t) en t = 0.
o sea
A sen(w.0+delta) = A sen (delta)

y para calcular la abscisa tenes que igualar la funcion a 0
A.sen(wt+delta) = 0
sen(wt+delta) = 0
wt+delta = k(2Pi)   k pertenece a Z

t = (2kPi - delta) / w   k pertenece a Z

En la libreria math.h tenes la funcion sin() que te devuelve el seno de un angulo.
Todos los calculos se hacen en radianes

Saludos

75
C/C++ / Re: Porcentaje de numeros
« en: Miércoles 28 de Abril de 2010, 15:44 »
Buenas

La idea para sacar el porcentaje es la relacion entre la cantidad de veces que aparece un numero, y la cantidad total de numeros, multiplicado por 100 para pasarlo a %.

En tu ejemplo:
la cantidad total de numeros es 10, la cantidad de 10'es es 3,
(3/10)* 100 = 30%

Lo ideal sera contar al cantidad total cuando se ingresan, y despues ordenarlos, para hacer el calculo.

Saludos

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