2009-04-18 7 views
6

Pour mon nouveau projet, je dois utiliser un tableau au lieu d'un fichier de travail pour stocker les informations des utilisateurs. Pour ce faire, j'ai aussi besoin de créer des types dérivés.Tableaux et types dérivés

Cependant, je n'ai pas compris ce qu'est un tableau et ce qu'est un type dérivé, comment les utiliser, ce qu'ils peuvent faire, et d'autres idées de base. Quelqu'un peut-il me donner des informations sur les types array et dérivés?

J'ai écrit du code pour eux, mais je ne sais pas qu'il est écrit correctement. Si quelqu'un peut vérifier cela pour moi, je l'apprécierais.

Voici mes tableaux et types dérivés:

! 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

Pas besoin de vous excuser. Ton anglais est bon. Une raison pour laquelle les gens ont des droits d'édition est d'aider dans ce domaine. J'espère que mes modifications ont aidé. – Eddie

Répondre

6

Si vous êtes un programmeur fortran, vous avez probablement vu un sous-programme acceptant 10/15 arguments. Si vous y réfléchissez, c'est fou (ils sont trop nombreux, vous courez le risque de les échanger) et vous réalisez rapidement que certains arguments voyagent toujours ensemble. Il serait logique de les emballer sous une seule entité qui porte tout autour de l'ensemble, non comme des entités indépendantes. Cela réduirait considérablement le nombre d'arguments, vous donnant seulement le fardeau de trouver une association appropriée. Cette entité unique est le type.

Dans votre code, vous dites qu'une banque est un agrégat de ces informations. Vous pouvez maintenant déclarer une variable concrète de ce type, qui représentera et donnera accès aux variables uniques acNumber, acChecks et ainsi de suite. Pour ce faire, vous devez utiliser le symbole%. donc si votre variable bancaire est appelée b, vous pouvez dire par exemple

b%acNumber = 5 

Vous pouvez imaginer b comme un placard, contenant différentes étagères. Vous déplacez le fermé, toutes les étagères et leur contenu bougent ensemble. Un tableau est un groupe d'entités du même type (disons, nombre entier, ou caractère (len = 1024), ou banque) et ils sont l'un après l'autre de sorte que vous pouvez accéder à chacun d'eux avec un index numérique.Rappelez-vous que, sauf indication contraire, tableaux index en Fortran à 1 (dans toutes les autres langues principales, le premier indice est égal à zéro à la place)

En ce qui concerne votre code, je vous suggère:

  • écrire

    INTEGER, DIMENSION(MaxRow:MaxColum) :: AccountData 
    

    comme

    INTEGER :: AccountData(MaxRow,MaxColum) 
    

    est le même, mais vous écrivez moins. S'il vous plaît noter également qu'il existe une différence entre l'utilisation de: et le,. Si vous voulez définir une matrice (votre cas), qui est un tableau à deux dimensions, vous devez utiliser la virgule. Ce que vous avez écrit est faux.

  • pour les cordes, il vaut mieux si vous écrivez

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

    comme

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

    dans ce cas, vous écrivez plus, mais votre syntaxe est obsolète (je peux me tromper, bien) Aussi, rappelez-vous que c'est mieux si vous écrivez une variable membre par ligne dans les types. C'est une question de goût, mais je préfère voir la taille d'un type en ayant une ligne par variable membre.

  • Pour MaxRows et MaxColumns, je les écrirais comme MAX_ROWS et MAX_COLUMNS. Les paramètres et les éléments qui sont hautement constants par tradition sont identifiés par un nom de majuscule, souligné par un trait de soulignement, dans n'importe quelle langue majeure.


Modifier: pour répondre à votre commentaire, voici un exemple de l'utilisation d'un tableau

$ 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 tableau est comme plusieurs variables avec le même nom, identifiés par Un index. Très utile pour exprimer des vecteurs, ou des matrices. Vous pouvez bien sûr faire un tableau d'un type agrégé que vous définissez, au lieu d'un type prédéfini (par exemple, nombre entier).

+0

Merci pour votre commentaire. J'ai compris ce qu'est le tableau et le type dérivé, mais je suis toujours confus à propos de l'écriture dans le tableau (stocker des informations dans le tableau). Est-ce comme un fichier de travail? Ai-je besoin d'utiliser l'instruction WRITE pour cela? –

+0

no. C'est comme plusieurs copies du même type de variable. vous y écrivez par affectation. J'ajouterai quelque chose de plus détaillé à ma réponse plus tard. Maintenant, je dois précipiter :) –

+0

Notez que j'ai corrigé votre écriture MaxRow, MaxColumn. Comme vous l'avez écrit, vous ne définissez pas un tableau à deux dimensions. Cette syntaxe signifie quelque chose d'autre. –

0

Un tableau est une liste ordonnée de variables, toutes du même type, indexés par des entiers. Voir Array in Wikipedia Notez que dans Fortran l'indexation de tableau est plus flexible que la plupart des autres langages de bas niveau, en ce qu'au lieu d'un seul index par dimension, vous pouvez avoir un triplet d'index composé de limite inférieure, limite supérieure et foulée. Dans ce cas, la lvalue de l'expression est un sous-tableau plutôt qu'un seul élément du type tableau. Un type dérivé est un type composite défini par les utilisateurs, composé de plusieurs composants qui peuvent être de différents types. Dans d'autres langues, ils sont connus en tant que structure, type de structure ou type d'enregistrement. Voir Record in Wikipedia

Vous pouvez également créer un tableau d'un type dérivé, ou vous pouvez avoir un type dérivé dans lequel un ou plusieurs composants sont eux-mêmes des tableaux ou d'autres types dérivés. C'est à vous! La méthode la plus simple pour vérifier votre code est d'essayer de le compiler. Passer devant le compilateur n'est bien sûr pas une garantie que le programme fonctionne comme prévu, mais c'est certainement une étape nécessaire.

+0

Merci pour votre commentaire et aussi des liens! –

Questions connexes