|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jul 2000
Città: Amsterdam
Messaggi: 217
|
Fortran 77 <- Quesito
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? |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Mar 2002
Città: Italy/Usa
Messaggi: 2817
|
potresti postare un pezzetto di codice ?
__________________
"Utilizzando atomi pentavalenti drogheremo il silicio di tipo n; Utilizzando atomi trivalenti drogheremo il silicio di tipo p; Utilizzando della cannabis ci drogheremo noi e vedremo il silicio fare cose impossibili" - DSDT-HowTo |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jul 2000
Città: Amsterdam
Messaggi: 217
|
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 Codice:
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 |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:01.



















