
12 Mai
2016
12 Mai
'16
14:33
Oi Rodrigo e Augusto, muito obrigada, deu certo! Rodrigo, eu as vezes me "embanano" toda tentando usar o while e por isso acabo usando-o de modo errado e tento recorrer ao for(). Mas agora eu acho que entendi de vez: eu não preciso do for para dar continuidade ao laço ( eu achava que além do j=j+k eu precisava usar o for()). Muito obrigada de novo! Michelle Em 12 de maio de 2016 11:11, Rodrigo Coster <rcoster@gmail.com> escreveu: > 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. >> > > > _______________________________________________ > 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. >