Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [General] Ввод данных производного типа, спецификаторы и дескрипторы 
:(
    Опции темы
AhlamovXander
Дата 13.10.2016, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 13.10.2016
Где: Москва

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



Вполне возможно что на этот вопрос уже не раз отвечали, простите, поиском не нашлось =)(
В скриншоте таблица с данными, эти данные нужны для программы. Программа сначала проходит по всем строчкам, первому столбцу, сравнивает указанные в ячейке данные типа character с указанными в условном операторе, если условие выполняется переходит ко второму столбцу этой же строки, тип данных double precision, берет значение только этой ячейки, ещё позже проверяет третью ячейку этой строки, тип данных ячейки опять character, далее опять double precision.
Подскажите, пожалуйста, спецификаторы\дескрипторы форматной записи, я ведь правильно понимаю что без неё тут делать нечего?
Код

program doza
!объявляем переменные
!открываем файл
!запускаем цикл прохода по n-строчкам файла
READ(*, '(A6\)')r_name !здесь нужно чтобы была прочтена только первая ячейка строки
if (r_name == '14C') then !я использую символьный дискриптор, надо ли в таком случае условие давать в виде '^^^14C', где ^ - пробел?
  READ(*, '(10X, f11.9)')Q !с позиции 9 строки считываем 11-значное  число в десятичной системе
H_14C = Q*R_obl/W
    else
   READ(*, '(10X, f11.9)')Q
    H_obl=sec*Q*R_obl/W ! godovaya effektivnaya doza vneshnego oblucheniya ot oblaka
 ! Q - iz faila dlya izm. rn ili poschitannaya dlya neizm.
 ! R_obl - koef. iz faila oblako.txt
 ! W - rashod gazovozd smesi dlya stantsii (edinyi koef dlya vseh rn)
H_pov=sec*Q*R_pov*skor_suh_osazhd/(W*post_raspada) ! godovaya effektivnaya doza vneshnego oblucheniya ot podstil. poverhnosti
 ! Q - iz faila dlya izm. rn ili poschitannaya dlya neizm.
 ! R_pov - koef. iz faila podstil_pov.txt (vtoraya kolonka)
 ! post_raspada - koef. iz faila podstil_pov.txt (tret`ya kolonka)
 ! skor_suh_osazhd:
READ(*, '(A6\)')r_name
      if ((r_name=='120I') .or. (r_name=='120mI') .or. &
      &(r_name=='121I') .or. (r_name=='122I') .or. &
      &(r_name=='123I') .or. (r_name=='124I') .or. &
      &(r_name=='125I') .or. (r_name=='126I') .or. &
      &(r_name=='128I') .or. (r_name=='129I') .or. &
      &(r_name=='130I') .or. (r_name=='131I') .or. &
      &(r_name=='132I') .or. (r_name=='132mI') .or. &
      &(r_name=='133I') .or. (r_name=='134I') .or. &
      (r_name=='135I'))
      then
 !                   schitaem, chto organich. soedineniya ioda, i togda
      skor_suh_osazhd=1e-4
       else         
        if ((r_name=='39Ar').or.(r_name=='41Ar').or.(r_name=='74Kr')&
     &.or. (r_name=='76Kr').or.(r_name=='77Kr').or.(r_name=='79Kr')&
     &.or.(r_name=='81Kr').or.(r_name=='81mKr').or.(r_name=='83mKr')&
     &.or.(r_name=='85Kr').or.(r_name=='85mKr').or.(r_name=='87Kr')&
     &.or.(r_name=='88Kr').or.(r_name=='120Xe').or.(r_name=='121Xe')&
     &.or.(r_name=='122Xe').or.(r_name=='123Xe').or.(r_name=='125Xe')&
     &.or.(r_name=='127Xe').or.(r_name=='129mXe').or. &
     &(r_name=='131mXe').or.(r_name=='133Xe').or.(r_name=='133mXe')&
     &.or.(r_name=='135Xe').or.(r_name=='135mXe').or.(r_name=='138Xe'))
        then
        skor_suh_osazhd=0
         else skor_suh_osazhd=8e-3
        end if
     end if
        ! W - rashod gazovozd smesi dlya stantsii (edinyi koef dlya vseh rn)
H_ing=sec*Q*koef_doz_preobr_ing*intens_dyh/W  ! godovaya effektivnaya doza vnutrennego oblucheniya ot ingalyatsii
 ! Q - iz faila dlya izm. rn ili poschitannaya dlya neizm.
 ! intens_dyh - koef. iz faila ingalyatsiya.txt (vtoraya kolonka)
 ! koef_doz_preobr_ing - koef. iz faila ingalyatsiya.txt (tret`ya kolonka)
 ! W - rashod gazovozd smesi dlya stantsii (edinyi koef dlya vseh rn)
!Schitaem dozu ot pischi
!dlya  vseh izotopov krome 234U, 235U, 238U
K1_ovoschi=day*alfa2*exp(-post_raspada*t_h)*((1-(exp(-(post_raspada&
    &+post_snizh_sod_pov)*t_e)))/(post_raspada+post_snizh_sod_pov))
!alfa2 - faktor uderzhaniya dlya ovoschey, potreblyaemyh v pischu chelovekom, konstanta
!t_h - vremya mezhdu sborom urozhaya i potrebleniyem ovoshnogo produkta, konstanta
!post_snizh_sod_pov - postoyannaya, harakterizuyuschaya protsessy snizheniya soderzhaniya radionuklidov yf poverhnosti rasteniy za schet protsessov, za isklyutcheniem radioaktivnogo raspada, konstanta
K2_ovoschi=day*koef_perehoda_iz_pochvi*exp(-post_raspada*t_h)&
    &*((1-(exp(-(post_raspada+post_shizh_sod_korn)*t_b)))/(ro*&
    &(post_raspada+post_shizh_sod_korn))
!koef_perehoda_iz_pochvi - koefficient perehoda radionuklida r iz 1kornevogo sloya pochvi v s`edobnuyu chast` rasteniya, kg(suh.pochvi)/kg(siroy massy rasteniya)
!                          koef. iz faila meal.txt (5 kolonka, zaglaviye "FОЅr")
!post_shizh_sod_korn - postoyannaya, harakterizuyuschaya protsessy snizheniya soderzhaniya radionuklidov v kornevom sloye pochvy za schet vseh protsessov ps isklutcheniyem radioaktivnogo raspada
      if ((r_name=='129Cs').or.(r_name=='131Cs').or.(r_name=='132Cs')&
     &.or.(r_name=='134Cs').or.(r_name=='135Cs').or.(r_name=='136Cs')&
     &.or.(r_name=='137Cs').or.(r_name=='82Sr').or.(r_name=='83Sr')&
     &.or.(r_name=='85Sr').or.(r_name=='89Sr').or.(r_name=='90Sr'))
    then
    post_shizh_sod_korn=0,00014 
    else
post_shizh_sod_korn=0,00000 ! dlya vseh ostal`nyh
    end if
!ro - poverhnostnaya plotnost` kornevogo sloya pochvy
    ro=130 !esli pochva ispol`zuetsya dlya viraschivaniya s/h kul`tur, vybiraem dlya kurskoy
    ! ro=260 !esli pochva ispol`zuetsya pod pastbische
!Dlya  234U, 235U, 238U
    K1_ovoschi=day*alfa2*((1-(exp(-(post_raspada+post_snizh_sod_pov)*&
    &t_e)))/(post_raspada+post_snizh_sod_pov))
    K2_ovoschi=day*koef_perehoda_iz_pochvi*((1-(exp(-post_raspada*t_b))&
    &)/(ro*post_raspada)    
K11=day*alfa1*exp(-post_raspada*t_h1)*((1-(exp(-(post_raspada+&
    &post_snizh_sod_pov)*t_e1)))/(post_raspada+post_snizh_sod_pov))
K12=day*alfa1*exp(-post_raspada*t_h2)*((1-(exp(-(post_raspada+&
    &post_snizh_sod_pov)*t_e1)))/(post_raspada+post_snizh_sod_pov))
K21=day*koef_perehoda_iz_pochvi_1*exp(-post_raspada*t_h1)*((1-(exp(&
    &-(post_raspada+post_shizh_sod_korn)*t_b)))/(ro*(post_raspada+&
    &post_shizh_sod_korn))
    K22=day*koef_perehoda_iz_pochvi_1*exp(-post_raspada*t_h2)*((1-(exp(&
    &-(post_raspada+post_shizh_sod_korn)*t_b)))/(ro*(post_raspada+&
    &post_shizh_sod_korn))
!koef_perehoda_iz_pochvi_1 - koef. iz faila meal.txt (8 kolonka, zaglaviye "FОЅ1r")
!f_p- dolya goda, v techeniye kotoroy skot pitayetsya podnozhnym kormom, konstanta
K1_korm=K11*f_p+K12*(1-f_p)
    K2_korm=K21*f_p+K22*(1-f_p)
K1_milk=K1_korm*F_milk*Korm_milk*(exp(-post_raspada*t_m))
    K2_milk=K2_korm*F_milk*Korm_milk*(exp(-post_raspada*t_m))
!Korm_milk - sutochnaya massa korma, potreblyaemaya molochnym skotom
!                          koef. iz faila meal.txt (6 kolonka, zaglaviye "Fmмолоко,r, сут/л")
!t_m - vremya mezhdu nadoyem moloka i yego potrebleniyem, konstanta
K1_meat=K1_korm*F_meat*Korm_meat*(exp(-post_raspada*t_f))
    K2_meat=K2_korm*F_meat*Korm_meat*(exp(-post_raspada*t_f))
!Korm_meat - sutochnaya massa korma, potreblyaemaya myasnym skotom
!                          koef. iz faila meal.txt (7 kolonka, zaglaviye "Ffмясо,r, сут/кг")
!t_m - vremya mezhdu zaboyem  skota i potrebleniyem myasa, konstanta
!Chitaem kriticheskuyu gruppy iz faila meal.txt (3 kolonka)
    if (k_g=='#2') then sut_potr_g=1400 else
    if (k_g=='#3') then sut_potr_g=2000 else
    if (k_g=='#4') then sut_potr_g=2600 else
    if (k_g=='#5') then sut_potr_g=3100 else
    if (k_g=='#6') then sut_potr_g=2900 
    end if
    end if
    end if
    end if
    end if
    end if
    god_potr_ovoschi=(sut_potr_g/sut_potr_vzr)*god_potr_ovoschi_vzr
    god_potr_milk=(sut_potr_g/sut_potr_vzr)*god_potr_milk_vzr
    god_potr_meat=(sut_potr_g/sut_potr_vzr)*god_potr_meat_vzr
H_meal=sec*skor_suh_osazhd*(Q/W)*(god_potr_ovosch*(K1_ovoschi+&
    &K2_ovoschi)+god_potr_milk*(K1_milk+K2_milk)+god_potr_meat*&
    (K1_meat+K2_meat)) ! godovaya effektivnaya doza vnutrennego oblucheniya ot potrebleniya pischi
! skor_suh_osazhd:      
    if ((r_name=='124I') .or. (r_name=='125I') .or. (r_name=='126I')&
    &   .or. (r_name=='129I') .or. (r_name=='131I')) then
 ! schitaem, chto organich. soedineniya ioda, i togda
    skor_suh_osazhd=1e-4
    else 
    skor_suh_osazhd=8e-3
 ! Q - iz faila dlya izm. rn ili poschitannaya dlya neizm.
 ! W - rashod gazovozd smesi dlya stantsii (edinyi koef dlya vseh rn)
    end if

Код ещё очень кривой, латать и латать, но мне очень важно понять именно момент работы с файлом. Правильно ли я использую спецификаторы или есть более оптимальный, да и просто более правильный вариант? Не уверен что не написал полную чушь, заранее прошу прощения =)(
http://i78.fastpic.ru/big/2016/1013/b2/6b7...6fec806d2b2.png
PM MAIL Skype   Вверх
Фантом
Дата 13.10.2016, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Код жутковат, да еще и без выравнивания, без подсветки... 

В общем, так. Во-первых, проще читать сразу всю строку. Даже если все, кроме первого поля, Вам не нужно. Во-вторых, для того, чтобы написать/проверить форматную строку, надо бы иметь возможность считать позиции в файле, из которого Вы что-то читаете, а делать это по скриншоту, мягко говоря, неудобно - приведите хотя бы часть данных в текстовом виде. Наконец (заодно уж к случаю), откройте для себя конструкцию select case.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Fortran | Следующая тема »


 




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


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

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