elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


  Mostrar Mensajes
Páginas: 1 ... 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 [25] 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 ... 88
241  Programación / Programación C/C++ / Re: [ALGEBRA DE MATRICES] Matriz triangular superior desdendiente en C. en: 3 Mayo 2020, 00:40 am
Chavalote! Este no te lo puedo bendecir... Tiene un sutil fallo. Te digo cual?
Prueba a evaluar la matriz de 1 fila y 1 columna...
El resultado es indeterminado... porque entonces accedes a una posicion tal como A[0][-1]  . Si acierta, dependera del compilador, o de la conjunci'on de los astros...
Que pasa? que las matrices de 1 fila y 1 columna no son matrices???  Prueba [[1]]!  :laugh: :laugh: :laugh:
Es cierto. No me di cuenta de eso en su momento. Habría que tratar las matrices de orden 1 como un caso aparte:
Código
  1. return (N == 1 || (i == N && !A[N-1][N-2]));
Aunque claramente no es la mejor solución... :laugh:

;-) ;-) ;-)  Bravo... Correcta... pero aun redundante... :rolleyes: ya que en
Código
  1. j=(j<i)||A[i][j-1]
es equivalente a
Código
  1. j=(j<i)
El problema fue que me centré en usar A(i, j-1) y entonces comprobé que no era condición suficiente y le añadí el (j < i) pero no vi que ésta sí era suficiente por sí sola...  :rolleyes:
Bueno, me quedo con que me he quedado cerca... Este era el de calentamiento, no? :xD
242  Programación / Java / Re: EJERCICIO POO en: 3 Mayo 2020, 00:02 am
De verdad piensas que llegando aquí y soltando un copia-pega de tu ejercicio, alguien te lo va a dar resuelto??
Empieza a hacer el ejercicio y saca todo lo que puedas por ti mismo. Cuando no sepas avanzar más, revisa tus apuntes u otros materiales (pdfs, vídeos,...) que puedes encontrar en Internet. Y cuando llegues a un problema que no puedas solucionar ni usando todos esos materiales de los que puedes disponer, coloca el/los fragmento/s de código necesarios (entre etiquetas de Código GeSHi) y entonces alguien te ayudará a resolver ese problema concreto; pero nadie te va a hacer el ejercicio entero...
Suerte.
243  Programación / Programación C/C++ / Re: ¿Como guardar datos de pila en un archivo de texto? en: 2 Mayo 2020, 17:44 pm
No he mirado todo tu código, solo la última parte pero... Deberías no cerrar el archivo dentro del while().
Saca el:
Código
  1. archivo.close();
fuera del while() de esta manera:
Código
  1. while(aux != NULL){
  2.  archivo << aux;
  3.  aux = aux->sigue;
  4. }
  5. archivo.close();
y dime si te funcionó.
244  Programación / Programación C/C++ / Re: [ALGEBRA DE MATRICES] Matriz triangular superior desdendiente en C. en: 2 Mayo 2020, 00:58 am
Hmmm.... Correcta!   ;-) ;-) ;-)

Una objección:
  •  La tecnica es estructurada, pero emplea 3 variables... trinangular_superior es redundante...

Se puede conseguir una solucion estructurada y con solo 2 variables locales?
Cuando tienes proyectos sin terminar pero @dijsktra te pica a darle más vueltas a un algoritmo aparentemente sencillo.  :laugh: :laugh:

Pues veamos. La primera opción que aparece es sustituir la variable por el valor de su expresión directamente que es:
Código:
A[i][j] == 0
dejando el resto del código lo más parecido posible. La solución en tal caso sería algo así:
Código
  1. int upperTriangleDesc(const int **A, const int N){
  2.    size_t i = 1; j = 0; // Declaramos e inicializamos j para poder usarlo en la condicion del bucle externo
  3.    while(i < N && !A[i][j]){
  4.        // El bucle interno no tiene ninguna complicacion
  5.        while(j < i && !A[i][j]){
  6.            ++j;
  7.        }
  8.        // Ahora al salir tenemos dos situaciones:
  9.        // - (j = i) y en tal caso la matriz todavia es triangular superior -> Incrementamos i y restablecemos j a 0 para recorrer otra fila
  10.        // - (A[i][j] != 0) y en tal caso la matriz ya no es triangular superior -> No podemos modificar i ni j para que el bucle de fuera tambien termine
  11.        if(j == i){
  12.            ++i;
  13.            j = 0;
  14.        }
  15.    }
  16.    // Los bucles acaban cuando:
  17.    // Un elemento no es nulo (A[i][j] != 0) -> !triangular
  18.    // Llegamos al final (i == N) -> SI A[N-1][N-2] == 0 ENTONCES triangular SINO !triangular
  19.    return (i == N && !A[N-1][N-2]);
  20. }

Podemos ver que esto se complica mucho y solo para quitar una variable local. Así que tenía que haber otra solución. Existe otro patrón. Cada vez que salimos del bucle interno:
  • Todos los elementos de la fila son nulos -> j = i -> triangular (de momento)
  • El último elemento comprobado no era nulo -> j < i
En vez de restablecer j a 0, podemos darle a j el valor del último elemento evaluado. Y en el bucle externo bastará comprobar si (j == 0). Esto tiene un problema: si todos los elementos evaluados en una fila son nulos -> j = i -> A(i,j) pertenece a la diagonal principal. Solución:
Código
  1. int upperTriangleDesc(const int **A, const int N){
  2.    size_t i = 1, j = 0;
  3.    while(i < N && !j){
  4.        while(j < i && !A[i][j]){
  5.            ++j;
  6.        }
  7.        // Al salir: SI j < i ENTONCES A[i][j] != 0 SINO SI A[i][j-1] == 0 ENTONCES triangular (de momento) SINO !triangular
  8.        j = (j < i) || A[i][j-1];
  9.        ++i;
  10.    }
  11.    // Triangular <-> j = 0
  12.    return !j;
  13. }

A ver qué tal esta vez.  :silbar: :silbar:
245  Programación / Programación C/C++ / Re: [ALGEBRA DE MATRICES] Matriz triangular superior desdendiente en C. en: 1 Mayo 2020, 21:02 pm
Como ya se ha explicado en el enunciado, una matriz es triangular superior descendiente si todos los elementos por debajo de la diagonal principal son nulos, es decir, 0. Por lo tanto el algoritmo debe recorrer única y exclusivamente esta parte de la matriz. El patrón es el siguiente:
  • Se empieza en la fila 1
  • Para cada fila i se recorren las columnas desde 0 hasta i-1.

Por lo tanto la solución más sencilla parece un par de bucles que recorran esta parte de la matriz. Usaremos una variable entera como flag que empezará valiendo 1 (suponemos que la matriz es triangular superior) y cuando encontremos un elemento distinto de 0, dejará de ser triangular superior (cambiaremos el valor a 0) y no será necesario seguir.
Código
  1. int upperTriangleDesc(const int **A, const int N){
  2. int triangular_superior = 1;
  3. for(size_t i = 1; i < N && triangular_superior; ++i)
  4. for(size_t j = 0; j < i && triangular_superior; ++j)
  5. triangular_superior = (A[i][j] == 0);
  6. return triangular_superior;
  7. }
Usamos directamente la comparación de que el elemento (i,j) sea igual a 0. Si dicha comparación es cierta (true) se traducirá como un 1 y en caso de que sea falsa (false), se traducirá como 0.
Como echo de menos estas cosas de C/C++ desde que trabajo con Java :rolleyes:
246  Programación / Programación C/C++ / Re: Pasar este código Java a C en: 1 Mayo 2020, 15:13 pm
Ya que eres nuevo en el foro, te avisaré de que no se hacen tareas. Esto no va de que tu pones tus códigos o tus ejercicios y nosotros te los hacemos. El foro sirve para cuando tienes una duda concreta y a ser posible tienes que poner tus avances para que podamos orientarte mejor.
Java como ya sabrás o deberías saber está totalmente orientado a objetos por lo que es obligatorio crear una clase para tu programa. C, en cambio, no está orientado a objetos (no tiene clases) aunque tiene un "apaño" que son la estructuras (struct). No conviertas cada clase de Java en un struct de C porque no tiene sentido, vas a tener que pensar un poco si deberías crearla o no.
PD: Otra característica de un struct es que todos sus campos son públicos por defecto. No se pueden establecer como privados.

Y para crear un número aleatorio en C se utiliza el siguiente código:
Código
  1. #include <stdlib.h> // Para las funciones rand() y srand()
  2. #include <time.h> // Para la funcion time()
  3.  
  4. int main(){
  5.  // Se establece una semilla que es como un generador de numeros aleatorios.
  6.  // Una semilla con un valor x siempre genera los mismos numeros aleatorios en cada ejecucion.
  7.  // Para que sea mas aleatorio se usa time(NULL) para usar la hora del sistema y que cambie con cada ejecucion.
  8.  srand(time(NULL));
  9.  
  10.  int numeroAleatorio = rand();
  11.  // El numero aleatorio esta entre 0 y la constante RAND_MAX.
  12.  printf("Numero aleatorio entre %d y %d: %d", 0, RAND_MAX, numeroAleatorio);
  13.  
  14.  // Para obtener un numero entre [a, b):
  15.  numeroAleatorio = a + rand() % (b-a);
  16.  
  17.  // Para obtener un numero entre [a, b]:
  18.  numeroAleatorio = a + rand() % (b-a+1);
  19. }

Dicho esto que creo que es lo más diferente entre Java y C, el resto son bucles y operaciones aritméticas básicas que tienes que poder hacerlo tú solo.
Suerte.
247  Programación / Java / Re: Dimensiones reales de un componente gráfico (JFrame) en: 29 Abril 2020, 18:45 pm
Yo lo estaba ejecutando con Java 11 y desde Eclipse.
He probado a ejecutarlo directamente desde la consola y con Java 8 y el tamaño se reduce por debajo de 200.
No sabía yo que iba a haber tantos misterios en una cosa como esta.
248  Programación / Java / Dimensiones reales de un componente gráfico (JFrame) en: 29 Abril 2020, 16:18 pm
Estaba haciendo unas ventanas en Java cuando me dio por comprobar si realmente el tamaño de éstas se correspondía con el tamaño que había definido en el código fuente y he visto que no es así, no coinciden las medidas.
He estado leyendo sobre las dimensiones del JFrame (heredadas de Window), las dimensiones del Layout (que he probado también a usar diferentes tipos incluso null), los métodos set y get de height, width, minimumSize, preferredSize, bounds,... y todo lo que he ido encontrando por el camino; y no consigo unas conclusiones.

Os dejo un pequeño código de lo último que he probado y los resultados obtenidos:
Código
  1. public class App {
  2.  private Ventana miVentana;
  3.  
  4.  public static void main(String[] args){
  5.    miVentana = new Ventana();
  6.    miVentana.setSize(200, 200);
  7.    miVentana.setVisible(true);
  8.  }
  9. }
  10.  
  11. class Ventana extends JFrame {
  12.  public Ventana(){
  13.    getContentPane().setLayout(null);
  14.  }
  15. }

Establezco el layout a null para evitar que el layout pueda influir en las medidas de la ventana. Le doy un tamaño de 200 x 200 (que no choca con el tamaño mínimo de la ventana) pero al mostrar la ventana esta mide:
  • 234 x 242 (contando la barra de título)
  • 232 x 203 (contando el espacio interior de la ventana. Sin contar barra de título ni bordes)

He probado también a usar el método setBounds() para establecer la posición de la esquina superior izquierda en las coordenadas (0,0), es decir, que la ventana debería aparecer pegada también a la esquina superior izquierda, pero realmente tampoco es así. En el eje X se desplaza 8 píxeles a la derecha, es decir, que la esquina superior izquierda de la ventana aparece en las coordenadas (8,0).
Código
  1. // Sustituir el setSize(200, 200) del codigo anterior por:
  2. miVentana.setBounds(0, 0, 200, 200);

Sé que es un tema muy quisquilloso pero no sé de qué sirve poder establecer tamaños a las ventanas si luego no van a ser reales...
249  Programación / Programación C/C++ / Re: Programación C++ Ayuda en: 29 Abril 2020, 02:05 am
Recoloca el código para que quede entre las dos etiquetas de code. No hay forma de ver bien tu código...

Para mostrar la N solo tienes que rellenar la primera y última columna de la matriz con asteriscos y la diagonal principal que ya te adelanté en el otro tema cómo hacerlo.
Código
  1. // Rellenar primera columna. Para la ultima columna es igual cambiando el 0 del corchete por (size-1).
  2. for(int i = 0; i < size; ++i){
  3.  matriz[i][0] = '*';
  4. }
  5.  
  6. // Rellenar diagonal principal
  7. for(int i = 0; i < size; ++i){
  8.  matriz[i][i] = '*';
  9. }

No entiendo por qué tanto bucle for() y por qué cambias los valores del contador del for() dentro de éste...
250  Foros Generales / Dudas Generales / Re: Duda sobre diagrama de casos de uso en: 27 Abril 2020, 19:21 pm
Entiendo la idea, muchas gracias.
Y si seria el caso de que tanto el administrador como el medico son personas diferentes, lo ideal seria el diagrama de la versión 01?
Aún estaría con una duda, es que mayormente en todo los sistemas de gestión un Administrador tiene acceso a toda las funciones del sistema. Pero desde mi punto de vista en este caso lo mas apropiado para el Administrador ¿seria solo el de gestionar a los usuarios del sistema, dejando el resto de módulos según corresponda al medico y asistente respectivamente?
(Esto se puede ver en la primera imagen).
Más que que sean personas diferentes, sería el mismo criterio de antes. Dependería de si el sistema necesita que el administrador cambie de rol para hacer una tarea del médico (diagrama 1) o por ser administrador puede hacer cualquier cosa que hace el médico (diagrama 2).
Al final que el administrador pueda hacer todo lo que corresponde al médico, no significa que lo haga, simplemente que el sistema no le pondrá pegas si en un momento determinado lo hace.

Ya te digo que no sé cómo funciona de forma real porque yo lo he visto de forma teórica y de la teoría a la práctica hay un trecho. Pero digo yo que en una empresa, si el jefe (pongamos un tío que dirige 1000 talleres de coches y va siempre con traje y maletín) quiere un día ponerse a cambiar una rueda no será el ordenador el que le diga "chsss tú, que no te dejo que trabajes cambiando ruedas, tú a tu despacho a hacer papeles que es lo que tienes que hacer".
O vamos puede que sí, que el registro de empleados se lleve de otra forma aislada y el jefe no pueda hacer las tareas de los empleados.
El ejemplo es un poco tremendista pero vamos es para que se entienda. Lo que diseñes es lo que el sistema va a permitir o a prohibir.

Con el segundo diseño, el jefe podría hacer el cambio de ruedas y poner en el sistema que el cambio de ruedas lo ha hecho él con su usuario de jefe y con el primero el jefe tendría que tener dos usuarios en el sistema: uno de jefe y otro de mecánico (que son los únicos a los que el sistema permite hacer un cambio de ruedas) y el sistema guardaría el usuario del jefe como mecánico y no como jefe.

Yo es como lo veo llevando la teoría a la práctica pero si alguien sabe cómo funciona realmente esto en el día a día seguramente pueda responderte con más precisión.

Páginas: 1 ... 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 [25] 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 ... 88
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines