Массивы и производные типы

для моего нового проекта я должен использовать массив вместо файла нуля для хранения информации от пользователей. Для этого мне также нужно создать производные типы.

однако я не понял, что такое массив и что такое производный тип, как их использовать, что они могут делать и некоторые другие основные идеи. Может ли кто-нибудь дать мне некоторую информацию о массиве и производных типах?

Я написал код для них, но я не знаю, правильно ли он написан. Если кто может проверить это я был бы признателен.

вот мой массив и производные типы:

! 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

2 ответов


если вы программист fortran, вы, вероятно, видели подпрограмму, принимающую 10/15 аргументов. Если вы подумаете об этом, это безумие (их слишком много, вы рискуете их поменять), и вы быстро поймете, что некоторые аргументы всегда путешествуют вместе. Было бы разумно упаковать их под одну сущность, которая несет все вокруг в целом, не как независимые сущности. Это значительно уменьшило бы количество аргументов, давая вам только бремя поиска правильного ассоциация. Этот единственный объект является типом.

в вашем коде вы говорите, что Банк является совокупностью этих сведений. Теперь вы можете объявить конкретную переменную этого типа, которая будет представлять и предоставлять доступ к отдельным переменным acNumber, acChecks и так далее. Для этого необходимо использовать символ%. поэтому, если ваша банковская переменная называется b, вы можете сказать, например

b%acNumber = 5

вы можете представить b как шкаф, содержащий различные полки. Ты двигаешь ... закрытые, все полки и их содержимое двигаются вместе.

массив-это группа объектов одного типа (скажем, целое число или символ(len=1024) или банк), и они находятся один за другим, поэтому вы можете получить доступ к каждому из них с числовым индексом. Помните, что, если не указано иначе, индексы массивов в fortran начинаются с 1 (на всех других основных языках первый индекс равен нулю)

что касается вашего кода, я предлагаю вам:

  • написать

     INTEGER, DIMENSION(MaxRow:MaxColum) :: AccountData 
    

    as

     INTEGER :: AccountData(MaxRow,MaxColum)
    

    это то же самое, но ты пишешь меньше. Обратите внимание, что есть разница между помощью и ,. Если вы хотите определить матрицу (ваш случай), которая является двухмерным массивом, вы должны использовать запятую. То, что ты написал неправильно.

  • для строк лучше, если вы напишете

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

    as

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

    в этом случае, вы напишите больше, но ваш синтаксис устарел (хотя я могу ошибаться) Кроме того, помните, что лучше написать одну переменную-член на строку в типах. Это вопрос вкуса, но я предпочитаю видеть полный размер типа, имея одну строку на переменную-член.

  • для MaxRows и MaxColumns я бы написал их как MAX_ROWS и MAX_COLUMNS. Параметры и вещи, которые очень постоянны по традиции, идентифицируются со всей столицей, подчеркивают разделенное имя в любой основной язык.


редактировать: чтобы ответить на ваш комментарий, Вот пример использования массива

$ 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

массив похож на несколько переменных с одинаковым именем, идентифицируемых индексом. Очень полезно выражать векторы или матрицы. Можно конечно сделать массив агрегированный тип определить, а не предопределенный тип (например. целое.)


массив-это упорядоченный список переменных одного типа, индексированных целыми числами. См.массив в Википедии обратите внимание, что в Fortran индексирование массива является более гибким, чем большинство других языков низкого уровня, в том, что вместо одного индекса на измерение, вы можете иметь триплет индекса, состоящий из нижней границы, верхней границы и шага. В этом случае значение lvalue выражения является подмножеством, а не одним элементом типа массива.

производный тип составной тип, определенный пользователем, который состоит из нескольких компонентов, которые могут быть разных типов. В некоторых других языках они известны как структуры, типы структур или типы записей. См.запись в Википедии

вы также можете создать массив производного типа, или вы можете иметь производный тип, где один или несколько компонентов сами являются массивами, или, если на то пошло, другие производные типы. Это до вас!

самый простой способ проверить ваш код, чтобы попробуйте скомпилировать его. Прохождение компилятора, конечно, не гарантирует, что программа работает так, как ожидалось, но это, безусловно, необходимый шаг.