Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di stino90
    Registrato dal
    Feb 2007
    Messaggi
    165

    [FORTRAN90] Articolare codice in subroutine

    Salve gente, forse è più semplice di quello che mi sembra, ma vorrei chiedervi se c'è qualcuno che può dirmi come articolare in sburoutine il seguente programma? Cioè per articolare come sottoprogramma la fase di acquisizione dei valori so come fare, ma per la restante parte di codice c'è qualcuno che può farmi vedere come impostare la cosa?

    Traccia:

    Siano dati in ingresso il riempimento e gli elementi di un array di reali V. Scrivere un programma
    che conti quanti elementi negativi e quanti elementi positivi siano presenti nell’array e stampi i
    primi 3 elementi maggiori di 1.0 se gli elementi positivi sono più numerosi dei negativi, stampi i
    primi 3 elementi minori di 1.0 altrimenti. Si organizzi il programma in sottoprogrammi.


    Programma:


    PROGRAM es2_1
    IMPLICIT NONE

    !*** SEZIONE DICHIARATIVA

    INTEGER:: i,riemp,maxnum,n,p,j,k
    PARAMETER(maxnum=100)
    REAL:: vet1,vet2,vet3
    DIMENSION vet1(maxnum),vet2(maxnum),vet3(maxnum)
    LOGICAL::trovato

    !*** SEZIONE ESECUTIVA

    ! Lettura elementi array

    CALL leggi_vet(vet1,maxnum,riemp)

    ! contiamo gli elementi positivi e negativi

    n=0
    p=0
    DO i=1,riemp
    IF(vet1(i)>=0) THEN
    p=p+1
    ELSE ! il valore è negativo
    n=n+1
    END IF
    END DO

    WRITE(*,*)" Il numero di valori positivi e' pari a: ", p
    WRITE(*,*)" Il numero di valori negativi e' pari a: ", n

    IF(p>n) THEN
    j=0
    i=1
    DO WHILE((i<=riemp).AND.(j<3))
    IF(vet1(i)>1.0) THEN
    j=j+1
    vet2(j)=vet1(i)
    END IF
    i=i+1
    END DO
    ELSE ! n>p

    k=0
    i=1
    DO WHILE((i<=riemp).AND.(k<3))
    IF(vet1(i)<1.0) THEN
    k=k+1
    vet3(k)=vet1(i)
    END IF
    i=i+1
    END DO
    END IF

    ! Stampa valori

    IF(p>=n) THEN
    WRITE(*,*)" I primi tre valori di vet1 maggiori di 1.0 sono: "
    WRITE(*,*) (vet2(i), i=1,3)
    ELSE
    WRITE(*,*)" I primi tre elementi di vet1 minori di 1.0 sono: "
    WRITE(*,*) (vet3(i), i=1,3)
    END IF

    READ(*,*)

    END PROGRAM

    !************************************************* ********SCRITTURA SUBROUTINES*************************************** ****************************

    SUBROUTINE leggi_vet(v,num,riemp)
    IMPLICIT NONE

    !*** SEZIONE DICHIARATIVA

    ! parametri formali
    INTEGER::num,riemp
    REAL:: v
    DIMENSION v(num)

    ! variabili locali
    INTEGER:: i

    !*** SEZIONE ESECUTIVA

    WRITE(*,*)"Inserisci il numero di elementi:"
    READ(*,*) riemp

    DO i=1,riemp
    WRITE(*,*)"Inserisci elemento", i,":"
    READ(*,*) v(i)
    END DO

    END SUBROUTINE

    Grazie a chi dedicherà del tempo per cercare di darmi una mano,

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466

    Re: [FORTRAN90] Articolare codice in subroutine

    Puoi derivare dal testo i sottoprogrammi ...

    conti quanti elementi negativi ...
    quanti elementi positivi siano presenti nell’array
    stampi i primi 3 elementi ...

    P.S. Come è finita la questione del sort ? Non hai più risposto ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it L'avatar di stino90
    Registrato dal
    Feb 2007
    Messaggi
    165
    Uhm quindi insomma tre sottoprogrammi dovrei scrivere...provo e ti faccio sapere

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.