Implicitement fait l'initialisation de tableau de boucle
Je veux initialiser un tableau à une ligne avec un implicite boucle. Cependant, j'ai toujours une syntaxe ou une forme d'erreur. Quelqu'un peut-il m'aider à corriger ce qui suit construire?
integer myarray :: (maxdim, nr)
myarray(1:maxdim,nr) = (/(/i,i=1,maxdim/),nr /)
source d'informationauteur tarrasch
Vous devez vous connecter pour publier un commentaire.
Vous sont en cours d'initialisation d'un tableau avec
MAXDIM
lignes etNR
colonnes, et il semble que chaque colonne contient les nombres entiers de 1 àMAXDIM
.Comme une première étape, aller de l'avant et d'écrire le réel
DO
-boucle:L'effondrement de la boucle intérieure pour une boucle implicite de la structure:
Quand nous essayons de l'effondrement de la boucle externe, cependant, quelque chose d'étrange se passe:
Maintenant, je reçois une incompatibilité rangs d'erreur que vous avez fait. Depuis que je ne suis pas très bon à l'implicite de faire des boucles non plus, j'ai regardé la
shape
intrinsèque des résultats pour le constructeur array:Ce imprime
Le constructeur array est tout simplement de l'expansion d'un 1-D tableau , à l'aplatissement des tableau imbriqué constructions. Nous pouvons réellement supprimer la deuxième série de
(//)
pour simplifier. Puisque tout est déjà dans le bon ordre, nous pouvons utiliser lareshape
intrinsèque pour assurer un bon rang. Mon programme de test est alors:L'implicite boucle ne fera que créer un vecteur de sorte que vous aurez à remodeler. Quelque chose comme ceci:
ou peut-être vous voulez un plus compliqué, imbriquées, implicite boucle:
Remarque que je suis en utilisant le Fortran2003 convention de
[ ]
pour délimiter la matrice de constructions, plutôt que de(//)
. Notez également que vous devez déclarer l'implicite indice de boucle variables.