Passa al tema normale
Discussioni su argomenti di Informatica

Regole del forum

Consulta il nostro regolamento e la guida per scrivere le formule
Rispondi al messaggio

Ricerca max e min in un vettore

17/01/2019, 16:58

Buonasera,

sto provando a realizzare un algoritmo in fortran, il quale mi deve restituire il massimo e il minimo di un vettore A.
Riporto il code sia del programma chiamante, e sia delle singole procedure per determinare il massimo e il minimo del vettore A.

In verità ho provato l'algoritmo, alternando le chiamate, nel senso che, ho escluso in primo momento call massimo e facendo rimanere call minimo cosi facendo ho notato che l'algoritmo funziona, poi facendo il viceversa, ho notato che l'algoritmo continua a funzionare per cui presumo che il problema sia dovuto ad un errore di sintassi o di costrutto, spero che qualcuno mi dia un'indicazione su come procedere.

Algoritmo chiamante

Codice:
program mainricercamassimominimo
integer:: n
real:: a(100),h(100),c,l
read*, n
call minimo (n,a,c)
call massimo (n,h,l)
print*,c,l
end


procedura min

Codice:
subroutine minimo (m,b,f)
real:: b(m)
integer:: i,m
do i=1,m
read*, b(i)
num=b(i)
if(num<f) then
f=num
end if
end do
end


procedura man

Codice:
subroutine massimo (m,b,f)
real:: b(m)
integer:: i,m
do i=1,m
read*, b(i)
num=b(i)
if(num>f) then
f=num
end if
end do
end



Infine mi fa inserire 2n volte i dati, facendo cosi mi da i valori corretti.

Re: Ricerca max e min in un vettore

18/01/2019, 14:50

Non capisco perché inserisci i dati due volte. Dovresti inserire i dati nel main (o in una subroutine separata) e nelle due subrouting di massimo e minimo solo calcolare i valori.

Re: Ricerca max e min in un vettore

18/01/2019, 16:30

Ciao vict85, si ho fatto diversi tentativi varie volte, ho risolto poco prima.
Ora sembra che vada bene. Riporto il code

main
Codice:
program mainricercamassimominimo
!ricerca del massimo e del minimo in un vettore di lunghezza 'n'!
!dichiarazione delle variabili!
integer:: n
real:: a(100),p,k
!lunghezza vettore!
print*, 'ordine vettore'
read*, n
!lettura degli elementi !
do i=1,n
read*, a(i)
end do
!Si fissano due elementi generici per confrontarli!
p=a(1)
k=a(n)
!procedura!
call minimo (n,a,p)
call massimo (n,a,k)
!stampa!
print*, 'minimo vettore e massimo vettore'
print*, 'min=',p,'max=',k
end


procedure massimo
Codice:
subroutine massimo (m,b,z)
integer:: i
real:: b(m)
do i=1,m-1
if(b(i)>z) then
z=b(i)
end if
end do
end


procedure minimo
Codice:
subroutine minimo (m,b,z)
integer:: i
real:: b(m)
do i=1,m-1
if(b(i)<z) then
z=b(i)
end if
end do
end


Ora l'algoritmo sembra funzionare, sto leggendo su internet i tempi di esecuzione di un algoritmo, non mi è molto chiara questa nozione, mi potresti dare quale dritta ? Inoltre è possibile raffinare i tempi per questo algoritmo, cioè si potrebbe renderlo migliore ?

Non sono molto pratico su questa materia, quindi non so nemmeno se la domanda è posta bene.. capiscimi :smt023

Re: Ricerca max e min in un vettore

18/01/2019, 17:51

Non sono pratico di fortran. Insomma lo capisco abbastanza da sapere quello che stai facendo ma non molto di più. Dal punto di vista dell'algoritmo non puoi fare di meglio: per trovare il minimo devi come minimo comparare il risultato con ogni altro elemento dell'array. Pertanto l'algoritmo è O(n). Stessa cosa per il massimo. Volendo puoi calcolare minimo e massimo in un solo passaggio, ma non mi preoccuperei molto.
Rispondi al messaggio


Skuola.net News è una testata giornalistica iscritta al Registro degli Operatori della Comunicazione.
Registrazione: n° 20792 del 23/12/2010.
©2000— Skuola Network s.r.l. Tutti i diritti riservati. — P.I. 10404470014.