elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  1) Aumento infinito de 2 variables. 2) De más de 2.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: 1) Aumento infinito de 2 variables. 2) De más de 2.  (Leído 3,902 veces)
Tachikomaia


Desconectado Desconectado

Mensajes: 1.180


Superhacker (es broma xD )


Ver Perfil
1) Aumento infinito de 2 variables. 2) De más de 2.
« en: 18 Agosto 2020, 00:23 am »

Son 2 códigos distintos, aunque obviamente el 2ndo implicaría al 1ero, así que si sólo quieren hacer uno hagan ese.

En cuanto al significado, es que quiero un código que haga algo así:
(output)
V1=1, V2=1, V3=1
V1=1, V2=1, V3=2
V1=1, V2=2, V3=1
V1=1, V2=2, V3=2
V1=2, V2=1, V3=1
V1=2, V2=1, V3=2
V1=2, V2=2, V3=2
V1=1, V2=1, V3=3
Y siga

Es decir, hacer combinatoria implicando un número máximo, que aumenta cuando cada variable alcanza ese máximo.

Gracias.


En línea

Usuario887


Desconectado Desconectado

Mensajes: 310


Ver Perfil
Re: 1) Aumento infinito de 2 variables. 2) De más de 2.
« Respuesta #1 en: 26 Agosto 2020, 00:02 am »

Hola. Esto puedes lograrlo con clases o funciones recursivas (o redundantes, como les llamo yo)...

Un ejemplo en ASM:
Código
  1. proc numericalIncrement
  2.  
  3.    push bp
  4.    push si
  5.    push di
  6.    push bx
  7.    ;addr at        bp+18
  8.    ;cnt init at    bp+16
  9.    ;cnt max at     bp+14
  10.    ;min at         bp+12
  11.    ;max at         bp+10  
  12.    mov bp, sp
  13.    ;addr starts at  bp-2
  14.    sub sp, 2
  15.  
  16.    mov si, ss:[bp+18]
  17.    mov bx, ss:[bp+16]
  18.  
  19.    mov ax, ss:[bp+14]
  20.    cmp ax, bx
  21.    jz numericalIncrement_err0
  22.    jmp numericalIncrement_stepOver0
  23.    numericalIncrement_err0:
  24.  
  25.    mov ax, 0
  26.    jmp numericalIncrement_return
  27.  
  28.    numericalIncrement_stepOver0:
  29.  
  30.    mov ax, ss:[bp+10]
  31.    cmp al, byte ptr ss:[si+bx]
  32.    jnz numericalIncrement_skip0
  33.  
  34.    mov al, byte ptr ss:[bp+12]
  35.    mov byte ptr ss:[si+bx], al
  36.  
  37.    mov ax, ss:[bp+18]
  38.    push ax
  39.    mov ax, ss:[bp+16]
  40.    inc ax ;next ch  
  41.    push ax
  42.    mov ax, ss:[bp+14]
  43.    push ax
  44.    mov ax, ss:[bp+12]
  45.    push ax
  46.    mov ax, ss:[bp+10]
  47.    push ax
  48.    call numericalIncrement
  49.    pop ax
  50.    jmp numericalIncrement_return
  51.  
  52.    numericalIncrement_skip0:
  53.  
  54.    mov al, byte ptr ss:[si+bx]
  55.    inc al
  56.    mov byte ptr ss:[si+bx], al
  57.    mov ax, 1
  58.  
  59.    numericalIncrement_return:
  60.    mov ss:[bp+18], ax
  61.    mov sp, bp
  62.    pop bx
  63.    pop di
  64.    pop si
  65.    pop bp
  66.  
  67.    ret 2*4
  68. endp
  69.  

la funcion toma como parametros la cadena de variables, el valor minimo de la combinatoria, el valor maximo de la misma, el contador inicial en la cadena y el contador final de la misma respectivamente. Tambien la tengo en C; te la muestro en ASM porque fue la forma mas eficiente para mi de escribir el algoritmo...

Saludos.


Ah, y retorna en la pila 1 si fue efectiva o 0 si hubo un error (numericalIncrement_err0). Mas que incremento numerico creo que seria mejor llamada incremento combinatorial, pero el punto es el punto.

Aqui un ejemplo utilizando Windows, con una cadena de 4 variables byte (char) inicializada como 'a','a','a','a'. el minimo es el codigo ASCII del caracter 'a' y el maximo el respectivo al caracter 'z'; el inicio del contador es 0 y el maximo del mismo es 3:

https://i.imgur.com/k8EIqjG.png
https://i.imgur.com/WYk2uax.png


« Última modificación: 26 Agosto 2020, 11:54 am por marax » En línea

Tachikomaia


Desconectado Desconectado

Mensajes: 1.180


Superhacker (es broma xD )


Ver Perfil
Re: 1) Aumento infinito de 2 variables. 2) De más de 2.
« Respuesta #2 en: 28 Agosto 2020, 02:07 am »

Gracias pero no entiendo el code.
En línea

Usuario887


Desconectado Desconectado

Mensajes: 310


Ver Perfil
Re: 1) Aumento infinito de 2 variables. 2) De más de 2.
« Respuesta #3 en: 31 Agosto 2020, 21:08 pm »

Dices; primero, aumento infinito de dos variables; luego, aumento de mas de dos. No son dos preguntas diferentes, es lo mismo; por tanto se aplica en este caso una funcion recursiva, es decir, que se llama a si misma, porque su "metodo" yace en si misma.

Supone una cadena de valores con un sistema numerico en base 3.
Supone una combinacion de tales cifras asi:

1,1,1

Aumento se define asi:

aumento (cadena_de_valores, valor_inicial, valor_final, contador_actual, contador_final)
{
si (cadena_de_valores[contador_actual] es menor o igual que valor_final) entonces
{
incrementar cadena_de_valores[contador_actual]
retornar contador_actual;
}
si no
{
aumento (cadena_de_valores, valor_inicial, valor_final, contador_actual+1, contador_final)
}
}

si ejecutas aumento con la cadena antes mencionada una vez (llamemosle a esas "veces" instantes), la cadena resultaria:

1,1,2

luego, entonces, de cada instante:

1,1,3
1,2,1
1,2,2
1,2,3
1,3,1
...



si ejecutas aumento con la cadena antes mencionada

Por cierto, la llamada a la funcion del pseudocodigo seria de esta forma:

...
cadena=1,2,3
...
aumento (cadena, 1, 3, 0, 2)
« Última modificación: 31 Agosto 2020, 21:11 pm por marax » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines