![]() |
|
|
![]()
|
|
| Новичок89 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 28.3.2012 Репутация: нет Всего: нет |
Здравствуйте!у меня стоит задача переписания программы с фортрана на С++.
SUBROUTINE TDRAND (X) DATA I/783637/ I=125*I I=I-(I/2796203)*2796203 X=FLOAT(I)/2796202. RETURN END Подскажите пожалуста что значит DATA? и SUBROUTINE это обьявление класса??? Это сообщение отредактировал(а) Новичок89 - 28.3.2012, 19:45 |
|||
|
||||
| Фантом |
|
|||
![]() Вы это прекратите! ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1516 Регистрация: 23.3.2008 Репутация: 5 Всего: 49 |
SUBROUTINE - это заголовок подпрограммы. В данном случае - возвращающей значение X. Оператор DATA (который Вы переписали с ошибкой) в этом контексте - просто инициализация переменной (там должно быть DATA I/783637/). И, похоже, что в четвертой строчке в скобках вместо единицы тоже должно быть I, иначе этот код уж совсем бессмысленный (в нем, правда, и так смысла немного, но все же...). |
|||
|
||||
| Новичок89 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 28.3.2012 Репутация: нет Всего: нет |
То есть DATA присваивает переменной I какое то значение от 0 до 783637 ???
|
|||
|
||||
| Фантом |
|
|||
![]() Вы это прекратите! ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1516 Регистрация: 23.3.2008 Репутация: 5 Всего: 49 |
||||
|
||||
| Новичок89 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 28.3.2012 Репутация: нет Всего: нет |
спасибо,пойду вспоминать как програмировать на си))
|
|||
|
||||
| Новичок89 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 28.3.2012 Репутация: нет Всего: нет |
сделал примерно такое но что то не то(((
void TDRAND(float x){ float I=783637; for(int i=0;i<10;i++) { I=125*I; I=I-(I/2796203)*2796203; x = I/2796202; } return; } помогите |
|||
|
||||
| Фантом |
|
|||
![]() Вы это прекратите! ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1516 Регистрация: 23.3.2008 Репутация: 5 Всего: 49 |
Еще бы. Во-первых, X в процедуре был возвращаемым значением. Во-вторых, инициализация происходит только один раз, переменная, заданная таким образом, является глобальной. Так что более-менее адекватный перевод будет таким:
Добавлено через 1 минуту и 17 секунд И, кстати, зачем Вы вставили в свой вариант цикл? |
|||
|
||||
| Новичок89 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 28.3.2012 Репутация: нет Всего: нет |
если б я знал как делать я б давно сделал))) кстати я сделал немного иначе void TDRAND(float* x,int n) { float I=783637.; for(int i=0;i<10;i++) { I=125*I; I=I-(I/2796203)*2796203; x[i] = I/2796202; } return; } и вызвал ее в мейне float xx[10]; TDRAND( &xx[0] , sizeof(xx)/sizeof(float)); только теперь не получается распечатать этот самый массив,выдает нули((( опять что то нахимичил наверно((( Добавлено через 3 минуты и 39 секунд подскажите как вызвать этот массив на печать... |
|||
|
||||
| Фантом |
|
|||
![]() Вы это прекратите! ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1516 Регистрация: 23.3.2008 Репутация: 5 Всего: 49 |
Именно. Вы зачем объявили I как float? Весь фокус этого "генератора случайных чисел" был основан на отбрасывании остатка от деления большого целого числа на другое большое целое. А в получившемся у Вас виде строчка
означает всего лишь I=I-I, так что неудивительно, что в результате получаются одни нули. |
|||
|
||||
| Новичок89 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 28.3.2012 Репутация: нет Всего: нет |
спасибо,все получилось,благодарю!+++
|
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Fortran | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |