Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [General] Фортран. Работа с файлом 
:(
    Опции темы
Bibigonich
Дата 4.7.2010, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 4.7.2010

Репутация: нет
Всего: нет



Привет, собственно вот что тревожит меня:

Дан файл f, компоненты которого являются действительными числами.
как в программе найти количество этих элементов? Мне нужно число n,для дальнейшей работы программы, для циклов..
пробывал в файле 1ым элементом задать это количество, и его прочитать как n. Но преподаватель сказал что так незя, не правильно.
так собственно как правильно сделать?
слышал про "Также можно ловить конец файла и подсчитывать количество прочитанных чисел". но как это оформить?
еще про оператор Len, но как с ним обращатсья тоже не понимаю, постоянно ошибки выдает

помогите плизз

Это сообщение отредактировал(а) Bibigonich - 4.7.2010, 16:47
PM MAIL   Вверх
Фантом
Дата 4.7.2010, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: 5
Всего: 49



Цитата(Bibigonich @  4.7.2010,  16:34 Найти цитируемый пост)
пробывал в файле 1ым элементом задать это количество, и его прочитать как n. Но преподаватель сказал что так незя, не правильно.
так собственно как правильно сделать?

Так как раз в большинстве случаев правильно. Только, по-видимому, преподаватель хочет получить что-то другое.

Цитата(Bibigonich @  4.7.2010,  16:34 Найти цитируемый пост)

слышал про "Также можно ловить конец файла и подсчитывать количество прочитанных чисел". но как это оформить?

У оператора read есть спецификатор end, позволяющий указать метку оператора, на который произойдет переход при достижении конца файла. В некоторых реализациях также есть функция eof().
PM   Вверх
Bibigonich
Дата 4.7.2010, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 4.7.2010

Репутация: нет
Всего: нет



ну а как заполучить n. Мне оно надо будет для продолжения.

Вот полное задание:Дан файл f, компоненты которого являются действительными числами. Найти при помощи подпрограммы общего вида
А) сумму компонет файла
Б) модуль суммы и квадрат произведения компонент файла

Вот как оно у меня получилось, всё работает, ток надо по другому полуить значение n.

Код

program nio
dimension a(100)
Open (1,status='old', file='f.txt')
!Вводим данные
read (1,*), n !я в файле прописал цифру, и ее читает программа, как количество элементов
do i=1,n
read (1,*), a(i)
end do
!печатаем данные
print*, 'komponenti faila:'
do i=1,n
print*, a(i)
end do
call subr(a, 1, n, s, p)
m=ABS(s)
qw=p**2
!печатаем сумму
print*, ''
print*, 'summa komponent:'
print*, s
print*, ''
print*, 'Modul summy:'
print*, m
print*, ''
print*, 'kvadrat proizvedeniya komponent:'
print*, qw
close(1)
end
subroutine subr(a, i1, i2, s, p)
dimension a(1) !здесь размер не важен
real s,p
integer i1, i2
s=0
p=1
do i=i1,i2
s=s+a(i)
enddo
do i=i1,i2
p=p*a(i)
end do
return
end


btw: Пишу на Фортране 77, компилятор Compaq Visual Fortran. Если важно

Это сообщение отредактировал(а) Bibigonich - 4.7.2010, 16:51
PM MAIL   Вверх
Фантом
Дата 4.7.2010, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: 5
Всего: 49



Цитата(Bibigonich @  4.7.2010,  16:50 Найти цитируемый пост)
ну а как заполучить n. Мне оно надо будет для продолжения.

Просто считать попытки ввода.
PM   Вверх
Bibigonich
Дата 4.7.2010, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 4.7.2010

Репутация: нет
Всего: нет



 smile 
как это выглядеть то должно?
PM MAIL   Вверх
Фантом
Дата 4.7.2010, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: 5
Всего: 49



Бог мой... в цикле читаем по одному числу и каждый раз прибавляем к счетчику единицу. Когда файл кончится, в счетчике будет искомое количество.

P.S. Для определенности - Вы  программировать умеете? Не конкретно на Фортране, а вообще?

Это сообщение отредактировал(а) Фантом - 4.7.2010, 17:51
PM   Вверх
kemiisto
Дата 4.7.2010, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: нет
Всего: 160



Код

OPEN(unit=1, file=filename, status='old', action='read', iostat=status)

IF (status == 0) THEN
  DO
    READ (1, *, iostat=status) temp
    IF (status /= 0) EXIT
    n = n + 1
  END DO
ELSE
  ! Сообщить об ошибке открытия файла.
END IF



--------------------
PM MAIL WWW GTalk Jabber   Вверх
FCM
Дата 5.7.2010, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.3.2009

Репутация: 8
Всего: 9



Цитата(Bibigonich @  4.7.2010,  16:50 Найти цитируемый пост)
btw: Пишу на Фортране 77, компилятор Compaq Visual Fortran. Если важно

Зачем писать на 77, если компилятор на 90/95?


Как уже отмечалось выше, в некоторых диалектах Фортрана (в частности в Visual Fortran) есть функция EOF().
Может быть так (но на фортране 90):

Код

...

REAL, ALLOCATABLE :: ARRAY(:), TMP
INTEGER :: N, I
OPEN(10, FILE = "...")
N=0
DO WHILE ( .NOT.EOF(10) )
   READ(10,*)  TMP
   N=N+1
END DO

ALLOCATE(ARRAY(N))
REWIND(10)

DO I = 1, N
   READ(10,*) ARRAY(I)
END DO
...



См. также пример в описании функции EOF в системе помощи CVF.

Это сообщение отредактировал(а) FCM - 5.7.2010, 15:08
PM MAIL   Вверх
Bibigonich
Дата 5.7.2010, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 4.7.2010

Репутация: нет
Всего: нет



Цитата(FCM @ 5.7.2010,  09:26)

Зачем писать на 77, если компилятор на 90/95?


на 77, потому что в инсте преподают 77, и там же, на компах стоит этот компилятор. вот и все дела

FCM, спасибо, помог. ПРишлось твой код поправить кое где, но в итоге пашет) спасибо. Поставил бы плюсик к репе, но увы, нету 100 постов((

Это сообщение отредактировал(а) Bibigonich - 5.7.2010, 19:16
PM MAIL   Вверх
kemiisto
Дата 5.7.2010, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: нет
Всего: 160



Цитата(Bibigonich @  5.7.2010,  20:15 Найти цитируемый пост)
FCM, спасибо, помог.

Если помогли, пометь тему решённой в правом верхнем углу первого сообщения.

Цитата(Bibigonich @  5.7.2010,  20:15 Найти цитируемый пост)
Поставил бы плюсик к репе, но увы, нету 100 постов((

Это не проблема. smile 


--------------------
PM MAIL WWW GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Fortran | Следующая тема »


 




[ Время генерации скрипта: 0.0503 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.