\documentclass[a4paper, oneside, 10pt]{article} \usepackage[unicode]{hyperref} \usepackage[utf8x]{inputenc} \usepackage[english]{babel} \usepackage{listings} \date{\today} \title{} \author{} \begin{document} \section{\texorpdfstring{diveplan}{diveplan}} \label{sec:diveplan} Antes de começar a usar a função, você vai precisar salvar em seu diretório de trabalho 3 tabelas, correspondentes à tabela RDP (Recreational Dive Planner): \href{media/bie5782/01_curso_atual/alunos/trabalho_final/jessica_corsso/merg1.csv}{merg1.csv}, \href{media/bie5782/01_curso_atual/alunos/trabalho_final/jessica_corsso/merg2.csv}{merg2.csv} e \href{media/bie5782/01_curso_atual/alunos/trabalho_final/jessica_corsso/merg3.csv}{merg3.csv}.\lstset{frame=single} \begin{lstlisting} diveplan <- function(n=2, p, trf) #criando a função diveplan, com os argumentos n=numero de mergulhos, p=profuundidades pretendidas e trf=tempo de fundo. { #Esta etapa fará a verificação dos parâmetros if(n>2) #verificar se n>2) { stop("Esta função foi desenvolvida apenas para 2 mergulhos consecutivos no momento, há intenção de apliar sua aplicação em breve. Por enquanto use-a apenas em caso de n=2") #se n for maior que dois, a função para e retorna a mensagem que está entre parentes } if(all(diff(p)>0)) #verificar se o vetor profundidade segue a ordem decrescente { warning("Para sua segurança é recomendado que seus mergulhos obedeçam a ordem decrescente de profundidades") #se if igual a TRUE, retorna uma mensagem de aviso ao usuário } if(any(p>30)) #verificar se algum valor do vetor profundidade é maior do que 30 { stop("A profundidade deve ser menor do que 30 metros") #se if igual a TRUE, para a função e retorma a mensagem entre parenteses } # Aqui vamos ler a primeira tabela, procurando profundidade e tempo que foram informados pelo usuário # Esta parte se refere ao primeiro mergulho do usuário merg1<-read.table("merg1.csv", sep=",", na.strings = "NA", row.names = 1) #lê a tabela merg1 do diretório p1 <- matrix(NA,ncol=n) #Cria uma matriz p1 preenchida por NA com o número de colunas igual a n (número de mergulhos) p1 <- as.vector(p1) #transforma a matriz p1 em um vetor p1[1]<-which(merg1[1,]>= p[1])[1] #armazena na posição 1 do vetor p1 a posição (numero da coluna) da tabela da primeira profundidade fornecida pelo usuário, ou a maior mais próxima caso não haja correspondência com a tabela p1[2]<-which(merg1[1,]>= p[2])[1] #armazena na posição 2 do vetor p1 a posição (numero da coluna) da tabela da segunda profundidade fornecida pelo usuário, ou a maior mais próxima caso não haja correspondência com a tabela t1 <- matrix(NA,ncol=n) #Cria uma matriz t1 preenchida por NA com o número de colunas igual a n (número de mergulhos) t1 <- as.vector(t1) #transforma a matriz t1 em um vetor t1[1]<-which(merg1[,p1[1]]>= trf[1])[1] #Armazena na posição 1 do vetor t1 o valor onde há correspondencia entre o trf informado pelo usuário e o trf disponível na tabela merg1 #Caso não aja correspondência, armazena o valor maior mais próximo do que o usuário forneceu # A partir daqui, procuramos na tabela 3 os dados referentes ao segundo mergulho do usuário merg3 <-read.table("merg3.csv", sep=",", na.strings = "NA", header = TRUE, row.names = 1) #lê a tabela merg3 do diretório t1[2] <- which(merg3[p1[2],]<= trf[2])[1] #armazena na posição 2 de t1 a posição da coluna onde há correspondencia entre o trf informado pelo usuário e o trf disponível na tabela merg1 #Caso não aja correspondência, armazena o valor maior mais próximo do que o usuário forneceu #Neste caso foi usado menor igual pois a tabela está em ordem decrescente #Agora com os dados dos 2 mergulhos lidos, é hora de encontrar na tabela de créditos de intervalo de superfície qual é o tempo mínimo de superfície entre os mergulhos merg2 <-read.table("merg2.csv", sep=",", na.strings = "NA", header = TRUE) #lê a tabela merg2 do diretório t_min <- merg2[(t1[1]-1), (t1[2])] #cria o objeto t_min que corresponde ao tempo mínimo que o mergulhador deve ficar na superfície entre seus 2 mergulhos #o tempo mínimo vai ser lido da tabela merg 2, na linha t1[1]-1 e na coluna t1[2] if(is.na(t_min)) #verifica se t_min é NA { t_min <- paste("Você excedeu o tempo máximo permitido em uma das profundidades, diminua o tempo de mergulho e reinicie o seu planejamento") #define t_min como um aviso ao usuário, para recomeçar o planejamento dos mergulhos, caso t_min seja igual à NA. } return(paste("O tempo mínimo que você deve ficar na superfície entre seus 2 mergulhos é: ", t_min, "(h:min)")) #retorna ao usuário o tempo mínimo de superfície entre seus 2 mergulhos } \end{lstlisting} \end{document}