Bonjour,
Pour un programme j'aurai besoin de faire :
Est ce qu'il existe une façon de faire ça ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part for(i=0;i<=1000;if(n=0){i=i+2;}else{i=i+4})
Merci.
Bonjour,
Pour un programme j'aurai besoin de faire :
Est ce qu'il existe une façon de faire ça ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part for(i=0;i<=1000;if(n=0){i=i+2;}else{i=i+4})
Merci.
Salut !
Pourquoi ne pas utiliser une boucle while ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 int i=0; while(i<1001) { if (n==0) i+=2; else i+=4; }
Si tu tiens au for :
Code : Sélectionner tout - Visualiser dans une fenêtre à part for(i=0; i<=1000; i=i+2+2*(n!=0))
Site : http://chgi.developpez.com
Pourquoi faire simple quand on peut faire compliqué ? (Jacques Rouxel)
En utilisant les ternaires
Les ternaires permettent de construire une condition if+else en une seule instruction
Code : Sélectionner tout - Visualiser dans une fenêtre à part for(i=0 ; i<=1000 ; (n==0) ? i+=2 : i+=4)
un exemple simple des ternaire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part (age>=18) ? printf("majeur") : printf("mineur");
Ok, merci pour vos réponses, elles sont toutes très bien, par contre mon but est de faire le programme le plus rapide possible, d'après vous quelle est la solution la plus rapide ?
Merci.
Je dirais "aucune".
La boucle reste la même. Dans tous les cas, il y a un test ; il ne s'écrit juste pas de la même manière. Celle de CGi est peut-être un poil plus lente : il y a une multiplication.
La seule façon de vérifier est de comparer l'assembleur généré.
Il n' y a pas de grande différence entre la vitesse d'exécution d'un while et celle d'un for, ou alors cette différence est légère. Après, tout dépend sur quel genre de processeur tu travailles, mais en général ce n'est pas la principale source de ralentissement d'un programme.d'après vous quelle est la solution la plus rapide ?
Si tu code en c tu peut facilement évaluer la vitesse d’exécution en ms avec time.h
exemple:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 clock_t debut=clock(); //bloque d'instructions dont tu veux évaluer le temps d'execution clock_t fin=clock(); //on affiche la différence entre début et fin en s (ex: 1.33) printf("%f", (float)(fin-debut)/1000);
Site : http://chgi.developpez.com
Pourquoi faire simple quand on peut faire compliqué ? (Jacques Rouxel)
D'où le "un poil"
Clairement, le choix parmi les boucles proposées n'aura quasiment aucune influence sur les performances.
for est souvent utilisé pour des parcours "pas à pas".
Donc dans ce cas là, je recommanderais l'utilisation d'une boucle while pour améliorer la lisibilité du code.
Je me méfierais de cette méthode :
- les résultats dépendent beaucoup de ce qui s'exécute sur l'ordinateur ;
- il vaut mieux mettre le bloc d'instruction dans une boucle pour limiter la marge d'erreur.
Dans un petit code comme celui-ci, il vaut mieux regarder le code assembleur généré.
Question bête d'ou viens le n?
A priori, s'il ne change pas dans la boucle autant le sortir du calcul avec une solution du genre
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 int step = ( n == 0 ? 2 : 4); int i = 0; while ( i < 1001) { i += step; }
bazar: http://www.improetcompagnie.com/publ...ctacles-6.html
BÉPO la disposition de clavier francophone, ergonomique et libre: http://bepo.fr/wiki/Accueil
Emacs Wiki: http://www.emacswiki.org/
En attente de ce que produira: http://www.pushmid.com
L'idée pour être plus précis est de faire des calculs sur les nombres premiers, sachant que les nombres premiers finissent toujours pas 1,3,7 ou 9 je voulais faire des sauts de valeurs différentes pour éviter de faire des calculs sur des nombres dont on sait qu'ils ne sont pas premiers,
donc les saut dans la boucle sont +2, +4, +2, +2.
ça permet d'éviter des milliards de calculs quand on arrive à des nombres de plusieurs milliards.
Quand je fais ça j'ai l'erreur suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 for(f=11 ; f<=1000 ; (g==2) ? f+=4 : f+=2) {...}
lvalue required as left operande of assignment
Mets des parenthèses :
Code : Sélectionner tout - Visualiser dans une fenêtre à part for(f=11 ; f<=1000 ; (g==2) ? (f+=4) : (f+=2))
Site : http://chgi.developpez.com
Pourquoi faire simple quand on peut faire compliqué ? (Jacques Rouxel)
Ok merci à tous, j'ai réussi à faire ce que je voulais.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager