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 - Ogramar

Páginas: 1 ... 48 49 50 51 52 [53] 54 55 56 57 58 ... 100
1041
Hola Leo, como te ha indicado 5378453 pega el código para poder verlo. Recomendarte también que no copies texto directamente desde word. Primero copia el texto de word al bloc de notas, y luego súbelo a blogger. Al pasarlo por el blog de notas se eliminan los formatos internos que introduce word.

Salu2

1042
Hola ordenar por orden alfabético con JavaScript básicamente a partir de un array de nombres se hace con sort:

var fruits = ["Platano", "Naranja", "Almendra", "Manzana", "Mango"];
fruits.sort();

Después de aplicar sort ya tenemos los nombres ordenados:

Almendra, Mango, Manzana, Naranja, Platano

Si necesitas preparar los textos (por ejemplo pasar a mayúsculas o minúsculas, etc.) aquí tienes una referencia: http://aprenderaprogramar.com/index.php?option=com_content&view=category&id=78&Itemid=206

Salu2

1043
Perfecta la explicación, el código era un poco complejo y a veces se pone código sin saber lo que significa pero este no es el caso. Con esto queda más que aclarado el ejercicio

Salu2!

1044
Hola el cálculo del área de un polígono no es trivial, no creo que te pidan que desarrolles el algoritmo, sino más bien que te bases en el api de java o en algún algoritmo ya desarrollado. Aquí tienes una referencia http://www.mathopenref.com/coordpolygonarea2.html

Para ordenar las figuras habría distintas maneras de plantearlo:

Puedes generar una lista de números (un array o arreglo) y ordenarlo, al mismo tiempo guardas los índices en otra lista. La lista de índices te dará el orden.

Ejemplo: tienes tres figuras con area 30, 22, 45 y perímetro 123, 843, 92

Para ordenar por areas llamarías a un método ordenar pasándole (30,22,45) y te devolvería un array con los índices: 3, 1, 2 Esto significaría que la figura con mayor área es la 3, después la 1 y después la 2

Para ordenar por perímetro llamarías al mismo método pasándole (123, 843, 92) y te devolvería un array con los índices 2, 1, 3 Esto significaría que la figura con mayor perímetro es la 2, luego la 1 y luego la 3.

Otra alternativa sería ordenar la colección de figuras usando Comparable y Comparator como se explica en http://aprenderaprogramar.com/index.php?option=com_content&view=category&id=58&Itemid=180 y usando una colección que se ordene autómaticamente como SortedSet

Salu2

1045
Hola no sé si es lo que buscas pero en el package sentry están los ficheros JAR de políticas con ruta tipo hdfs://ha-nn-uri/user/solr/sentry/

Citar
The following is an example of a CDH Search policy file. The sentry-provider.ini would exist in an HDFS
location such as hdfs://ha-nn-uri/user/solr/sentry/sentry-provider.ini.

Salu2

1046
Hola para quienes quieran entender el programa comienza con una llamada Biseccion b=new Biseccion(0,1,0.01,20);

Donde los parámetros significan lo siguiente:

0 es el valor inferior inicial del intervalo de búsqueda (a)
1 es el valor superior inicial del intervalo de búsqueda (b)
0.01 es la tolerancia o desviación máxima admitida del resultado buscado (tol) (en este caso se da por bueno un resultado si está entre -0.01 y 0.01)
20 es el número de iteraciones permitidas (ni1)

A continuación se invoca double raiz=b.calcularRaiz();

En el método calcularRaiz se comienza calculando el punto medio del intervalo de búsqueda actual:

q=((b-a)/2);

Define un punto medio transitorio p = a+q

Si la imagen de p es 0 ó el intervalo q es menor que la tolerancia devuelve el valor del punto medio como resultado. Si el intervalo es menor que la tolerancia significa que tenemos el resultado dentro del intervalo, con una desviación del valor inferior a 0.01. Pero esta desviación no está referida al resultado de la función, sino al valor de x. Por tanto podría ocurrir que el valor de x estuviera muy próximo al valor que hace cero la función y sin embargo la función tener un valor superior a 0.01. Esto sería extraño porque en funciones continuas los límites izquierdo y derecho de la función cuando nos aproximamos al valor que hace cero la función son los valores inmediatos. No obstante podría no ocurrir así en determinados casos como funciones discontinuas o con asíntotas.

