Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы программирования на FORTRAN (ФОРТРАН)

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329

Открыть новую тему     Написать ответ в эту тему

akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Обсуждаются все вопросы, связанные с программированием на ФОРТРАН, как общего так и конкретного характера.
Постарайтесь дать как можно больше информации о возникшей проблеме -- это в конце концов в ваших же интересах чтобы вам помогли...

прежде чем просить помощи в задании
платное решение задач

ресурсы этого топика
ссылка на подборку ресурсов, собранных посетителями этого форума
 
то, чем мы решили поделиться
ссылка на страничку программ etc собственного изготовления, которыми любезно делятся наши форумчане


если вам вдруг не отвечают или ответ вас не устраивает
и вообще полезно прочитать всем спрашивающим
 
просьба к пишущим и отвечающим все большие листинги оформлять тегом more
и отключать графические смайлики при размещении фортран-кода

Всего записей: 24056 | Зарегистр. 06-12-2002 | Отправлено: 18:11 14-01-2007 | Исправлено: akaGM, 09:47 01-03-2020
Andrew10

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
belsen85

Цитата:
проблема в том, что деления на ноль нигде нет. просто очень большое число делится на очень маленькое местами. Самое обидное, что надо передавать значение получившееся обязательно в численном виде, так как оно идет в другую програм

 
Два варианта:
1. Наиболее вероятно, что переполнение случается в результате ошибок в алгоритме, или численной неустойчивости алгоритма. Тогда _не следует ничего передавать в другую программу_, поскольку в полученных числах все равно нет никакого смысла, а нужно искать ошибку или использовать устойчивый алгоритм.
 
2. В действительности возникают очень большие числа в расчетах. Тогда нужно использовать библиотеки для расчетов с повышенной разрядностью. Это сильно замедлит выполнение программ.  
 
Может лучше в таком случае не использовать Фортран, а считать с помощью систем, реализующих расчеты с произвольной точностью (как, например, Mathematicа)?

Всего записей: 780 | Зарегистр. 26-02-2005 | Отправлено: 01:23 10-01-2013 | Исправлено: Andrew10, 08:24 10-01-2013
bubanoid



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Двумя страницами выше возникла дискуссия с Igorr по поводу, является ли модульная процедура Internal или External. По-моему, рисунок ниже свидетельствует, что модульная процедура НЕ ЕСТЬ Internal, следовательно на неё не распространяются ограничения, накладываемые на внутренние процедуры.  
Картинка
 
Рисунок взят из книги  
S Ramsden, F Lin, M A Pettipher, G S Noland, J M Brooke
"Fortran 90. A Conversion Course for Fortran 77 Programmers" (стр.19).

Всего записей: 101 | Зарегистр. 22-11-2007 | Отправлено: 18:31 14-01-2013 | Исправлено: bubanoid, 18:33 14-01-2013
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
а по-моему, всё гораздо проще:
там где п/п видна "по имени" -- она уже не интернал :)
а всё остальное издержки терминологии...

Всего записей: 24056 | Зарегистр. 06-12-2002 | Отправлено: 19:36 14-01-2013
Genadyruk

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем привет. Скажите почему не робит прога? Вот код:
program err_all_
real*8 precision
integer*8 k, l   ! number of column (k) and string (l) in file
real*8, allocatable, dimension (:,:) :: err_all
character*2 a
1 write (*,*) 'Are you want input precision? (y/n)'
read (*,*) a
if (a == 'y') then
write (*,*) 'Input precision'
read (*,*) precision
elseif (a == 'n')then
precision = 1.
else
print*, 'Press y or n'
go to 1
endif
write (*,*) 'Input number of string'
read (*,*) l
print*, 'Input number of column'
read(*,*) k
print*, 'precision =', precision
print*, 'Number of string =', l
print*, 'Number of column =', k
pause
allocate (err_all (l, k))
open (1, file = 'err_all_B.txt', status = 'old')
open (2, file = 'good.txt', status = 'new')
open (3, file = 'bad.txt', status = 'new')
do i=1,k
do j=1,l
read (1,10) err_all (j, i)
print*, err_all (j,i)
if (err_all (j, 2) .lt. precision) then
write (2,10) err_all (j, i)
else
write (3,10) err_all (j, i)
end if
end do
end do
close (1)
close (2)
10 format (F6.3, F9.5, F10.4, F9.4, F8.2, 2F12.6)
end
Она скомпилировалась. Но робить не хочет. Вот, что пишет :
"At line 31 of file C:\Users\.....\err_all.f95 (Unit 1 "err_all_B.txt")
Traceback: not available, compile with -ftrace=frame or -ftrace=full
Fortran runtime error: End of file"

Всего записей: 64 | Зарегистр. 18-07-2010 | Отправлено: 04:49 18-01-2013
Vskazka

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Genadyruk
По-моему unit=1 - это стандартный ввод (то что в си называется stdin) его нельзя открывать с именем . Так что ежели хотите открывать файлы, то открывайте с другими номерами. Чтобы не путать, лучше где-то начиная с 10. Так как еще есть предопределенные номера (stdout, stderr)
так что напишите
open(11,
open(12,
open(13,

Всего записей: 382 | Зарегистр. 24-11-2003 | Отправлено: 08:45 18-01-2013 | Исправлено: Vskazka, 08:46 18-01-2013
PoMaIIIka

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте форумчане!
 
С данной ошибкой я сталкиваюсь впервые, хотя на fortran программирую достаточно давно.
С большой программе я прошу выделить массив следующим образом:
...
...
...
integer,dimension( : ),pointer :: test_array
...
...
...
allocate(test_array(1:5))
 
И именно в этот момент компьютер мне пишет:
*** glibc detected *** ./main_simple: malloc(): memory corruption: 0x0000000000d99b00 ***
 
Памяти вроде бы хватает, и в чем ошибка я, к сожалению, не знаю.
Может быть кто то сталкивался!?
 
Спасибо заранее!

Всего записей: 3 | Зарегистр. 18-01-2013 | Отправлено: 16:38 18-01-2013
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Genadyruk
 
с форматом файла разберись
 
10 format (F6.3, F9.5, F10.4, F9.4, F8.2, 2F12.6)
сколько здесь просишь?
правильно -- семь...
 
read (1,10) err_all (j, i)
а читаешь? одно...
 
на каждом проходе в массив помещаешь 7 чисел, он раньше времени и забивается с
Цитата:
Fortran runtime error: End of file

 
Добавлено:
 
PoMaIIIka
 
ну "после того" совсем не означает "вследствии того"...
 
ошибка воспроизводимая?
 
и по простому работает?
 
integer,allocatable :: test_array(:)
 
allocate(test_array(1:5))

Всего записей: 24056 | Зарегистр. 06-12-2002 | Отправлено: 17:49 18-01-2013 | Исправлено: akaGM, 18:17 18-01-2013
PoMaIIIka

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM, спасибо большое за ответ!
 
Я, по-правде говоря, не совсем знаю что такое "воспроизводимая" ошибка...
 
По простому не работает и выдает ту же самую ошибку прямо слово в слово!
Так долго бъюсь уже над этой ошибкой...

Всего записей: 3 | Зарегистр. 18-01-2013 | Отправлено: 18:08 18-01-2013
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
PoMaIIIka
 
возпроизводимая -- это когда повторяется всегда точь-в-точь при сходных условиях...
 
тогда дело мб не в этой строке, как я и говорил: "после -- не вследствии", а в 1000 строчек кода от неё...
почему ты так думаешь? под отладчиком прогоняешь?
 

Цитата:
По простому не работает и выдает ту же самую ошибку прямо слово в слово!
фигасе...
в общем показывай по возможности весь код...
 
Добавлено:
 
 
включи все проверки диапазона, стека етц
мож у тебя банально идекс test_array() вылетает...

Всего записей: 24056 | Зарегистр. 06-12-2002 | Отправлено: 18:24 18-01-2013
PoMaIIIka

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подробнее... [/more] [/more]

Всего записей: 3 | Зарегистр. 18-01-2013 | Отправлено: 18:40 18-01-2013 | Исправлено: PoMaIIIka, 18:41 18-01-2013
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
PoMaIIIka

Код:
print*,"Before allocation"
allocate(test_array1(1:5))
print*,"This message will never print or what?"
включи этот код в самое начало п/па
если не отработает, будем дальше думать, а если ок, то дело в твоих предыдущих игрищaх с памятью...
 
кстати, почему
 integer,dimension(:),pointer :: test_array1
а не
 integer,allocatable :: test_array1 (:)
 
и твоё описание входных параметров мне не нравится
 
 type(maillage),dimension(:),pointer :: list_of_meshes
 integer,dimension(:,:),pointer :: list_of_interface_triangles
 type(edge),dimension(:),pointer :: list_of_edges
 
зачем там поинтеры?
я бы вот так написал:
 type(maillage), intent(inout) :: list_of_meshes(*)
 integer, intent(inout) :: list_of_interface_triangles(*,*)
 type(edge), intent(inout) :: list_of_edges(*)

Всего записей: 24056 | Зарегистр. 06-12-2002 | Отправлено: 19:37 18-01-2013 | Исправлено: akaGM, 19:38 18-01-2013
CurlyDevil



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Коллеги,
 
А нет ли у кого кодов библиотеки HSL (все равно какой версии), а то они медлят с выдачей доступа.
Интересуют собственно только итерационные методы решения линейных систем.
Заранее благодарю.

Всего записей: 121 | Зарегистр. 19-09-2003 | Отправлено: 23:25 18-01-2013
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
CurlyDevil
 
владельцем hsl тут является terminat0r
обратись непосредственно к нему...

Всего записей: 24056 | Зарегистр. 06-12-2002 | Отправлено: 23:54 18-01-2013
CurlyDevil



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM
OK, спасибо!

Всего записей: 121 | Зарегистр. 19-09-2003 | Отправлено: 17:51 19-01-2013
Genadyruk

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vskazka Сейчас ошибка unit = 11, ну и конечно :
Traceback: not available, compile with -ftrace=frame or -ftrace=full  
Fortran runtime error: End of file
akaGM А объясни по подробней, а то я что то не очень понял. Спасибо

Всего записей: 64 | Зарегистр. 18-07-2010 | Отправлено: 04:09 20-01-2013 | Исправлено: Genadyruk, 08:44 20-01-2013
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Genadyruk
ошибка у тебя:
 
read (1,10) err_all (j, i) <-- здесь стоит _одна_ переменная
10 format (F6.3, F9.5, F10.4, F9.4, F8.2, 2F12.6) <-- а ты в неё вкатываешь _семь_ чисел
 
наверное, надо менять формат вот на такой:
 
read (1,11) err_all (j, i)
11 format (F6.3)
 

Всего записей: 24056 | Зарегистр. 06-12-2002 | Отправлено: 13:22 20-01-2013
Genadyruk

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
err_all (j,i) это же двумерный массив, он должен все из файла взять и прочитать. или я ошибаюсь? У меня файл, в нем 7 столбцов. Я беру число из 2-го столбца и сравниваю его с числом precision. Если оно меньше то записываю все 7 чисел в файл good, в противном случае в bad.

Всего записей: 64 | Зарегистр. 18-07-2010 | Отправлено: 15:54 20-01-2013
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Genadyruk

Код:
do i=1,k
  do j=1,l
    read (1,10) err_all (j, i)
здесь ты читаешь (7* l * k) чисел, которые все помещаются в массив err_all, а он у тебя имеет размер всего l*k из-за
allocate (err_all (l, k))
поэтому и происходит ошибка чтения за концом файла...
 
короче, давай здесь полностью входной файл...

Всего записей: 24056 | Зарегистр. 06-12-2002 | Отправлено: 16:21 20-01-2013
Genadyruk

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
14.699     0.00860  294.1866  46.3871   14.07  294.186628   46.387098
17.395     0.06813  294.1869  46.3461   16.49  294.186914   46.346134
15.671     1.76240  294.1874  46.3742   16.78  294.187437   46.374212
17.396     0.06830  294.1890  46.3458   16.80  294.189012   46.345792
18.755     11.9353  294.1915  46.3834   15.91  294.191531   46.383370
16.725     0.57517  294.1919  46.3782   16.09  294.191864   46.378225
13.701     0.00931  294.1925  46.3740   12.85  294.192492   46.374042
17.477     0.05148  294.1997  46.3501   16.41  294.199723   46.350075
12.934     0.00558  294.2007  46.3273   12.26  294.200756   46.327273
17.005     0.04145  294.2042  46.3890   15.83  294.204198   46.388984
18.355     0.15172  294.2087  46.3974   16.99  294.208720   46.397400
14.636     0.00901  294.2123  46.3558   14.03  294.212328   46.355814
14.636     0.00874  294.2125  46.3568   14.28  294.212503   46.356831
13.056     1.24432  294.2126  46.3857   16.12  294.212598   46.385717
12.874     1.10454  294.2138  46.3860   15.57  294.213834   46.385975
Вот так вот он выглядит

Всего записей: 64 | Зарегистр. 18-07-2010 | Отправлено: 16:30 20-01-2013 | Исправлено: Genadyruk, 16:30 20-01-2013
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Genadyruk
попробуй вот так на фиг:
Код:
 
open (1, file='err_all_B.txt', access='sequential', status='old')
do j=1,l
...
    read (1,*) (err_all(j,i), i=1, k)
...
endod

Всего записей: 24056 | Зарегистр. 06-12-2002 | Отправлено: 17:42 20-01-2013
Открыть новую тему     Написать ответ в эту тему

Страницы: 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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы программирования на FORTRAN (ФОРТРАН)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru