Matrice di identità con Fortran 95

0

Il seguente codice fornisce la matrice di identità di qualsiasi dimensione che l'utente desidera che sia:

program identitymatrix

  real, dimension(:, :), allocatable :: I
  character:: fmt*8
  integer :: ms, j

 print*,'the size of the matrix is?'
 read*,ms

  allocate(I(ms,ms))
  I = 0                           ! Initialize the array.
  forall(j = 1:ms) I(j,j) = 1     ! Set the diagonal.

  ! I is the identity matrix, let's show it:

  write (fmt, '(A,I2,A)') '(', ms, 'F6.2)'
  ! if you consider to have used the (row, col) convention, 
  ! the following will print the transposed matrix (col, row)
  ! but I' = I, so it's not important here  
  write (*, fmt) I(:,:)

  deallocate(I)

end program identitymatrix     (the end of the code )

Sono un po 'confuso riguardo a questi due pezzi di codice?

write (fmt, '(A,I2,A)') '(', ms, 'F6.2)'

write (*, fmt) I(:,:)

Che cosa fa esattamente (A,I2,A) ?

    
posta Fadi 04.04.2014 - 15:32
fonte

1 risposta

1

'(A,I2,A)' è una specifica del formato ; questo specifica un campo di carattere di lunghezza sufficiente a contenere la variabile passata ad esso, seguito da un numero intero di 2 cifre (campo), seguito da un altro campo di carattere che sarà lungo quanto la variabile passata.

Questa affermazione

write (fmt, '(A,I2,A)') '(', ms, 'F6.2)'

utilizza tale specifica di formato per scrivere un'altra specifica di formato nella variabile di carattere fmt . Se, in fase di esecuzione, ms ha il valore 4 , fmt diventerà '(4F6.2)' . Questo, a sua volta, è usato per formattare la prossima dichiarazione di scrittura:

write (*, fmt) I(:,:)

Questo è l'approccio standard di Fortran alla creazione di formati di output in fase di esecuzione.

    
risposta data 04.04.2014 - 16:23
fonte

Leggi altre domande sui tag