7
votes

Exemple de boucle tandis que vous ne pouvez pas être écrit comme une boucle

Je sais qu'une boucle tandis que la boucle peut faire n'importe quoi A pour la boucle peut, mais une boucle peut-elle faire n'importe quoi une boucle tandis que vous pouvez?

Veuillez fournir un exemple.


7 commentaires

Dépend totalement du langage de programmation. Une vraie boucle ne peut pas.


En supposant une langue avec des entiers sans bornes et une "vraie boucle", comme le dit Smasher, et comme tout le monde cité c plus mal compris, je pense qu'ils sont sérieux -, envisagez de calculer le premier plus grand plus grand qu'un entier donné. Je sais comment le faire avec des boucles. Pouvez-vous le faire avec seulement des boucles?


En utilisant la phrase "réelle pour la boucle", vous construisez une tautologie. Un "réel pour la boucle" est un articulé en boucle et est donc moins capable, mais vous n'avez rien appris de l'exercice.


BTW - Je pense que je peux faire le prochain problème principal avec les boucles, mais ce sera très inefficace. Un pour boucle jusqu'à n pour tester chaque numéro de primalité et calculer p le produit de tous les nombres premiers pas plus que n. Ensuite, une autre pour boucle de N + 1 à P + 1 pour tester chaque valeur pour la primalité et enregistrer la valeur la plus basse. Les pauses peuvent le rendre plus rapide, mais sont facultatifs.


@dmckee Je crois que l'utilisation de la phrase "réelle pour la boucle" rend la question intéressante. Si la question portait sur l'écriture "pour (; cond;)" alors soit-ce que mon commentaire est hors tension alors. Mais si, comme je le crois, la question concerne un problème qui peut être résolu avec des boucles, mais pas avec des boucles pour les boucles, je pense que mon commentaire est sur place.


@DMCkee Bien fait sur la résolution de mon problème suggéré en utilisant uniquement des boucles, cependant. Nous devons trouver un problème plus difficile. J'ai été tenté d'invoquer la fonction Ackerman mais il est défini en utilisant la récursion et qui confond le problème.


@Pascal Cuoq j'ai résolu le projet Euler Problème 10 avec seulement pour les boucles. Voilà comment fonctionne un tamis préféré.


7 Réponses :


15
votes

Oui, facilement.

while (cond) S;

for(;cond;) S;


3 commentaires

Je peux aussi bien ajouter que cela s'applique à C, C ++, Java, C # et probablement beaucoup d'autres langues qui empruntent énormément de C, mais ne s'appliquent pas par ex. Pascal.


Ce que j'aime à propos de cette réponse, c'est qu'il démontre simultanément que cela peut être fait et pourquoi c'est une chose inutile à faire.


Je ne pense pas que ce soit une réponse complète du tout. Il me semble plus un licenciement de la joue de la langue de la question, bien que strictement vrai.



-1
votes

Dans les langages similaires à C, vous pouvez déclarer pour des boucles telles que ceci: xxx

dans les langues où pour est plus strict et infinie boucles serait un cas nécessitant un pendant boucle.


0 commentaires

2
votes

Le pendant code> boucle et le classique pour code> Les boucles sont interchangeables:

for (initializer; loop-test; counting-expression) {
    …
}

initializer
while (loop-test) {
    …
    counting-expression
}


0 commentaires

1
votes

Si vous avez une liaison et une étape fixes et que vous n'autorisez pas la modification de la variable de boucle dans le corps de la boucle, alors pour les boucles correspondent aux fonctions récursives primitives.

d'un point de vue théorique, ils sont plus faibles que le général tandis que les boucles, par exemple, vous ne pouvez pas calculer la fonction Ackermann uniquement avec telle pour les boucles.

Si vous pouvez fournir une limite supérieure de la condition de temps en boucle de temps à devenir vrai, vous pouvez le convertir en une boucle. Cela montre que, dans un sens pratique, il n'y a pas de différence, comme vous pouvez facilement fournir une liaison astronomiquement élevée, dites plus longtemps que la vie de l'univers.


0 commentaires

-1
votes

tandis que la boucle code> n'a pas autant de flexibilité qu'une pour la boucle code> a et pour les boucles est plus lisible que pendant que des boucles. Je démontrerais mon point avec un exemple. A Pour une boucle peut avoir la forme comme suit:

for(int i = 0, j = 0; i <= 10; i++, j++){
// Perform your operations here.
}


1 commentaires

Vous n'avez pas montré une flexibilité uniquement. La boucle de la boucle est plus terrese. Les adresses de flexibilité si cela peut faire plus.



1
votes

Utilisation C

La prémisse de base est de la question est que pendant boucle peut être réécrit comme un pour pour < / em> boucle. Tels que xxx

étant réécrit comme; xxx

La question est prédiated sur le init et Modifier Les instructions sont déplacées dans le pour boucle et le pour boucle pas Simplement être, xxx

mais c'est une question piège. C'est faux à cause de la commande de flux interne que déclarations; peut inclure. De C Programmation: une approche moderne, 2e édition Vous pouvez voir un exemple à la page 119 , xxx

Ceci ne peut pas être réécrit comme un pour boucle comme, xxx < / pré>

pourquoi parce que "quand i est égal à 0 , la boucle d'origine n'écrise pas n mais le La nouvelle boucle fait.

et qui revient essentiellement à la capture,

contrôle explicite à l'intérieur du la boucle qu'un pour boucle (avec interne init; et modifie; Les instructions) ne peuvent pas recréer.


0 commentaires

0
votes

Alors que les boucles peuvent être plus utiles lorsque le nombre d'itérations de boucle n'est pas connu pendant que les boucles sont efficaces lorsque les itérations de la boucle sont connues. Considérez l'extrait de code suivant pour les marques d'étudiant, mais le nombre d'étudiants n'est pas connu

ArrayList StudentsMarks = New ArrayList (); P>

    int score = 100;
    int arraySize = 0;
    int total = 0;
    System.out.println("Enter student marks, when done press any number less than 0 0r greater than 100 to terminate entrancies\n");
    
    while(score >= 0 && score < 101) {
        System.out.print("Enter mark : ");
        
        score = scan.nextInt();
        if(score < 0 | score > 100)
            break;
        studentMarks.add(score);
        arraySize += 1;
        

        
    }
    // calculating total, average, maximum and the minimum values
    

    
    
    for(int i=0;i<studentMarks.size();i++) {
        total += studentMarks.get(i);
    System.out.println("Element at [" + (i+1)+"] : " +studentMarks.get(i)); 
        
    }
    
    System.out.println("Sum of list element is : " + total);
    System.out.println("The average of the array list : " + (total/(studentMarks.size())));
    Collections.sort(studentMarks);
    System.out.println("The minimum of the element in the list is : " + studentMarks.get(0));
    System.out.println("The maximum of the element in the list is : " + studentMarks.get(studentMarks.size()-1));
    
    scan.close();


0 commentaires