En resumen, aunque en este caso no te afecte al resultado creo que en vez de if(f(p,3)==0||q<tol) sería más correcto usar f(Math.abs(f(p,3))<tol){


Otro cambio que veo recomendable es modificar

       int i=0;
        while(i<ni){


Con estos cambios el código iría quedando así:

Código: [Seleccionar]
public class Biseccion {
double a,b,tol,p;
double matriz[][];
    int k,j,ni;
    public Biseccion(double a1, double b1, double tol1,int ni1){
         a=a1;
         b=b1;
         tol=tol1;
         ni=ni1;
         this.matriz=new double[ni][5];
    }
    private double redondea(double n){
    return Math.rint(n*1000000)/1000000;
    }
    private double f(double x,int opc){
    double r;
    switch(opc){
    case 1:
    r=Math.pow(x,3)+4*Math.pow(x,2)-10;
    return r;
    case 2:
    r=Math.pow(x,3)-x-1;
    return r;
    case 3:
    r=Math.pow(x,3)-7*Math.pow(x,2)+14*x-6;
    return r;
    default:
    break;
    }
    return 0;
    }
    public double calcularRaiz(){
    int i=0;
    double p,q;
        q=((b-a)/2);
        p=(a+q);
        while(i<ni){
            matriz[i][0]= i;
            matriz[i][1]=a;
            matriz[i][2]=b;
            matriz[i][3]=p;
            matriz[i][4]=f(p,3);
        //if(f(p,3)==0||q<tol){
            if(Math.abs(f(p,3))<tol){
        System.out.println("Proceso completado satisfactoriamente con "+f(p,3));
        break;
        }
        else{
        if(f(a,3)*f(p,3)>0)
        a=p;
        else
        b=p;
        q=redondea((b-a)/2);
        p=redondea(a+q);
        }
        i++;
        }
 
       return p;
    }
   
    public double[][] getMatriz() {return matriz;}
}


Y el test:

Código: [Seleccionar]
//CLASE CON MÉTODO MAIN
public class PruebaBiseccion {

    public static void main(String[] args) {
        Biseccion b=new Biseccion(0,1,0.01,20);
        double raiz=b.calcularRaiz();
        System.out.println("La raíz es: "+raiz);
        System.out.println("\n\n Matriz: \n");
        for(double[] array : b.getMatriz()){
            for(double numero:array)
                System.out.print(numero+"\t");
            System.out.println();
        }

    }

}

Ten en cuenta que los índices de i son 0, 1, 2, 3, ... y no 1, 2, 3, ...

Salu2

1047
Hola si hay más de tres elementos y sólo tenemos previsto el tratamiento de tres el resto no se verán afectados.

El código funciona bien. ¿Serías capaz de describir cómo sería el esquema que hace que la expresión elementoLabel[0].firstChild.nextSibling.firstChild.nodeValue = 'Name:' funcione?

Me refiero a un esquema similar a los que aparecen en el curso, sólo a partir del nodo del label

Salu2

1048
Hola Alexis

Para pegar código y poner título a los temas lee lo que se explica en https://www.aprenderaprogramar.com/foros/index.php?topic=1460.0

Para ver este problema pega el código de las clases completas, incluida la clase con el método main.

Pon también un ejemplo con una ecuación y cómo debería quedar rellena la matriz si hiciéramos los cálculos a mano, así sabremos cómo debemos desarrollar el código para obtener los resultados deseados.

Salu2!

1049
Hola para calcular el punto central de cada figura tienes que aplicar matemáticas y analizar figura a figura. Por ejemplo si tomamos el cuadrado veo que para el cuadrado has tomado 4 vértices, pero realmente creo que sólo te hacen falta dos vértices. Dado un vértice (x,y) y otro vértice (x', y') los otros dos vértices del cuadrado se pueden obtener como (x', y) y el otro como (x, y'). Mantener información sobre los 4 vértices en principio no parece que sea necesario.

A partir de los dos vértices del cuadrado tendríamos que las coordenadas para el centro del cuadrado son = ((x+x')/2, (y+y')/2 )

En las otras figuras el cálculo puede ser más complicado, por ejemplo en un triángulo no existe un centro propiamente dicho sino que se definen varios centros,

El incentro es el punto de intersección de las bisectrices de cada uno de los ángulos del triángulo (siendo una bisectriz la recta que divide a un ángulo en dos ángulos iguales),

El baricentro (también llamado centroide) de un triángulo es el punto de intersección de las medianas de dicho triángulo (siendo una mediana el segmento que une un vértice con el punto medio del lado opuesto).

El circuncentro es el punto de intersección de las mediatrices del triángulo (siendo una mediatriz la recta perpendicular a un lado que pasa por el punto medio del mismo).

El ortocentro de un triángulo es el punto de intersección de las tres alturas del triángulo (siendo una altura el segmento que parte de un vértice y es perpendicular al lado opuesto a dicho vértice).

Lo primero que tendrías que decidir es qué centro del triángulo vas a calcular y después aplicar matemáticas para calcularlo

Salu2

1050
No es molestia, intentamos ayudar en la medida de lo posible

Hay una cosa que no sé si has entendido bien respecto de lo que yo planteaba.

La clase Point representa un punto en el espacio de coordenadas. Pero no un punto del área de trabajo, ni un límite del área de trabajo. Es simplemente un punto, tu puedes usar los puntos para definir el centro de un círculo, o para definir los vértices de un triángulo, o para definir el extremo inferior izquierdo y superior derecho de un rectángulo y del área de trabajo, etc.

Por ello el comentario en la clase Point

Código: [Seleccionar]
/**
 * Clase Point para definir las Coordenadas X y Y
 * para referencia en el area de trabajo.
 * @author Jose Ricardo Rojas Montero. A24418
 */

no sería correcto

En realidad sería

Código: [Seleccionar]
/**
 * Clase Point para definir las Coordenadas X y Y
 * de un punto
 * @author Jose Ricardo Rojas Montero. A24418
 */

Con esa lógica tendríamos

Código: [Seleccionar]
  /**
     * Constructor de la clase
     * @param x Define las coordenadas horizontales de un punto
     * @param y Define las coordenadas verticales de un punto
     */

Y en la clase workarea sobraría lo indicado de modo que tendríamos

Código: [Seleccionar]
public class WorkArea {
 
    //Limites del area de trabajo
    private final Point originCoords = new Point(0,0);
    private final Point endCoords = new Point(100,100);
   
    public WorkArea() {
    }
}

Para definir el área de trabajo utilizas dos puntos (que definen un rectángulo), no te hace falta más

Si lo ves de otra manera coméntalo...

Salu2


1051
Lo que has hecho lo veo perfecto como punto de partida. Lo único que no entiendo es para qué incluyes en la clase workarea
Citar
    private int xCoord = 0;
    private int yCoord = 0;

¿Para qué necesitas esto?

Salu2

1052
Hola Apiles te recomiendo revisar el curso https://www.aprenderaprogramar.com/index.php?option=com_content&view=category&id=70&Itemid=193 donde se explica entre otras cosas las fechas.

También ten en cuenta que en los foros tratamos de ayudar a partir de una dificultad concreta, error o problema, es decir, debes intentar resolver el problema y cuando no sepas cómo avanzar consultar pegando el código hasta donde hayas podido llegar e indicando dónde no sabes avanzar.

Para pegar código en los foros debes leer esto: https://www.aprenderaprogramar.com/foros/index.php?topic=1460.0

Salu2

1053
Hola Ana, un id debe ser único en el código HTML. Es un identificador único, igual que un DNI, no pueden (o al menos no deben) haber elementos con id repetidos.

Por ello document.getElementById es una función que solo permite recibir un argumento y no varios.

La sintaxis es element = document.getElementById(id);

No puedes introducir dos id.

Salu2

1054
Hola Iván, para ayudarte pega el código como se explica en https://www.aprenderaprogramar.com/foros/index.php?topic=1460.0, si lo pegas como imagen no podemos copiarlo.

Para saber resolver este problema recomendamos seguir el curso Java desde cero disponible en https://www.aprenderaprogramar.com/index.php?option=com_content&view=category&id=68&Itemid=188

También ten en cuenta que en los foros tratamos de ayudar a partir de una dificultad concreta, error o problema, es decir, debes intentar resolver el problema y cuando no sepas cómo avanzar consultar pegando el código hasta donde hayas podido llegar e indicando dónde no sabes avanzar.

Salu2

1055
Hola MarckyMarck, tu código funciona bien y cumple lo que solicitaba el ejercicio. Cosas que debes tener en cuenta para mejorar:

- Añade métodos get y set siempre en tus clases, por ejemplo no tienes en la clase ListaCantantesFamosos   public ArrayList<String> getLista() { return listaCantantes;}

- Intenta no hacer recorridos de bucles indicando números concretos como límites

Código: [Seleccionar]
        for(int i=0;i<5;i++){
            System.out.println(cantantes.showNombre(i));
        }

Sería mejor:

Código: [Seleccionar]
        for(int i=0;i<cantantes.getLista().size();i++){
            System.out.println(cantantes.showNombre(i));
        }

- Cada método debe tener una responsabilidad única, clara y bien definida. No es un buen diseño:

Código: [Seleccionar]
    public void addNombre(){
        IntroTexto nomCantante= new IntroTexto();
        listaCantantes.add(nomCantante.getPalabra());
    }

Este método debería recibir un cantante y añadirlo, eso es lo que hace un método add. Si querías un método para pedir un cantante y añadirlo a la lista deberías haberlo nombrado de otra manera por ejemplo

Código: [Seleccionar]
    public void pedirNombreEInsertarEnLista(){
        IntroTexto nomCantante= new IntroTexto();
        listaCantantes.add(nomCantante.getPalabra());
    }

Sin embargo este método no está tampoco bien diseñado, porque un método debe encargarse de una cosa y no de dos. Si es para pedir un nombre, no es para insertar, y si es para insertar, no es para pedir. Esto se llama cohesión de un método: cada método tiene su responsabilidad. Esto son bases de diseño para hacer buenos programas en Java.

Te recomiendo revisar el hilo https://www.aprenderaprogramar.com/foros/index.php?topic=1549 y compararlo con tu código

Salu2!

1056
Hola de nuevo, si no quiere usarse una interfaz gráfica, puedes trabajarlo todo nada más que de forma abstracta y con base matemática. Digamos que todo será definido matemáticamente y no habrá nada visual. Esto es algo interesante de cara al aprendizaje, aunque puede resultar bastante tedioso sobre todo para quienes no tengan la base matemática suficiente.

Un planteamiento que se me ocurre es el siguiente: defines una clase Punto que conste de dos atributos enteros, coordenadaX y coordenadaY.

Los puntos te servirán para referenciar posiciones de cualquier elemento del sistema. Ahora tendrás que pensar que todo lo que trabajes estará sobre unos ejes de coordenadas donde tu punto de referencia será el (0,0)

Defines una clase denominada Plano (realmente preferiría llamarla AreaDeTrabajo, ya que no va a darse la definición matemática de un plano sino de un área).

En la clase AreaDeTrabajo tendríamos como atributos dos puntos: Punto coordenadasOrigen y Punto coordenadasFin

Para coordenadasOrigen defines como atributos coordenadaX = 0 y coordenadaY = 0

Para coordenadasFin defines como atributos coordenadaX = 100 y coordenadaY = 100

De este modo ya tienes definido el plano o área de trabajo.

Lo siguiente sería por ejemplo definir la clase Triangulo. Dentro de esta clase tendrías tres atributos Punto, uno para cada vértice del triángulo, por ejemplo Punto vertice1, Punto vertice2, Punto vertice3.

Definiendo coordenadas para los vértices ya tienes definido el triángulo. Un ejemplo sería:

Para vertice1: coordenadaX = 0 y coordenadaY = 0
Para vertice2: coordenadaX = 20 y coordenadaY = 0
Para vertice3: coordenadaX = 10 y coordenadaY = 10

Fíjate que con estos valores ya puedes determinar si el triángulo está dentro del plano o área de trabajo, por ejemplo un triángulo que tuviera estos datos

Para vertice1: coordenadaX = 0 y coordenadaY = 0
Para vertice2: coordenadaX = 200 y coordenadaY = 0
Para vertice3: coordenadaX = 10 y coordenadaY = 10

No sería válido, ya que ningún valor de coordenada puede situarse fuera del límite definido por el plano o área de trabajo.

Todo esto se podría dibujar, pero igualmente se puede trabajar sin dibujarlo simplemente usando clases y análisis matemático.

Ahora dentro de la clase triángulo necesitas añadir los métodos oportunos (además de los getters y setters), por ejemplo un método calcularArea.

Para calcular el área necesitas saber cuál es la base y cuál es la altura del triángulo. La base es el lado del triángulo de mayor longitud. Tendrías que calcular la distanciaVertice1_Vertice2, la distanciaVertice1_Vertice3 y la distanciaVertice2_Vertice3.

La distancia puede calcularse de varias maneras, una de ellas basándonos en vectores. Dado un vector definido por dos puntos A(x, y) y otro B(x', y') la distancia es el módulo del vector sqr ((x'-x)^2+ (y'-y)^2), esto es simplemente el teorema de pitágoras aplicado a un triángulo rectángulo definido por los puntos A y B.

Una vez calculadas las tres distancias, la mayor de ellas será la base del triángulo.

Ahora necesitas la altura. La altura puedes calcularla como la recta perpendicular a la base que pasa por el vértice que no está en la base del triángulo.

Con la base y la altura puedes calcular el área.

Esto seguramente se pueda hacer de otras maneras o plantearlo de forma más simple, yo he puesto lo que se me ha ocurrido pensándolo rápido. A lo mejor te puedes apoyar en clases del api de java que lo simplifiquen todo. A lo mejor puedes usar la clase Area del api java ¿?


Para el ejemplo anterior, tendríamos que area = base * altura / 2

Para vertice1: coordenadaX = 0 y coordenadaY = 0
Para vertice2: coordenadaX = 20 y coordenadaY = 0
Para vertice3: coordenadaX = 10 y coordenadaY = 10

Nuestra base es 20 y nuestra altura 10, nuestra área sería (20*10)/2 = 200/2 = 100

De este modo se iría resolviendo todo: matemáticamente.

Todo esto son ideas, lo que te recomiendo es que pienses primero cómo plantearlo y luego vayas paso por paso, crea una clase, sus métodos y pruébalo bien antes de pasar a crear otra clase.

Si vas pegando el código que vayas generando intentaremos echar una mano

Salu2

1057
Hola Dan no sé si te he entendido bien pero creo que la idea para reducir el uso de variables públicas sería la misma que se utiliza en Java. Declarar las variables como privadas y establecer métodos get para acceder y set para establecer, de modo que no se pueda acceder directamente a la variable, sino a través de métodos de un objeto. Las versiones antiguas de Visual Basic (hasta Visual Basic 6 por ejemplo) no admitían la orientación a objetos, pero las versiones modernas sí la permiten.

Salu2

1058
Hola para validar que el usuario introduce un número y que es entero

Código: [Seleccionar]
int n;
cin >> n;
if(!cin) // o también if(cin.fail())
{
    // El usuario no introdujo un número
    cin.clear(); // Borrar la entrada fallida
    cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); //Saltar la entrada no válida
    // Aquí poner código para volver a pedirle al usuario que introduzca un número
}

Salu2

1059
Hola r2montero no es fácil (tampoco excesivamente difícil), requiere que tengas ya cierta soltura con java además de aprender a trabajar todo el interfaz gráfico y bibliotecas swing y awt

Por suerte hay mucha información en internet por ejemplo dentro de los propios tutoriales java https://docs.oracle.com/javase/tutorial/2d/geometry/index.html

Este sería un ejemplo. Aquí el plano sería de 400x400 definido mediante setSize (el plano lo define aquí usando un JFrame) y dentro del plano dibuja diferentes figuras. Para referenciar las figuras dentro del plano métodos como

drawRect(int x, int y, int width, int height)
Draws the outline of the specified rectangle.

Ya te permiten establecer coordenadas (x, y)

Código de ejemplo:

Código: [Seleccionar]
import javax.swing.*;
import java.awt.*;

public class TestFiguras extends JFrame{
     public TestFiguras(){
          setSize(400,400);
          setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          setLocationRelativeTo(null);
          setVisible(true);
     }

     public static void main(String a[]){
         new TestFiguras();
     }

     public void paint(Graphics g){
          g.drawOval(40, 40, 60, 60); //Dibuja un circulo
          g.drawRect(80, 30, 200, 200); // Dibuja un cuadrado
          g.drawRect(200, 100, 100, 200); // Dibuja un rectángulo
     }
}

Inténtalo y pega el código para tratar de ayudarte

Salu2

1060
Hola Pqueroo fíjate en este hilo a la hora de poner título a los temas y también para otras indicaciones: https://www.aprenderaprogramar.com/foros/index.php?topic=1460.0

¿Qué significa " y me cambie una columna de mi tabla en access de en tierra a abordo."?

Páginas: 1 ... 48 49 50 51 52 [53] 54 55 56 57 58 ... 100

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".