\documentclass[a4paper, oneside, 10pt]{article}
\usepackage[unicode]{hyperref}
\usepackage[utf8x]{inputenc}
\usepackage[english]{babel}
\usepackage{listings}
\date{\today}
\title{}
\author{}
\begin{document}



\section{\texorpdfstring{Função die}{Funao die}}
\label{sec:funao_die}
\lstset{frame=single}
\begin{lstlisting}

die <- function(x, fp, ali, tc, nev, vb, save) #Cria a função die com os argumentos "x", "fp", "ali", "tc", "nev" e "vb".
{
  #VERIFICANDO PARÂMETROS
  
  if(x != round(x) | x <= 0)  #Verifica se x é um número inteiro positivo
{
    stop("x precisa ser número inteiro positivo") #Interrompe a função mostra mensagem 
}
  
if(nev != round (nev) | nev <= 0) #Verifica se nev é um número inteiro positivo
{
    stop("nev precisa ser número inteiro positivo") #Interrompe a função mostra mensagem 
}
  
if(length(x) != length(fp)) #Verifica se o comprimento dos vetores "x" e "fp" são iguais
{
   stop("dimensões de x, e fp devem ser iguais") #Interrompe a função mostra mensagem 
}
    
if(length(x) != length(ali) | length(x) != length(tc) | length(x) != length(nev)) #Verifica se o comprimento dos vetores "x" e "fp" são iguais
{
   warning("Ciclagem de valores ocorrida") #Continua a função e mostra mensagem de "warning"
}
  
if(length(nev) != 1) #Verifica se o vetor "nev" tem comprimento igual a 1
{
   stop("número de eventos de alimentação precisa ser único") #Para a função e mostra mensagem
}
  
if(vb != "s" && vb != "n") # Verifica se "vb" foi inserido corretamente
{
  stop("vb deve ser s (sim), ou n (não)") #Pára a função e mostra mensagem
}
  
if(save != "s" && vb != "n") # Verifica se "vb" foi inserido corretamente
{
  stop("save deve ser s (sim), ou n (não)") #Pára a função e mostra mensagem
}
    
df <- data.frame(x, fp, ali, tc, nev) #Constroi um data frame com os argumentos numéricos da função.
  
  

  
  #MONTANDO DATA FRAMES 
  
  
  
df1 <- matrix(nrow = length(x), ncol = nev+1) #Cria uma matriz vazia cum número de linhas igual ao número de 
                                                #grupos e número de colunas um maior que o número de eventos de alimentação
  
df1[,1] <- fp #Guarda o peso inicial de cada grupo na primeira coluna da matriz
  
for(i in 2:ncol(df1)) #Cria um ciclo da segunda coluna até o número final de colunas da matriz
{
  df1[, i] <- df1[,i-1] + (df1[,i-1]*tc) # Guarda em cada coluna o peso estimado de cada grupo acrescido
}                                        # da espectativa de engorda
  
df2 <- matrix(nrow = length(x), ncol = nev) #Cria uma matri resposta com número de linhas igual ao número de grupos
                                              #e número de colunas igual ao número de eventos
  
df2[,1] <- df1[,1]*ali #Guarda na primeira coluna o peso total a ser oferecido na alimentação
  
for(j in 2: nev) #Cria um ciclo para guardar os resultados dos cálculos
{
  df2[,j] <- round(df1[,j+1]*ali) #Calcula o peso do alimento a ser oferecido à partir das estimativas de peso
 }  
  
df2 <- cbind(df2, df[,1]) #Adiciona ao data frame resposta uma coluna com as quantidades de cada 
                            #tipo de alimentação
nc <- paste("alimentação", 1:nev, sep = " ") #Guarda no objeto "nc" a repetição dos nomes das colunas 
                                               #por evento de alimentação
nl <- paste("grupo", fp, sep = " ") #Guarda no objeto "nc" a repetição dos nomes das colunas 
                                      #por evento de alimentação
colnames(df2) <- c(nc,"quantidade") #Adiciona o nome das colunas do data frame resposta
rownames(df2) <- nl #Adiciona o nome das linhas do data frame resposta
  
#MONTANDO CURVAS DE CRESCIMENTO

time <- 0:nev #Cria o objeto "time" com o número de eventos de alimentação

par(las = 1, tcl = 0.3) #Parâmetros para montagem dos gráficos

if(vb == "s") #Verifica se a curva desejada é "Von Bertalanffy" ou não
{
df3 <- matrix(nrow = length(x), ncol = nev+1) #Cria matriz para armazenar o resultado do cálculo de crescimento

df3[,1] <- fp #Guarda os valores de peso inicial na primeira coluna
  
for(k in 2:ncol(df3)) #Cria ciclo para armazenar o resultado calculado nas colunas seguintes
{
  df3[,k] <- df1[,ncol(df1)]*(1-exp(-tc*(time[k]-0))) + fp #Cálculo da equação de "Von Bertalanffy"
}

 
 for(f in 1:nrow(df3)) #Cria ciclo para plotar os gráficos
{
t <- df3[f,] #Cria um vetor "t" com os valores do peso para cada grupo
plot(time, t, pch = 19, cex = 1.3, xlab = "Evento de alimentação") #Plota o gráfico 
                                                                 #de crescimento pelo número de eventos
lines(time, t, lty = 1, lwd = 2) #Adiciona a curva de crescimento aos pontos do gráfico
 }  
} else
{
for(j in 1:nrow(df1)) #Cria ciclo para plotar os gráficos
{
v <- df1[j,] #Cria um vetor "t" com os valores do peso para cada grupo
plot(time, v, pch = 19, cex = 1.3, xlab = "Evento de alimentação") #Plota o gráfico de crescimento 
                                                                 #pelo número de eventos
lines(time, v, lty = 1, lwd = 2) #Adiciona a curva de crescimento aos pontos do gráfico
}
  
}

if(save == "s") #Verifica se deve salvar o data frame
{
write.table(df2, "die.csv", sep = ";", col.names = NA) #Salva o data frame resposta em formato csv
}

return(df2) #Devolve o data frame resposta
 
}
  
\end{lstlisting}



\end{document}
