[R-br] Uso de laços e while().

Michelle Bau Graczyk mbgraczyk em gmail.com
Quinta Maio 12 11:33:54 BRT 2016


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 em 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 em 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 em 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 em 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 em 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 em 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 em 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 em 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.
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20160512/c1dc04cb/attachment.html>


Mais detalhes sobre a lista de discussão R-br