Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - K-YreX

#631
Te doy la idea para que le encuentres la utilidad. Hay una utilidad que se usa mucho cuando se trabaja con números de formas similares a esta que es:
Código (cpp) [Seleccionar]

int numero = 123456789;
int ultima_cifra = numero % 10; // 9
numero /= 10; // 12345678

Ahora puedes adaptar esta idea a tu necesidad.
Si te surge algún problema, envía tu código para que podamos ver dónde falla. Suerte :-X
#632
Eso lo puedes solucionar con un <while> de forma bastante sencilla, el esquema sería el siguiente:
Código (cpp) [Seleccionar]

// pides un numero
while(numero != 0){
    // haces lo que tengas que hacer con ese numero
    // pides otro numero
}

#633
Programación C/C++ / Re: Modularidad
30 Marzo 2019, 22:10 PM
AQUÍ te dejo un enlace donde aparece un problema muy similar al tuyo.
Bueno más que similar es el mismo... Así que la respuesta es la misma también.

Y te recomiendo que no sigas abriendo temas nuevos para el mismo problema, si quieres responde en el que ya está creado para que no tengan que estar luego borrando temas repetidos. O especificas qué duda tienes o colocas tu código para ver cómo podemos ayudar. El programa no te lo vamos a dar hecho. Suerte  :-X
#634
Después de darle unas cuántas vueltas creo que he llegado a una explicación. Si alguien ve algo raro o incorrecto que me lo comente para corregirlo ya que creo que puede servir para gente que tenga dudas con esto :-X
Voy a usar un ejemplo muy sencillo para explicar esto:
Código (cpp) [Seleccionar]

void anular(int *v, int pos){
   v[pos] = 0;
}

int main(){
   int *p;
   p = new int [2];
   p[0] = 1;
   p[1] = 2;
   anular(p,1);
}


En la línea 6, declaramos un puntero (almacena una dirección de memoria) <p> y hacemos que apunte a <NULL>. Vamos a suponer que se guarda en la posición de memoria 0x1 (voy a usar posiciones de memoria consecutivas para simplificar el ejemplo). Entonces quedaría así:

0x1(p) = NULL



En la línea 7, reservamos memoria para guardar dos enteros. Suponemos que sus posiciones son 0x2 y 0x3 respectivamente y en las líneas 8 y 9 asignamos valores a esas posiciones. Entonces tenemos:

0x1(p) = 0x2
0x2(p[0]) = 1
0x3(p[1]) = 2



En la línea 10, llamamos a la función <anular()>, la cual recibe el puntero que almacena la dirección de memoria del primer elemento del array. Al ser pasado por valor, se copia el contenido de <p> en <v> (suponemos <v> en 0x4) y el 1 se copia en <pos> (suponemos 0x5). Entonces tenemos antes de ejecutar la función:

0x1(p) = 0x2
0x2(p[0]) = 1
0x3(p[1]) = 2
0x4(v) = 0x2
0x5(pos) = 1



Al ejecutar la línea 2, el contenido se modifica en el "array original" (que es siempre el mismo porque sólo tenemos uno). Esto es porque <v> almacena la misma posición de memoria que <p> (OJO: <v> no almacena la posición de memoria dónde se guarda <p>, sino la dirección de memoria que se guarda EN <p>).
Por eso para hacer cambios o acciones sobre el array en sí, no es necesario pasarlo por referencia, porque ambos punteros apuntan al mismo sitio.


Sin embargo, si tenemos esta alternativa:
Código (cpp) [Seleccionar]

void reservar(int *&v, int size){
   v = new int [size];
}

Y queremos reservar memoria, esto es una operación que se debe aplicar, siguiendo con el mismo ejemplo, sobre 0x1 (dirección en la que hemos guardado <p>), no sobre 0x4 (dirección en la que hemos guardado <v>). Al pasar por referencia la tabla de direcciones de memoria anterior quedaría de la siguiente manera:

0x1(p) = 0x2
0x2(p[0]) = 1
0x3(p[1]) = 2
0x1(v) = 0x2 (no hemos copiado el valor de <p> en otra direccion de memoria sino que usamos la direccion de memoria de <p>
0x5(pos) = 1

Y entonces ahora sí que podemos aplicar la orden de reserva sobre <v> ya que en realidad la estamos aplicando sobre <p> (realmente se lo estamos aplicando a la dirección 0x1).

Entonces mi conclusión es que el paso por referencia es para operar sobre la dirección de memoria DÓNDE está el puntero, no para operar sobre la dirección de memoria que está EN el puntero. Por lo que supongo que a efectos de "eficiencia", es lo mismo hacer un paso por referencia que por valor (en ambos casos pasamos únicamente una dirección de memoria, en un caso la dirección dónde está el puntero y en el otro, la dirección que guarda el puntero)


Espero que le sirva a alguien. :-X
#635
Cuando trabajamos con memoria dinámica y pasamos una variable (ya sea un array, una variable sencilla o un objeto), hasta el punto que yo sé, lo que estamos pasando es el puntero que apunta a la dirección de memoria donde hemos guardado esa variable. Entonces me surgen las siguientes preguntas:
  • ¿Por qué si pasamos un puntero a una función y queremos reservar memoria una vez en la función, hay que pasar ese puntero además por referencia?
  • Tenemos, imaginemos, un array bidimensional (matriz) que ha sido reservada con memoria dinámica, ¿hay diferencia entre pasarla por referencia o por valor?
    En ambos casos estamos pasando la dirección de memoria de su primer elemento, pero viendo que para la primera pregunta que he planteado sí hay diferencia entre usar referencias o no, quería saber si para este segundo caso es más "eficiente" pasarla por referencia.
#636
Programación C/C++ / Re: ayuddaa con OBjetos
30 Marzo 2019, 03:40 AM
Coloca tu código entre etiquetas de código GeSHi (hay un desplegable donde seleccionarlas, encima del cuadro de texto)... :rolleyes:

Dónde tienes exactamente el problema??
Qué concepto es del que quieres buscar información?? De una clase?
#637
Programación C/C++ / Re: Duda Funcion en C
29 Marzo 2019, 21:17 PM
Coloca tu código entre etiquetas de código GeSHi (hay un desplegable encima del cuadro de texto) para poder interpretar bien tu código...
Y por qué inicializar <p> así?? :huh:
#638
Podrías mostrar qué patrones tienen que salir por pantalla?
#639
Programación C/C++ / Re: me urge por favor
29 Marzo 2019, 09:02 AM
No se hacen tareas por lo que no voy a darte un código funcional que haga lo que pides. Como mucho puedo orientarte sobre cada etapa:
  • Realizar un menú. Hay una cantidad enorme de menús desde los más simples a los más complejos por todo internet. Puedes usar un <switch>.
  • Realizar cada submenú. Igual que el menú.
  • Calcular áreas y perímetros. Implementar funciones que pidan los datos necesarios según el polígono y calcule con las fórmulas que también puedes encontrar por todo internet lo que se haya solicitado.
  • Opción de salir. Al finalizar una iteración, preguntar si desea salir y hacer un filtro para comprobar respuesta.

    Suerte :-X
#640
Programación C/C++ / Re: funcion coseno
29 Marzo 2019, 02:54 AM
Como comentaba antes, el programa recibe un ángulo en radianes.
En la calculadora lo estás calculando en grados.

angulo_grad = x
andulo_rad = x * PI / 180