Вполне возможно что на этот вопрос уже не раз отвечали, простите, поиском не нашлось =)( В скриншоте таблица с данными, эти данные нужны для программы. Программа сначала проходит по всем строчкам, первому столбцу, сравнивает указанные в ячейке данные типа 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/6b71e9998181d67fed1606fec806d2b2.png |