Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [General] О IF, end IF и CONTINUE 
V
    Опции темы
omican
Дата 21.9.2007, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот кусок кода, написанного в древности:

     DO 4 I=I1,N1
         IF(K.EQ.2) FI(I)=Q*(FTD(I+1)-FTD(I))
         S=-1.0D+00
         IF(FI(I).GE.0) S=1.0D+00
         FI(I)=DABS(FI(I))
         IF(I.EQ.I1) THEN    ***
            F3=S*FT(I+1)
            IF(F3.LT.FI(I)) FI(I)=F3
         ELSE IF(I.EQ.N1) THEN
            F1=S*FT(I-1)
            IF(F1.LT.FI(I)) FI(I)=F1
         ELSE
            F1=S*FT(I-1)
            F3=S*FT(I+1)
            IF(F1.LT.FI(I)) FI(I)=F1
            IF(F3.LT.FI(I)) FI(I)=F3
         END IF
         IF(FI(I).LT.0) THEN  *
         FI(I)=0
         ELSE
         FI(I)=S*FI(I)
         END IF
 4    CONTINUE

На строки, не выделенные жирным, обращать внимания не надо. Сейчас я пытаюсь написать на C++ идентичный код.
Итак, вопрос: мне кажется, или не хватает одного "END IF", закрывающего IF, помеченный ***? В каком случае тогда выполняется кусок начинающийся с строки помеченной *? В случае не I.EQ.I1?

Это сообщение отредактировал(а) omican - 21.9.2007, 19:14
PM   Вверх
popovda
Дата 24.9.2007, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код правильный. Все нормально. 
Код

IF(I.EQ.I1) THEN    ***
            F3=S*FT(I+1)
            IF(F3.LT.FI(I)) FI(I)=F3
         ELSE IF(I.EQ.N1) THEN ---- этот if-then-else-end-if фактически один оператор, т.е. else закрывает if-then, а за else выполняется другой оператор. Дополнительный end if с точки зрения F77 - избыточен.

            F1=S*FT(I-1)
            IF(F1.LT.FI(I)) FI(I)=F1
         ELSE
            F1=S*FT(I-1)
            F3=S*FT(I+1)
            IF(F1.LT.FI(I)) FI(I)=F1
            IF(F3.LT.FI(I)) FI(I)=F3
         END IF




--------------------
С уважением, Попов Д.А.
PM MAIL   Вверх
Cr@$h
Дата 17.1.2009, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
***


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

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



Если быть строгим, то лучше сказать, что у If есть не только else, но и else if (кажется, их даже вместе можно писать), так что структуризовать лучше даже так:
Код

IF(I.EQ.I1) THEN    ***
    F3=S*FT(I+1)
    IF(F3.LT.FI(I))&
        FI(I)=F3
ELSE IF(I.EQ.N1) THEN
    F1=S*FT(I-1)
    IF(F1.LT.FI(I))&
        FI(I)=F1
ELSE
    F1=S*FT(I-1)
    F3=S*FT(I+1)
    IF(F1.LT.FI(I))&
        FI(I)=F1
    IF(F3.LT.FI(I))&
        FI(I)=F3
END IF

Но это для нас, фортранистов, сишникам это, может, не так легко понять  smile 

Это сообщение отредактировал(а) Cr@$h - 17.1.2009, 18:04
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Fortran | Следующая тема »


 




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


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

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