재미와 성능 차이를 보려면 다른 언어로 된 작은 스크립트를 변환하십시오.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++ 코드입니다. 답변 여기
첫 번째 while 루프는 어느 것입니까? 첫 번째 실행? 처음 정의 된? 명령 줄에서 입력하는 내용이 명확하지 않으므로 데이터가 무엇인지 확실하지 않습니다. 오류를 더 자세히 현지화하려면이 작업을 최소화 할 수 있어야합니다. 물론 모든 코드가 관련성이있는 것은 아닙니다. – MrFlick
첫 번째 루프가 while (nbUtilisateur == 0) – RyDroid