2009-04-18 17 views
6

Para mi nuevo proyecto, tengo que usar una matriz en lugar de un archivo reutilizable para almacenar información de los usuarios. Para hacer esto, necesito crear tipos derivados, también.Matrices y tipos derivados

Sin embargo, no he entendido qué es una matriz y qué tipo derivado es, cómo usarlas, qué pueden hacer y algunas otras ideas básicas. ¿Alguien me puede dar alguna información sobre la matriz y los tipos derivados?

Escribí el código para ellos, pero no sé si está escrito correctamente. Si alguien puede verificar esto por mí, lo agradecería.

Éstos son mis matriz y derivados tipos:

! derived type 
TYPE Bank 
    INTEGER :: acNumber, acChecks 
    REAL :: acBlance, acRate 
    CHARACTER :: acType*1, acLName*15, acFName*15 
END TYPE 

! array 
INTEGER, PARAMETER :: MaxRow, MaxColum = 7 
INTEGER, DIMENSION(MaxRow:MaxColum) :: AccountData 
+1

No hay necesidad de disculparse. Tu ingles está bien. Una de las razones por las cuales las personas tienen derechos de edición es para ayudar en esta área. Espero que mis ediciones me hayan ayudado. – Eddie

Respuesta

6

Si es un programador fortran probablemente haya visto una subrutina aceptando 10/15 argumentos. Si lo piensas, es una locura (son demasiados, corres el riesgo de cambiarlos) y te das cuenta rápidamente de que algunos argumentos siempre viajan juntos. Tendría sentido agruparlos en una única entidad que transporta todo en su totalidad, no como entidades independientes. Esto reduciría considerablemente la cantidad de argumentos, y solo le daría la carga de encontrar una asociación adecuada. Esta única entidad es el tipo.

En su código, usted dice que un Banco es un agregado de esas informaciones. Ahora puede declarar una variable concreta de ese tipo, que representará y proporcionará acceso a las variables individuales acNumber, acChecks, etc. Para hacerlo, debes usar el símbolo%. por lo que si la variable de banco se llama B, se puede decir, por ejemplo

b%acNumber = 5 

Se puede imaginar b como un armario, que contiene diferentes estantes. Mueves el cerrado, todos los estantes y su contenido se mueven juntos.

Una matriz es un grupo de entidades del mismo tipo (digamos, entero, o Carácter (len = 1024), o Banco) y son una después de otra para que pueda acceder a cada una de ellas con un índice numérico.Recuerde que, a menos que se especifique lo contrario, las matrices de los índices de inicio FORTRAN a 1 (en todos los demás idiomas principales, el primer índice es cero en su lugar)

cuanto a su código, lo que sugeriría:

  • escribir

    INTEGER, DIMENSION(MaxRow:MaxColum) :: AccountData 
    

    como

    INTEGER :: AccountData(MaxRow,MaxColum) 
    

    es la misma, pero se escribe menos. Tenga en cuenta también que existe una diferencia entre el uso de: y el,. Si desea definir una matriz (su caso), que es una matriz de dos dimensiones, debe usar la coma. Lo que escribiste está mal.

  • para las cadenas, es mejor si se escribe

    CHARACTER :: acType*1, acLName*15, acFName*15 
    

    como

    CHARACTER(LEN=1) :: acType 
    CHARACTER(LEN=15) :: acLName 
    CHARACTER(LEN=15) :: acFName 
    

    en este caso, se escribe más, pero su sintaxis es obsoleto (puedo estar equivocado, sin embargo) Además, recuerde que es mejor si escribe una variable miembro por línea en los tipos. Es una cuestión de gusto, pero prefiero ver el tamaño completo de un tipo al tener una línea por variable miembro.

  • Para MaxRows y Max Columnas, los escribiría como MAX_ROWS y MAX_COLUMNS. Los parámetros y las cosas que son altamente constantes por tradición se identifican con un nombre de mayúscula completo y de subrayado en cualquier idioma principal.


Editar: para responder a su comentario, aquí es un ejemplo de la utilización de una matriz

$ more foo.f90 
program test 
    integer :: myarray(10) 

    myarray = 0 ! equivalent to zeroing the single elements one by one 
    myarray(2) = 5 
    myarray(7) = 10 

    print *, myarray 

end program 
$ g95 foo.f90 -o foo 
$ ./foo 
0 5 0 0 0 0 10 0 0 0 

un array es igual que múltiples variables con el mismo nombre, identificadas por un índice. Muy útil para expresar vectores o matrices. Por supuesto, puede hacer una matriz de un tipo agregado que defina, en lugar de un tipo predefinido (por ejemplo, entero).

+0

Gracias por tu comentario. Comprendí qué matriz y qué tipo derivado son, pero todavía estoy confundido acerca de cómo escribir en una matriz (almacenar información en una matriz). ¿Es como un archivo de cero? ¿Necesito usar la declaración WRITE para hacer esto? –

+0

no. Es como copias múltiples del mismo tipo de variable. usted escribe en él por asignación. Agregaré algo más detallado a mi respuesta más adelante. Ahora tengo que apurar :) –

+0

Tenga en cuenta que he corregido su escritura MaxRow, MaxColumn. Como escribió, no está definiendo una matriz de dos dimensiones. Esa sintaxis significa algo más. –

0

Una matriz es una lista ordenada de variables, todas del mismo tipo, indexados por enteros. Consulte Array in Wikipedia Tenga en cuenta que en Fortran la indexación de matrices es más flexible que la mayoría de otros lenguajes de bajo nivel, en que en lugar de un solo índice por dimensión, puede tener un triplete de índice que consta de límite inferior, límite superior y zancada. En ese caso, el valor l de la expresión es un subcampo en lugar de un solo elemento del tipo de matriz.

Un tipo derivado es un tipo compuesto definido por los usuarios, que se compone de múltiples componentes que pueden ser de diferentes tipos. En algunos otros idiomas se conocen como estructuras, tipos de estructura o tipos de registros. Consulte Record in Wikipedia

También puede hacer una matriz de un tipo derivado, o puede tener un tipo derivado donde uno o más componentes son ellos mismos matrices, o para el caso, otros tipos derivados. ¡Tu decides!

La forma más fácil de comprobar su código es intentar compilarlo. Pasar el compilador por supuesto no garantiza que el programa funcione como se espera, pero ciertamente es un paso necesario.

+0

¡Gracias por tu comentario y también enlaces! –

Cuestiones relacionadas