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.