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] 2 3 4 5 6 ... 97
1
Buenas Isaac, por favor lee https://aprenderaprogramar.com/foros/index.php?topic=1460.0 y a la hora de plantear una consulta pon títulos descriptivos, incluye código y explica lo que quieres conseguir y dónde tienes las dificultades. Tu consulta no se entiende, si no la explicas procederemos a borrarla. Salu2

2
He ejecutado el código proporcionado pero salta el siguiente error sobre el cliente:

Error java.net.BindException: Address already in use: Cannot bind

Fíjate que sobre la máquina cliente tenemos este código:

while (true) {       
  try {mensaje();}
  finally {;} }

Y el método mensaje() lo que hace es en cada ocasión invocar:

DatagramSocket socketUDP = new DatagramSocket();

DatagramSocket() Constructs a datagram socket and binds it to any available port on the local host machine.

Para el servidor en cambio se invoca:

socketUDP = new DatagramSocket(PUERTO); habiendo establecido previamente int PUERTO = 5000; //Puerto servidor

La numeración de puertos en una máquina para los protocolos TCP y UDP es finita, normalmente en los rangos 0-1023, 1024-49151 y 49152-65535

Un bucle que ocupa puertos continuamente debe terminar en un colapso, por eso interpreto yo que aparece el <<Error java.net.BindException: Address already in use: Cannot bind>>

3
Buenas, el ejercicio está bien resuelto. En lo referente al bucle y poner el valor i=-1, no es quizás lo más fácil de interpretar, pero funciona. Lo importante es que comprendas por qué funciona. Comento algo sobre esto:

Código: [Seleccionar]
        i=-1
        while (i<palabra.length-1){i++
        alert("Letra " +[i+1]+": "+palabra.charAt(i))}
        }

Este código inicial i con el valor -1. Entra al bucle si el valor de i es menor que la longitud de la palabra menos 1. Si no introduzco nada y pulso el botón ¿entra al bucle? No, porque la longitud de la palabra que he introducido es cero y al restarle uno me sale menos uno. Como menos uno no es menor que menos uno, no entra al bucle y no me muestra nada.
Si introduzco una letra sola, por ejemplo la e y pulso el botón se muestra "Letra 1: e", porque la longitud de la palabra introducido menos uno es cero, y cero es mayor que menos 1. Por eso entra al bucle.

¿Qué ocurre cuando se entra al bucle? Nada más entrar al bucle el valor de i se incrementa en una unidad con la instrucción i++ a la que por cierto veo preferible ponerle el punto y coma, es decir, escribir i++;
Tras esto se muestra por pantalla el mensaje indicando que la letra i+1 es la que se encuentra en palabra.charAt(i)
La función charAt comienzo contando la primera letra como índice cero, y las siguientes son índice 1,2,3 ... hasta palabra.length-1. Es importante saber interpretar el por qué de palabra.length-1 Esto es porque palabra.length nos devuelve el número de caracteres de 1 a n, mientras que charAt cuenta de 0 a n-1. Por ejemplo para gas los índices que usa charAt son 0, 1 y 2 mientras que length nos devuelve 3.

Entonces si no introducimos nada no se entra al bucle. Si introducimos e nada más entrar i pasa a valer 0, se muestra por pantalla y se vuelve a evaluar si i es menor que palabra.length-1. Como i vale ahora 0 y palabra.length-1 también es cero, en ese caso sólo hay una pasada por el bucle.

Si introducimos una palabra de varias letras habrá tantas pasadas como letras.

Y el resumen de todo esto es que el programa funciona. Para mí no es muy intuitivo el uso que haces de los contadores, yo por ejemplo lo veo más claro con este código: https://aprenderaprogramar.com/foros/index.php?topic=4041.0

Pero si entiendes lo que haces, está bien tanto hacerlo de una manera como de otra. Y para resolver los ejercicios lo adecuado es siempre plantearlo primero como tú creas mejor y sobre todo entendiéndolo. Luego, si consultando otras respuestas consideras que puedes mejorar tu código entendiendo lo que haces, también está bien mejorarlo, pero siempre entendiendo el por qué de las cosas.

Salu2

4
Buenas krakerbrain, he visto tu respuesta en https://aprenderaprogramar.com/foros/index.php?topic=7946.0 y quiero agradecerte la aportación, ya que más allá de tener más o menos conocimientos técnicos resulta enriquecedor para los foros que se intente contribuir y aportar en los foros.

