Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [General] Объясните код 
:(
    Опции темы
echmel
Дата 26.3.2010, 09:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Заранее прошу прощения. С данным языком я просто не знаком. Знаю паскаль и Си.
Код такой:
Код

 Ntime=2190
 Nff=10001

 do i=1,nff
        signal(i)=R*solar(i)*trans(i)*refl(i)/3.141592592
         enddo

  do i=1,Ntime

        write(2,1001) (signal(i),i=1,nff)
        enddo
1001    format(5001(1x,e12.7))



Результатом является файл содержащий 50001 чисел в строке и 4380 строк. 
signal как я понял является одномерным массивом.
Что означает конструкция  (signal(i),i=1,nff) ? И почему очередная выводимая последовательность числе из массива signal отличается от предыдущей последовательности?

PM MAIL   Вверх
FCM
Дата 26.3.2010, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(echmel @  26.3.2010,  09:27 Найти цитируемый пост)
Что означает конструкция  (signal(i),i=1,nff) ?


Это так называемый неявный цикл, часто используемый в операциях вывода массивов.


Это сообщение отредактировал(а) FCM - 20.10.2010, 19:16
PM MAIL   Вверх
echmel
Дата 26.3.2010, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Какой компилятор неизвестно. Дело в том, что это код не мой, а преподавателя, который дал его мне, что бы объяснить в каком порядке данные пишуться в файл, но вот незадача; фортрана то в учебной программе не было. Я его попросил перевести на паскалевский код или сишный, так он написал следующее:
Код

const
  str=4;{количество строк}
  col=4;{количество столбцов}
var
  a:array [1..str,1..col] of integer;
  i,j :integer;
begin

    for i:=1 to str do
  begin
    for j:=1 to col do
    begin
      write(a[i,j]:2,' ')
    end;
  end;


Здесь конечно все просто.
А вот с фортраном нет.
Мне тоже непонятно почему один и тот же индекс используется в двух местах. От препода добиться внятных объяснений вообще не получается!!! Учусь удаленно, так что вот такие проблемы и возникают
PM MAIL   Вверх
FCM
Дата 26.3.2010, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Думаю, преподавательский фортран-код неправильный из-за вышеуказанной проблемы -  подобный код в Intel Fortran (да и, я думаю, в др. компиляторах тоже) не компилируется.
Без компилятора под рукой изучать язык бессмысленно.
Да и зачем такие большие размеры в учебном примере?

В Фортране то же все просто, за исключением того, что матрицы хранятся в памяти по столбцам, а не по строкам.

Код

PROGRAM Q
   
   INTEGER, PARAMETER :: R = 2, C = 3 
   INTEGER :: I, J , A(R,C)

   DO I =1,R
      DO  J = 1,C
         A(I,J) = 10*I + J    ! инициализация
      ENDDO
   ENDDO

  ! 1 Вариант  вывода (линейно, как расположен в памяти - по столбцам)
   WRITE(*,*) A 
  ! 2 Вариант вывода линейно как расположен в памяти - по столбцам 
  ! с помощью двойного неявного цикла
   WRITE(*,*)  ((A(I,J), I=1,R), J = 1,C) 
  
   ! 3 Вариант вывода линейно по строкам матрицы с помощью двойного неявного цикла
   WRITE(*,*)  ((A(I,J), J=1,C), I = 1,R) 
   
  ! 4 Вариант вывода по строкам матрицы с помощью обычного и неявного цикла
   DO I = 1,R
      WRITE(*,*)  (A(I,J), J=1,C) 
   END DO

    ! 5 Вариант вывода по строкам матрицы с помощью обычного цикла и сечений
   DO I = 1,R
      WRITE(*,*)  A(I,:) 
   END DO
   
END PROGRAM Q


Возможно есть еще варианты вывода.
Также есть варианты с инициализацией (в т.ч. с применением неявных циклов).

Здесь для простоты рассмторен вывод на экран в свободном формате WRITE(*,*).
Для вывода в файл вместо первой * становится номер устройства вывода, связнного с конкретным файлом. При необходимости задания формата вместо второй * указывается формат.


Это сообщение отредактировал(а) FCM - 26.3.2010, 11:01
PM MAIL   Вверх
milachka
Дата 17.12.2011, 15:13 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Завдання
(метод та початкові наближення коренів)
відносна похибка у відсотках e = 10−5 %,
для ε -алгоритму: q =2, p = 2
Метод січних
(оберт.матриці
методом Гауса з
вибор. гол. ел-тів по
стовпцю )

0.1+x_1+x_2^2+0.1+x_1=0
2*x_1 〖*x〗_2+0.1+x_2=0

поч.наближення
x_1^0=0
x_2^0=0

Добавлено через 1 минуту и 57 секунд
помогите сделать выше напечатанное, а то ничего незнаю, а сдать надо. с подробным описанием если можно. спасибо.
PM MAIL   Вверх
Фантом
Дата 17.12.2011, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(milachka @  17.12.2011,  16:13 Найти цитируемый пост)

помогите сделать выше напечатанное, а то ничего незнаю, а сдать надо. с подробным описанием если можно. спасибо. 

Ви вважаєте, що людині, якій лінь перевести завдання на російську мову, хтось кинеться допомагати?

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


 




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


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

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