Non riesco a farsi che una subroutine modifichi un array dimodoche' il programma principale possa utilizzarlo.
Continuo ad avere risultati discordanti. :( :(
Avete qualche link illuminante?
:cry: :cry: :cry:
maxithron
17-03-2004, 20:11
potresti postare un pezzetto di codice ?
Ecco qua :)
Scusate se nn l'ho fatto subito.
Il programmaino dovrebbe calcolare la media pesata di una serie di esami :)
E il mio primo prog in Fortran quindi passibile di enormi cazzate :)
Ehm...lasciate stare i commenti :)
C------Calcolo della media pesata v.0.1---
PROGRAM MEDIA
C------Dichiarazione delle variabili------
INTEGER SCELTA
REAL RISULTATO
C------Inizializzazione della matrice-----
PARAMETER (LARG = 2, ALT = 100, TOT = LARG * ALT)
INTEGER VOTI(ALT,LARG), ZERO
PARAMETER (ZERO = 0)
DATA VOTI / TOT * ZERO /
C------Main vero e proprio----------------
WRITE(*,*)'PRORAMMA PER CALCOLARE LA MEDIA PESATA'
10 WRITE(*,*)'---------------------------------------'
WRITE(*,*)'Digitare:'
WRITE(*,*)'1 - Per inserire un altro esame'
WRITE(*,*)'2 - Per visualizzare la media pesata'
WRITE(*,*)'0 - Per uscire dal programma'
READ(*,*) SCELTA
IF(SCELTA .EQ. 1) THEN
CALL INSERISCI(VOTI)
C-------Pare che gli array non vengano restituiti modificati//
C-------Invece il problema e la sub TROVA
WRITE(*,*) 'Per il main il primo votoe:', VOTI(1,1)
C-------NON e cosi semplice...
GOTO 10
ELSE IF(SCELTA .EQ. 2) THEN
WRITE(*,*) 'La media pesata risulta:', CALCOLA(VOTI)
GOTO 10
END IF
WRITE(*,*)'Uscita dal programma...'
END
FUNCTION TROVA(A)
INTEGER A(100,2)
INTEGER ZER = 0
DO 15, I = 1, ALT
IF(A(I,1) .EQ. ZER) THEN
GOTO 15
ENDIF
15 CONTINUE
C------TEST START
WRITE(*,*) 'Secondo trova(a) la riga vuota e:', I
C------TEST END
TROVA = I
END
FUNCTION CALCOLA(B)
INTEGER B(100,2)
INTEGER CREDITITOT = 0
INTEGER VOTICREDI = 0
INTEGER FINERIGA = (TROVA(B) - 1)
DO 20, I = 1, FINERIGA
VOTICREDI = VOTICREDI + ( B(I,1) * B(I,2) )
CREDITITOT = CREDITITOT + B(I,2)
20 CONTINUE
CALCOLA = VOTICREDI / CREDITITOT
END
C------Che sia il cambiare da sub a funct?
SUBROUTINE INSERISCI(A)
INTEGER A(100,2)
INTEGER TROVARIGA = TROVA(A)
WRITE(*,*) 'Inserisci voto dell esame'
READ(*,*) A(TROVARIGA,1)
WRITE(*,*) 'Inserisci i rispettivi crediti'
READ(*,*) A(TROVARIGA,2)
WRITE(*,*) 'Secondo Inserisci la riga dove ha inserito e:', TROVARIGA
WRITE(*,*) 'Secondo Inserisci il voto della riga appena ins. e:', A(TROVARIGA,1)
END
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.