2014-07-08 1 views
-2

재미와 성능 차이를 보려면 다른 언어로 된 작은 스크립트를 변환하십시오.GNU R : 잠시 동안의 평등

하지만 GNU R에 문제가 있습니다

의 자동 변환하는 동안
#!/usr/bin/Rscript 

nbOperationsSuiteSyracuse <- function(nb) 
{ 
    nb <- as.integer(nb) 

    if(nb == 1) 
     return(0) 

    nbOperations <- 1 
    while(nb != 1) 
    { 
     if(nb %% 2 == 0) 
      nb <- nb/2 
     else 
      nb <- nb * 3 +1 
     nbOperations <- nbOperations + 1 
    } 
    return(nbOperations) 
} 


nbUtilisateur <- 0 
if(length(commandArgs()) > 0) 
    nbUtilisateur <- as.integer(commandArgs()[1]) 
while(nbUtilisateur == 0) 
    nbUtilisateur <- as.integer(readline('Saississez un nombre entier positif non nul : ')) 
cat('Le résultat pour ', nbUtilisateur, ' est ', nbOperationsSuiteSyracuse(nbUtilisateur), '\n') 

nbUtilisateur <- 0 
if(length(commandArgs()) > 1) 
    nbUtilisateur <- as.integer(commandArgs()[2]) 
while(nbUtilisateur == 0) 
    nbUtilisateur <- as.integer(readline('Nombre de nombres (entier positif non nul) : ')) 
somme <- 0 
for(i in 1 : nbUtilisateur) 
{ 
    nbResultat <- nbOperationsSuiteSyracuse(i) 
    cat('La suite de syracuse pour ', i, ' est ', nbResultat) 
    somme <- somme + nbResultat 
} 
cat('La somme de 1 à ', nbUtilisateur, ' est ', somme) 
cat('La moyenne de 1 à ', nbUtilisateur, ' est ', somme/nbUtilisateur) 

, R은 그 기능에없는 동안 TRUE 또는 FALSE가 필요하기 때문에 처음에 문제가 발생한 것을 저에게 말한다을 . 나는 그 문제를 이해하지 못한다.

#include<iostream> 
#include<cstdlib> 

unsigned int nbOperationsSuiteSyracuse(unsigned int nb) 
{ 
    if(nb == 1) 
     return 0; 

    unsigned int nbOperations = 1; 
    while(nb != 1) 
    { 
     if(nb % 2 == 0) 
      nb /= 2; 
     else 
      nb = nb * 3 +1; 
     ++nbOperations; 
    } 
    return nbOperations; 
} 


int main(int argc, char** argv) 
{ 
    unsigned int nbUtilisateur = 0; 
    if(argc > 1) 
     nbUtilisateur = strtoul(argv[1], NULL, 0); 
    while(nbUtilisateur == 0) 
    { 
     std::cout << "Saississez un nombre entier positif non nul : "; 
     std::cin >> nbUtilisateur; 
    } 
    std::cout << "Le résultat pour " << nbUtilisateur << " est " << nbOperationsSuiteSyracuse(nbUtilisateur) << std::endl << std::endl; 

    nbUtilisateur = 0; 
    if(argc > 2) 
     nbUtilisateur = strtoul(argv[2], NULL, 0); 
    while(nbUtilisateur == 0) 
    { 
     std::cout << "Nombre de nombres (entier positif non nul) : "; 
     std::cin >> nbUtilisateur; 
    } 
    unsigned int somme = 0; 
    for(unsigned int i = 1; i <= nbUtilisateur; ++i) 
    { 
     unsigned int nbResultat = nbOperationsSuiteSyracuse(i); 
     std::cout << "La suite de syracuse pour " << i << " est " << nbResultat << std::endl; 
     somme += nbResultat; 
    } 
    std::cout << "La somme de 1 à " << nbUtilisateur << " est " << somme << std::endl; 
    std::cout << "La moyenne de 1 à " << nbUtilisateur << " est " << ((double) somme/nbUtilisateur) << std::endl; 

    return EXIT_SUCCESS; 
} 

감사 : 도움이된다면

,이 기능적으로 동등한 C++ 코드입니다. 답변 여기

+0

첫 번째 while 루프는 어느 것입니까? 첫 번째 실행? 처음 정의 된? 명령 줄에서 입력하는 내용이 명확하지 않으므로 데이터가 무엇인지 확실하지 않습니다. 오류를 더 자세히 현지화하려면이 작업을 최소화 할 수 있어야합니다. 물론 모든 코드가 관련성이있는 것은 아닙니다. – MrFlick

+0

첫 번째 루프가 while (nbUtilisateur == 0) – RyDroid

답변

0

봐 : http://r.789695.n4.nabble.com/Wait-for-user-input-with-readline-tp3054517p4578455.html

R이 readline의 대기하지 않는, 그냥 NA로 강제 변환.

+0

문제는 readline 이전입니다. "Erreur 하건데 동안 (nbUtilisateur == 0) {valeur manquante 라 오우 TRUE/FALSE requis EST"(프랑스)가 발생 – RyDroid

+0

같은 문제점 : 동안 (nbUtilisateur == 0) { \t nbUtilisateur <- readline에 ('() : \t nbUtilisateur <- as.integer (nbUtilisateur) } – RyDroid