jhiki
(usa Ubuntu)
Enviado em 15/07/2017 - 19:58h
Oi, Estou usando o fortran para programar em subrotinas e funções. Estou obtendo como resposta o seguinte erro:
/tmp/ccDXfqaD.o: na função `MAIN__':
Principal.f90:(.text+0xa): referência indefinida para `entrada_'
Principal.f90:(.text+0x14): referência indefinida para `exec_'
Principal.f90:(.text+0x1e): referência indefinida para `saida_'
collect2: error: ld returned 1 exit status
Coloquei os códigos sequenciais do meu programa... Alguém sabe o que deu errado neste programa??
Module Var_Glob
Implicit none
Integer :: i, ref(6),Num_modal
Real :: Preco(6), sem_desconto,Com_desconto
Character::Modalidades(6)*12, texto
Integer, allocatable:: Num_ref(:)
scontains
function Conta (valor,n_modalidade,n_ref) !Valor final sem desconto
Real::conta,Valor(6),soma
Integer::n_modalidade,cont
Integer::n_ref(n_modalidade)
soma=0.0
Do cont=1, n_modalidade
!Valor é o vetor de preços
Soma= valor(n_ref(cont)) + soma !Ref é o vetor só com pŕeços usados
End do
Conta=soma
End function
Function desconto(Valor_total,n_modalidade)
Real::desconto, Valor_total
integer::n_modalidade
IF( n_modalidade==2) desconto=-Valor_total*0.1+Valor_total
IF( n_modalidade==3) desconto=-Valor_total*0.2+Valor_total
IF( n_modalidade>3) desconto=-Valor_total*0.3+Valor_total
End function
End Module
Préprocessanento
Subroutine Entrada
Use Var_Glob
Implicit none
open (unit=1,file="academica.dat",status="old")
Read(1,*) texto,(Ref(i),i=1,6)
Read(1,*) texto,(Modalidades(i),i=1,6)
Read(1,*) texto,(Preco(i),i=1,6)
write(*,*)"Digite quantas modalidades você fez"
Read(*,*)Num_modal !Quantidade de modalidades
Allocate(Num_ref(Num_modal) ) !Salva as referências utilizadas
write(*,*)"Com espaço entre as modalidades"
write(*,*)"Digite quais modalidades você fez"
write(*,*)"De acrodo com o menu abaixo"
write(*,*) (Ref(i),i=1,6)
write(*,*) (Modalidades(i),i=1,6)
Read(*,*)(Num_ref(i),i=1,Num_modal)
!write(*,*)(Num_ref(i),i=1,Num_modal)
!write(*,*) (Ref(i),i=1,6)
!write(*,*) (Modalidades(i),i=1,6)
!write(*,*) (Preco(i),i=1,6)
End Subroutine
Principal
Program Main
Call Entrada
Call Exec
Call Saida
End Program
pos processamento
Subroutine Saida
Use Var_Glob
Implicit none
Write(*,*)"O total sem desconto é",Sem_desconto
Write(*,*)"O total com desconto é",Com_desconto
End Subroutine
processamento
Subroutine Exec
Use Var_Glob
Implicit none
Sem_desconto=Conta (preco,Num_modal,num_ref)
Com_desconto=desconto(Sem_desconto,Num_modal)
End Subroutine
É isso... Se alguém souber... Me ajudem!