Invariant de boucle

Discutez d'informatique ici !
Avatar de l’utilisateur
Rockleader
Habitué(e)
Messages: 2126
Enregistré le: 11 Oct 2011, 18:42

Invariant de boucle

par Rockleader » 05 Juin 2014, 16:59

Bonjour, connaissez vous une méthode permettant de trouver facilement l'invariant d'une boucle

Par exemple le programme suivant

[CODE]a=0;
while((a+1)*(a+1)0

L'invariant de cette boucle est a>=0 (ça on le trouve avec l'initialisation ok) et a²<N pourtant ce n'est pas ce que dit la condition de la boucle qui elle nous dit (a+1)²<=N
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !



Faraziel
Membre Relatif
Messages: 140
Enregistré le: 28 Avr 2014, 16:05

par Faraziel » 05 Juin 2014, 17:56

Dans ton code, je ne vois pas d'invariant, et pour être franc, je ne savais pas ce que c'était avant d'aller sur wikipédia donc je me trompe peut-être. Mais on peut empêcher le (a+1)² a chaque itération. Si tu te sert pas de ton N dans le while, l'utilisation d'une variable temporaire type :

tmp = sqrt(N)

et ensuite tu compare simplement a+1 a tmp

Code: Tout sélectionner
a=0;
tmp = sqrt(N);

while (a+1 <= N)
a++


le désavantage et l'utilisation d'un registre mémoire supplémentaire pour tmp.
Et ici on peut voir que tu es obligé de comparer le suivant si jamais tu veux récupérer la dernière valeur de a²<N

Une autre solution possible
Code: Tout sélectionner
a=1;
tmp = sqrt(N);

while (a <= N)
{
a++;
}

a--;


auquel cas on réduit encore le coup en calcul.

Avatar de l’utilisateur
Rockleader
Habitué(e)
Messages: 2126
Enregistré le: 11 Oct 2011, 18:42

par Rockleader » 05 Juin 2014, 18:35

Je pense que l'on ne parle pas de la même chose^^

Qu plus ets il y a bien un invariant puisque c'est un des exemples de mon cours^^

• Exemple
Correction partielle
/*N ;) IN*/
a=0;
/*a=0 */
Invariant : /* a²;)N ;) a;)0 */
while ( (a+1)*(a+1) ;)N )
/* a²;)N ;) a;)0 ;) (a+1)
2 ;)N */
a=a+1
/* a²;)N ;) a;)0 */
;
/* a²;)N ;) a;)0 ;) (a+1)² >N */
/* a²;)N < (a+1)²
*/
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !

Faraziel
Membre Relatif
Messages: 140
Enregistré le: 28 Avr 2014, 16:05

par Faraziel » 05 Juin 2014, 18:46

Effectivement on doit pas parler de la même chose je pense... Désolé de pas pouvoir t'aider, mon niveau de DUT 2eme année INFO IN suffit pas...

 

Retourner vers ϟ Informatique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 6 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite