• Jueves 28 de Marzo de 2024, 17:43

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.


Temas - Checho360

Páginas: [1]
1
Java / Clases y objetos
« en: Sábado 20 de Agosto de 2011, 15:47 »
Hola, un par de preguntillas tontas (estoy empezando con java). Veamos en primer lugar, todas los nuevos objetos que quieres crear (que no sean de tipos primitivos) a partir de una clase se tienen que crear con el operador new ? es decir:

MiClase nuevoObjeto = new Miclase;

si esto es asi, como es que para utilizar un metodo de JOptionPane no hay que crear un objeto de esta clase? es decir sin falta de crear ningun objeto puedes hacer:

JOptionPane.showMessageDialog (null, "Hola");

o tambien:

system.out.println("Hola");

son objetos que se crean (como cout en el namespace std de c++) o como va el tema?

Un saludo y gracias !!

2
C/C++ / Sobrecarga de << con template
« en: Viernes 12 de Agosto de 2011, 16:19 »
Hola, estoy creando una clase pila y de momento iba todo bien, pero cuando me he puesto a sobrecargar el operador <<... no encuentro solución. Estuve mirando un rato por google y hay algo de información pero no entiendo muy bien... Aver si alguien me puede ayudar. Dejo el código para que se vean bien los errores al compilar:

Código: C++
  1. #include <iostream>
  2. #include <new>
  3. using namespace std;
  4.  
  5. template< class T >
  6. class PILA_DATOS{
  7.       template< class t > friend class PILA;
  8.       private:
  9.               T nodo;
  10.               PILA_DATOS< T > *ptrPilaSiguiente;
  11.              
  12. };
  13.  
  14. template< class T >
  15. class PILA{
  16.       friend ostream &operator<< <T>( ostream &, const PILA< T > & );
  17.       public:
  18.              PILA();
  19.              PILA< T > &empujarPila ( const T& );
  20.              PILA< T > &sacarPila ();
  21.       private:
  22.               PILA_DATOS< T > *ptrPila;
  23.               bool estaVacia ();
  24.              
  25. };
  26.  
  27. template< class T >
  28. PILA< T >::PILA (){
  29.      
  30.       ptrPila = NULL;
  31.      
  32. }
  33.  
  34. template< class T >
  35. bool PILA< T >::estaVacia (){
  36.      
  37.      return ( ptrPila == NULL ? true : false );
  38.      
  39. }
  40.  
  41. template< class T >
  42. PILA< T > &PILA< T >::empujarPila ( const T &a ){
  43.        
  44.         if ( estaVacia () ){
  45.              
  46.              ptrPila = new PILA_DATOS< T >;
  47.              ptrPila->nodo = a;
  48.              ptrPila->ptrPilaSiguiente = NULL;
  49.              
  50.         }
  51.        
  52.         else{
  53.              
  54.              PILA_DATOS< T > *nuevaPila;
  55.              nuevaPila= new PILA_DATOS< T >;
  56.              nuevaPila->nodo = a;
  57.              nuevaPila->ptrPilaSiguiente = ptrPila;
  58.              ptrPila = nuevaPila;
  59.              
  60.         }
  61.        
  62.         return *this;
  63.        
  64. }
  65.  
  66. template< class T >
  67. PILA< T > &PILA< T >::sacarPila (){
  68.      
  69.       PILA_DATOS< T > *temp;
  70.       temp = ptrPila;
  71.       ptrPila = ptrPila->ptrPilaSiguiente;
  72.       delete temp;
  73.       return *this;
  74.      
  75. }
  76.  
  77. template< class T >
  78. ostream &operator<<( ostream &salida, const PILA< T > &pila ){
  79.        
  80.         PILA_DATOS< T > *a = pila.ptrPila;
  81.         while ( a != NULL ){
  82.              
  83.               salida << a->nodo << "->";
  84.               a = a->ptrPilaSiguiente;
  85.              
  86.         }
  87.         salida << "NULL\n";
  88.         return salida;
  89.        
  90. }
  91.  
  92. int main (){
  93.    
  94.     PILA< int > a;
  95.     a.empujarPila (2).empujarPila (3).empujarPila(23).empujarPila (25);
  96.     cout << a;
  97.     a.sacarPila().sacarPila();
  98.     cout << a;
  99.    
  100.     getchar();
  101.    
  102.     return 0;
  103.    
  104. }
  105.  

Muchas gracias!

3
C/C++ / Referncias &
« en: Martes 2 de Agosto de 2011, 23:15 »
Hola, me gustaría saber que diferencia hay entre:

int &maximo (int a, int b) {return ( a>b a : b )}

int maximo (int a, int b){return ( a>b a : b )}

La diferencia que yo veo es que con el primero puedo hacer:

int & c = maximo (a, b);

pero no entiendo muy bien por que. Alguien que me pueda instruir un poco del tema??

Un saludo!!

4
C/C++ / Infijo a postfijo
« en: Lunes 25 de Julio de 2011, 16:39 »
Hola, estoy haciendo un programa que me convierta una expresion infijo a postfijo. El programa funcionar funciona, pero añade caracteres extraños al final de la cadena a veces o imprime un intro o cosas asi.

Código: C
  1. //##############################################################################
  2.  
  3. //Encabezados necesarios para el programa:
  4.  
  5. #include <stdio.h>
  6.  
  7. #include <stdlib.h>
  8.  
  9. #include <E:\C\encabezados\estructuras.h>
  10.  
  11. //##############################################################################
  12.  
  13. //Este programa recibe una expresion "infijo" y la devuelve en formato
  14. //"postfijo"
  15.  
  16. //##############################################################################
  17.  
  18. //#############################PROTOTIPOS#######################################
  19.  
  20. int tam_infijo (char * array);
  21.  
  22. char * scan_infijo ();
  23.  
  24. int esOperador (char c);
  25.  
  26. int esParentesis (char c);
  27.  
  28. int precedencia (char operador1, char operador2);
  29.  
  30. void inFijo2postFijo (char inFijo[], char postFijo[]);
  31.  
  32. //##############################################################################
  33.  
  34. //##############################FUNCIONES#######################################
  35.  
  36. int tam_infijo (char * array){
  37.    
  38.     int cont = 0;
  39.    
  40.     while ( *( array + cont ) != '\0' ){
  41.          
  42.           cont++;
  43.          
  44.     }
  45.    
  46.     return cont - 1;
  47.    
  48. }
  49.  
  50. char * scan_infijo (){
  51.    
  52.     char * expresion;
  53.    
  54.     expresion = (char*) calloc (200, sizeof (char));
  55.    
  56.     scanf("%s", expresion);
  57.    
  58.     getchar();
  59.    
  60.     expresion = (char*) realloc (expresion, sizeof(char) *
  61.    
  62.     ( tam_infijo (expresion) + 1) );
  63.    
  64. }
  65.  
  66. int esOperador (char c){
  67.    
  68.     return c == '+' || c == '-' || c == '*' || c == '/';
  69.    
  70. }
  71.  
  72. int esParentesis (char c){
  73.    
  74.     if ( c == '(' ){
  75.          
  76.          return 1;
  77.    
  78.     }
  79.    
  80.     else if ( c == ')' ){
  81.          
  82.          return -1;
  83.          
  84.     }
  85.    
  86.     else return 0;
  87.    
  88. }
  89.  
  90. int precedencia (char operador1, char operador2){
  91.    
  92.     if ( ( operador1 == '*' || operador1 == '/' ) && ( operador2 == '+'
  93.    
  94.     || operador2 == '-' ) ) return 1; //Precedencia del operador 1 mayor
  95.    
  96.     else if ( ( operador1 == '+' || operador1 == '-' ) && ( operador2 == '*'
  97.    
  98.     || operador2 == '/' ) ) return 0; //Precedencia del operador 1 menor
  99.    
  100.     else return -1; //Precedencia del operador 1 igual que la del operador 2
  101.  
  102. }
  103.  
  104. void inFijo2postFijo (char inFijo[], char postFijo[]){
  105.      
  106.      ptrNuevaPila pila = NULL;
  107.      
  108.      int i = 0, j = 0;
  109.      
  110.      empujar_pila ( &pila, '(' );
  111.      
  112.      inFijo = (char*)
  113.      
  114.      realloc (inFijo, ( ( ( tam_infijo (inFijo) ) + 2 ) * sizeof (char) ) );
  115.      
  116.      inFijo [tam_infijo (inFijo)] = ')';
  117.      
  118.      inFijo [tam_infijo (inFijo) + 1] = '\0';
  119.      
  120.      while ( pila != NULL ){
  121.            
  122.            if ( esOperador ( inFijo [i] ) ){
  123.                
  124.                 while ( ( esOperador ( pila->dato ) ) && (
  125.                
  126.                 precedencia (inFijo [i], pila->dato ) == 0 ||
  127.                
  128.                 precedencia (inFijo [i], pila->dato ) == -1 ) ) {
  129.                            
  130.                             postFijo [j] = pila->dato;
  131.                            
  132.                             j++;
  133.                            
  134.                             sacar_pila( &pila );
  135.                            
  136.                 }
  137.                
  138.                 empujar_pila ( &pila, inFijo [i] );
  139.                
  140.            }
  141.            
  142.            else if ( esParentesis ( inFijo [i] ) ){
  143.                
  144.                 if ( esParentesis ( inFijo [i] ) == 1 ){
  145.                      
  146.                      empujar_pila ( &pila, inFijo [i] );
  147.                      
  148.                 }
  149.                
  150.                 else{
  151.                      
  152.                      while ( pila->dato != '(' && esOperador ( pila->dato ) ){
  153.                            
  154.                            postFijo [j] = pila->dato;
  155.                            
  156.                            j++;
  157.                            
  158.                            sacar_pila ( &pila );
  159.                            
  160.                      }
  161.                      
  162.                      sacar_pila ( &pila );
  163.                      
  164.                 }
  165.                
  166.            }
  167.            
  168.            else{
  169.  
  170.                 postFijo [j] = inFijo [i];
  171.                
  172.                 j++;
  173.                
  174.            }
  175.            
  176.            i++;
  177.            
  178.      }
  179.      
  180.      postFijo [j] == '\0';
  181.      
  182. }
  183.  
  184. //##############################################################################
  185.  
  186. //##############################MAIN############################################
  187.  
  188. int main (){
  189.    
  190.     char * infijo = scan_infijo ();
  191.    
  192.     char postFijo [tam_infijo(infijo)+1];
  193.    
  194.     inFijo2postFijo(infijo, postFijo);
  195.    
  196.     printf ("%s", postFijo);
  197.    
  198.     getchar();
  199.    
  200.     return 0;
  201.    
  202. }
  203.  
  204. //##############################################################################
  205.  

Enlace de estructuras.h :

http://www.megaupload.com/?d=N31B614Z

Un saludo!!

5
C/C++ / Problema con realloc
« en: Domingo 24 de Julio de 2011, 18:24 »
Hola. Tengo las siguientes funciones:

Código: C
  1. int tam_infijo (char * array){
  2.    
  3.     int cont = 0;
  4.    
  5.     while ( *( array + cont ) != '\0' ){
  6.          
  7.           cont++;
  8.          
  9.     }
  10.    
  11.     return cont - 1;
  12.    
  13. }
  14.  
  15. char * scan_infijo (){
  16.    
  17.     char * expresion;
  18.    
  19.     expresion = (char*) calloc (200, sizeof (char));
  20.    
  21.     fgets (expresion, 200, stdin);
  22.    
  23.     realloc (expresion, sizeof(char) * (tam_infijo (expresion) + 1) );
  24.    
  25.     puts (expresion);
  26.    
  27. }

Alguien me podría decir que estoy haciendo mal a la hora de llamar a realloc? esque al programa le da igual que escriba:

(tam_infijo (expresion) + 1) que (tam_infijo (expresion) - 2), hace lo mismo...

Un saludo!

6
C/C++ / Hallar el tamaño de un vector
« en: Miércoles 20 de Julio de 2011, 01:28 »
Hola, me gustaría saber por qué funciones del tipo:

Código: C
  1. int f (int v []){
  2.        
  3.         return (sizeof (v)/sizeof(int));
  4.        
  5. }

o definiciones del tipo:

Código: C
  1. #define length_int(x) (sizeof(x)/sizeof(int))

en un archivo ".h" aparte no funcionan y también como sacar el tamaño de un vector en un archivo aparte.

Un saludo!

7
C/C++ / Lista ligada
« en: Lunes 18 de Julio de 2011, 02:20 »
Buenas, estoy haciendo un programilla de una lista ligada que propone un libro pero no funciona. No sé si será un error muy tonto o tengo echo algo muy mal pero el caso es que no localizo el error.

Código: C
  1. #include <stdio.h>
  2.  
  3. #include <stdlib.h>
  4.  
  5. struct nodo{
  6.        
  7.         char letra;
  8.        
  9.         struct nodo *siguiente;
  10.        
  11. };
  12.  
  13. typedef struct nodo nuevoNodo;
  14.  
  15. typedef nuevoNodo *ptrnuevoNodo;
  16.  
  17. void menu ();
  18.  
  19. void imprimir_lista (ptrnuevoNodo lista);
  20.  
  21. int esta_vacia (ptrnuevoNodo lista);
  22.  
  23. void insertar_letra (ptrnuevoNodo * lista, char valor);
  24.  
  25. int eliminar_letra (ptrnuevoNodo * lista, char valor);
  26.  
  27. int main (){
  28.        
  29.         int opt = 1;
  30.        
  31.         char valor;
  32.        
  33.         ptrnuevoNodo lista = NULL;
  34.        
  35.         menu ();
  36.        
  37.         while ( opt != 4 ){
  38.                
  39.                 printf ("? ");
  40.                
  41.                 scanf ("%d", &opt);
  42.                
  43.                 switch ( opt ){
  44.                        
  45.                         case 1:
  46.                                
  47.                                 imprimir_lista (lista);
  48.                                
  49.                                 break;
  50.                                
  51.                         case 2:
  52.                                
  53.                                 printf ("Introduce un caracter\n");
  54.                                
  55.                                 scanf ("%c", &valor);
  56.                                
  57.                                 insertar_letra (&lista, valor);
  58.                                
  59.                                 imprimir_lista (lista);
  60.                                
  61.                                 break;
  62.                                
  63.                         case 3:
  64.                                
  65.                                 printf ("Introduce un caracter\n");
  66.  
  67.                                 scanf ("%c", &valor);
  68.                                
  69.                                 eliminar_letra (&lista, valor);
  70.                                
  71.                                 imprimir_lista (lista);
  72.                                
  73.                                 break;
  74.                                
  75.                         case 4:
  76.                                
  77.                                 break;
  78.                        
  79.                         default:
  80.                                
  81.                                 printf ("Opcion incorrecta\n");
  82.                                
  83.                                 menu ();
  84.                                
  85.                 }
  86.                        
  87.         }
  88.                
  89. }
  90.  
  91. void imprimir_lista (ptrnuevoNodo lista){
  92.        
  93.         if ( esta_vacia (lista) ){
  94.                
  95.                 printf ("La lista esta vacia \n");
  96.                
  97.         }
  98.        
  99.         else{
  100.        
  101.                 printf ("La lista es : \n");
  102.                
  103.                 while ( lista != NULL ){
  104.                        
  105.                         printf ("%c -> ", lista -> letra);
  106.                        
  107.                         lista = lista->siguiente;
  108.                        
  109.                 }
  110.                
  111.                 printf ("NULL\n");
  112.                
  113.         }
  114.        
  115. }
  116.  
  117. int esta_vacia (ptrnuevoNodo lista){
  118.        
  119.         return lista == NULL;
  120.        
  121. }
  122.  
  123. void insertar_letra (ptrnuevoNodo * lista, char valor){
  124.        
  125.         ptrnuevoNodo ptrNuevo = NULL;
  126.        
  127.         ptrNuevo = malloc ( sizeof ( struct nodo ) );
  128.        
  129.         if ( ptrNuevo == NULL ){
  130.                
  131.                 printf ("No hay memoria disponible \n");
  132.                
  133.         }
  134.        
  135.         else {
  136.                
  137.                 ptrNuevo->letra = valor;
  138.                
  139.                 ptrNuevo->siguiente = NULL;
  140.                
  141.                 ptrnuevoNodo ptrAnterior = NULL;
  142.                
  143.                 ptrnuevoNodo ptrActual;
  144.                
  145.                 ptrActual = *lista;
  146.                
  147.                 while ( ptrActual->letra < valor && ptrActual != NULL ){
  148.                        
  149.                         ptrAnterior = ptrActual;
  150.                        
  151.                         ptrActual = ptrActual -> siguiente;
  152.                        
  153.                 }
  154.                
  155.                 if ( ptrAnterior == NULL ){
  156.                        
  157.                         ptrNuevo->siguiente = ptrActual;
  158.                        
  159.                         *lista = ptrNuevo;
  160.                        
  161.                 }
  162.                
  163.                 else{
  164.                        
  165.                         ptrAnterior->siguiente = ptrNuevo;
  166.                        
  167.                         ptrNuevo->siguiente = ptrActual;
  168.                        
  169.                 }
  170.                
  171.         }
  172.        
  173. }
  174.  
  175. int eliminar_letra (ptrnuevoNodo * lista, char valor){
  176.        
  177.         ptrnuevoNodo ptrActual = *lista;
  178.        
  179.         ptrnuevoNodo temp = NULL;
  180.        
  181.         if ( ptrActual->letra == valor ){
  182.                
  183.                 temp = *lista;
  184.                
  185.                 *lista = (*lista) -> siguiente;
  186.                
  187.                 free (temp);
  188.                
  189.                 return 1;
  190.                
  191.         }
  192.        
  193.         else{
  194.                
  195.                 ptrnuevoNodo ptrAnterior = ptrActual;
  196.                
  197.                 ptrActual = (*lista)->siguiente;
  198.                
  199.                 while ( ptrActual->letra < valor && ptrActual != NULL ){
  200.                        
  201.                         ptrAnterior = ptrActual;
  202.                        
  203.                         ptrActual = ptrActual -> siguiente;
  204.                        
  205.                 }
  206.                
  207.                 ptrAnterior = ptrActual;
  208.                        
  209.                 ptrActual = ptrActual->siguiente;
  210.                
  211.                 ptrActual = ptrActual->siguiente;
  212.                
  213.                 ptrAnterior->siguiente= ptrActual;
  214.                
  215.         }
  216.        
  217. }
  218.  
  219. void menu (){
  220.        
  221.         printf ( "%s%s%s%s", "Introduce 1 para ver la lista \n",
  222.        
  223.         "Introduce 2 para añadir un elmento \n",
  224.        
  225.         "Introduce 3 para eliminar un elemento \n",
  226.        
  227.         "Introduce 4 para salir del programa \n");
  228.        
  229. }

Un saludo y muchas gracias de antemano.

8
GNU/Linux / Problema con vsftpd
« en: Viernes 8 de Abril de 2011, 01:12 »
Hola;

acabo de instalar el servidor ftp en un sistema que tengo en red (en concreto el vsftpd), y bueno, me sale lo siguiente:

500 OOPS: could not bind listening IPv4 socket

Es raro porque justo antes no me salía el error y sin darle a nada me empezó a salir. He abierto los puertos 20 y 21 del router, probé a volver a instalar el paquete... pero ninguno funcionó. En concreto si meto de comando netstat -l, hay una linea:
Código: Text
  1.  
  2. tcp        0      0  *:ftp                   *:*                     LISTEN
  3.  
  4.  
quizás ahí falla algo? yo hago reboot al sistema y cuando lo enciendo sin darle a nada ya sale eso, luego si le doy al comando vsftpd me sale el 500 OOPS, también probé a darle a killall ftp o vsftpd... estuve googleando un poco e intenté hacer las cosas que ponen, pero no me sirvió ninguna, aver si alguien me da alguna respuesta que me sirva jej

Un saludo!!

Otra cosa; si entro con la terminal desde el ordenador y le doy a ftp->open->(to) ip -> me vuelve a salir el 500 OOPS... eso es porque el servidor está montado pero hay algo que falla??

9
GNU/Linux / Duda con compilar
« en: Miércoles 6 de Abril de 2011, 23:33 »
Hola, tengo una duda que me podría resolver varios conflictos. Si tengo un código, podría compilarlo y pasarlo a otro sistema para sólo ejecutarlo; es decir en este ordenador hago según las instrucciones del programa ./configure make y en otro sistema pasando los archivos darle a make install.

Un saludo!

10
GNU/Linux / Acceder a otras particiones y rutas
« en: Domingo 3 de Abril de 2011, 19:50 »
Hola!!

Tengo linux instalado en el mismo disco duro del ordenador de windows (una particion pa windows y otras dos para linux). El caso es que si intento acceder a la otra particion de windows tengo que meter en la terminal:

/media/B2709DCFE...

y automáticamente entro en la partición de windows con todos mis archivos. Mi problema es que esto solo me funciona si antes voy con el ratón a Equipo y después a Disco Duro de 1 TB. En ese momento a la izq me aparece Sistema de archivos, y, logicamente, en la carpeta media se ve la partición. Pero si antes de hacer esto me voy a la terminal y pongo
ls /media

me aparecen las unidades de floppy y CD rom pero no la otra partición. No sé por qué es esto ni tampoco si hay alguna forma de entrar a la terminal y dándole a /media me salga también la carpeta de la otra partición. A ver si alguien me dice. Ahh, y por cierto, no es que esté oculta porque si le doy a
cd /media; ls -a  

Tampoco me lo saca.

Mi otra duda es acerca de un disco multimedia. Lo tengo enchufao al router y puedo acceder a el con el Putty metiendole la ip y eso. Si entro con el ratón a Red y después voy al disco duro y a la carpeta torrents, pasa como con la partición, me sale una carpeta que pone "torrents en wdstorage". Del mismo modo me gustaría saber como acceder a él sin primero tener que ir con el ratón y además; cual es la ruta del disco duro para acceder desde la terminal?? no encuentro ninguna pista por ningún sitio.

Un saludo y muchas gracias de atemano!!

11
GNU/Linux / Problema con lanzador
« en: Sábado 2 de Abril de 2011, 18:03 »
Hola!! estoy empezando con linux (debian) y estoy descargando algunas cosas esenciales, entre ellas mozilla firefox. Lo baje de la pagina oficial y lo meti el home. Para ejecutarlo tengo que entrar en la terminal y darle a:

Código: Text
  1. cd /home/programas/firefox;firefox
  2.  

Con eso se inicia y funciona perfectamente. Se me ocurrio hacer el lanzador este y asi darle mas facil sin tener que entrar a la terminal cada vez que quiera ejecutarlo. Le di a nuevo lanzador y le meti el comando en la ventana, pero cuando le calco en el boton me sale:

"No se pudo lanzar la aplicación: Fallo al ejecutar el proceso hijo <</home...>> permiso denegado. "

No se por que es, la carpeta de firefox tiene todos los permisos para todos los usuarios.

Tambien probe a meterle un directorio simplemente (por ejemplo: /home) y tampoco me salio.

Aver si alguien sabe algo del tema;

Un saludo y gracias de atemano!!

12
C/C++ / Herencia de una clase
« en: Martes 29 de Marzo de 2011, 21:42 »
Hola; estoy creando otro programa probando con eso de la herencia y tengo una duda acerca de una cosa. El código es el siguiente:

Código: C++
  1. #include <iostream>
  2. #include <cmath>
  3. #define MAX_SIZE 10
  4. using namespace std;
  5.  
  6. class matrix {
  7.       public:
  8.              int col, fil;
  9.              double s[MAX_SIZE][MAX_SIZE];
  10.              matrix (int n, int m);
  11.              matrix(const matrix& A);
  12.              matrix operator = (matrix A);
  13.              matrix operator + (matrix A);
  14.              matrix scan_matrix (void);
  15.              void print_matrix (void);
  16.              ~matrix(){}
  17.       };
  18.      
  19. matrix :: matrix(int n, int m){
  20.        if(n>MAX_SIZE){
  21.                       cerr<<"ERROR: el numero de filas introducidas es mayor del permitido";
  22.                       fil=MAX_SIZE;
  23.                       }
  24.        else{
  25.             fil=n;
  26.             }
  27.        if(m>MAX_SIZE){
  28.                       cerr<<"ERROR: el numero de columnas introducidas es mayor del permitido";
  29.                       col=MAX_SIZE;
  30.                       }
  31.        else{
  32.              col=m;
  33.             }
  34. }
  35.  
  36. matrix :: matrix (const matrix& A){
  37.        fil=A.fil;col=A.col;
  38.        for(int i=0;i<A.fil;i++){
  39.                for(int j=0;j<A.col;j++){
  40.                        s[i][j]=A.s[i][j];
  41.                        }
  42.                }
  43. }
  44.  
  45. matrix matrix :: operator + (matrix A){
  46.        if(col!=A.col || fil != A.fil){
  47.                      cerr<<"ERROR: el numero de filas o columnas de las matrices introducidas no coinciden";
  48.                      }
  49.        matrix C(A.fil,A.col);
  50.        for(int i=0;i<A.fil;i++){
  51.                for (int j=0;j<A.col;j++){
  52.                    C.s[i][j]=s[i][j]+A.s[i][j];
  53.                }
  54.        }
  55.        return C;
  56. }
  57.  
  58. matrix matrix ::operator = (matrix A){
  59.        fil = A.fil; col = A.col;
  60.        for(int i=0;i<A.fil;i++){
  61.                 for (int j=1;j<A.col;j++){
  62.                 s[i][j]=A.s[i][j];
  63.                 }
  64.        }
  65. }
  66.  
  67. matrix matrix :: scan_matrix (void){
  68.        for (int i=0;i<fil;i++){
  69.            for(int j=0;j<col;j++){
  70.                    cout<<"Introduzca el coef "<<i<<" "<<j<<"n";
  71.                    cin>>s[i][j];
  72.                    }
  73.            }
  74. }
  75.  
  76. void matrix :: print_matrix (void){
  77.      for (int i=0;i<fil;i++){
  78.          for(int j=0;j<col;j++){
  79.                  cout<<"El coef "<<i<<" "<<j<<" = "<<s[i][j]<<"n";
  80.                  }
  81.          }
  82. }
  83.  
  84. class square_matrix : public matrix {
  85.       public:
  86.              square_matrix(int size) : matrix (size,size) {}
  87.              ~square_matrix () {}
  88. };
  89.  
  90. class vector : public matrix {
  91.       public:
  92.              vector (int size) : matrix(1,size) {}
  93.              ~vector () {}
  94. };
  95.  
  96. int main (){
  97.     matrix A(2,2);square_matrix B(2);vector C(2);vector D(2);
  98.     A.scan_matrix();B.scan_matrix();C.scan_matrix();D.scan_matrix();
  99.     matrix F=(A+B);F.print_matrix();
  100.     matrix E(C+D);
  101.     system("pause");
  102. }
  103.  
  104.  

Si os fijais en las ultimas lineas sumo dos vectores y esta suma la tengo que almacenar en un objeto de la clase matrix. Es logico porque arriba a la hora de declarar las funciones tengo escrito "matrix operator", lo cual dice que devuelve un objeto del tipo "matrix". Me preguntaba si se podría modificar el código de alguna manera para poder almacenar la suma en un objeto del tipo "vector" en lugar del tipo "matrix".

Un saludo!!

13
C/C++ / Error en contructor de copia
« en: Lunes 28 de Marzo de 2011, 21:39 »
Bueno, tengo el siguiente codigo:

Código: C++
  1. #include <iostream>
  2. using namespace std;
  3. #define MAX_SIZE 10
  4.  
  5. class matrix{
  6.       public:
  7.              int size; double s[MAX_SIZE];
  8.              matrix (int n);
  9.              ~matrix() {}
  10.              int test_matrix (int a);
  11.              matrix scan_matrix (void);
  12.              matrix operator + (matrix A);
  13.              void print_matrix (void);
  14.              matrix (matrix& A);//<---------------Aqui esta la declaracion
  15. };
  16.  
  17. matrix :: matrix (matrix& A){ //<-------------Aqui esta la implementación
  18.        size = A.size;
  19.        for (int i=0;i<A.size;i++) s[i]=A.s[i];
  20.        }
  21.  
  22. matrix :: matrix (int n){
  23.        size = test_matrix(n);
  24.        }
  25.  
  26. int matrix :: test_matrix (int a){
  27.     if(a>MAX_SIZE){
  28.                    cerr<<"Demasiados elementosn";
  29.                    a=MAX_SIZE;
  30.                    }
  31.     return a;
  32. }
  33.  
  34. matrix matrix :: scan_matrix (void){
  35.        for(int i=0;i<size;i++){
  36.        cout<<"Ingresa el coef "<<i<<"n";cin>>s[i];
  37.        }
  38. }
  39.  
  40. matrix matrix :: operator + (matrix A){
  41.      if(A.size!=size){
  42.                       cerr<<"Los vectores han de ser del mismo orden";
  43.                       }
  44.      matrix C (A.size);
  45.      for(int i=0;i<A.size;i++){
  46.             C.s[i]=s[i]+A.s[i];}
  47.      return C;
  48.      }
  49.  
  50. void matrix :: print_matrix (void){
  51.      for(int i= 0;i<size;i++){
  52.              cout<<"Suma no "<<i<<" = "<<s[i]<<"n";
  53.              }
  54.      }
  55.  
  56. int main(){
  57.     int n;int m;
  58.     cout<<"Introduzca el orden del vector1n";
  59.     cin>>n;
  60.     matrix A(n);
  61.     A.scan_matrix();
  62.     cout<<"Introduzca el orden del vector2n";
  63.     cin>>m;
  64.     matrix B(m);
  65.     B.scan_matrix();
  66.    
  67.     matrix D = A + B;
  68.    
  69.     D.print_matrix ();
  70.    
  71.     system("pause");return 1;
  72. }
  73.  
  74.  

Sé que el error está en alguna parte del constructor de copia por que el programa compila y funciona si le quito esa redefinición, sin embargo no encuentro el error. A ver si alguien me puede decir donde está el error y ya de paso por qué hay que tener escrito el operador '&' en la declaración.

Un saludo y muchas gracias de antemano!!!

14
C/C++ / Consulta en clases
« en: Lunes 28 de Marzo de 2011, 14:18 »
Hola; estoy trabajando algo con las clases en C++ y consigo que me corran lo programas. Veamos para mi lo logico al crear este programa de sumar vectores es:

Código: C++
  1. #include <iostream>
  2. using namespace std;
  3. #define MAX_SIZE 10
  4.  
  5. class matrix{
  6.       public:
  7.              int size; double s[MAX_SIZE];
  8.              matrix (int n){
  9.                     if (n>MAX_SIZE) {cerr<<"Error tamaño demasiado grande";
  10.                     return;}
  11.                     size=n;
  12.                     for(int i=0;i<n;i++){
  13.                             cout<<"Ingresa el coef "<<i<<"n";cin>>s[i];
  14.                             }
  15.              }
  16.              ~matrix() {};
  17.              void suma_de_vectores (matrix A,matrix B);
  18. };
  19.  
  20. void matrix :: suma_de_vectores (matrix A, matrix B){
  21.      if(A.size!=size){cerr<<"Los vectores han de ser del mismo orden";return;}
  22.      for(int i=0;i<A.size;i++){
  23.              cout<<"suma "<<i<<" = "<<A.s[i]+s[i];}
  24.      }
  25.  
  26. int main(){
  27.     int n;int m;
  28.     cout<<"Introduzca el orden del vector1n";cin>>n;
  29.    
  30.     cout<<"Introduzca el orden del vector2n";cin>>m;
  31.     matrix A(n);matrix B(m);
  32.     A.suma_de_vectores (A,B);
  33.     system("pause");return 1;
  34. }
  35.  
  36.  

Sin embargo el codigo tambien compila y funciona si suprimo algunas cosas en la declaración y desarrollo de la función, es decir:

Código: C++
  1. #include <iostream>
  2. using namespace std;
  3. #define MAX_SIZE 10
  4.  
  5. class matrix{
  6.       public:
  7.              int size; double s[MAX_SIZE];
  8.              matrix (int n){
  9.                     if (n>MAX_SIZE) {cerr<<"Error tamaño demasiado grande";
  10.                     return;}
  11.                     size=n;
  12.                     for(int i=0;i<n;i++){
  13.                             cout<<"Ingresa el coef "<<i<<"n";cin>>s[i];
  14.                             }
  15.              }
  16.              ~matrix() {};
  17.              void suma_de_vectores (matrix B);
  18. };
  19.  
  20. void matrix :: suma_de_vectores (matrix A){
  21.      if(A.size!=size){cerr<<"Los vectores han de ser del mismo orden";return;}
  22.      for(int i=0;i<A.size;i++){
  23.              cout<<"suma "<<i<<" = "<<A.s[i]+s[i];}
  24.      }
  25.  
  26. int main(){
  27.     int n;int m;
  28.     cout<<"Introduzca el orden del vector1n";cin>>n;
  29.    
  30.     cout<<"Introduzca el orden del vector2n";cin>>m;
  31.     matrix A(n);matrix B(m);
  32.     A.suma_de_vectores (B);
  33.     system("pause");return 1;
  34. }
  35.  

Con lo cual me doy cuenta de que no entiendo que es lo que hago excatamente. Mi consulta es esa, si alguien me podría explicar un poco que es lo que hace el programa; por que al poner size y s toma los de la matriz A (aunque supongo que será por declarar A.suma_de_vectores(B)) sin decirselo. Para mi lo mas logico seria tomar los ultimos valores de size y s que se dieron pero los ultimos que yo sepa son los de la matriz B.

Bueno un saludo y muchas gracias de antemano

15
C/C++ / Espacios en salida de datos
« en: Sábado 26 de Marzo de 2011, 00:52 »
Hola; estoy intentando almacenar frases y pense en strings pero no funciona. A ver si alguien me dice como almacenar frases para luego sacarlo por pantalla; es decir algo asi:
Código: C++
  1.  
  2. #include <fstream>
  3. #include <iostream>
  4. #include <string>
  5. using namespace std;
  6. int main(){
  7.     ofstream write ("file.txt");
  8.     write<<"El programa escribe lo que yo quiero";
  9.     write.close();
  10.     ifstream read ("file.txt");string k;
  11.     read>>k;
  12.     read.close();
  13.     cout<<k;
  14.     system("pause");
  15. }
  16.  

Un saludo

16
C/C++ / Funciones
« en: Jueves 24 de Marzo de 2011, 22:47 »
Hola, estoy intentando programar algo en C++ y se me ocurrio meterle algo de metodos numericos. El primer problema que me he encontrao es que no se como decirle al ordenador cosas como variables simbolicas,ecuaciones lineales... Es decir sin(x), o exp(x)... Ademas cuando le digo al ordenador:

Código: C++
  1.     char metodo;
  2.     cout<<"Introduzca el metodo a utilizar    "; cin>>metodo;
  3.  

Si al ejecutar el programa le doy a la variable metodo mas de una letra se salta los siguientes "cin". Hay alguna manera de decirle al ordenador que pida una palabra en lugar de una letra?

Bueno espero a ver si alguien me puede contestar; un saludo y muchas gracias de antemano!

17
C/C++ / Problema inversa
« en: Miércoles 23 de Marzo de 2011, 00:17 »
Hola muy buenas, estoy programando algunas cosas con C++ y en este caso el calculo de la inversa a partir de una matriz que introduce el usuario. Tengo el mismo algoritmo programado en matlab y funciona perfectamente pero en c++ no lo ejecuta como yo esperaba. En primer lugar no calcula la inversa, y ademas se cuelga si metes orden 4. Espero que alguien me diga por que no funciona. Espero vuestra respuesta un saludo y gracias de antemano!!!


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

Páginas: [1]