爲了獲得樂趣並查看性能差異,我將不同語言的小腳本進行了轉換。GNU R:在while循環中的平等
但是我有GNU R A問題:
#!/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需要。我不明白這個問題。
如果有幫助,這是一個功能性等價物的C++代碼:
#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;
}
感謝。
哪一個是第一個while循環?第一個運行?第一個定義?目前還不清楚你可能從命令行輸入什麼,所以我不確定數據是什麼。看起來你應該能夠做到這一點,以進一步本地化錯誤。當然,並不是所有的代碼都是相關的。 – MrFlick
第一個循環是while(nbUtilisateur == 0) – RyDroid