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 ... 82 83 84 85 86 [87] 88 89 90 91 92 ... 100
1721
Aprender a programar desde cero / Re:Entrega ejercicio CU00649B
« en: 04 de Julio 2014, 14:18 »
Está bien aunque hay una cosa que no es correcta.

Cuando vi valorCadena3.substring(0, 6);; pensé que iba a dar un error por los dobles punto y coma, pero no da error  ::) así que eso lo puedes tener en cuenta pero da igual

Lo que no está bien es:

        String cadena1 = valorCadena1;
        String cadena2 = valorCadena2;
        String cadena3 = valorCadena3;

¿Para qué declaras estas variables si luego no las usas? Eso sería lo que se llama "código inútil" y hay que tratar de que en nuestras clases y programas no quede ese tipo de código porque al final complica la corrección de los programas y puede dar lugar a problemas a la larga.

Salud2s


1722
Aprender a programar desde cero / Re:Ejemplo CU00834B
« en: 04 de Julio 2014, 13:52 »
Hola, ¿has seguido estos pasos?

1 Subir un fichero denominado archivo.txt en blanco al servidor (en la misma ruta donde tengas el archivo php)

2 Invocar la ruta donde tengas el archivo php

3 Descargar el fichero denominado archivo txt y comprobar si hay escritas varias líneas

Al ejecutar es normal que te aparezca una página en blanco porque en el fichero php no se indica nada para que sea mostrado por pantalla. Lo que tienes que comprobar es el fichero denominado archivo.txt a ver si se ha escrito lo que se tenía que escribir. Saludos

1723
Hola, interfaz puede tener varios significados. El que se indica en la entrega CU00648 no es en el sentido de que interfaz sea una clase, sino que la interfaz de una clase es la definición de sus métodos y constructores públicos, que podemos usar sin necesidad de conocer el código de esos métodos, nos basta con conocer su signatura. Según esto, a través de la documentación del api de Java podemos conocer la interfaz de todas las clases del api de java y conociendo esa interfaz podemos utilizarlas sin necesidad de conocer el código con que están programadas. Saludos

1724
Aprender a programar desde cero / Re:Ejercicio CU00832B
« en: 04 de Julio 2014, 11:38 »
Hola, parece que tienes un error en el nombre del archivo en el action:

Está escrito: action="ejemploPosGettRequest.php?nombre=pepito"

Debería ser: action="ejemploPostGetRequest.php?nombre=pepito"



Aparte de eso parece que hay una errata en el código que pone el curso para el archivo php. El código correcto sería este:

Código: [Seleccionar]
<?php //Ejemplo aprenderaprogramar.com
echo "nombre = " $_REQUEST['nombre'];
?>


Con este código ya debería funcionarte correctamente.

Ya lo he comunicado para que lo corrijan, gracias por detectarlo. Saludos,

1725
Aprender a programar desde cero / Re:Entrega Ejercicio CU00647B
« en: 04 de Julio 2014, 11:22 »
El código está perfecto, no es un gran calculadora pero lo que hace lo hace bien  ;D

Saludos!

1726
Aprender a programar desde cero / Re:Entrega Ejercicio CU00644B
« en: 04 de Julio 2014, 11:19 »
Hola, tienes un error en for(int i=1; 0<=n; i++){

Supongo que es for(int i=1; i<=n; i++){


Haciendo este pequeño cambio ya funciona sin problema. Saludos ;)

1727
Hola, en relación a las dudas:

a) Correcto como indicas

b) El uso del this: hay casos en los que no es necesario (como este), pero lo puedes poner si quieres. Si no es necesario, ¿para qué ponerlo? Simplemente para remarcar o dejar claro que te estás refiriendo al objeto-en-sí, es decir, a un atributo o método de la propia clase y no a otra cosa (un parámetro u otra cosa). this actúa eliminando ambiguedades cuando existen, pero se puede poner siempre que quieras, no es algo que sólo puedas usar para eliminar ambiguedades.


Con super.equals estamos invocando el método equals de la clase padre como si fuera un método propio de la clase hijo. El equals de la clase padre pierde visibilidad en la clase hijo debido a que está sobreescrito. La forma de poder invocarlo es usar la palabra clave super. De esta forma indicamos que el método equals de la clase padre está embebido en la clase hijo, es decir, que para dos objetos ser iguales tiene que cumplirse la condición de igualdad de la clase padre y además algunas cosas suplementarias.

Tú puedes escribir: if ( this.IdProfesor.equals(tmpProfesor.IdProfesor) ) {

en este caso sin invocar super, pero estás cambiando las condiciones de igualdad. Podrías hacerlo si se considerara oportuno.

Respecto a si Java busca automáticamente métodos hacia las clases padres: sí, siempre que no estén sobreescritos. En este caso está sobreescrito, por tanto no usará el método de la clase padre a no ser que nosotros se lo indiquemos.



Sobre la última duda: ¿una recursión constante? Si te refieres a si el método equals se llama a sí mismo la respuesta es no. El método equals de persona es una cosa, el método equals de un String otra. Cuando escribimos this.nombre.equals(tmpPersona.nombre) estamos usando el método equals de String. Son métodos sobreescritos, por tanto su significado depende de qué objeto sea el que lo invoque.

Saludos  ;D

1728
Hola, quizás lo que se comenta en este hilo te sea de utilidad: https://www.aprenderaprogramar.com/foros/index.php?topic=784.0

De cualquier forma, pega el código que estés usando. Para ello pulsa el botón # del editor y entre las etiquetas [ code ] ... [ / code ] pega tu código. Si es muy largo puedes ponerlo como archivos adjuntos en vez de pegarlo. Para poner un archivo adjunto pulsa sobre opciones adicionales y luego elige el archivo o archivos.

Saludos almondk

1729
Me has hecho sonreir con eso de que adivino el pensamiento  ;D, ya me gustaría a mí!
Citar
Aquí quiero preguntarte. ¿Cómo se gestiona la frontera entre: código sencillo/compacto y código con funciones separadas, independientes (cada una haciendo solo lo suyo)?

Esta pregunta que planteas es una pregunta muy interesante. Quizás una respuesta pueda ser que la experiencia te irá indicando, pero para no decir sólo eso (que es verdad), te voy a dar algunas ideas.

Si la tarea a realizar se puede condensar en unas cuantas líneas (5, 10, 15 ó 20) en general será preferible mantenerla "compacta". Si la tarea a realizar requiere más de 20 líneas posiblemente es preferible delegarla en un método independiente. Estos es orientativo y depende del proyecto en el que se esté trabajando. Quizás el límite en algunos proyectos sea más grande, en vez de en torno a 20 en torno a 40, pero como idea inicial puede valer. Otro criterio a tener en cuenta es la complejidad. Si la tarea es de 15 líneas pero son muy muy complejas, posiblemente sea adecuado ponerla de forma independiente. Saludos

1730
Aprender a programar desde cero / Re:Entrega ejercicio CU00641B
« en: 22 de Junio 2014, 21:15 »
Hola, lo he revisado:

En la clase SalonCasa pones public Persona() -- > cambiarlo por public SalonCasa()


En las clases SalonCasa y CocinaCasa te falta poner private delante de la declaración de los atributos.

En la clase casa faltaría private en los atributos superficie y direccion

   double superficie;
   String direccion;
   private SalonCasa salonCasa;
   private CocinaCasa cocina;

Los atributos siempre llevan private delante (al menos siempre que específicamente no se pretenda hacer algo especial)

Los métodos setDatosSalon y setDatosCocina no estarían bien planteados: ver comentarios en https://www.aprenderaprogramar.com/foros/index.php?topic=964

Para ver cómo plantear los métodos get de Cocina y Salon ver comentarios en https://www.aprenderaprogramar.com/foros/index.php?topic=964

Saludos

1731
Hola, el código funciona bien pero te indico algunas cosas que son de interés.

La primera es que la clase tiene como atributos texto1 y texto2, pero estos atributos luego no participan de los métodos (excepto los getters y los setters). No se ve muy lógico: o bien puedes prescindir de los atributos si no se van a usar, o bien los métodos deberían manipular los atributos en lugar de parámetros. Esa sería la forma de hacer coherente que la clase tenga atributos: o los tiene para algo, o se los quitamos.

El método encadenaDosCadenas diría que va perfecto.

El método encadenaDosCadenasSioSi:

Utiliza el método auxiliar actualizaLongitud. Como ejercicio lo veo bien, pero si hubiera que plantearlo en la práctica me hubiera resultado más sencillo no usar ese método auxiliar sino escribir:
Código: [Seleccionar]
    // encadena las dos cadenas aunque no tengan los tres caracteres.
    public String encadenaDosCadenasSioSi ( String valorTexto1, String valorTexto2 ) {
        // <cadena> guardará el resultado
        String cadena = "";
        // longitud máxima de caracteres a devolver para cada parámetro
        int largoTexto1 = 3;
        int largoTexto2 = 3;
       
        if (valorTexto1.length() <3 ) { largoTexto1 = valorTexto1.length(); } else {largoTexto1 = 3;}
        if (valorTexto2.length() <3 ) { largoTexto2 = valorTexto2.length(); } else {largoTexto2 = 3;}
       
        // encadenar resultado
        cadena = valorTexto1.substring(0,largoTexto1) + " " + valorTexto2.substring(0,largoTexto2);

        // devolver resultado
        return cadena;
    } // fin del método

¿Por qué? Porque cuanto más sencillo sea el código mejor. De todas formas es un buen ejemplo de uso de un método auxiliar. Saludos

1732
Aprender a programar desde cero / Re:php, mysql ingreso
« en: 20 de Junio 2014, 08:43 »
Por lo que te he entendido entonces debes hacerlo con un bucle y usando UPDATE para reemplazar el valor que tienes por el nuevo.

Suponiendo que lo que tienes en la columna son valores numéricos y con datos de ejemplo:


$minimoActual sería el valor que tienes mínimo actualmente en la tabla, por ejemplo 1

$maximoActual sería el valor que tienes máximo actualmente en la tabla, por ejemplo 4

$minimoNuevo sería el valor que tiene que reemplazar al mínimo actual, por ejemplo 5

El incremento para todos los índices es $incremento = $minimoNuevo - $minimoActual, en este ejemplo 5 - 1 = 4

Todos los valores tienes entonces que incrementarlos en 4



$link = mysql_connect("sql203.byethost7.com", "b7_10356956", "*****");
mysql_select_db("b7_10356956_mibasededatos", $link);


for ($numero = minimoActual; $numero <= maximoActual; $numero++){

mysql_query("UPDATE `nombreTabla` SET `nombreColumna`= ($numero+$incremento) WHERE `valorColumna`= $numero", $link);

}

mysql_close($link); // Cerramos la conexion con la base de datos


La sintaxis no es exactamente así, habría que probarla.

1733
Hola, ¿puedes poner un ejemplo concreto con nombres de productos y nombres de clases? ¿qué es en concreto lo que tienes que buscar? Saludos

1734
Aprender a programar desde cero / Re:php, mysql ingreso
« en: 19 de Junio 2014, 18:07 »
Puedes hacer una consulta para extraer el valor más grande en esa columna (que será el último) y seguidamente insertar el valor obtenido más uno, de esa forma te funcionaría como incremental.

Obtener el máximo en la columna sería:

select id, max(nombreColumna)
from nombreTabla
group by id

Aquí tienes ejemplos de max

http://dev.mysql.com/doc/refman/5.0/es/example-maximum-row.html

Saludos

1735
Quizás la idea del recorrido recursivo te sirva. Si tienes la lista de Apps y tienes que comprobar cuántas Apps cumplen una determinada condición (por ejemplo que el atributo esDePago == false) la idea sería recorrer recursivamente la colección.

Aquí he creado un ejemplo de recorrido recursivo:

https://www.aprenderaprogramar.com/foros/index.php?topic=962.0

Espero te sirva

1736
Este código Java permite recorrer recursivamente una lista (o cualquier otra colección análoga) sin usar bucles tradicionales (for, while, etc.)

Normalmente será preferible un recorrido con un iterador, bucle for tradicional, etc. pero en ocasiones nos puede interesar operar recursivamente.

Código: [Seleccionar]
import java.util.ArrayList;
import java.util.Arrays;

public class recorridoRecursivo {
    //Recorrido recursivo ejemplo aprenderaprogramar.com

    public static void recorridoRecursivo (ArrayList<Integer> lista, int indiceActual) {
        if (indiceActual == lista.size()-1) { System.out.println ("Ultimo elemento..."+lista.get(indiceActual)); }
        else {
            System.out.println("Leyendo... " + lista.get(indiceActual));
            recorridoRecursivo(lista, indiceActual+1);
        }       
    }

    public static int numeroDeSietes (ArrayList<Integer> lista, int indiceActual, int contador) {
        if(lista.get(indiceActual) == 7) {contador= contador+1;}

        if (indiceActual == lista.size()-1) { return contador;     }

        else { return numeroDeSietes(lista, indiceActual+1, contador);    }         
    }

    public static void main (String[] args) {
        Integer [] listado = {3, 4, 1, 7, 3, 5, 7, 9, 4, 7}    ;
        ArrayList <Integer> listadoNumeros = new ArrayList<Integer> (Arrays.asList(listado));

        System.out.println ("listadoNumeros contiene " + listadoNumeros);
        System.out.println ("RECORRIDO SIN BUCLES (RECURSIVO)");
        recorridoRecursivo(listadoNumeros, 0);
        System.out.println ("RECORRIDO SIN BUCLES (RECURSIVO) CONTANDO ELEMENTOS QUE CUMPLEN UNA CONDICIÓN");
        System.out.println ("El número de sietes en la lista es " + numeroDeSietes (listadoNumeros, 0, 0));
    }
}

1737
Para recorrer una colección lo más habitual es usar un bucle, bien sea un while, un for tradicional o un for each. Por ejemplo si te dicen: dada una lista de 10 números, ¿cuántos de esos números tienen valor 7?

Normalmente se usará un bucle para recorrer los diez números para comprobar cuántos sietes hay.

Otra cosa es si en el api que estás usando existe un método predefinido que te permite obtener el número de veces que aparece un bucle invocando un método.

Por ejemplo: Coleccion.getNumeroApariciones(nombreArrayList, 7) te podría devolver el número de veces que aparece 7 en el ArrayList que pases como parámetro. De esta forma no estás utilizando ningún bucle (en realidad sí lo estás usando, pero digamos que en segundo plano porque es la clase y método que estás invocando quien implementa la operación).

Finalmente, podrías implementar un procedimiento recursivo para recorrer la colección. Esto quizás puedas considerar que formalmente no es un bucle (ya que no utilizarías for, while ni nada parecido).


1738
De todo un poco... / Re:Buscador y BBDD
« en: 14 de Junio 2014, 13:38 »
Hola, todo depende de cómo se enfoque el trabajo, si vas a pagar por hacerlo o si vas a tratar de desarrollarlo "entre amigos", qué magnitud de volumen de información habrá que manejar (no es lo mismo por ejemplo 100 libros que 100000 libros), qué procesos hay que incluir dentro de la web (si por ejemplo hay registro de usuarios, venta a través de tpv on line, paypal o similar,etc.) y algunos detalles más, entre ellos si tú vas a participar como programador, diseñador o simplemente aportando contenidos. También es importante distinguir entre si hay que meter contenidos (títulos, imágenes, descripciones, etc.) a mano, o si se hace de forma automatizada tomando los datos de archivos o de otras webs.

Los costes son entonces muy variables. Para que te hagas una idea, en España una web básica te podría costar entre 300 y 900 euros por decir algo, dependiendo de las funcionalidades que hubiera que incluirle. En el caso que tú indicas no parece una web básica, ya que un buscador puede tener requerimientos especiales, aunque habría que verlo con detenimiento.

 

1739
Codeblocks requiere instalación, va bien para aprender y para programar C/C++

Eclipse en Windows se puede ejecutar sin instalación (lo cual puede verse como una ventaja), permite programar en numerosos lenguajes y se usa más a nivel profesional. Tiene numerosos plugins para extensión de funcionalidades.

Anjuta no parece un proyecto con continuidad, los dos anteriores en principio sí.

1740
La recursividad es difícil de entender y depurar, de ahí que muchos programadores opten por no utilizarla.

En este caso con dos pequeñas modificaciones parece que el programa funciona bien. La primera:

    if ( claveDeBusqueda == b[ central ] ) {
        printf("\ncentral = %d", central);
        return central;
    }

Es decir, cuando encuentras la solución tienes que devolver el índice donde lo has encontrado, no devolver -1 (eso sería que no se ha encontrado)

Si declaras la función recursiva de tipo int, significa que la función va a devolver un entero, sin embargo hay ramas de ejecución sin sentencia return ¿entonces qué devuelve la función? La solución está en que devuelva una llamada recursiva, simplemente añadir un return antes de la llamada recursiva

Con estos pequeños cambios:

Código: [Seleccionar]
// Ejercicio 6.35: Búsqueda binaria (recursivo) //
#include <stdio.h>
#define TAMANIO 15
/* prototipos de las funciones */
int busquedaBinaria( const int b[], int claveDeBusqueda, int bajo, int alto );
void despliegaEncabezado( void );
void despliegaLinea( const int b[], int bajo, int medio, int alto );

/* la función main comienza la ejecución del programa */
int main() {
    int a[ TAMANIO ]; /* crea el arreglo a */
    int i; /* contador para inicializar los elementos de 0 a 14 del arreglo a */
    int llave; /* valor a localizar en el arreglo a */
    int resultado; /* variable para almacenar la ubicación de la llave o -1 */

    /* crea los datos */
    for ( i = 0; i < TAMANIO; i++ ) {
        a[ i ] = 2 * i;
    } /* fin de for */

    printf( "Introduzca un numero entre 0 y 28: " );
    scanf( "%d", &llave );
    despliegaEncabezado();
    /* busca la llave en el arreglo a */
    resultado = busquedaBinaria( a, llave, 0, TAMANIO - 1 );

    /* despliega los resultados */
    if ( resultado != -1 ) {
        printf( "\n%d se encuentra en el elemento %d del arreglo\n", llave, resultado );
    } /* fin de if */
    else {
        printf( "\n%d no se encuentra\n", llave );
    } /* fin de else */

    system("pause");
    return 0; /* indica terminación exitosa */

} /* fin de main */

/* función para realizar la búsqueda binaria en un arreglo */
int busquedaBinaria( const int b[], int claveDeBusqueda, int bajo, int alto ) {
    int central = ( bajo + alto ) / 2;
    despliegaLinea( b, bajo, central, alto );


    if ( bajo > alto ) {
        printf("\ncentral = %d", central);
        return -1;
    }

    if ( claveDeBusqueda == b[ central ] ) {
        printf("\ncentral = %d", central);
        return central;
    }

    if ( claveDeBusqueda < b[ central ] ) {
        return busquedaBinaria( b, claveDeBusqueda, bajo, central - 1 );
    }

    if(claveDeBusqueda > b[central] ) {
        return busquedaBinaria (b, claveDeBusqueda, central + 1, alto);
    }

} /* fin de la funcipon busquedaBinaria */

/* Imprime un encabezado para la salida */
void despliegaEncabezado( void ) {
    int i; /* contador */

    printf( "\nSubindices:\n" );

    /* muestra el encabezado de la columna */
    for ( i = 0; i < TAMANIO; i++ ) {
        printf( "%3d ", i );
    } /* fin de for */

    printf( "\n" ); /* comienza la nueva línea de salida */

    /* muestra una línea de caracteres  - */
    for ( i = 1; i <= 4 * TAMANIO; i++ ) {
        printf( "-" );
    } /* fin de for */

    printf( "\n" ); /* inicia una nueva línea de salida */
} /* fin de la función despliegaEncabezado */

/* Imprime una línea de salida que muestra la parte actual
   del arreglo que se esta procesando. */
void despliegaLinea( const int b[], int baj, int cen, int alt ) {
    int i; /* contador para la iteración a través del arreglo b */

    /* ciclo a través del arreglo completo */
    for ( i = 0; i < TAMANIO; i++ ) {

        /* despliega espacios si se encuentra fuera del rango actual del subarreglo */
        if ( i < baj || i > alt ) {
            printf( "    " );
        } /* fin de if */
        else if ( i == cen ) { /* despliega el elemento central */
            printf( "%3d*", b[ i ] ); /* marca el valor central */
        } /* fin de else if */
        else { /* despliega otros elementos en el subarreglo */
            printf( "%3d ", b[ i ] );
        } /* fin de else */

    } /* fin de for */

    printf( "\n" ); /* inicia la nueva línea de salida */
} /* fin de la función despliegaLinea */

Páginas: 1 ... 82 83 84 85 86 [87] 88 89 90 91 92 ... 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".