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 7 8 9 ... 100
61
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

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

63
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

64
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

65
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  ;)

66
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

67
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

68
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

69
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

70
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

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

72
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

73
Buenas, entiendo que sí debería poderse realizar lo mismo que has hecho con VBA desde Excel que desde Visual Basic, aunque habría que hacer pruebas a ver cómo. Tienes que tener en cuenta que Visual Basic no "abre" el fichero en el sentido de que tú lo veas abrirse en el computador (al menos esto no es lo habitual). Visual Basic cuando abre un fichero es para manipulación sin que tú veas el Excel abierto y sin que tú veas los cambios en el fichero. Los cambios los verás después de ejecutado el código cuando vuelvas a abrir el fichero. Por ejemplo supón que un fichero de excel contiene en la primera celda "trigo" y en la segunda "cebada". Ahora tú corres un código en Visual Basic y modificas el fichero para que la segunda celda contenga "centeno". Cuando ejecutas el código, tú no verás abrirse el fichero ni verás nada. Puedes ver un mensaje de confirmación si tú mismo lo incluyes en el código. Y luego de ejecutado, podrás abrir el archivo y ver los cambios de lo que ha hecho Visual Basic.
El código que te indiqué antes y que pego a continuación es un ejemplo de manipulación de un fichero.

Código: [Seleccionar]
Imports Excel = Microsoft.Office.Interop.Excel

Public Class Form1
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Label1.Text = ""
        Label1.AutoSize = False
    End Sub
   
    Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim objXLApp As Excel.Application
        Dim intLoopCounter As Integer
        Dim objXLWb As Excel.Workbook
        Dim objXLWs As Excel.Worksheet
        Dim objRange As Excel.Range

        objXLApp = New Excel.Application
        objXLApp.Workbooks.Open("C:\Users\Juan\CursoVB\semana6\ejemploSemana6.xlsx")
        objXLWb = objXLApp.Workbooks(1)
        objXLWs = objXLWb.Worksheets(1)
        MsgBox("Ahora la celda A5 contiene: " & objXLWs.Cells(5, 1).value)
        For intLoopCounter = 1 To CInt(objXLWs.Cells.SpecialCells(Excel.XlCellType.xlCellTypeLastCell).Row)
            objRange = objXLWs.Range("A" & intLoopCounter)
            Label1.Text = Label1.Text & vbCrLf & objRange.Value
            objRange = objXLWs.Range("B" & intLoopCounter)
            Label1.Text = Label1.Text & " -- > " & objRange.Value
        Next intLoopCounter

        'Escribimos en el fichero
        objXLWs.Cells(5, 1) = "Rembrandt"
        MsgBox("Ahora la celda A5 contiene: " & objXLWs.Cells(5, 1).value)
        objXLApp.Quit()
    End Sub

End Class

Lo que te recomendaría es que te crees un Excel para hacer pruebas, por ejemplo mete datos cualquiera en las celdas A1, A2... A10, B1, B2, ... B10 y así hasta H1, H2... H10 y ejecuta este código (tendrás que tener creado un proyecto con un formulario, un label y un button, y cambiar cosas como la ruta del fichero en el código), y comprueba si te funciona.

Si te funciona, empieza a sustituir el código para que en lugar de ejecutar este ejemplo, haga lo que tú quieres.

Si no has trabajado con Visual Basic, aquí tienes un curso básico: https://aprenderaprogramar.com/index.php?option=com_content&view=category&id=37&Itemid=61

Salu2

74
Buenas, es fundamental que pegues el código con el que estés trabajando, usando las etiquetas code para que pueda ser leído como código. Si no pegas el código es muy difícil tener una idea de qué estamos hablando. Salu2

75
Buenas, el código no lo has pegado como se explica en https://aprenderaprogramar.com/foros/index.php?topic=1460.0 Léelo, por favor, ahí está explicado cómo debe pegarse el código en los foros y resto de cuestiones a tener en cuenta Salu2

76
Buenas, es fundamental que pegues el código que estés usando con las etiquetas code, de otra manera no podemos tener idea de lo que estás haciendo. ¿Cómo sabes que te abre el excel?

Aquí tienes un ejemplo de acceso a una hoja excel desde Visual Basic: https://aprenderaprogramar.com/foros/index.php?topic=6463.0

El borrado de una columna se puede hacer con algo como xlSheet.Columns(i).delete donde i es el número que identifica a la columna

Este es un ejemplo que he encontrado sobre manejo de diferentes maneras (eliminar filas, eliminar columnas, etc.):

Código: [Seleccionar]
Dim xlWB As Excel.Workbook = CType(Globals.ThisWorkbook.Application.ActiveWorkbook, Excel.Workbook)
Dim xlWSPosition As Excel.Worksheet = CType(CType(xlWB.Sheets("byPosition"), Excel.Worksheet), Excel.Worksheet)
Dim xlWSEmployee As Excel.Worksheet = CType(CType(xlWB.Sheets("byEmployee"), Excel.Worksheet), Excel.Worksheet)     

Dim xlSheets As Object
        Dim xlSheetsArray(0 To 1) As Excel.Worksheet
        Dim k As Long
        Dim i As Long

        xlSheetsArray(0) = xlWSPosition
        xlSheetsArray(1) = xlWSEmployee


        For Each xlSheets In xlSheetsArray

            With xlSheets


                'Eliminar las primeras 7 filas para las hojas indicadas
                .Rows("1:7").Delete(Excel.XlDirection.xlUp)


                k = .UsedRange.Columns.Count

                'Para las hojas indicadas borrar todas las columnas excepto las que se citan

                For i = k To 1 Step -1
                    Select Case LCase(.UsedRange.Cells(1, i).Value)

                        'Keep these columns
                        Case "nombre", "numeroDocuento", "salario", _
                         "centroTrabajo", "Base anual", "Base quinquenal"

                        Case Else

                            'Borrar todas las columnas cuyo nombre no se encuentre arriba
                            .UsedRange.Columns(i).Delete()

                    End Select
                Next i

            End With

        Next xlSheets

    End Sub

Salu2

77
¿C++? Yo diría que aparentemente es Visual Basic. Si no lo has hecho lo más básico es ejecutar un programa de prueba. ¿Lo has ejecutado? Aparte de aclarar bien en qué lenguaje estás trabajando... Eso no parece que sea código suficiente para poder ejecutar nada. ¿Con qué lenguajes estás habituado a trabajar?

78
Buenas y bienvenido. Como primera recomendación siempre ponemos leer este hilo: https://aprenderaprogramar.com/foros/index.php?topic=1460.0 y seguir las pautas que ahí se dan. Poner títulos descriptivos, incluir el nombre del lenguaje que se esté utilizando y palabras clave, etc.
No has incluido todo el código. ¿Dónde tienes definido objExcel? Pega el código utilizando las etiquetas code como se indica en el hilo. Salu2

79
Sí, como indicas se sale del tema. Por eso voy a desgajar esta parte hacia un nuevo hilo, para dejar el tema original por un lado y esto por otro. Salu2

80
Son varias horas lo que un usuario puede editar un mensaje publicado (creo que tres horas). Lo que sí puede haber es una limitación para hacer publicaciones o ediciones muy seguidas para evitar robots, así por ejemplo si intentas publicar muy seguido o editar muy seguido te puede decir que no ha transcurrido el tiempo mínimo entre publicaciones o ediciones que está en torno a 30 segundos. Esto para evitar robots que pueden intentar publicar varios mensajes por segundo o así.

Páginas: 1 2 3 [4] 5 6 7 8 9 ... 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".