codice:
        PROGRAM RICERCA
        
C        Ricerca di una dato valore in un array monodimensionale
C        di interi, con indicazione della posizione in cui questo si
C        trova (se il valore è presente più volte indicare il numero
C        delle volte e le rispettive posizioni)

       INTEGER MAX, RIGHE, COLONNE
       PARAMETER (MAX=10)
       REAL MATRICE (MAX, MAX), NUM
       
       CALL DICHIARA_DIMENSIONI (RIGHE, COLONNE, MATRICE)
       
       IF ((RIGHE .LE. MAX) .AND. (COLONNE .LE. MAX)) THEN
        CALL VISUALIZZA_MATRICE (RIGHE, COLONNE, MATRICE)
       ENDIF

       
       CALL SCRIVI_NUMERO (NUM)
       CALL RIC_NUM (NUM, RIGHE, COLONNE, MATRICE)
       
       STOP
       END
       
       SUBROUTINE DICHIARA_DIMENSIONI (RIGHE, COLONNE)
       INTEGER RIGHE, COLONNE
       PRINT*, "DICHIARA LE DIMENSIONI DELLA MATRICE:"
       READ*, RIGHE
       READ*, COLONNE
       RETURN
       END
       
       SUBROUTINE VISUALIZZA_MATRICE(RIGHE, COLONNE, MATRICE)
       INTEGER MAX, I, J, RIGHE, COLONNE
       PARAMETER (MAX=10)
       REAL MATRICE (MAX, MAX)

       PRINT*, "INSERISCI GLI ELEMENTI DELLA MATRICE PER COLONNE:"
       
       DO 10, I=1, COLONNE
        DO 20, J=1, RIGHE
          READ*, MATRICE (I, J)
20        CONTINUE
10        CONTINUE
       RETURN
       END
       
        SUBROUTINE SCRIVI_NUMERO (NUMERO)
        REAL NUMERO
        PRINT*, "SCRIVI NUMERO:"
        READ*,   NUMERO
        RETURN
        END

        SUBROUTINE RIC_NUM (NUMERO, RIGHE, COLONNE, MATRICE)
        INTEGER NUMERO, MAX, I, J, RIGHE, COLONNE, CONTATORE, K, L
        PARAMETER (MAX=10)
        REAL MATRICE (MAX, MAX)

        CONTATORE=0
                
        DO 10, I=1, COLONNE
         DO 20, J=1, RIGHE

         IF (NUMERO .EQ. MATRICE(I, J)) THEN
            CONTATORE=CONTATORE+1
           ENDIF
20       CONTINUE
10       CONTINUE

           IF (CONTATORE .EQ.0) THEN
             PRINT*, "IL NUMERO CHE Š STATO SCRITTO NON COMPARE NELLA"
             PRINT*, "MATRICE"

           
           ELSE IF (CONTATORE .GT. 0) THEN

                  DO 30, K=1, COLONNE
                   DO 40, L=1, RIGHE
                    IF (NUMERO .EQ. MATRICE(K, L)) THEN
                     PRINT*, "IL NUMERO COMPARE", CONTATORE, "VOLTE"
                     PRINT*, "IL NUMERO COMPARE ALLA POSIZIONE", K, L
                    ENDIF
40                CONTINUE
30                CONTINUE

            ENDIF
            
         RETURN
         END
Questo è un altro programma, che questa volta sono riuscito a scrivere, anche se mi dà un errore logico che non riesco a correggere.

La spiegazione della funzione che questo programma deve avere è spiegata nelle prime righe, quelle con la c alla destra (la C in FORTRAN sostituisce il simbolo "//" di altri linguaggi, mi viene in mente C). Ho cercato di seguire il regolamento usando il tag [CODE], tuttavia non sono sicuro di averlo fatto bene. Inoltre, ho complicato un po' l'esercizio, prendendo invece dell'indicato array monodimensionale, un array bi-dimensionale.

La sintassi del FORTRAN forse è comprensibile anche per chi non conosce propriamente questo linguaggio. Il "Do" seguito a distanza, quando finisce il ciclo, dal numero (che non indica assolutamente niente di logico, è solo un' etichetta) a sua volta seguito da CONTINUE, indica quello che in C si chiama ciclo FOR

La condizione IF è simile, se non ricordo male, a quella presente in C.

Dal punto di vista logico, io forse ho usato un ciclo in più del necessario, anche se non credo (me lo confermerete, voi, ovviamente, se ne avrete voglia) che sia per questo che il programma non funziona.

L'errore che mi dà è sostanzialmente questo:
ogni volta che effettuo un confronto tra il numero e gli elementi della matrice, mi esce sempre la scritta "il numero non compare nella matrice", anche nei casi in cui non me l'aspetterei.