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 - Alex Rodríguez

Páginas: [1] 2 3 4 5 6 ... 93
1
Hola N1elsRoy, sin ser experto creo que con Pascal habría muchas formas de trabajar esto, incluso dependiendo de la versión de Pascal que se utilice puede haber variantes.

La forma más básica sería con un array estático:

Código: [Seleccionar]
program arrayToFunction;
const
   size =6;
type
   a = array [1..size] of integer;
var
   balance:  a =(300,7,2,94,31,49);
   media: real; 
function avg(var arr: a): real;
var
   i :1..size;
   sum: integer;
begin
   sum :=0;
   for i :=1 to size do
      sum := sum + arr[i];
   avg := sum / size;
end;
begin 
   (*  Pasamos el array a la función *)
   media := avg( balance );
   (* Mostramos el resultado obtenido *)
   writeln('La media que se obtiene de los valores del array es: ', media:7:2);
end.

Pero habría otras basadas en punteros, arrays abiertos, etc. de modo que el tamaño y contenido del array puede ser establecido en tiempo de ejecución del programa. Por ejemplo:

Código: [Seleccionar]
program arrayToFunction;
var
   miArray: Array of Integer;

Function Average (Row : Array of integer) : Real; 
Var I : longint; 
    Temp : Real; 
begin 
  Temp := Row[0]; 
  For I := 1 to High(Row) do 
    Temp := Temp + Row[i]; 
  Average := Temp / (High(Row)+1); 
end;

begin 
   (*  Pasamos el array a la función *)
   (* Mostramos el resultado obtenido *)
   setlength(miArray,3); 
   miArray[0] := 1; miArray[1] := 8; miArray[2] := 9;
   writeln('La media que se obtiene de los valores del array es: ', Average(miArray):7:3);
end.

Que es más al estilo Java como en este código:

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

public class ArraysToMethod {
   public int max(int [] array) {
      int max = 0;

      for(int i=0; i<array.length; i++ ) {
         if(array[i]>max) {
            max = array[i];
         }
      }
      return max;
   }

   public int min(int [] array) {
      int min = array[0];
   
      for(int i = 0; i<array.length; i++ ) {
         if(array[i]<min) {
            min = array[i];
         }
      }
      return min;
   }

   public static void main(String args[]) {
      Scanner sc = new Scanner(System.in);
      System.out.println("Introduzca el tamaño del array a ser creado:");
      int size = sc.nextInt();
      int[] myArray = new int[size];
      System.out.println("Introduzca el número de elementos del array:");

      for(int i=0; i<size; i++) {
         myArray[i] = sc.nextInt();
      }
      ArraysToMethod m = new ArraysToMethod();
      System.out.println("El elemento más grande del array es:"+m.max(myArray));
      System.out.println("El elemento más pequeño del array es:"+m.min(myArray));
   }
}

2
Hola Felipe, bienvenido a los foros. Te comento algunas cuestiones.

Revisa https://aprenderaprogramar.com/foros/index.php?topic=1460.0 donde hay distintas indicaciones para escribir en los foros. Es importante seguir las pautas para poner título a los temas, pegar el código con el formato adecuado, etc.

En el ejercicio algunas cuestiones a mejorar serían:

- Los métodos set y get por convenio van seguidos del nombre del atributo. En lugar de setInde y getInde es más adecuado setEsIndependiente y getEsIndependiente. No significa que el código no funcione como tú lo has escrito, sino que no se atiene al convenio que siguen los programadores java.

- Si comparas tu segundo constructor con el que aparece en https://aprenderaprogramar.com/foros/index.php?topic=1238.0 verás algunas diferencias. La principal es que tal y como has escrito tú el código, los objetos que se reciben como parámetros pasan a ser atributos y pueden ser modificados. Con el código tal y como está escrito en ese otro hilo se crean nuevos objetos salonCasa y cocina, de modo que su modificación no afectaría a los objetos que se recibieron como parámetros.

- Con tus métodos setCocinaCasa y setSalonCasa ocurre lo mismo: los objetos recibidos como parámetros pasan a ser atributos. Esto implica que si se manipulan, se verán afectados también los objetos recibidos. Pongo un ejemplo. Supongamos que tú tienes una casa llamada casaFelipe con una cocina llamada cocinaFelipe. Y ahora creamos otra casa llamada casaJuan con una cocina llamada cocinaJuan. Si tú pasas la cocinaFelipe para crear la cocinaJuan, tal y como tú tienes escrito el código, si se modifica la cocinaJuan se modificará también la cocinaFelipe ¿Por qué? Porque estableces el propio objeto recibido como parámetro como atributo en lugar de crear uno nuevo. En cambio con el código como se explica en el hilo indicado puede evitarse esto, que en general es preferible.

Si no entiendes bien esto ahora no te preocupes, apúntalo para revisarlo más adelante.

Saludos

3
Hola Andres1s y bienvenido. Mira en este hilo cómo poner título a los temas y cómo pegar código en los foros: https://aprenderaprogramar.com/foros/index.php?topic=1460.0

En este curso tienes ejemplos de consultas a una base de datos con PHP que quizás te sirvan: https://www.aprenderaprogramar.com/index.php?option=com_content&view=category&id=70&Itemid=193

Saludos

4
Hola, por favor es importante leer https://aprenderaprogramar.com/foros/index.php?topic=1460.0 y seguir las pautas. El título que has puesto al tema no es adecuado. El código que has aportado parece incompleto.

Vamos a proceder a borrar este tema en breve. Si lo deseas crea otro tema con un título adecuado e incluye el código que compile.

Saludos.

5
Hola, he ejecutado el programa y me ha salido el error siguiente:

error system was not declared in this scope

Esto lo he arreglado simplemente añadiendo al principio la línea siguiente:

#include <cstdlib>

Después me ha salido el error siguiente:

main.cpp|139|error: 'to_string' was not declared in this scope

He añadido al principio la siguiente línea:

#include <string>

Pero siguió saliéndome el error del to string.

to_string() es una característica de c++11. Como estoy usando CodeBlocks, me he ido a Project -> Build options -> Compiler settings y he activado la opción "Have g++ follow the C++11 ISO C++ language standard [-stc=c++0x]

Pero tampoco me ha funcionado. Hay una forma de solucionarlo descrita en https://www.programmersought.com/article/84184740114/ pero ya he desistido, así que me he ido a un compilador de c++ online y lo he probado online y ha funcionado bien.

Hago algunos comentarios sobre el código.

Veo que en los comentarios aparece marketProduct pero esa variable no aparece después en el código.

Has declarado cosas como:

Código: [Seleccionar]
int vegeFruts[3]; //vegetales y frutas
vegeFruts[0] = 2; //tomates
vegeFruts[1] = 4; //papas
vegeFruts[2] = 4; //lechuga

A mí esto no me parece demasiado correcto, en el sentido de que sabes que el índice 0 son tomates debido a un comentario del código, pero si el programa crece o se cambian cosas a la larga puede hacerse caótico porque no se sabe bien la correspondencia de los números con las cosas.

Para evitar esto lo suyo sería tener una estructura de datos, un struct al estilo clásico, o una clase al estilo de la programación orientada a objetos.

El no usar funciones en general hace el código no reutilizable, por lo que se desaconseja. Pero si lo has hecho para practicar, pues eso, sólo debería usarse algo así para practicar.

Saludos.

6
Hola, he revisado el ejercicio y lo veo muy bien resuelto.

Sobre lo que comentas de si usar return (super.obtenerSalarioBase() + (47.80*añosEmerito)); sería correcto, la respuesta es que sí, seguramente muchos programadores lo harían así por economía o para ir más rápido. Sin embargo a mí me gusta más como lo has hecho tú porque es más legible y más entendible.

Una recomendación que solemos hacer es evitar el uso de eñes en identificadores como nombres de métodos o de variables. En lugar de añosConsolidados usaríamos annosConsolidados. El motivo es que a la larga cuando se migran los programas o se ejecutan en otras plataformas usar caracteres con tildes o eñes puede acabar generando problemas y una forma de evitarlo es simplemente no usarlos ni aunque sean permitidos.

Saludos.

7
El mensaje de error parece aludir a que no encuentra el archivo datos.txt que parece que tienes definido en

archivo_leer = New StreamReader("./datos.txt")

Deberías comprobar que tienes el archivo creado y que la ruta es correcta. Al indicar ./datos.txt estarías aludiendo a que el archivo se encuentra en el directorio de trabajo actual que está usando Visual Basic, esto deberías comprobarlo.

¿Qué versión de VB estás usando? Esto deberías indicarlo en el título, como se explica en https://aprenderaprogramar.com/foros/index.php?topic=1460.0 , mira ahí las recomendaciones para poner título a los temas.

Saludos

8
De todo un poco... / Re: Servidor de Discord?
« en: 15 de Enero 2021, 18:02 »
Hola, en el hilo https://aprenderaprogramar.com/foros/index.php?topic=1460.0 tienes las normas y políticas que aplicamos en los foros. Saludos.

9
Hola mark255, recomendamos siempre que el código quede en los foros debido a que los enlaces suelen terminar fallando con el tiempo y dificultan la navegación. Como ha indicado Kabuto, además de pegar el código se puede añadir un enlace como forma "combinada" si se desea. Saludos.

10
Comunidad / Re: Feliz Navidad y Próspero Año Nuevo para todos
« en: 26 de Diciembre 2020, 17:47 »
Igualmente felices fiestas y mis mejores deseos para todos y todas.

11
Hola, el concepto de interface puede ser un poco difícil de captar al principio. Básicamente lo que hace una interface es definir cómo va a ser una clase en cuanto a cosas que debe cumplir, pero sin especificar el código concreto con el que va a cumplirse eso. Luego puede haber varias clases que cumplan (implementen) la interfaz de distintas maneras en cuanto al código concreto, pero los nombres y parámetros de los métodos definidos por la interfaz tendrán que incluirlos en todo caso. De todas formas este concepto de interface se estudia con más detalle más adelante en el curso, casi al final, por lo que ahora es suficiente con quedarse con la idea.

Respecto al ejercicio el código lo veo bastante bien planteado. Comentar algunas cosas:

- Set se traduce como conjunto y es una interface Java, mientras que List es otra interface Java distinta. Por eso no es lo más adecuado usar nombres para sets de tipo lista1 porque puede confundir. Por ejemplo en lugar de HashSet<String> lista1; sería mejor HashSet<String> conjunto1; ó HashSet<String> miSet1; para no confundir sets con lists.

- En la parte de recorridos con iteradores, creas un iterador para el ArrayList de Set y lo invocas, pero realmente no llegas a usarlo. Es un código "que está pero no se usa", por lo que no es útil. En concreto si comento varias líneas del código, el resultado que obtengo es el mismo porque realmente los iteradores que usas son sólo los del HashSet y los del TreeSet. Aquí el fragmento de código con las líneas comentadas:

Código: [Seleccionar]
        //Iterator<Set> listaIterada = miLista.iterator();    //creando iterador para miLista ArrayList<set>
        Iterator<String> lista1Iterada = lista1.iterator(); //creando iterador para lista1 HashSet<String>
        Iterator<Integer> lista2Iterada = lista2.iterator();//creando iterador para lista2 TreeSet<Integer>
     
        //recorro con un iterador mi HashSet y mi Set ,contenidos en un Arraylist ,recorrido a su vez a traves de un iterador
        //while(listaIterada.hasNext()){
            while(lista1Iterada.hasNext()){
                System.out.print(lista1Iterada.next() + "," );
            }
            while(lista2Iterada.hasNext()){
                System.out.print(lista2Iterada.next());
                if (lista2Iterada.hasNext())
                {
                    System.out.print(",");
                   
                }
            }
            //listaIterada.next();
        //}


Podría hacerse uso del iterador del ArrayList así:

Código: [Seleccionar]
        Iterator<Set> listaIterada = miLista.iterator();    //creando iterador para miLista ArrayList<set>
        Iterator<String> lista1Iterada = lista1.iterator(); //creando iterador para lista1 HashSet<String>
        Iterator<Integer> lista2Iterada = lista2.iterator();//creando iterador para lista2 TreeSet<Integer>
     
        //recorro con un iterador mi HashSet y mi Set ,contenidos en un Arraylist ,recorrido a su vez a traves de un iterador
        while(listaIterada.hasNext()){
            System.out.println("Elemento del ArrayList de Set: "+listaIterada.next());
        }
            while(lista1Iterada.hasNext()){
                System.out.print(lista1Iterada.next() + "," );
            }
            while(lista2Iterada.hasNext()){
                System.out.print(lista2Iterada.next());
                if (lista2Iterada.hasNext())
                {
                    System.out.print(",");
                   
                }
            }


En cualquier caso creo que puede darse el ejercicio por bueno.

Si se quiere ver una solución donde se recorren los elementos del ArrayList, y para cada uno se recorren sus elementos, puede encontrarse en https://aprenderaprogramar.com/foros/index.php?topic=2384.0 donde el bucle se plantea básicamente así:

Código: [Seleccionar]
        while (it1.hasNext()) {
            Set tmp = it1.next();
            Iterator it2=tmp.iterator();
            int i = 0;                               
            while(it2.hasNext()){
                System.out.println("i: " + (i++) + " - " + it2.next());
            }
        }

Correspondiendo el it1 al ArrayList de Set y por cada elemento extraído se crea un iterador it2 dentro del bucle. it1 nos devuelve objetos Set mientras que it2 nos puede devolver bien String bien Integer. Por eso para it2 si no declaramos el tipo, se maneja lo que devuelve como si elementos del supertipo Object.

Saludos

12
Hola, he revisado el ejercicio y aunque el código "funciona" hay varias cosas que habría que corregir.

- En la clase CantanteFamoso hay un comentario que es << * esta clase contiene a los objetos Cantantefamoso >>
Sería más correcto decir << * esta clase define a los objetos Cantantefamoso >> o bien << * esta clase representa a los objetos Cantantefamoso >> ya que la clase no contiene objetos, los define.

- Lo mismo ocurre en la clase ListaCantantesFamosos

- En la clase CantanteFamoso los métodos set no se ajustan a la convención que siguen los miles de programadores Java. Un método set se usa para establecer un atributo a partir de un parámetro o varios parámetros recibidos. Pero aquí los métodos set no reciben parámetros, sino que piden al usuario que introduzca datos por teclado. Esto no está bien planteado desde el punto de vista de la programación orientada a objetos, porque no es responsabilidad de un método set interactuar con el usuario.

- En la clase ListaCantantesFamosos se añaden dos cantantes en el constructor. Esto no debe hacerse, excepto si el ejercicio lo pide explícitamente. En este ejercicio no se pide, luego no es correcto. Esto implicaría que todas las listas se inicializarían con las mismas dos canciones iniciales.

En el hilo https://aprenderaprogramar.com/foros/index.php?topic=2889.0 puede verse una solución correcta con una buena distribución de responsabilidades y ordenación del código. Recomiendo revisarlo. Si te quedan dudas consulta. Saludos.

13
Hola, en este ejercicio faltan las etiquetas de php: inicio de script con <?php y cierre de script con ?>

En este otro hilo se presenta una solución al ejercicio y se comenta el problema de la codificación y cómo resolverlo usando el meta charset: https://aprenderaprogramar.com/foros/index.php?topic=4514.0

Saludos

14
Hola, el ejercicio 2 está bien resuelto. Falta el ejercicio 1. Quien quiera ver una solución completa (tanto ejercicio 1 como ejercicio 2) puede consultar el hilo https://aprenderaprogramar.com/foros/index.php?topic=4511.0

Saludos

15
Hola, el ejercicio está bien resuelto. Pueden verse algunos comentarios interesantes sobre este ejercicio en https://aprenderaprogramar.com/foros/index.php?topic=3269.0
Saludos.

16
Hola, para quien revise este ejercicio, está bien resuelto tanto respuestas a las preguntas como el código conforme a lo que pedía el ejercicio. Saludos.

17
Hola, ejercicio bien resuelto, cumpliendo con lo que se pedía. Saludos.

18
Hola, el ejercicio está bien resuelto. Como hay dos líneas que aplican la misma regla CSS (color:green;) se podrían unificar en una si se quiere, como se hace en https://aprenderaprogramar.com/foros/index.php?topic=3699.0

Saludos

19
Hola, el ejercicio está bien resuelto, cumple con lo que se pedía. Saludos.

20
Hola, lo veo todo correcto aunque en el apartado e) yo respondería "Verdadero, teniendo en cuenta lo que se indica en el curso: lo que envuelve a un elemento flotante es el texto de los elementos que vengan a continuación de él (no envuelven las cajas ni imágenes ni otro tipo de elementos, sólo texto) ¿Cuándo envuelve el texto de un elemento posterior a un elemento flotante? Cuando existe ancho (width) suficiente para que el siguiente elemento alcance el borde del elemento flotante y cuando el texto tiene longitud suficiente como para poder apreciar el efecto."

Saludos.

Páginas: [1] 2 3 4 5 6 ... 93

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".