Voy a tratar de responder a este hilo al que has titulado <<Ejercicio resuelto (CU01131E) Saber tamaño de array con length. Break >> En este título falta una cosa importante: el nombre del lenguaje de programación. Además se recomienda incluir el código de ejercicio al final del título, con lo que el título mejor adaptado sería <<JavaScript saber tamaño de array con length. Break. Ejercicio resuelto CU01131E>> Te lo comento solo para que tengas la información e intentes adaptarte a estos criterios que facilitan las búsquedas en los foros.

Sobre lo que comentas de que algunas cosas te estén costando y debas retroceder con frecuencia para volver a leer algunos temas, en principio es bastante normal. Adquirir soltura con un lenguaje requiere bastante tiempo. También debes tener en cuenta que no tienes por qué saber todas las funciones del lenguaje de memoria, pero sí tener una idea de cuáles y dónde buscar información sobre ellas. Por ejemplo, si se te plantea la necesidad de desarrollar un código donde se cambien las apariciones de "Avenida" por "Avda." no es necesario que te sepas de memoria cómo hacerlo, pero sí saber que el lenguaje facilita la función replace y saber buscar información sobre ella (por ejemplo en la entrega del curso correspondiente o en otros lugares). El buen programador no ha de saberse las cosas de memoria, lo que ha de saber es cómo resolver problemas de forma eficiente y ágil.
Dicho esto, otra cosa sería si se te plantean dudas en conceptos básicos de la programación como bucle, condicional, variable, etc. Si fuera este el caso antes de centrarte en un lenguaje como JavaScript recomendamos abordar las bases de la programación (lógica, algoritmia, conceptos). Puedes leer este hilo sobre este asunto: https://aprenderaprogramar.com/foros/index.php?topic=1313.0

En relación a la solución propuesta para el ejercicio mis comentarios serían los siguientes:

- El ejercicio 1 hace lo que se pedía, pero no lo hace como se pedía (con el método charAt), por lo que hay que considerar que está mal resuelto. Puedes ver una solución correcta en https://aprenderaprogramar.com/foros/index.php?topic=3289.0

