
12 Mai
2016
12 Mai
'16
14:11
Michelle, Eu tinha me preocupado só com o erro enviado, não com o algoritmo. Olhando com mais atenção, vi que tu está usando o for() para algo que não pode ser feito com for() (ok, até pode, mas não é o ideal). O for() sempre vai passar por todos elementos do vetor informado, mas não é isso que tu quer que faça (tanto que, ao final do dele, tu faz com que j seja igual a j + k). Para fazer o que tu quer, é necessário usar while() ou repeat(). Se eu entendi bem o teu objetivo, segue uma sugestão de solução com while: v<-c(1,2,5,4,8,9,10,4,2,7,6,8,2) n <- length(v) matrizz<-matrix(NA,13,2) j <- 1 while (j <= n) { k <- 1 if(v[j]>4){ vc<-10*v[j] matrizz[j,1]<-vc while (v[j + k] > 3) { k <- k + 1 } vc2<-7*v[j + k] matrizz[j + k,2]<-vc2 } else print("Não houve abertura de processo") j=j+k } 2016-05-12 10:48 GMT-03:00 Michelle Bau Graczyk <mbgraczyk@gmail.com>: > Oi Rodrigo, primeiro obrigada pela resposta. > > Acho que ainda não deu certo, porque eu tentei gravar os dados e olha como > fica: > > > v<-c(1,2,5,4,8,9,10,4,2,7,6,8,2) > > ts<-ts(v) > > matrizz<-matrix(NA,13,2) > > for(j in 1:10){ > + > + if(ts[j]>4){ > + > + vc<-10*ts[j] > + matrizz[k,1]<-vc > + for(k in (j+1):10){ > + > + if(ts[k]<4){ > + > + vc2<-7*ts[k] > + matrizz[k,2]<-vc2 > + } > + } > + > + } > + else print("Não houve abertura de processo") > + j=j+k > + > + } > [1] "Não houve abertura de processo" > [1] "Não houve abertura de processo" > [1] "Não houve abertura de processo" > [1] "Não houve abertura de processo" > [1] "Não houve abertura de processo" > > vc2 > [1] 14 > > vc > [1] 70 > > matrizz > [,1] [,2] > [1,] NA NA > [2,] NA NA > [3,] NA NA > [4,] NA NA > [5,] NA NA > [6,] NA NA > [7,] NA NA > [8,] NA NA > [9,] NA 14 > [10,] 70 NA > [11,] NA NA > [12,] NA NA > [13,] NA NA > > Em 12 de maio de 2016 10:27, Rodrigo Coster <rcoster@gmail.com> escreveu: > >> Nos 2 comandos, tenta substituir: >> >> * for(k in j+1:10){* >> >> por >> >> >> >> *for(k in (j+1):10){* >> Acredito que isso seja suficiente para funcionar >> >> 2016-05-12 10:20 GMT-03:00 Michelle Bau Graczyk <mbgraczyk@gmail.com>: >> >>> Caros, bom dia, >>> >>> Estou com um problema de lógica de programação. O que eu esperava era o >>> seguinte: se ts[j]>4, eu abro uma operação e ela só para quando ts[j]<4. >>> Enquanto uma operação está aberta, não se pode abrir mais nenhuma. Para >>> isso eu tentei fazer de duas formas, usando e não usando o while, mas eu >>> não consegui. >>> >>> Alguém teria alguma idéia sobre o que eu ando pensando errado? >>> >>> Muito obrigada, >>> >>> Michelle >>> >>> Primeira opção: >>> >>> > v<-c(1,2,5,4,8,9,10,4,2,7,6,8,2) >>> > ts<-ts(v) >>> > >>> > for(j in 1:10){ >>> + if(ts[j]>4){ >>> + #vende >>> + #compra >>> + #compra >>> + vc<-10*ts[j] >>> + while(ts[j+1]>4) j=j+1 >>> + for(k in j+1:10){ >>> + if(ts[k]<4){ >>> + vc2<-7*ts[k] >>> + >>> + } >>> + } >>> + } >>> + else print("Não houve abertura de processo") >>> + j=j+k >>> + vc2 >>> + vc >>> + } >>> [1] "Não houve abertura de processo" >>> [1] "Não houve abertura de processo" >>> [1] "Não houve abertura de processo" >>> Error in if (ts[k] < 4) { : valor ausente onde TRUE/FALSE necessário >>> > vc2 >>> [1] 14 >>> > >>> > vc >>> [1] 80 >>> >>> Segunda opção: >>> >>> > v<-c(1,2,5,4,8,9,10,4,2,7,6,8,2) >>> > ts<-ts(v) >>> > >>> > for(j in 1:10){ >>> + if(ts[j]>4){ >>> + #vende >>> + #compra >>> + #compra >>> + vc<-10*ts[j] >>> + for(k in j+1:10){ >>> + if(ts[k]<4){ >>> + vc2<-7*ts[k] >>> + >>> + } >>> + } >>> + } >>> + else print("Não houve abertura de processo") >>> + j=j+k >>> + vc2 >>> + vc >>> + } >>> [1] "Não houve abertura de processo" >>> [1] "Não houve abertura de processo" >>> [1] "Não houve abertura de processo" >>> Error in if (ts[k] < 4) { : valor ausente onde TRUE/FALSE necessário >>> > vc2 >>> [1] 14 >>> > >>> > vc >>> [1] 80 >>> >>> _______________________________________________ >>> R-br mailing list >>> R-br@listas.c3sl.ufpr.br >>> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br >>> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça >>> código mínimo reproduzível. >>> >> >> >> _______________________________________________ >> R-br mailing list >> R-br@listas.c3sl.ufpr.br >> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br >> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça >> código mínimo reproduzível. >> > > > _______________________________________________ > R-br mailing list > R-br@listas.c3sl.ufpr.br > https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br > Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça > código mínimo reproduzível. >