Re: ¿Cómo se podría crear un algoritmo/programa para esta aplicación?
Buenas noches,
Estoy recien llegado a este foro del que he tenido conocimiento buscando por internet solución al problema de un algoritmo para hallar los números colindantes (o vecinos) en una matriz determinada, de manera que devuelva el número de grupos de colindantes y la composición de cada uno de ellos.
El caso es que creo que es un problema que escapa a mis conocimientos matemáticos y por eso busco ayuda.
Quiero elaborar un programa que tenga que contemple entre otras esta función que comento y he dado con este hilo que es exactamente lo que busco.
El problema es que yo programo en Delphi y no tengo ni papa de mathlab ni de mathcad que es lo que se ha tratado aqui.
Llevo un par de dias dandole vueltas a estos códigos y nada….
Me he decidido a intentar una traducción a delphi pero como os comento se me hace muy cuesta arriba y queria saber si podríais echarme una mano con la traducción.
Os pongo aqui lo que llevo, que aunque compila sin errores el programa casca al ejecutarlo (ya me lo imaginaba yo según escribia las líneas, je,je).
El código lo he intentado realizar con el pase de argumentos tal y como figura en los ejemplos mathlab y mathcad (sin exito, claro) pero al leer sobre las "componendas" que habia que hacer en mathcad con el tema del pase de argumentos me he decidido a realizarlo sin ellos en la mayoria de los casos, y utilizo variables globales a la función en la que he realizado el código. Las funciones vecinos y generar lista estan declaradas en la sección de variables por lo que acceden también a las variables globales M y V entre otras.
También y por simplicidad (o eso creo) en la función Vecinos, he sustituido el primer bucle anidado (donde figura la función on error en el codigo mathcad) por la función PrepararMatriz que se supone que pone a ceros toda la matriz y la llena con los 6 numeros que previamente he cargado en la variable V.
En fin…. si necesitais mas aclaraciones pues aqui estoy.
Ahí va el código.
Muchas gracias de antemano :-)
Buenas noches,
Estoy recien llegado a este foro del que he tenido conocimiento buscando por internet solución al problema de un algoritmo para hallar los números colindantes (o vecinos) en una matriz determinada, de manera que devuelva el número de grupos de colindantes y la composición de cada uno de ellos.
El caso es que creo que es un problema que escapa a mis conocimientos matemáticos y por eso busco ayuda.
Quiero elaborar un programa que tenga que contemple entre otras esta función que comento y he dado con este hilo que es exactamente lo que busco.
El problema es que yo programo en Delphi y no tengo ni papa de mathlab ni de mathcad que es lo que se ha tratado aqui.
Llevo un par de dias dandole vueltas a estos códigos y nada….
Me he decidido a intentar una traducción a delphi pero como os comento se me hace muy cuesta arriba y queria saber si podríais echarme una mano con la traducción.
Os pongo aqui lo que llevo, que aunque compila sin errores el programa casca al ejecutarlo (ya me lo imaginaba yo según escribia las líneas, je,je).
El código lo he intentado realizar con el pase de argumentos tal y como figura en los ejemplos mathlab y mathcad (sin exito, claro) pero al leer sobre las "componendas" que habia que hacer en mathcad con el tema del pase de argumentos me he decidido a realizarlo sin ellos en la mayoria de los casos, y utilizo variables globales a la función en la que he realizado el código. Las funciones vecinos y generar lista estan declaradas en la sección de variables por lo que acceden también a las variables globales M y V entre otras.
También y por simplicidad (o eso creo) en la función Vecinos, he sustituido el primer bucle anidado (donde figura la función on error en el codigo mathcad) por la función PrepararMatriz que se supone que pone a ceros toda la matriz y la llena con los 6 numeros que previamente he cargado en la variable V.
En fin…. si necesitais mas aclaraciones pues aqui estoy.
Ahí va el código.
Muchas gracias de antemano :-)
Código:
procedure TForm1.bProcesar; type TMatriz = array of array of integer; // Defino el tipo de matriz de dos dimensiones var // Aqui vienen las variables globales nelem: Integer; M: TMatriz; V: array[0..5] of integer; L: array of integer; // Esta variable la he declarado para contener los grupos de colindantes Procedure PrepararMatriz; // Función para llenar la matriz con ceros y luego completarla con los numeros a evaluar var q: Integer; begin for q := low(V) to high(V) do begin if v[q] in [ 1.. 9] then M[0, q mod 10] := v[q]; if v[q] in [10..19] then M[1, q mod 10] := v[q]; if v[q] in [20..29] then M[2, q mod 10] := v[q]; if v[q] in [30..39] then M[3, q mod 10] := v[q]; if v[q] in [40..49] then M[4, q mod 10] := v[q]; end; end; Procedure GenerarLista(fila, columna: Integer); // He obviado el resto de parámetros porque la función puede acceder a las variables M y V directamente var f,c: Integer; begin Inc(nelem); L[nelem]:=M[columna,fila]; M[columna,fila]:=0; for f:=fila-1 to fila+1 do for c:=columna-1 to columna+1 do if (f=fila) and (c=columna) then GenerarLista(f,c); end; Procedure vecinos; var nli, f, c: Integer; vAux:String; begin PrepararMatriz; nelem:=0; nli:=0; for f := 0 to 9 do for c := 0 to 4 do if M[c,f]<>0 then begin Inc(nli); GenerarLista(f,c); Vecinos; end; end; begin // Comienza el programa // Cargar vector de numeros a evaluar V[0]:=1; v[1]:=12; v[2]:=13; v[3]:=30; v[4]:=31; v[5]:=48; // Dimensionar e inicializar matriz 5x10 SetLength(M, 5, 10); SetLength(L,100); vecinos; end;
Comentario