- El ejercicio 2 hace lo que se pedía, pero tampoco debe considerarse bien resuelto por lo siguiente: los cursos se plantean con el objetivo de ir progresando aplicando los contenidos que se van explicando en el curso. Por ello en general no consideramos bien resuelto una solución a un ejercicio que se plantee usando conocimientos más avanzados de los que se hayan explicado hasta esa entrega del curso. En este ejercicio usas innerHTML, que es algo que no se explica en el curso (si no me equivoco) hasta la entrega CU01138E, por tanto no debe considerarse correcto (en el contexto del curso). Por otro lado, los ejercicios cuanto "más limpios", mejor. En este caso, el código y botón de la función cambiarColores(elemento) no tienen relación con este ejercicio, con lo que hubiera sido mejor que no estuvieran, ya que dejaría un código más limpio (como en https://aprenderaprogramar.com/foros/index.php?topic=3289.0).

No te desanimes por estos comentarios, al contrario, piensa siempre en que lo importante es aprender y céntrate en eso y en nada más, en hacerlo cada día un poquito mejor. Animo y salu2

5
Buenas y bienvenido a los foros. El ejercicio primero está bien resuelto. Solo tienes una errata donde dice

Código: [Seleccionar]
else if (tipoDeProducto==2){
                return importeSinImpuestos*1/100+importeSinImpuestos;
            }

Debería poner 10/100 en lugar de 1/100

Sobre lo que comentas de que como hacer para que si el usuario introduce un valor de texto en cualquiera de los dos parámetros, el programa alerte de que no es un valor numerico y se detenga o pida nuevamente ingresar el valor., esto que es a lo que llamamos validar entradas y se trata en posteriores entregas del curso, así que ya lo verás cuando llegues a ellas.

El ejercicio segundo también está bien, aunque debes prestar atención a una cosa. Si escribimos tipoDeProducto[0] = "undefined"; estamos diciendo que ese elemento del array contiene una cadena de texto.

En cambio si escribimos tipoDeProducto[0] = undefined; ese elemento del array tiene un tipo especial de dato, el tipo undefined, que es un tipo primitivo de JavaScript.

Se trata de dos conceptos diferentes, no tiene nada que ver que una variable contenga una cadena de texto a que contenga el valor especial undefined.

El ejercicio pedía "La función debe devolver un array con valor undefined para el índice 0..." y ahí se refiere al valor especial undefined, es decir, habría que escribirlo sin comillas.

También te falta mostrar por pantalla undefined ya que el ejercicio pedía "obtenerImporteConImpuestos(100) debe devolver: resultado[0] = undefined, resultado[1] = 121, resultado[2] = 110, resultado[3] = 105"

Salu2

6
Buenas couldor y bienvenido a los foros. Por favor lee el hilo https://aprenderaprogramar.com/foros/index.php?topic=1460.0 donde están las indicaciones sobre cómo poner título a los temas y cómo escribir en los foros, cómo pegar código, etc.
Pega el código que tengas realizado, hasta donde hayas podido llegar, para ver si a partir de ahí se te puede ayudar. Salu2

7
De todo un poco... / Re: ayuda
« en: 17 de Febrero 2021, 20:49 »
Al no haber respuesta se procederá próximamente al borrado de este hilo. Salu2.

8
Buenas, para escribir en los foros es conveniente que sigas las indicaciones que se dan en https://aprenderaprogramar.com/foros/index.php?topic=1460.0 sobre cómo poner el título a los temas, cómo pegar código y resto de cuestiones. Es preferible que pongas el código en el propio hilo en lugar de ponerlo como archivo adjunto

En este hilo https://aprenderaprogramar.com/foros/index.php?topic=1478.0 puedes consultar la solución al ejercicio y algunos comentarios interesantes. Si después de verlo tienes dudas, pega el código que estés usando y explica dónde tienes la duda o problema para intentar ayudarte.

Salu2

9
Buenas, he estado mirando este tema y lo interpreto como expongo a continuación.

Un ejemplo de recursión de cola típico es el cálculo del GCD (Greatest common divisor) o Máximo común divisor:

Código: [Seleccionar]
//Entrada: Los enteros x e y, de forma que x >= y e y > 0
int gcd(int x, int y)
{
  if (y == 0)
     return x;
  else
     return gcd(y, x % y);
}


Y un ejemplo de recursión incremental o no de cola sería el cálculo del factorial de un número:

Código: [Seleccionar]
//Entrada: n es un entero de forma que n >= 1
int fact(int n)
{
   if (n == 1)
      return 1;
   else
      return n * fact(n - 1);
}

<<Funciones de recursión de cola son funciones que finalizan con una llamada recursiva que no crea ninguna operación deferida.>>

En el caso del GCD, la construcción se forma llamando repetidamente a la función GCD, pero no queda ninguna operación pendiente de realizarse una vez se llegue al caso base. Cuando se llega al caso base, se devuelve la solución y se termina la recursión.

En el caso del factorial, la construcción se forma llamando a una operación: n * fact(n - 1). En cada recursión, no se conoce el fact(n-1), por lo que queda una operación pendiente de realizarse. Cuando se llega al caso base, se devuelve el factorial de 1 que es 1, y a partir de ahí hay que ir rehaciendo resultados hacia atrás que habían quedado pospuestos debido a que no se podían calcular.

Salu2

10
Buenas, algunos recursos sobre cómo empezar...

Sección cómo empezar: https://www.aprenderaprogramar.com/index.php?option=com_content&view=category&layout=blog&id=84&Itemid=18

Hilo sobre cómo empezar: https://aprenderaprogramar.com/foros/index.php?topic=1313.0

Si después de todo sigues perdido te recomendaría empezar con algoritmia, curso Bases de la programación nivel I: https://aprenderaprogramar.com/index.php?option=com_content&view=category&id=28&Itemid=59

Salu2.

11
Buenas, me ha resultado un poco liosa la explicación y no sé si te sigo. El error

<<No se puede instalar ni ejecutar esta aplicación. Para hacerlo, debe actualizar el sistema a Microsoft Common Language Runtime, versión 4.0.030319.0 Póngase en contacto con el administrador del sistema>>

Parece estar relacionado con que falta o hay problemas con .NET 4.0

Instálalo o reinstálalo desde http://www.microsoft.com/en-us/download/details.aspx?id=17851

Salu2

12
Buenas, mejor dejar el código en el propio hilo y asi evitar pérdidas. En https://aprenderaprogramar.com/foros/index.php?topic=1460.0 está explicado cómo pegar código.

Código: [Seleccionar]
#include <stdio.h>
#define  TAM   5     // tamaño del array

// incremento circular
void inc(int* p) { if(*p == TAM-1) *p=0; else (*p)++; }

int main(void)
{
   int a_base[TAM]={ 1, 6, 3, 9, 1 };    // array base
   int a_test[TAM]={ 3, 9, 1, 1, 6 };    // array a comprobar

   int b=0;       // índice para el array base
   int t=0;       // índice para el array test
   int cnt=0;     // contador de ciclos
   
   // si la base ha llegado al final (está contenida)
   // o si test ha llegado al final (no está contenida)
   // entonces acabo el bucle
   while(b<TAM && t<TAM)
   {
      if(a_base[b]==a_test[t]) { b++; inc(&t); }   // si son iguales incremento
      else { b=0; t=++cnt; }               // si no, empiezo en siguiente ciclo
   }

   // si la base llegó al final entonces si está contenida
   printf("El array base %sestá en el array comprobado\n", b==TAM ? "" : "no ");

   return 0;
}

/* mark255 */

/* secuencia ciclica

  https://aprenderaprogramar.com/foros/index.php?PHPSESSID=hd9t2mfl0pbkad0ij8pj0h5llq&topic=7854.0
*/

Salu2

13
Comunidad / Re: Feliz Navidad y Próspero Año Nuevo para todos
« en: 25 de Diciembre 2020, 11:28 »
¡Feliz Navidad para toda la comunidad! Paz y salud para el nuevo año y esperemos que sea mejor que este que dejamos atrás  ;)

14
Buenas Kairo27, lee las indicaciones en https://aprenderaprogramar.com/foros/index.php?topic=1460.0

<<Si no sabes hacer algo, inténtalo y pega el código hasta donde hayas podido llegar. Si quieres una respuesta con código, aporta un código de partida sobre el que poder trabajar. Si no lo haces así será difícil que te ayuden.>>

Pega tu código e indica dónde no puedes avanzar, es importante para poder tener una idea de lo que estás haciendo.

Salu2

15
Buenas, tendrías varias opciones:

- Hacerlo todo desde Visual Basic, sin necesidad de que se abra Excel en una ventana y sin necesidad de un archivo bash y sin necesidad de macro. La función de la macro la haría el propio Visual Basic.

- Usar Visual Basic para invocar la ejecución de la macro invocando el método Run: ver ejemplo en https://aprenderaprogramar.com/foros/index.php?topic=7834.0

Salu2

16
Buenas, este sería un código de ejemplo para ejecutar una macro invocándola desde Visual Basic. Este código habría que adaptarlo a la versión de Visual Basic con que se esté trabajando, y cambiar el nombre test por el nombre que tenga la macro. En el código se puede hacer que el excel se visualice manteniendo Excel.Visible = True o bien que no se visualice eliminando esta línea.

Código: [Seleccionar]
Private Sub Command1_Click() 
    Dim ret As Boolean 
    ' le pasa la ruta del libro y el nombre de la macro _ 
    NOTA: Si la macro tiene parámetros, pasarlos al método Run, _ 
    por ejemplo: Excel.Run "NombreMacro","Param1","Param2", ..etc.... 
     
    ret = Ejecutar("c:\Libro1.xls", "test") 
     
    If ret Then 
       MsgBox "OK", vbInformation 'OK 
    End If 
End Sub 
 
Private Sub Form_Load() 
    Command1.Caption = "Ejecutar Macro" 
End Sub 
 
Function Ejecutar(Libro As String, _ 
                  Macro As String) As Boolean 
 
 
On Error GoTo Error_function 
 
Dim Excel As Object 
    'Nueva Referencia al Excel 
    Set Excel = CreateObject("Excel.Application") 
    Excel.Visible = True ' opcional 
    With Excel 
        .Application.workbooks.open Libro ' abre el libro 
        .Run (Macro) ' ejecuta la macro 
    End With 
 
    ' descarga la referencia 
    Set Excel = Nothing 
    Ejecutar = True ' OK 
 
Exit Function 
 
Error_function: 
' elimina la referencia 
If Not Excel Is Nothing Then Set Excel = Nothing 
' mensaje de error 
If Err Then 
   MsgBox Err.Description, vbCritical 
End If 
End Function 


Macro de ejemplo que va escribiendo valores desde la celda 1 hasta la 10 , luego se guarda el libro y se cierra

Código: [Seleccionar]
    Sub test() 
     
    Dim i As Integer 
     
    ' escribe algunos datos en las celdas 
    For i = 1 To 10 
        Cells(i, 1) = Cells(i, 1) + i 
    Next 
     
     
    ' guarda y cierra este libro 
        ActiveWorkbook.Save 
        Excel.Application.Quit 


Salu2

17
Sí, perdona, parece que me equivoqué al teclear y no sería  palabrasIngresadas[azar(cantFilas+1)]
sino palabrasIngresadas[azar(cantFilas)+1] ya que se debe sumar uno a lo que devuelva la función azar para que el resultado no pueda ser cero

18
Buenas, es importante para escribir en los foros seguir las normas que se indican en https://aprenderaprogramar.com/foros/index.php?topic=1460.0
Si no lo haces así, tus consultas pueden ser eliminadas. En este caso, voy a encargarme yo de corregir el título, que no debe contener palabras como ayuda, urgente, por favor, etc. El código o pseudocódigo debes pegarlo dentro de etiquetas code, también lo corregiré.

No manejo Pseint, pero el error que te aparece parece estar relacionado con los índices de los arrays o arreglos.

Para manejar pseint debes remitirte a un manual o especificación que te diga cómo funcionan sus instrucciones. En este caso me he remitido a http://pseint.sourceforge.net/index.php?page=pseudocodigo.php para consultar cómo trabaja la función azar y veo que indica:

AZAR(X) devuelve un entero aleatorio entre 0 y X-1

El error que te aparece indica que el rango de índices del array o dimensión palabrasIngresadas[cantFilas] debe estar entre 1 y cantFilas, por ejemplo entre 1 y 3, pero  palabrasIngresadas[azar(cantFilas)] te devuelve números entre 0 y cantFilas-1, por ejemplo entre 0 y 2, y esto es lo que parece generarte el error.

Parece que el error se corregiría simplemente escribiendo palabrasIngresadas[azar(cantFilas+1)] Esto en teoría ya te debe generar los índices correctos, por ejemplo entre 1 y 3 en lugar de entre 0 y 2

Salu2

19
Creo que no me he explicado bien, en el sentido de que parece que estás esperando que desde Visual Basic te abra el documento Excel para verlo tú en la pantalla. Visual Basic y el resto de  lenguajes de programación normalmente no se utilizan para esto. El uso más habitual de Visual Basic es la apertura del fichero para su manipulación a nivel de datos. Tú eliges el fichero que quieres manipular desde Visual Basic y lo manipulas mediante código. De este modo el fichero queda manipulado y la siguiente vez que lo abras verás los cambios que desde Visual Basic se hayan hecho. Lo que no se suele hacer es que Visual Basic te abra el fichero para verlo tú en la pantalla como si lo estuvieras abriendo como usuario. Por tanto, lo normal es seleccionar el fichero para que se ejecuten determinadas instrucciones, pero el fichero no se te abrirá para verlo en pantalla. Puedes ver ejemplos de manipulación básica de ficheros con Visual Basic en el curso https://aprenderaprogramar.com/index.php?option=com_content&view=category&id=37&Itemid=61
Salu2.

20
Buenas, el código que has puesto parece más visual basic que bash. Habría que probar. Supuestamente en un bat algo como

Código: [Seleccionar]
@echo off
set /p UserInputPath=Indique la ruta al fichero:
Set xlBook = xlApp.Workbooks.Open(%UserInputPath%, 0, True)

Pero esto te pediría que teclearas la ruta al fichero, no elegirlo a través de una ventana.


Desde Visual Basic sí se puede pedir la elección de fichero con algo como

Código: [Seleccionar]
Dim fd As OpenFileDialog = New OpenFileDialog()
Dim strFileName As String

fd.Title = "Open File Dialog"
fd.InitialDirectory = "C:\"
fd.Filter = "All files (*.*)|*.*|All files (*.*)|*.*"
fd.FilterIndex = 2
fd.RestoreDirectory = True

If fd.ShowDialog() = DialogResult.OK Then
   strFileName = fd.FileName
End If

Páginas: [1] 2 3 4 5 6 ... 97
Esto es un laboratorio de ideas...
Aprender a programar

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