Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ОТличие фортрана и СИ++ 
:(
    Опции темы
Новичок89
Дата 28.3.2012, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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
PM MAIL   Вверх
Фантом
Дата 28.3.2012, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Новичок89 @  28.3.2012,  20:31 Найти цитируемый пост)

Подскажите пожалуста что значит DATA? и SUBROUTINE это обьявление класса??? 

 smile 

SUBROUTINE - это заголовок подпрограммы. В данном случае - возвращающей значение X.
Оператор DATA (который Вы переписали с ошибкой) в этом контексте - просто инициализация переменной (там должно быть DATA I/783637/). И, похоже, что в четвертой строчке в скобках вместо единицы тоже должно быть I, иначе этот код уж совсем бессмысленный (в нем, правда, и так смысла немного, но все же...).

PM   Вверх
Новичок89
Дата 28.3.2012, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



То есть DATA присваивает переменной I какое то значение от 0 до 783637 ???
PM MAIL   Вверх
Фантом
Дата 28.3.2012, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Новичок89 @  28.3.2012,  20:49 Найти цитируемый пост)
То есть DATA присваивает переменной I какое то значение от 0 до 783637 ??? 

Нет. DATA присваивает I значение 783637 при первом вызове подпрограммы.
PM   Вверх
Новичок89
Дата 28.3.2012, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



спасибо,пойду вспоминать как програмировать на си))
PM MAIL   Вверх
Новичок89
Дата 28.3.2012, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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;


}
помогите
PM MAIL   Вверх
Фантом
Дата 28.3.2012, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Еще бы. Во-первых, X в процедуре был возвращаемым значением. Во-вторых, инициализация происходит только один раз, переменная, заданная таким образом, является глобальной. Так что более-менее адекватный перевод будет таким:

Код

int I=783637;

float TDRAND()
{
    I=125*I;
    I=I-(I/2796203)*2796203;
    return I/2796202.0;
}


Добавлено через 1 минуту и 17 секунд
И, кстати, зачем Вы вставили в свой вариант цикл?
PM   Вверх
Новичок89
Дата 28.3.2012, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Фантом @  28.3.2012,  22:05 Найти цитируемый пост)
Добавлено через 1 минуту и 17 секундИ, кстати, зачем Вы вставили в свой вариант цикл?

 если б я знал как делать я б давно сделал)))
кстати я сделал немного иначе
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 секунд
подскажите как вызвать этот массив на печать...
PM MAIL   Вверх
Фантом
Дата 28.3.2012, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Новичок89 @  28.3.2012,  23:24 Найти цитируемый пост)
опять что то нахимичил наверно(((

Именно. Вы зачем объявили I как float? Весь фокус этого "генератора случайных чисел" был основан на отбрасывании остатка от деления большого целого числа на другое большое целое. А в получившемся у Вас виде строчка 
Код

 I=I-(I/2796203)*2796203;

означает всего лишь I=I-I, так что неудивительно, что в результате получаются одни нули.
PM   Вверх
Новичок89
Дата 28.3.2012, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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


 




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


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

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