• Domingo 5 de Mayo de 2024, 18:49

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 - jormar arellano

Páginas: [1]
1
C/C++ / Re: Compilador y mostrar variable en pantalla
« en: Miércoles 24 de Marzo de 2010, 19:20 »
Aqui esta la forma de imprimir al estilo c++:
Código: C++
  1.  
  2. #include <iostream>
  3. #include <stdlib.h>
  4.  
  5. using namespace std;
  6.  
  7. int main()
  8. {
  9.     int array[231];
  10.     int nElementos;
  11.     char cad[45];
  12.     nElementos = sizeof(array)/sizeof(array[0]);
  13.     cout << nElementos << endl;
  14.     system("PAUSE");
  15.     return 0;
  16. }
  17.  
  18.  

2
C/C++ / Re: Compilador y mostrar variable en pantalla
« en: Miércoles 24 de Marzo de 2010, 19:18 »
Oka, te falta la linea que imprime:
Código: C++
  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5. int main()
  6. {
  7.     int array[231];
  8.     int nElementos;
  9.     char cad[45];
  10.     nElementos = sizeof(array)/sizeof(array[0]);
  11.  
  12.     // Aqui imprimimos
  13.     printf("%d n", nElementos);
  14.  
  15.     system("PAUSE");
  16.     return 0;
  17. }
  18.  
  19.  

3
C/C++ / Re: Problema con ejercicios dev c++
« en: Viernes 19 de Marzo de 2010, 18:41 »
Vale alexinio, aqui no se hacen tareas. Debes mostrarnos el código (el que te tomo tantas horas), y aqui te diremos que anda mal.
Repito, no se hacen tareas.

4
C/C++ / Re: Variable tipo apuntador
« en: Miércoles 17 de Marzo de 2010, 19:50 »
Es que ese es el problema, posman, no sabemos si esta utilizando memoria dinámica, o si necesecita modularizar su programa con funciones, o si necesita x cosa.

lo más probable es que necesite usar funciones para separar las acciones del programa principal. Te daré un ejemplo, teniendo en cuenta que puede ser enb vano, dada la poca especificación del problema:
Código: C++
  1.  
  2. #DEFINE MAX 5
  3. ...
  4. /*
  5.  * Esta función toma como parametro la direccion de memoria de tu arreglo de "struct automovil"
  6.  * En principio, no necesitas pasarla como parametro, ya que tu arreglo lo declaras como global.
  7.  * Lo más correcto sería declararte tu arreglo dentro del main, y usarlo (mucho más ideal, con memoria dinamica
  8.  */
  9. void leerDatos(struct automovil *autos)
  10. {
  11.     int i;
  12.     for  (i=0; i<=MAX; i++){
  13.         printf("Digite la Marca No.  %d",i);
  14.         scanf("%s", &(autos[i].marca) );
  15.         ...
  16.     }
  17. }
  18. ...
  19. void printDatos(struct automovil *autos)
  20. {
  21.     int i;
  22.     for  (i=0; i<=MAX; i++){
  23.         printf ("n Marca: %s",autos[i].marca);
  24.         ...
  25.     }
  26. }
  27. ...
  28.  
  29.  

5
C/C++ / Re: Variable tipo apuntador
« en: Miércoles 17 de Marzo de 2010, 03:59 »
A que te refieres exactamente? necesitas ser más preciso...

6
C/C++ / Re: Modificar Valores de una Matriz
« en: Miércoles 17 de Marzo de 2010, 02:57 »
Oka, ya creo que entendí lo que quieres... deseas cambiar el valor de la misma variable (matriz) con valores cableados en el código fuente, pero de forma elegante, o corta...

Si ese es tu propósito, lo mejor es hacerlo con una función que te haga el trabajo (tal y como dices). Aca te dejo mi propuesta:
Código: C++
  1.  
  2. ...
  3. #include <string.h>      /* incluye memcpy( ... ) */
  4. ...
  5. void copiar(float mat[3][3],
  6.         float a, float b, float c,
  7.         float d, float e, float f,
  8.         float g, float h, float i)
  9. {
  10.     float aux[3][3] = {{a,b,c}, {d,e,f}, {g,h,i}};
  11.     memcpy(mat, aux, sizeof(aux));
  12. }
  13. ...
  14. int main()
  15. {
  16. ...
  17.     // En caso de que quieras colocar los valores manualmente
  18.     copiar(mat, 3,5,30, 21,1,0, 32,87,9);
  19.    // imprimir mat
  20.  
  21.     copiar(mat, 32,51,310, 231,16,10, 3,4,67);
  22.    // imprimir mat
  23.  
  24. ...
  25.     // En caso de que tengas todos los valores nuevos en otra matriz
  26.     float mat_aux[3][3] = {{81.8, 4, 3},{81.8, 4, 3},{81.8, 4, 3}};
  27.     memcpy(mat, mat_aux, sizeof(mat));
  28.     // imprimir mat
  29. ...
  30. }
  31.  
  32.  
La función memcpy es una de las formas más rápidas de copiar tus valores de un lugar a otro; en efecto, es más rápido que hacer:
Código: C++
  1.  
  2. mat[0][0] = 100;
  3. mat[0][1] = 45;
  4. ...
  5.  
  6.  

Por ultimo, si lo que quieres es hacer debug, o cambiar los valores de variables durante la ejecución del programa, te recomiendo que uses gdb, o alguno por el estilo (aunque no creo que nada de esto último es lo que buscas, pero no esta de más mencionarlo :) )

7
C/C++ / Re: Modificar Valores de una Matriz
« en: Miércoles 17 de Marzo de 2010, 01:23 »
Amigo, te basta con dos iteraciones anidadas (típico en operaciones con matrices). La idea es recorrer todas las posiciones de las filas y, en cada una, recorrer todas las posiciones de las columnas:
Código: C++
  1.  
  2. #define ROWS 3
  3. #define COLS 3
  4. ...
  5. int i, j;
  6. ...
  7. for(i=0; i<ROWS; i++)
  8. {
  9.     for(j=0; j<COLS; j++)
  10.     {
  11.         PC3[i][j] = 1; // <-- Mi valor
  12.     }
  13. }
  14. ...
  15.  
  16.  
En el anterior ejemplo, coloco todos los valores de la matriz a uno

8
C/C++ / Re: Por qué no es portable este codigo?
« en: Martes 16 de Marzo de 2010, 17:19 »
Todo tu código es portable... salvo la linea del final:
Código: C++
  1. system("pause");
  2.  
La función como tal si es portable, pero su ejecución esta muy relacionada con el entorno donde se ejecuta. Esta función NO pausa la ejecución del programa, lo que hace es ejecutar un comando del shell, y usar su valor de retorno. El código, tal y como esta, compilará en cualquier plataforma. Si lo corres en Window, no tendrás ningún inconveniente, ya que ese comando (pause) existe en la consola, y detiene la ejecución del programa con un mensajito.

Si lo corres en linux, lo único que obtienes es un mensaje de error (sh: pause: not found), ya que este comando no existe en el shell de este sistema operativo (lo más parecido es: read -p "Dale a una tecla..." ). Cabe destacar que tu programa NO ABORTA inesperadamente, sólo imprime un mensaje de error. Por ejemplo, en este programita:
Código: C++
  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5. int main()
  6. {  
  7.     system("pause");
  8.     printf("Esta linea también se imprime...n");
  9.     return 0;
  10. }
  11.  
  12.  
...imprime la siguiente salida (ejecutándolo desde una consola linux):

sh: pause: not found
Esta linea también se imprime...

Si realmente necesitas paralizar la ejecución del programa, usa una función como:
Código: C++
  1.  
  2. #include <stdio.h>
  3. ...
  4. getchar();
  5. ...
  6.  
  7.  
...o lee un caracter con "cin >> ..."

9
C/C++ / Re: Función de Comparación
« en: Domingo 14 de Marzo de 2010, 21:18 »
Mi estimado, que te parece si hacemos una corrida en frío rápidamente?, probemos con la palabra "aba".

Una vez que entramos en el ciclo de comparación, tenemos:
( strlen("aba") = 3 )
i=0, ahora entramos en otro ciclo, comparando cad2[0] con todas las demás letras de la palabra ( cad[j], pasando j por los valores 2,1,0).
i=0, j=2, cad2 == cad2[j] ('a' == 'a')
i=0, j=1, cad2 == cad2[j] ('a' == 'b')   (nota que seguimos parados en la primera 'a', pero ahora comparandola con la penultima letra)
    --> r = 0
(pero el rollo no termina alli, según el algoritmo que implementaste, debo terminar de comparar TODAS las letras que quedan, a pesar de saber que ya no son palíndromes las palabras)
i=0, j=0, cad2 == cad2[j] ('a' == 'a').

i=1, j=2, cad2 == cad2[j] ('b' == 'a')  (en ese punto ya debes saber que anda mal... pero, por si acaso, nota como comparas la letra del medio con la ultima)
    --> r = 0
i=1, j=1, cad2 == cad2[j] ('b' == 'b').
i=1, j=0, cad2 == cad2[j] ('b' == 'a').
    --> r = 0
...etc etc.

Como recomendación adicional, calcula el largo de la palabra una sola vez:
Código: C++
  1.  
  2. int length2 = strlen(cad2);
  3. ...
  4. for ( i=0; i<length2 - 1; i++){ ... }
  5.  
  6.  

..esto por razones de eficiencia, ya que la función strlen se ve obligada a recorrer toda la palabra para saber cual es su largo. Si además de eso, tu iteras sobre la palabra (para ir comparando letra por letra), tendrías que, por cada letra que tu comparas, obligas a recorrer toda la palabra de nuevo para saber su largo (en la condición de parada del ciclo). Has unas cuentas:

Si la palabra tiene 10 letras: tu te paras en cada una de las 10 letras y, en cada ciclo, obligas a calcular el largo de la palabra (10 iteraciones más); total: 100 itteraciones.
Si la palabra tiene 25 letras: 25 x 20 = 500 iteraciones!!!
(En computación, se dice que tienes un rendimiento de orden O(n^2))

En cambio, Calculando el largo de la palabra al principio, tendrías, para una palabra de 20 letras: 25 iteraciones iniciales para saber su largo (guardandolo en una variable) + 20 iteraciones tuyas (para tus comparaciones) = 45 iteraciones.

10
C/C++ / Re: Sobrecarga de operadores con fracciones
« en: Domingo 14 de Marzo de 2010, 20:33 »
En el problema original:

Dentro de las funciones de sobrecarga de operador (por ejemplo, en Fraccion operator+ ), te declarabas una variable "Fraccion temporal" que te daba un problema:
Cuando escribes el constructor de una clase, ya no dispones de los constructores por defecto que te da el lenguaje (salvo el constructor copia, pero eso es otro rollo). En tu caso, la clase Fraccion sólo tiene UN constructor, y toma dos argumentos. Cuando tratas de hacer algo como:
Código: C++
  1. Fraccion temporal;
  2.  
...el compilador te dice que no sabe como crear el objeto, y es lógico, no se lo has dicho.

Otra cosa, no sobrecargaste el operador /= como para poder usarlo en tu función main de prueba.

Como recomendación, y consiente de que no sé lo que tienes que hacer en detalle, tu clase de Fracciones podría ser mejorada en funcionalidad; por ejemplo, no me gusta la idea de abortar el programa si el denominador de una fracción se vuelve cero... considera conservar su valor y, a la hora de imprimirlo por pantalla, escribe algo asi como "infinity", ó "indeterminado (denominador 0)", revisando siempre este detalle antes de realizar cálculos (porque, ¿Cuánto da una fracción por otra que esta indeterminada? ). Una ultima cosa, calculas mal la suma (no se las otras operaciones, no revisé), pero esto ya lo verás tu.

Aca te dejo el codigo que funciona (modificado el constructor):
Código: C++
  1.  
  2. #include<stdlib.h>
  3. #include<iostream>
  4. #include<math.h>
  5.  
  6. using namespace std;
  7.  
  8. class Fraccion{
  9.     int numerador;
  10.     int denominador;
  11.  
  12.     public:
  13.     /*
  14.      * Cambiamos le constructor para usar inicializacion de miembros
  15.      */
  16.     Fraccion(int a=0, int b=1): numerador(a), denominador(b)
  17.     {
  18.         if (b==0)
  19.         {
  20.             // Si realmente quieres terminar el programa por esto
  21.             cerr << "Error: fraccion con denominador 0)" << endl;
  22.             exit(-1);
  23.         }
  24.     }
  25.  
  26.     Fraccion operator+(Fraccion objeto){
  27.  
  28.         Fraccion temporal;
  29.         temporal.denominador=((this->numerador*objeto.denominador)+(this->denominador*objeto.numerador));
  30.         temporal.numerador=(this->denominador*objeto.denominador);
  31.         return temporal;
  32.     }
  33.  
  34.     Fraccion operator/(Fraccion objeto){
  35.         Fraccion temporal2;
  36.         temporal2.numerador=(this->numerador*objeto.denominador);
  37.         temporal2.denominador=(this->denominador*objeto.numerador);
  38.         return temporal2;
  39.     }
  40.  
  41.     Fraccion operator--(int notused){
  42.         numerador--;
  43.         denominador--;
  44.         return *this;
  45.  
  46.  
  47.     }
  48.  
  49.     /*
  50.      * Ahora imprime con un salto de linea al final del  archivo
  51.      */
  52.     void mostrar()
  53.     {
  54.         cout << numerador << "/" << denominador << endl;
  55.     }
  56. };
  57.  
  58. int main()
  59. {
  60.     char aux;
  61.  
  62.     Fraccion fraccion01(5,3),fraccion02(17,5),fraccion03(0,1);
  63.     fraccion03=fraccion01+fraccion02;
  64.     fraccion03.mostrar();
  65.     fraccion01 = fraccion01/fraccion02;
  66.     fraccion01.mostrar();
  67.     fraccion01--;
  68.     fraccion01.mostrar();
  69.  
  70.     cin >> aux;
  71.     // getchar();
  72. }
  73.  
  74.  

Páginas: [1]