PDA

View Full Version : [FORTRAN] E' giusto? (esame domani)


8310
18-07-2007, 16:06
Salve a tutti, oggi ho provato a fare il seguente esercizio riguardante la codifica in linguaggio Fortran. L'esercizio è: "implementare in Fortran un algoritmo che data una matrice quadrata reale di ordine n, stampi una tabella in cui in ogni riga siano presenti l'elemento diagonale della riga I-esima della matrice e la somma dei valori assoluti degli elementi della stessa I-esima riga tranne l'elemento diagonale, ordinati in ordine crescente (nella prima riga la somma più elevata, nell'ultima la somma più piccola)" (il testo non era proprio così perchè si riferiva al teorema di Gershgorin, ho cercato di tradurlo :) )
Dunque io ho codificato il tutto in questo modo:

PROGRAM GERSHGORIN
DIMENSION A(10,10), R(10)
LOGICAL C
WRITE(*,*)'Inserisci l'ordine della matrice:'
READ(*,*)N
DO I=1,N
WRITE(*,*)'Inserisci la riga ', I ,' della matrice:'
READ(*,*)(A(I,J),J=1,N)
END DO
DO I=1,N
R(I)=0.0
DO 1 J=1,N
IF J=I THEN
GO TO 1
ELSE
R(I)=R(I)+ABS(A(I,J))
END IF
1 CONTINUE
END DO
5 C=.TRUE.
DO I=1,N-1
IF (R(I).GT.R(I+1)) THEN
B=R(I)
R(I)=R(I+1)
R(I+1)=B
D=A(I,I)
A(I,I)=A(I+1,I+1)
A(I+1,I+1)=D
C=.FALSE.
END IF
END DO
IF (C) THEN
WRITE(*,*)'Centro ', A(I,I) ,' raggio ', R(I)
ELSE GO TO 5
STOP
END


Secondo voi può andar bene?A me non convince per nulla :D So che non è molto chiaro quello che ho scritto ma sono sfinito....:cry: Grazie anticipatamente dell'aiuto....

a2000.1
18-07-2007, 21:54
fa cagher :D

8310
18-07-2007, 22:29
fa cagher :D

Grazie dell'impressione...magari però mi saresti stato più di aiuto spiegandomi cosa non va e, se non va bene nulla, come si fa....idee per farlo diventare presentabile?Comunque, prima non l'avevo scritto, ma la parte certamente sbagliata è la fine...penso che già così possa andare meglio:

PROGRAM GERSHGORIN
DIMENSION A(10,10), R(10)
LOGICAL C
WRITE(*,*)'Inserisci l'ordine della matrice:'
READ(*,*)N
DO I=1,N
WRITE(*,*)'Inserisci la riga ', I ,' della matrice:'
READ(*,*)(A(I,J),J=1,N)
END DO
DO I=1,N
R(I)=0.0
DO 1 J=1,N
IF J=I THEN
GO TO 1
ELSE
R(I)=R(I)+ABS(A(I,J))
END IF
1 CONTINUE
END DO
5 C=.TRUE.
DO I=1,N-1
IF (R(I).GT.R(I+1)) THEN
B=R(I)
R(I)=R(I+1)
R(I+1)=B
D=A(I,I)
A(I,I)=A(I+1,I+1)
A(I+1,I+1)=D
C=.FALSE.
END IF
END DO
IF (.NOT.C) THEN GO TO 5
ELSE
DO I=1,N
WRITE(*,*)'Centro ', A(I,I) ,' raggio ', R(I)
END DO
END IF
STOP
END


PS: per centro intendo l'elemento diagonale, per raggio intendo la somma dei valori assoluti degli elementi della riga corrispondente all'elemento diagonale fatto salvo l'elemento diagonale stesso.

PPS: me ne frega nulla dei fronzoli tipo formattazione del testo e tabella carina...mi interessa solo la logica dell'algoritmo

8310
19-07-2007, 10:35
Grazie ma si può chiudere :)

L'esame e andato, e alla grandeeeeee :sofico: :yeah: :yeah: :yeah: