Contatore in fortran90
Ciao ragazzi, mi sono appena iscritto, e siccome ho visto che siete molto disponibili ad aiutare, vi espongo il mio problema :
ho una lista di numeri da ordinare, presi da un file esterno al programma; il primo numero sono i record da leggere e a seguire, la lista di numeri. fino a qui, semplicissimo, ciclo do da 1 a "n" (il primo numero letto) dove trascrive su di un vettore "a" i valori che assume per ogni indice I da 1 a N... vettore letto, e scritto; ordinato con il costrutto
IF (a(i)>a(i+1)) then
sca=a(i)
a(i)=a(i+1)
a(i+1)=sca
dove sca è la variabile di scambio, dove si salva il primo valore, e a cui si ricorre per lo scambio dei valori nel primo vettore;
fino a qui, tutto ok, un vettore da disordinato ad ordinato in ordine crescente.
il problema è : la lista può contare valori ripetuti; in quel caso, vengono messi sempre in ordine, uno sotto all'altro; devo creare una istruzione che, quando il vettore a contiene due valori uguali, uno di seguito all'altro, il programma mi riporta il valore che si ripete, quante volte si ripete, ed infine quale è il valore che si ripete maggiormente;
quello che sono riuscito a fare, lo trovate qui sotto, mi sono fermato al punto in cui devo far scrivere al programma "quante volte si ripete", sono riuscito a salvare su di un vettore b i valori che si ripetono, ma non quante volte..
P.S. se volete fare delle prove, il file di testo si deve chiamare "lista.txt" altrimenti cambiate voi il nome e sistemate il listato..
qualcuno ha qualche suggerimento?
edit : il programma compilato, si comporta così :

per farci capire, vorrei che mi scrivesse "quante volte" ha scritto "25", "32" e "78"
ho una lista di numeri da ordinare, presi da un file esterno al programma; il primo numero sono i record da leggere e a seguire, la lista di numeri. fino a qui, semplicissimo, ciclo do da 1 a "n" (il primo numero letto) dove trascrive su di un vettore "a" i valori che assume per ogni indice I da 1 a N... vettore letto, e scritto; ordinato con il costrutto
IF (a(i)>a(i+1)) then
sca=a(i)
a(i)=a(i+1)
a(i+1)=sca
dove sca è la variabile di scambio, dove si salva il primo valore, e a cui si ricorre per lo scambio dei valori nel primo vettore;
fino a qui, tutto ok, un vettore da disordinato ad ordinato in ordine crescente.
il problema è : la lista può contare valori ripetuti; in quel caso, vengono messi sempre in ordine, uno sotto all'altro; devo creare una istruzione che, quando il vettore a contiene due valori uguali, uno di seguito all'altro, il programma mi riporta il valore che si ripete, quante volte si ripete, ed infine quale è il valore che si ripete maggiormente;
quello che sono riuscito a fare, lo trovate qui sotto, mi sono fermato al punto in cui devo far scrivere al programma "quante volte si ripete", sono riuscito a salvare su di un vettore b i valori che si ripetono, ma non quante volte..
P.S. se volete fare delle prove, il file di testo si deve chiamare "lista.txt" altrimenti cambiate voi il nome e sistemate il listato..
qualcuno ha qualche suggerimento?
edit : il programma compilato, si comporta così :

per farci capire, vorrei che mi scrivesse "quante volte" ha scritto "25", "32" e "78"
Risposte
Se ric rappresenta la ricorrenza, ovvero quante volte si ripete il numero, dovresti azzerarlo quando il numero cambia ( e lo fai ) ed incrementarlo di 1 ogni qualvolta si verifica la ricorrenza.
Inoltre dovresti avere una altra variabile che ti informa della maggiore ricorrenza ( l'ho chiamata maxric) e sostituirla quando si verifica una maggiore ricorrenza. Eventualmente puoi anche memorizzare il numero con la maggiore ricorrenza (nummaxric).
Il fortran lo conosco pochissimo, ma spero che si capisca...
Inoltre dovresti avere una altra variabile che ti informa della maggiore ricorrenza ( l'ho chiamata maxric) e sostituirla quando si verifica una maggiore ricorrenza. Eventualmente puoi anche memorizzare il numero con la maggiore ricorrenza (nummaxric).
Il fortran lo conosco pochissimo, ma spero che si capisca...
do i=1,n ! se il numero precedente è uguale al seguente, if (a(i)==a(i+1)) then ! il programma riporterà quel numero, salvato ************* ric = ric + 1 if ric > maxric maxric = ric nummaxric = a(i) end-if ********** b(i)=a(i) ! su di una variabile, ric (ricorrenza) write (*,2) a(i), " uguale al seguente" ,ric 2 format (i10,a20,i5)
umbi grazie tantissimo per l'aiuto, il programma, con qualche ritocco a livello di sintassi (ci sei andato vicinissimo
) funziona, e riporta il numero che si ripete maggiormente, anche se "ric" purtroppo mi riporta il "nummaxric +1 " per ogni prova che ho fatto... chiaramente, gli ho dato l'istruzione write proprio per ultima, prima dello stop, così che mi trovo l'ultimo valore salvato e non in mezzo a cicli e roba così 
accidenti c'è da sistemare solo questo ric che non fa il suo dovere.. io sono giorni che ci sto appresso a questo programma, qualcosa è uscito ma c'è molto da migliorare...


accidenti c'è da sistemare solo questo ric che non fa il suo dovere.. io sono giorni che ci sto appresso a questo programma, qualcosa è uscito ma c'è molto da migliorare...
do j=1,n ! do i=1,n-1 ! controlla n-1 volte se il numero precendente
Devi rivedere anche il secondo ciclo (quello della i). E' inutile che riparti sempre da 1.
Per il "ric" ti conteggia le ricorrenze del numero che stai esaminando al momento (durante l'elaborazione). Non ha senso stampare o visualizzare questo numero a fine elaborazione.