Форум программистов, компьютерный форум, киберфорум
Fortran
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/37: Рейтинг темы: голосов - 37, средняя оценка - 4.68
akanter

Чтение из файла двумерного массива вещественных чисел

25.08.2013, 06:04. Показов 7524. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!

Установлен фортран pgi-f95

До этого месяца на фортране программировать не доводилось, сейчас вот возникла необходимость написать оболочку для ввода/вывода данных под несколько фортрановских библиотек. В частности, стоит подзадача - считать данные в формате double precision из массива в файле, никак не могу добиться корректного чтения. Код на данный момент такой:

Fortran
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 program prog
 
      implicit none
 
      ! Variables
      INTEGER N,I,J,temp 
 
      DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: A !Массив, размерность которого заранее неизвестна
          
      ! Body
      write (*,*) "------------Program Starts-----------"
 
     OPEN(5,FILE='input.txt')
     READ(5,*)N
 
    ALLOCATE(A(N,N));
 
     DO 10 I=1,N
        READ(5,20)(A(I,J),J=1,N)
       10 CONTINUE
       20 FORMAT(D9.2) !Хочется считывать числа, скорее всего они будут небольшие - до 9 знаков точно
     CLOSE(5)
    
      read (*,*) temp
      
      end program prog
Файл ввода имеет такой вид:
3
11.05,-2.07,30.00
4.00,52.00,-6000.00
7.00,8.00,911.00

То есть, сперва идет размерность, потом квадратная матрица, где разряды элементов отделены ".", а переменные ",". Программа работает не так как я ожидаю (первый проход цикла - , возможно я чего-то не понимаю Когда я переписал ее для типа данных Integer и убрал дробные части в числах, она заработала корректно, из этого я сделал вывод, что числа должны отделяться ",",а то, что разряды отделяются "." я предположил исходя из формата.

Вопрос: как добиться корректного считывания из файла?
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.08.2013, 06:04
Ответы с готовыми решениями:

Чтение двумерного массива вещественных чисел из файла, где числа разделены "," и ";"
Исходный текстовый файл выглядит таким образом: M= Нужно, чтобы массив выглядел следующим образом: 1 20 0.033 2 30 0 1 0 0 ...

Чтение из файла двумерного массива чисел (visual studio 2008)
Добрый день. Прошу помочь с чтением из файла двумерного вектора в visual studio 2008. На форуме видел множество примеров, но VS выдает...

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

3
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38203 / 21135 / 4310
Регистрация: 12.02.2012
Сообщений: 34,741
Записей в блоге: 14
26.08.2013, 08:29
Насколько я помню Фортран:

1) Запятая не нужна
2) Формат D9.2 означает, что каждое число занимает 9 позиций, из которых 2 последние - дробная часть.

Первая строка твоей матрицы должна иметь вид

123456789012345678901234567890 (Нумерация разрядов)
_________1_________2_________3

____11.05_____-2.07____30.00

Остальные - соответственно, разряд под разрядом.

Добавлено через 23 часа 6 минут
На самом деле, кажется, что и точка не обязательна! Важно, чтобы каждое число занимало 9 позиций, а две цифры справа Фортран "отщепит" сам.
1
21 / 19 / 4
Регистрация: 26.08.2013
Сообщений: 172
26.08.2013, 16:51
1) Как отмечалось выше, разделитель во входном файле лучше использовать не ",", а табулятор или пробелы. Десятичную часть отделять точкой.
2) Не стоит путать размеры и размерность массивов.
3)Один из вариантов приведен ниже. Компилятор ifort (IFORT) 13.1.1 20130313 Copyright (C) 1985-2013 Intel Corporation. All rights reserved.
Fortran
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
program read_from_file
! описание переменных
implicit none
integer j,k !индексы элементов массива
integer N ! размер массива
double precision, allocatable :: array(:,:) ! двумерный массив чисел двойной точности с автоматическим выделение памяти под него 
! тело программы
write(*,*) 'The Program starts.'
open( UNIT=1, file= 'indata.dat', STATUS='old', ACTION='read' ) ! прикрепление файла к устройству
read(1,*) N ! чтение размера массива
allocate(array(N,N)) ! выделение памяти под массив
do j = 1, N, 1  ! пробегаем по строкам
    read(1,*,end=200) (array(j,k),k=1,N) ! пробегаем по стобцам 
end do ! for j
200 j=j-1 ! уличная магия для устранения проблем при чтении последней строки в файле 
! вывод на экран для проверки
do j = 1, N, 1
    do k = 1, N, 1
        write(*,002) array(j,k)
    end do !for k
    write(*,*)
end do ! for j
deallocate(array) ! освобождение памяти занимаемой массивом
close(UNIT=1, STATUS='keep') ! открепление файла от устройства 1
002 format(f12.2,\) !ПРИ ТАКОМ ФОРМАТЕ ВЫВОДА ОН ОКРУГЛЯЕТ ДЕСЯТИЧНУЮ ЧАСТЬ!
!-----------------------------------------------------------------------
write(*,*) 'The Program is complete.'
stop
end program read_from_file
Входной файл:
Кликните здесь для просмотра всего текста
5
11.05 -2.07 30.00 5.2366 6.3366
4.0 52.0 -6000.00 1.00 0.0
7.00 8.0 911.0055558 659.2 800
1.0 2 56 52.0 2.0
62.3 5. 900 8.0 1.

4) Я бы выбрал другой алгоритм: сначала пробежать весь файл и определить сколько в нем строк. Тогда не будет возникать runtime ошибок при чтении из файла и не понадобится 16 строка
0
akanter
27.08.2013, 17:49
Огромное спасибо) Пройду листинги отладчиком по шагам, чтобы лучше вникнуть )
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.08.2013, 17:49
Помогаю со студенческими работами здесь

Чтение из файла вещественных чисел
Здравствуйте. У меня имеется файл в котором написаны числа, которые описывают некоторый график функции в полярных координатах, примерно в...

Формирование двумерного массива из диапазона вещественных чисел
Помогите написать программу с таким заданием: Написать программу формирования двумерного массива D(n,n) из диапазона вещественных чисел....

Найти номер столбца двумерного массива вещественных чисел
Найти номер столбца двумерного массива вещественных чисел, для которого среднеарифметическое значение его элементов минимално

Найти наименьший элемент двумерного массива вещественных чисел
Найти наименьший элемент двумерного массива вещественных чисел.

Чтение двумерного массива из файла
Всем привет! Ребята написал метод, который считывает из файла двумерный массив,не работает, вылетает исключение. Не могу понять где...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru