Другие языки программирования и технологии

вопрос о динамических массивах в fortran

такой вопрос, вот динамические массивы, вроде все понятно. стоит определенная задача по программированию, перво наперво надо решить для себя как я буду добиваться решения, ну в общих чертах, например- считаю массив, отберу элементы, запомню строки с нулевыми и все такое.... но вторичным встает вопрос о синтаксисе. подскажите, как: а) считать массив динамический из файлаб) как вообще в созданный файл занести матрицу, что там надо указыватьв) какие оссобенности синтаксиса при построении программы у динамических массивов отличительные от обычныхг) вот дана программа: Program Matrix
integer N,M,imax(2)
Integer, Allocatable :: A(:,:),B(:) ! динамические массивы
Open(1,FILE='in.txt') ! файл исходных данных
Open(2,FILE='out.txt') ! файл результатов
Read(1,*)N,M! считываем число строк N и столбцов M
Allocate (A(N,M),B(M)) ! размещаем динамические массивы в памяти
Read(1,*)(A(i,:),i=1,N) ! считываем строки массива
imax=maxloc(A)
B=A(imax(1),:)
Write(2,*)B
Deallocate(A,B)! освобождение динамической памяти
Endобьясните, что делает 8я строка и почему у A(1,:) в скобках после запятой стоит двоеточие, что делает 6я строка и почему после Read в скобках после запятой стоит *?заранне очень благодарен за помощь! уже волосы дыбом, не понимаю ничего ровным счетом! надежда на вас, помогите!!!
ни каких отличий синтаксисе в работе со статическими и динамическими массивами нету.

Read(1,*)N,M - читает из файла 1 два целых числа. * - означает, что формат ввода не определяется /оператора format нету/ и используется по умолчанию. считываются два числа разделенных без разницы сколькими пробелами, либо по одной запятой м/д числами, хоть по одному на каждой строке.
Так 3 4, либо так 3,4
либо так
3
4

Read(1,*)(A(i,:),i=1,N) - читает n строк из файла №1, : - значит что за одно обращение к файлу считывает целиком всю строку и забивает ее в cтроку массива. FORMAT то же не определен, берется по умолчанию. Элементы строк могут быть хоть по одному в строке, хоть все в одну строку с разделителями пробелами иль запятыми - пофиг. лишь бы количество элементов в файле было не меньше N*M, дабы не приключилась ошибка при чтении файла.

Так же считывают и записывают в файл статические массивы.

Разница - для дин. массивов надо сперва выделить память - Allocate, а потом освободить - Deallocate. и вся разница

зы: прога полностью рабочая. Она берет из файла in.txt размер матрицы и саму матрицу.
Потом находит номер строки и столбца с первым максимальным элементом - imax=maxloc(A)
перекидывает эту строку в массив В - B=A(imax(1),:) целиком строку, потому второй индекс не указан /стоит :/ imax(1) - это номер строки с максимумом, imax(2) - номер столбца
Write(2,*)B - выбрасывает весь массив В в файл №2 - out.txt. Формат тоже не указан - берется по умолчанию сколько то пробелов м/д числами.

Вот у тебя статический массив - imax(2). Его то же можно динамическим сделать, ни чего не измениться.
Василий Северенков
Василий Северенков
20 328
Лучший ответ
Я последний раз видел прогу на фортране в 1996 году :)
И то это была старая-престарая прога, которая сохранилась только в виде распечатки и что-то там такое из гидродинамики умела считать. Набирал текст заново. Вроде взлетела.

С другой стороны, не проблема найти учебник в самой обыкновенной библиотеке (бумажной).
Господи.. . Кто же это еще в наше время пишет программы на мертвых языках?
Afgan Ali Qafuroglu
Afgan Ali Qafuroglu
30 844
двоеточия ставится для указания столбцы/рядка матрицы.

b(3,:) = (/5, 9, 10/)
присваиваем значения третьему ряду.

Восьмая строка у тебя прокомментирована.

* скорее всего значит читать весь файл.
Koka Kapanadze
Koka Kapanadze
758