• Viernes 29 de Marzo de 2024, 09:36

Autor Tema:  Contruyendo Tabla Periodica  (Leído 12455 veces)

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Contruyendo Tabla Periodica
« en: Lunes 6 de Noviembre de 2006, 21:27 »
0
Este post, es la respuesta en base a un mail que me envio Deiv.
La idea de este post, es mostrar y dar algunas ideas de como organizar un proyecto grande de contruccion de una tabla periodica didactica.

Lo primero que se debe considerar, son las clases de los elementos de las tablas periodicas, estos pueden ser metalesy no metales. Asi pues conformariamos un tipo de dato llamado Grupo así:
Código: Text
  1.  
  2. TGrupo = (gMetal, gNoMetal); //g minuscula quiere decir grupo
  3.  
  4.  
A su vez, los dos grandes gurpos se dividen en varios subgrupos; para los metales estan los alcalinos, alcalinos terreos... y para los no metales estan los halogenos, carbanoides, nitrogenoides....
Hay que tener cuidado en no tener asignado un subgrupo a un elemento que pertenece a otro grupo cosa que puede ser hecha usando una propiedad, desgracadiamente siempre uno esta ante el error de asignar un subgrupo metalico incorrecto a un metal,eso solo se puede prevenir prestando mucha atencion :P.
Código: Text
  1.  
  2. TSubGrupo = (sgAlcalino, sgHalogeno, sgAlcalinoTerreo, sgCarbonoide);
  3. //"sg" quiere decir sub_grupo
  4.  
  5.  
Asi, para seguir una estructura, nuestra Clase de un Elemento quimico quedaria por ahora en:
Código: Text
  1.  
  2. TElemento = class
  3.    private
  4.      FSubGrupo: TSubGrupo;
  5.     procedure SetSubGrupo(const Value: TSubGrupo);
  6.    public
  7.      Grupo: TGrupo;
  8.      property SubGrupo: TSubGrupo read FSubGrupo write SetSubGrupo;
  9.    end;
  10. ........
  11. procedure TElemento.SetSubGrupo(const Value: TSubGrupo);
  12. begin
  13.   //EsMetal() es una funcion que devulve true si el subrupo pertenece a los metales...
  14.   //hace muchos ifs nada mas :P
  15.   if (Grupo=gMetal) and (not EsMetal(Value)) then
  16.   begin
  17.      ERangeError.Create('Esta asignano a un Metal un subgrupo de un NoMetal!')
  18.      Exit;
  19.   end
  20.    else if (Grupo=gNoMetal) and (EsMetal(Value)) then
  21.   begin
  22.      ERangeError.Create('Esta asignano a un Metal un subgrupo de un NoMetal!')
  23.      Exit;
  24.   end;
  25.   FSubGrupo := Value;
  26. end;
  27.  
  28.  

Ahora vamos con las propiedades necesarias basicas empezando primero por las sencillas:
Código: Text
  1.  
  2. TElemento = class
  3.    private
  4.      FSubGrupo: TSubGrupo;
  5.     procedure SetSubGrupo(const Value: TSubGrupo);
  6.    public
  7.      NumeroAtomico: Byte;
  8.      MasaAtomica: Single;
  9.      PesoAtomico: Single;
  10.      Densidad: Single;
  11.      PuntoFusion: Single;
  12.      PuntoEbullicion: Single;
  13.      Simbolo: String[2]; //H, He, Li, Be, B, C, N, O, F, Ne....
  14.      Electronegativiad: Single;
  15.      Grupo: TGrupo;
  16.      property SubGrupo: TSubGrupo read FSubGrupo write SetSubGrupo;
  17.    end;
  18.  
  19.  
La que me falto es el Nro. Oxidacion o como antes se le decia, el Numero de Valencia.
Este es particular porque son varios numeros segun el elemento, la cantidad de esos numeros puede ser 1,2,3,4, 5 y 0 para los gases inhertes.
El valor ronda entre -3 y  +7
Lo mas facil seria tener un array con 5 elementos y un numero que indique cuantos valores de ese array son validos.
Código: Text
  1.  
  2. CantidadNrosOxidacion: Byte;
  3. NroOxidacion: array[1..5] of ShortInt;
  4.  
  5.  
Por ejemplo, el Hidrogeno tiene un solo numero de oxidacion, por eso:
CantidadNrosOxidacion = 1;
NroOxidacion[1] = 1;
El Cloro tiene 5:
CantidadNrosOxidacion = 5;
NroOxidacion[1] = -1;
NroOxidacion[2] = 1;
NroOxidacion[3] = 3;
...
respecto a las terminaciones para la formacion de sales que son oso, ico y lo prefijos  hipo y per
La cosa este respecto de CantidadNrosOxidacion:
Si son 2
entonces para el NroOxidacion[1] se usa iso (el menor si no me equivoco)
y pra NroOxidacion[2] se usa ico
Si son 4
para el NroOxidacion[1] hipo-oso
....esta parte me la salteo, es como en el caso anterior pero con el numero  2,3
para el NroOxidacion[4] per-ico

Como saber con que valencia actua cada elemento?
Con el que quiera, todo depende de las circunstancias de la reaccion quimica, en el caso del hiero el numero oxidacion puede ser 2 o 3 por lo que forma con oxigeno FeO y Fe2O3. Generalmente se forman las dos en distintas proporciones.

cargando datos
Lo mas facil seria tener archivos con los datos para cada elemento quimico, como ejemplo usaremos archivos de text. El titulo del archivo de texto es comodo que sea el numero atomico: 1.xt, 2.txt, 3.txt.....
El contenido seria algo asi (";" representa comentarios):
Citar
;simbolo
He
;grupo: 0 metal, 1 no metal
1
;nro atomico
1
;peso atomico
1.00079
;cantidad numeros oxidacion
1
;nro oxidacion
1
;densidad
0.071
;etc..............
Asi que tendriamos agregar a nuestra clase de TElemento un metodo para cargar datos desde un archivo de texto.
Código: Text
  1.  
  2.  TElemento = class
  3.    private
  4.      FSubGrupo: TSubGrupo;
  5.     procedure SetSubGrupo(const Value: TSubGrupo);
  6.    public
  7.      NumeroAtomico: Byte;
  8.      MasaAtomica: Single;
  9.      PesoAtomico: Single;
  10.      Densidad: Single;
  11.      PuntoFusion: Single;
  12.      PuntoEbullicion: Single;
  13.      Simbolo: String[2]; //H, He, Li, Be, B, C, N, O, F, Ne....
  14.      Electronegativiad: Single;
  15.      Grupo: TGrupo;
  16.      property SubGrupo: TSubGrupo read FSubGrupo write SetSubGrupo;
  17.      **********
  18.      procedure LoadFromFile(const FileName: String);
  19.    end;
  20.  
  21.  
Ahora simplemente se podria hacer
Código: Text
  1.  
  2. TTablaPeriodica = class
  3. public
  4.   ........
  5.    Elemento: array[1..103] of TElemento;
  6.  ..........
  7.     constructor Create;
  8. end;
  9. constructor TTAblaPeriodica.Create;
  10. begin
  11.   inherited Create;
  12.   for i:=1 to 103 do
  13.       Elemento[i].LoadFromFile(IntToStr(i) + '.txt');
  14. end;
  15.  
  16.  
Para Aceder a cualquier elemento de la tabla, es mediante el numero atomico:
Código: Text
  1.  
  2. WriteLn(TAblaPeriodica.Elemento[1].Simbolo); //da como salida: "H"
  3.  

PD: Deiv, espero que esto te de una pauta, si siguies teniendo dudas, puedes preguntar tranquilamente en este post, inclusive, si lo deseas, adjunta aqui el PDF que me mandaste con las preguntas.

Saludos

Deiv

  • Miembro activo
  • **
  • Mensajes: 67
  • Nacionalidad: bo
    • Ver Perfil
Re: Contruyendo Tabla Periodica
« Respuesta #1 en: Sábado 11 de Noviembre de 2006, 15:02 »
0
Hola,
A partir del momento seguro, el único que responderá a mis preguntas serás tu Enko, pero sería bueno que muchos se integren sin tenerle miedo a la "Química". Como también pienso que quizá muchos lo verán muy sencillo por lo de POO, en esto ojalá entiendan mi posición de novato en el asunto.

He leido el Truco, y la forma de construir una Tabla periódica. De antemano digo que no me concentraré en crear un componente, primero aprenderé POO con la Tabla y luego recién veremos.
Citar
TGrupo = (gMetal, gNoMetal); //g minuscula quiere decir grupo
¿Y que hay con los Anfóteros? ¿sería otro grupo? = gAnfoteros?

Citar
respecto a las terminaciones para la formacion de sales que son oso, ico y lo prefijos hipo y per
La cosa este respecto de CantidadNrosOxidacion:
Si son 2
entonces para el NroOxidacion[1] se usa oso (el menor si no me equivoco)
y pra NroOxidacion[2] se usa ico
Si son 4
para el NroOxidacion[1] hipo-oso
....esta parte me la salteo, es como en el caso anterior pero con el numero 2,3
para el NroOxidacion[4] per-ico
Aquí 2 preguntitas:
1.- Debemos diferenciar pienso entre terminación y prefijo, en todo caso solo habría 2 terminaciones: "oso" e "ico" y prefijos también 2 = "hipo" y "per", entonces ¿como encarar esta parte? pues "hipo-oso" no es terminación, así como está escrito textualmente. Aquí tal vez sería crear un nuevo array de prefijos?

2.- El caso del Manganeso (que es un Anfótero) trabaja como Metal:
     +2 (oso)  +3 (ico)
    y como No Metal:
     +4 (oso)  +6 (ico)  +7 (per-ico)
     ¿Cómo diferenciaría ese +2 y el +4 en cuanto a terminaciones?

Otra, en cuanto a:
Citar
Lo mas facil seria tener archivos con los datos para cada elemento quimico
¿Tendría digamos 110 archivos .TXT en disco? Imagino que mi Aplicación no se haría muy pesada como cuando pregunté aquella vez de cargar 110 iconos, y me recomendaste cargar un solo BMP bastante largo (uno solo). Tratar con TXT y con BMP o ICO debe ser diferente verdad?
Bueno, también recuerdo que en un de mis post del Foro, pregunté la forma de proteger mis archivos ICO o BMP y me recomendaste encriptarlos ya sea a DAT o encriptar por código. Imagino que para evitar copias, del trabajo que me costará recopilar información de cada uno (al estilo Base de Datos) de los elementos y grabarlos en formato TXT, también debo encriptarlos verdad?

Y otra, No entendí esta parte del código:
Citar
WriteLn(TAblaPeriodica.Elemento[1].Simbolo); //da como salida: "H"
¿Y como sabe el programa que debe mostrar la letra "H" del TXT? y por qué no muestra digamos el "peso atómico"? No sé si me dejo entender, sugeriste crear un TXT con varias filas, ¿Cómo accedo a cada una de las filas del TXT?

Bueno esas son mis primeras preguntas, mientras más lo vaya analizando y lo vaya trabajando la propuesta, vendrán más dudas.

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Contruyendo Tabla Periodica
« Respuesta #2 en: Sábado 11 de Noviembre de 2006, 17:03 »
0
Citar
¿Y que hay con los Anfóteros? ¿sería otro grupo? = gAnfoteros?
Eso mismo. Sino, podes usar un Byte para eso y a hacer:
Citar
0: metales
1: no metales
2: anfóteros
En realidad, es mas o menso lo mismo porque si:
Grupo := gMetal, entoces> Ord(Grupo) = 0;
Puedes hechar un vistazo a este link, hay una parte que habla sobre tipos enumerados.
Citar
¿como encarar esta parte? pues "hipo-oso" no es terminación, así como está escrito textualmente. Aquí tal vez sería crear un nuevo array de prefijos?
Segun me lo imagino yo, no hace falta tener ningun prefijo o sufijo para ningun elemento ya que estos, son comunes a todos.
Ejemplo de combinacion del metal Fe con el no metal O:
*)procedure CombinarOxido(Metal: elementoMetalico);
1)Revisas si el elemento pasado como parametro es un metal
2)Revisas cuantos numeros de oxidacion tiene
3)Son 2
4)combinas el menor y le pones el sufijo oso, luego el mayor con el sufijo ico

Si fueran 4 los numeros de oxidacion:
combinas el menor y pones hipo-oso
combinas.....
combinas el mayor  pones per-ico

redondeando los prefijos y sufijos no dependerian del elemento quimico, sino de la rutina que los combina. Claro esta que esta rutina toma en cuanta la candidad de los numeros de oxidacion que tiene el elemento.

PD> Me tengo que ir, en un rato respondo lo dem'as.

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Contruyendo Tabla Periodica
« Respuesta #3 en: Sábado 11 de Noviembre de 2006, 17:28 »
0
Lo de los archivos de texto:
Primero: no tienen porque ser archivos de texto, pueden ser archivos de acceso aleatorio con tipo:
Código: Text
  1.  
  2. Archivo: file of  TipoDatosElemento;
  3.  
  4.  
Acceder a 100 archivos de texto, es exactamente igual de engoroso qeu acceder a 100 mapas de bits. Si seguimos con la idea de los archivos de texto, el problema se soluciona tan facil como escribir los datos en un mismo archivo empezando por Hidrogeno, luego Helio, etc....
Lo que cambiaria es la forma de cargar la tabla periodica completa.
Seria algo como:
Código: Text
  1.  
  2. for i:=1 to 103 do
  3. begin
  4.    ReadLn(File, Cadena);
  5.    TablaPeriodica[i].Peso := StrToFloat(Cadena);
  6.    ReadLn(File, Cadena0;
  7.    TablaPerdiodica[i].Densidad := StrToFloat(Cadena);
  8.    ....etc....
  9. end;
  10.  
  11.  
Eso cargaria todos los datos del archivo de texto, a la tabla periodica que es un array de 103 elementos. Por supuesto que en el arhcivo de texto, tienen que estar los datos de los elementos siempre con el mismo orden y ademas consecutivos, es decir, ordenados por el numero atomico.

Citar
WriteLn(TAblaPeriodica.Elemento[1].Simbolo); //da como salida: "H"
Ahi estas accediendo a la tabla periodica, al elemento con el numero atomico 1, es decir Hidrogeno, cuyo simbolo es H.
Eso se puede hacer, una vez que cargaste los datos desde el archivo que los contiene.
Sumpongo uqe es mas comodo tener los datos afuera del codigo fuente, cosa que si un dia tenes que modificar alguno, no tenes que volver a compilar la ejecutable.

Deiv

  • Miembro activo
  • **
  • Mensajes: 67
  • Nacionalidad: bo
    • Ver Perfil
Re: Contruyendo Tabla Periodica
« Respuesta #4 en: Domingo 12 de Noviembre de 2006, 16:07 »
0
Aún voy analizando solo la parte teórica, lástima que no tenga en Casa Internet, me valgo de un CiberCafe para ir a revisar a diario lo que me llegó y lo que tengo que descargar para estudiarlo en casa. Como decía estoy ahora en teoría, y luego empezaré a aplicar programando todo esta parte inicial.
Citar
En realidad, es mas o menso lo mismo
 :D  :D  :rolleyes:

Abajo, creo que no estoy de acuerdo, o entiendo de otra manera:
Citar
Si fueran 4 los numeros de oxidacion:
combinas el menor y pones hipo-oso
combinas.....
combinas el mayor pones per-ico
Voy a tomar como ejemplo al anfótero Manganeso:
menor....mayor.............menor......mayor.. ...máxima
oso..........ico..................oso............ico...........per-ico
+2...........+3...................+4............+6..............+7

y si comparamos con el Cloro:
..................mínima.....menor....mayor.....máxima
hídrico.......hipo-oso......oso.......ico........per-ico
...-1..............+1............+3.........+5...........+7

a.- Primero aún no sé como voy a diferenciar a un anfótero como te hablé esos dobles "oso" y esos dobles "ico", tengo dos menores y dos mayores

b.- El Cloro tendría mínima, entonces ya no hablaríamos de menor, bueno pero, ¿y que mínima colocaría al Manganeso como No Metal?

Por ahora solo esas dudillas, luego me pongo a trabajar con la POO en máquina pronto, vale?
Un saludo

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Contruyendo Tabla Periodica
« Respuesta #5 en: Lunes 13 de Noviembre de 2006, 18:30 »
0
En el caso de Cloro:
Cloruro: -7, -5, -3, -1
Cloronio: +1
Como ves, para el cloro, en la nomeclatura de las sales siempre es negativo y el ion se llama cloruro que es el que te interesa, tiene 4 numeros oxidacion que nos importan.
El cloronio, es para quimica organica y no aparece en sales, por eso el numero de valencia +1 queda descartado.

Respecto al Anfotero de Magnesio: la verdad es que no conzco de los casos de anfoteros, pero segun tengo entendido son aquellos que actual como bases o acidos segun el medio.
Eso ocurre en los casos de acidos poliproticos, pero eso entra mas para quimica analitica y organica, que se escapa un tanto a las reglas generales.
sugerenica Te recomendaria al principio incluir unicamente los casos mas sensillos, es decir acidos y bases fuertes. Cosa que para esos casos, te aseguras de la inexistencia de anfoteros.


No importa que elemento quimico sea, sino que cuantos numeros de oxidacion (valencias).
(siempre teniendolos organizados de menor a mayor):
si son 2:
al [1] le pones oso
al [2] le pones ico
si son 3:
Aca hay dos posibilidades, te juro que le pregunte hace 3 años a mi profesora y me dijo que se usaba per y no hipo, pero no estoy seguro.
al [1] le pones oso
al [2]le pones ico
al [3] le pones per-ico
Si son 4>
al [1] le pones hipo-oso
al [2]le pones oso
al [3] le pones ico
al [4] le pones per-ico

Asi para el Caso de 2 tenemos: Fe, Co, Br
Para el caso de 3:  I, S, Cr
Para el caso de 4: Cl, N,



Sobre las nomenclaturas, segun tengo entendido, hay 3 tipos de nomenclatura.
Una es la que venimos usando: La antigua
Otra, es la Moderna o de IUPAC:
   FeO: oxido de hierro
   Fe2O3: trioxido de di hierro
   H2SO4: tetra oxo sulfato de di hidrogeno
   H20: oxido de di hidrogeno

La ultima, no se como se llama, pero se usa para las sales muy complicadas:
  Fe0: oxido de hiero II
  Fe2O3: oxido de hierro III
Bsicamente lo que se hace es se nombra similarmente a la IUPAC, pero sin di, tri, tetra, etc... y se pone el numero de oxidacion del metal (o el que fuera el "importante" )

Deiv

  • Miembro activo
  • **
  • Mensajes: 67
  • Nacionalidad: bo
    • Ver Perfil
Re: Contruyendo Tabla Periodica
« Respuesta #6 en: Martes 14 de Noviembre de 2006, 17:10 »
0
RADICAL + METAL = SAL (oxisal o Haloidea)
Ahora mi lenguaje químico voy a cambiar de: [hídrico, oso, ico, per-ico]   por    [uro, hipo-ito, ito, ato, per-ato]
Citar
tiene 4 numeros oxidacion que nos importan. El cloronio, es para quimica organica y no aparece en sales, por eso el numero de valencia +1 queda descartado.
Cloruro     -1  (Sal Haloidea)  Ejemplo: Cloruro de Calcio   CaCl2   [hídrico x uro]
Hipoclorito +1  (Sal Oxisal) Ejemplo: HipoClorito de Sodio  Na ClO  [hipo-oso x hipo-ito]
Clorito     +3  (Sal Oxisal) Ejemplo: Clorito de Calcio Ca(ClO2)2   [oso x ito]
Clorato     +5  (Sal Oxisal) Ejemplo: Clorato Ferroso Fe(ClO3)2     [ico x ato]
PerClorato  +7  (Sal Oxisal) Ejemplo: PerClorato de Potasio  K ClO4 [per-ico x per-ato]

Como verás todas las valencias actúan en Sales, como te dije los algoritmos para la formación de las Sales las tengo.

Los Anfóteros (Metaloides) me van a romper la cabeza, pues con los de abajo no hay problema:
Halógenos: -1 +1 +3 +5 +7  (uro, hipo-ito, ito, ato) 5 estados de oxidación
Anfígenos: -2 +2 +4 +6 (uro, hipo-ito, ito, ato) 4 estados de oxidación
Nitrogenoides -3 +3 +5 (..orgánico..., ito, ato) 3 estados de oxidación
Carbonoides -4 +2 +4(..orgánico..., ito, ato) 3 estados de oxidación

Si te fijas casi todos aquí cumplen exceptuando algunas, pero tienen un orden, pero los anfóteros, los anfóteros!, no tienen "uro" ni "hipo-ito"

Manganeso (como METAL)
+2 +3 (oso, ico)
PerClorato Manganoso
PerClorato Mangánico

Manganeso como (NO METAL)
+4 +6 +7 (oso, ico, per-ico)  terminación en ácidos
+4 +6 +7 (ito, ato, per-ato)  terminación en Sales
Manganito de Potasio  K2MnO3
Manganato de Potasio  K2MnO4
PerManganato de Potasio KMnO4

no tienen "uro" ni "hipo-ito",entonces no le puedo colocar la misma secuencia que para los halógenos, anfígenos, etc.
Citar
si son 2:
al [1] le pones oso
al [2] le pones ico
si son 3:
Aca hay dos posibilidades, te juro que le pregunte hace 3 años a mi profesora y me dijo que se usaba per y no hipo, pero no estoy seguro.
al [1] le pones oso
al [2]le pones ico
al [3] le pones per-ico
Si son 4>
al [1] le pones hipo-oso
al [2]le pones oso
al [3] le pones ico
al [4] le pones per-ico
La secuencia se perdió si son 4, iba bien en [1] = oso, para 2 y 3, pero en 4 ya no hay secuencia.

Sobre las NOMENCLATURAS, pienso que una vez que arme esto de las valencias en especial de los anfóteros, no será ningún problema, por que será solo trabajar con prefijos y sufijos luego. Son 3 Nomenclaturas:
Ejemplo Fe2O3
Nomenclatura Tradicional : Óxido Férrico  
Nomenclatura Werner-Stock: Óxido de Hierro (III)
Nomenclatura IUPAC       : Trióxido de diHierro

De curiosidad pude observar algo:
Código: Text
  1.  
  2. TGrupo = (gMetal, gNoMetal);
  3. TSubGrupo = (sgAlcalino, sgHalogeno, sgAlcalinoTerreo, sgCarbonoide);
  4.  

¿En que parte de un programa le pongo? debajo de la cabecera de Units? debajo de TForm? donde?
Me preguntaba esto por que noté que no tiene como otras la palabra CLASS:
Código: Text
  1.  
  2. TElemento = class
  3.   etc,......
  4. end;
  5.  
Bueno el truco, que tan solo Tú y Yo lo vamos discerniendo esperemos que algún día les sirva a muchos Químicos novatos en Delphi e inclusive en C++, que buscando en la Red, encuentren esta Página y hayamos aportado algo para el prójimo.

Deiv

  • Miembro activo
  • **
  • Mensajes: 67
  • Nacionalidad: bo
    • Ver Perfil
Re: Contruyendo Tabla Periodica
« Respuesta #7 en: Sábado 13 de Enero de 2007, 15:49 »
0
Nuevamente retomando el tema en esta gestión, me lancé a revisar la preparación de este programa:

Enko, he copiado algunas lineas de distintos párrafos tuyos (Ojo no llevan ningún orden):
Código: Text
  1.  
  2.   TSubGrupo = (sgAlcalino, sgHalogeno, sgAlcalinoTerreo, sgCarbonoide);
  3.   TGrupo = (gMetal, gNoMetal);
  4.   FSubGrupo: TSubGrupo;
  5.   procedure SetSubGrupo(const Value: TSubGrupo);
  6.   Grupo: TGrupo;
  7.   property SubGrupo: TSubGrupo read FSubGrupo write SetSubGrupo;
  8.  
Mi pregunta es:
Código: Text
  1. property SubGrupo: TSubGrupo read FSubGrupo write SetSubGrupo;
  2.  
Yo entendía que PROPERTY es eso, manejar Propiedades, pero en tu caso pareciera que maneja PROCEDUREs??

Bien he leido sobre POO y ya puedo darme cuenta "algo"
¿Que diferencia habría si la Base de Datos de los Elementos los preparo en Arrays uni o bidimensionales en otra Unit y jalarlo al programa principal? o mejor aún prepararlo en una DLL (aunque no me la conozco bien)? en fin ¿Cúal sería la diferencia de prepararlo así a la otra que me sugeriste en un TXT?
Datos de los Elementos en:

- Arrays en otra Unit vs TXT
- Arrays en DLL vs TXT

¿Resultaría lo mismo preparar los Datos de los elementos en un TXT, Arrays o DLLs? ¿Cual la diferencia?
Un saludo
Deiv

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Contruyendo Tabla Periodica
« Respuesta #8 en: Sábado 13 de Enero de 2007, 20:47 »
0
Las PROPIEDADES pueden funcionar como simples variables:
Código: Text
  1.  
  2. private
  3.   FProperty: Integer;
  4. public
  5.   property TProperty read FProperty; //solo lectura
  6.   property TProperty write FProperty; //solo escritura
  7.   property TProperty read FProperty write FProperty; //ambos
  8.  
  9.  
O pueden funcionar mediante funciones y procedimientos
Código: Text
  1.  
  2. private
  3.    FName: String;
  4.    procedure SetName(Value: String);
  5.    function GetName: String;
  6. public
  7.    property Name write SetName read GetName;
  8.  
  9. procedure SetName(Value: String);
  10. begin
  11.    FName := Upper(Value);
  12. end;
  13. function GetName : string
  14. begin
  15.   Result := Lower(FName);
  16. end;
  17.  
  18.  

REspecto a la inicializacion de la tabla periodica, lo m'as facil es que la hagas desde un archivo de TXT o bien desde un archivo con TIPO de tipo TRecordElemento.
No entend'i lo de array, al fin y al cabo, cuando leas los datos, terminaran en un array, o no?
La ventaja de hacer una dll es que la podras usar con otros programas, si es una UNIT de delphi, unicamente con Delphi.
Con la velocidad de los ordenadores actuales, no es algo tan significativo.
La ventaja de Bases de Datos es que con SQL luego podras hacer alguna que otra consulta.

Deiv

  • Miembro activo
  • **
  • Mensajes: 67
  • Nacionalidad: bo
    • Ver Perfil
Re: Contruyendo Tabla Periodica
« Respuesta #9 en: Martes 16 de Enero de 2007, 14:08 »
0
Tienes razón cuando leamos los Datos todos terminarán en un Array, a lo que me refería fue por ejemplo que el array de abajo (los Datos):
Código: Text
  1.  
  2. NoMetales: array [0..24,0..5] of string =
  3.    (('F','Fluor','1','','',''),
  4.     ('Cl','Cloro','1','3','5','7'),
  5.     ('Br','Bromo','1','3','5','7'),
  6.     // etc;  OJO Esto es solo un Ejemplo donde contemplo solo Nº Oxidación y Nombres
  7.     // Digo es un ejemplo ya que en lugar de Nºs Oxidacion pueden ir las Propiedades
  8.     // necesarias como Número Atómico, Peso Atómico, Densidad, etc.
  9.     ('Am','Americio','4','5','6',''));
  10.  
podrían estar preparados en otra Unit, o en otra DLL; o como sugeriste en un Archivo TXT y cargarlo a un array del programa principal.  A eso me refería con:
- Arrays preparados en otra Unit vs Datos TXT (Como arriba)
- Arrays preparados en DLL vs Datos TXT (con el objetivo de cargar dinámicamente)
- Archivo TIPO vs Datos TXT (Tu última sugerencia)
- Tabla vs Datos TXT (Una nueva pregunta)

¿Es los mismo o, cuál es el más óptimo? ¿Cuál tu opinión?
Citar
La ventaja de Bases de Datos es que con SQL luego podras hacer alguna que otra consulta.
Haber esta parte no entendí, ¿Necesariamente al final se debe utilizar SQL?, ¿Cómo trabajar con Consultas cargado los Datos en un Array? Digo por ejemplo, me gustaría mostrar en algún momento solo Halógenos, o en otro solo Gases Nobles, ¿Es solo SQL que puede hacer este trabajo de FILTRADO?? ¿Acaso con Arrays no se puede realizar unas "Consultas" por código para este cometido?