Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Algoritmo Matematico, ¿Es Posible? (https://www.clubdelphi.com/foros/showthread.php?t=49754)

Delphius 06-11-2007 14:38:15

Hola Ñuño,
Es cierto que con emplear matrices se podría... aunque no estoy seguro... por la alta combinación de elementos (aunque esto no es tanto el problema) y también el hecho de como armaríamos la matriz.

el método de Karnaut... me suena, no se de donde... no recuerdo haberlo visto.

A mi este problema me ha dejado intranquilo. Intranquilo debido al hecho de que no se me ocurre que método emplear para conseguir evitar explorar las altas combinaciones posibles.

Mi idea:
1. Supuesto débil: todos los números son inferiores al resultado.
Tomar el resultado y buscar el valor más alto de entre la lista.
En base a la diferencia:
1. Si la diferencia es despreciablemente menor al número tomado de lista
1.1. La primera combinación a probar es la suma (es más probable que debido a cierta "proximidad" de los valores hallar un segundo número alto que de acuerdo a la suma se acerce al resultado)
2. SINO, es decir que la diferencia es apreciablemente mayor al número tomado de la lista:
2.1. La prima combinación a probar es la multiplicación
3. Elegir el segundo número según la proximidad
4. Actualizar el resultado siendo igual a la diferencia entre el resultado y la operación realizada: Resultado = Resultado - Operación(Numero1,Numero2)

La intención de esto es conseguir al menos el número más próximo al resultado.
El término despreciable y apreciable podría evaluarse según algunos indicadores estadísticos: varianza, media, mediana.

En pocas según la desviación que experimenten los números entre si y contra el resultado se vayan probando diversas operaciones. La regla sería así:
Cuanto mayor sea la varianza, la operación a probar es la multiplicación
Cuanto menor sea la varianza, la operación a probar es la suma

El problema de esto es que no se me hace sencillo codificarlo. Decirlo es sencillo pero cuando intento hacerlo en código es otra cosa:(. Si alguien me entiende y se anima a codificarlo lo animo a que continue:). Tal vez funcione, tal vez no... pero al menos podríamos conseguir un número relativamente cercano. (algo que no se si con la técnica de matrices se pueda llegar a una solución).

En fin... es un punto de vista.

Saludos,

ZayDun 06-11-2007 15:40:53

Hola de nuevo y perdonar por no haber podido contestar antes ya que no he tenido tiempo. buscando informacion sobre como hacerlo consegui un codigo que pide que indiques primero el numero a buscar y segundo un numero que debe de contener. mejor pongo el codigo para que lo veais vosotros mismos mas claro para una posible solucion. gracias a todos.



Código Delphi [-]
 var
a,b,q0,r0,q1,r1 : Integer;
begin
a:=0;
b:=0;
q0:=0;
r0:= 0;
q1:=0;
r1:=0;
MemoOut.Lines.Clear;
Form2.Edit1.Clear;
Form2.ShowModal;
if (Form2.ModalResult = mrOk) then
begin
a:= StrToInt(Form2.Edit1.Text); 
q0:= StrToInt(Form2.Edit1.Text);
Form2.Edit1.Clear;
Form2.ShowModal;
end;
if (Form2.ModalResult = mrOk) 
and (Form2.Edit1.Text <> '') then
begin
b:= StrToInt(Form2.Edit1.Text); 
r0:= StrToInt(Form2.Edit1.Text);
repeat
begin
q1:= Trunc(q0/r0);
r1:= q0-(q1*r0);
MemoOut.Lines.Add(IntToStr(q0)+' = '+IntToStr(r0)+'x'+IntToStr(q1)+'+'+IntToStr(r1));
q0:= r0; 
r0:= r1;
end;
until r0=0; 
end;
end;

ixMike 06-11-2007 23:09:48

Cita:

Empezado por Ñuño Martínez (Mensaje 243761)
Por otro lado tenemos el "método de Karnaud" (ahora mismo estoy dudando de si se escribía así, porque no lo encuentro por ninguna parte)

"Karnough". Aunque creo que el uso de matrices no se amolda a lo que buscamos (porque podemos hacer tanto sumas como productos o divisiones, lo que complica la cosa).

He estado (y estoy) de exámenes, pero seguro que un día de estos lo saco (y yo que pensaba que ya lo habría resuelto alguien; bueno, así aún podré ser el primero XD).

Saludos.

ixMike 06-11-2007 23:42:09

Ahora que recuerdo, en el programa también se podían combinar los distintos resultados de las operaciones. Por ejemplo, la suma de los dos primeros, la resta de los otros dos, y entonces multiplicar o dividir ambos resultados...

Me parece, señoras y señores, que esto se empieza a complicar un poquito.


La cuestión sería:

1. Crear todas las combinaciones de números y operaciones (incluyendo elementos neutros por si algún numero no es necesario).
2. Realizar las operaciones cambiando los órdenes de preferencia (ya que hay tres, así se puede realizar lo de operar con resultados)
3. Se comparan los resultados con el número buscado. Todas las operaciones que sean válidas se pueden mostrar (bien planteadas ya, con sus paréntesis y todo).
4. No hay cuarto paso, ya está. XD

Bueno, pronto tendré la solución (y por el placer de programar y ser ingenioso, no necesito damas de recompensa XD)

Saludos de nuevo.

ZayDun 19-02-2008 18:55:46

Hace un tiempo que abrí este hilo y me ayudasteis bastante, desde entonces he buscado alguna solución sin éxito alguno. Después de intentarlo de varias maneras me decidí a buscar alguna información en otro lenguaje, y los resultados han tenido sus frutos con el siguiente problema... está escrito en "C" por lo tanto vuelvo a pedir ayuda para los que quieran y puedan con la traducción a delphi, gracias a todos de nuevo.

http://pedroreina.net/ciflet/anarit.zip Codigo Fuente

ixMike 19-02-2008 19:08:53

Hey! que no creas.. ayer me acordé de esto, y pensé "esta semana me pongo". Y.. bueno, aún es martes, ¡déjame pensarlo! :D


La franja horaria es GMT +2. Ahora son las 02:24:24.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi