Formule de la boucle for

Discussion générale entre passionnés et amateurs de mathématiques sur des sujets mathématiques variés
sblouf
Messages: 2
Enregistré le: 08 Sep 2015, 04:08

Formule de la boucle for

par sblouf » 08 Sep 2015, 04:14

Bonjour,
Je voulais savoir si quelqu'un pouvait m'aider, je cherche désespérément la formule mathématiques qui correspond à la boucle "for" utilisée dans des algorithmes (en programmation par exemple).
Mais pas moyen de trouver autre chose que son "mode d'emploi"...
Cordialement, et merci d'avance.



jvf
Membre Naturel
Messages: 16
Enregistré le: 23 Juil 2015, 03:27

par jvf » 08 Sep 2015, 05:25

sblouf a écrit:Bonjour,
Je voulais savoir si quelqu'un pouvait m'aider, je cherche désespérément la formule mathématiques qui correspond à la boucle "for" utilisée dans des algorithmes (en programmation par exemple).
Mais pas moyen de trouver autre chose que son "mode d'emploi"...
Cordialement, et merci d'avance.


Bonjour,

Une boucle "for" utilisé dans la plupart des langages de programmation, (foreach avec Perl, mais c'est exactement pareil) est nommé boucle itérative.

Donc je pense que si tu cherches quelque chose comme "mathématiques boucle itérative" tu devrais commencer à trouver des infos.

Je dois t'avouer que je pratique régulièrement sans m'être demandé ce qu'il y avait derrière... :zen: mais maintenant que tu poses la question, je vais regarder ça différemment.

Bonne chance.

Avatar de l’utilisateur
chan79
Membre Légendaire
Messages: 10330
Enregistré le: 04 Mar 2007, 20:39

par chan79 » 08 Sep 2015, 15:52

sblouf a écrit:Bonjour,
Je voulais savoir si quelqu'un pouvait m'aider, je cherche désespérément la formule mathématiques qui correspond à la boucle "for" utilisée dans des algorithmes (en programmation par exemple).
Mais pas moyen de trouver autre chose que son "mode d'emploi"...
Cordialement, et merci d'avance.

Salut
Je n'ai pas la réponse.
Juste un petit truc qui m'a surpris les premières fois.
Lorsqu'on exécute par exemple plusieurs fois de suite le petit programme ci-dessous (3 premières lignes), les couples solutions ne sortent pas forcément dans le même ordre. Exemple avec deux exécutions. C'est du python3.
Image

Avatar de l’utilisateur
zygomatique
Habitué(e)
Messages: 6928
Enregistré le: 20 Mar 2014, 13:31

par zygomatique » 08 Sep 2015, 16:49

salut

très marrant ça ...

je dirais probablement que les compteurs internes ne sont pas remis à 0 pour des variables/objets non numériques

une question :

et si tu éteins ton ordi, le rallumes et fais tourner ton programme as-tu toujours la même chose ?

ou même simplement lorsque tu sors de Python et que tu y rerentres ?
Ce qui est affirmé sans preuve peut être nié sans preuve. EUCLIDE

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

par fatal_error » 08 Sep 2015, 19:32

hello,

@4chan je suis surpris par ton résultat.
d'après le source code de 2.7
http://svn.python.org/projects/python/trunk/Objects/dictobject.c

les hash storés dans la table d'un set (qui est un dic avec des dummy values) sont pas déterminés de manière aléatoire (mais itérativement + valeur de l'objet inséré). (du moins de ce que j'en ai compris)

en regardant le source code de 3.4.3 qui semble etre ta version, https://github.com/python/cpython/blob/3.4/Objects/dictobject.c
l'algorithme lookupdict ne semble que très peu avoir changé.

D'une manière générale, oui c'est admissible que l'ordre change car un set n'a pas vocation à etre ordonné.

Mais d'un point de vue implémentation c'est surprenant (en même tps, j'ai pas analysé plus que ca en détail si on contextualisait les hashs avec un temps ou une adresse mémoire (pour le premier élément inséré dans la table) )
la vie est une fête :)

Avatar de l’utilisateur
zygomatique
Habitué(e)
Messages: 6928
Enregistré le: 20 Mar 2014, 13:31

par zygomatique » 08 Sep 2015, 20:28

merci et tu peux traduire en français ... :ptdr:

j'avoue tristement ma plus totale médiocrité dans la compréhension de ce que tu as écrit ... :cry:


bon je plaisante ... mais ça n'est pas loin de la vérité .... :lol3:
Ce qui est affirmé sans preuve peut être nié sans preuve. EUCLIDE

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

par fatal_error » 08 Sep 2015, 20:37

quand tu écris {'bonjour', ...} c'est un set.
set c'est le nom de la structure de donnée.

ben quand tu stockes un tableau ['a','b',..], les éléments sont ordonnés:
le premier élem c'est 'a',
le second c'est 'b', ..

dans un set, les éléments ne sont pas ordonnés:
donc dire

le premier élem c'est 'bonjour',
le deuxieme élem c'est 'hello'

est aussi recevable que dire

donc le premier élem c'est 'hello',
le deuxieme élem c'est 'bonjour'

maintenant comment sont stockés les elem d'un set?
on prends bonjour, on calcule son hash : par exemple fzenflkzenf123
et on insere cet élement dans une table:
hash value
fzenflkzenf123 bonjour

puis lors de l'insertion du deuxieme element, on calcule son hash: hello->fzenflkzenfaaa
hash value
fzenflkzenf123 bonjour
fzenflkzenfaaa hello

(note: la représentation n'est pas exactement celle qui est utilisée pour le set, mais ca résume pas mal)

le but c'est de savoir si le hash de bonjour est tjs le meme d'une exécution à l'autre.
pour moi le code et les commentaires semblent dire que c'est le cas, pour chan ca n'est pas le cas.

Ma remarque sur la mémoire et time, c'est que on s'en sert pour générer de l'aléatoire (en tant que graine)

pour résumer, pour moi, le calcul du hash utilisé pour référencer les élements du set, est fait dans la fonction lookupdic et c'est en comprenant ce que fait cette fonction précisément (et si ses paramètres d'entré sont les mêmes d'une exec à l'autre) que l'on pourra déterminer pourquoi on observe l'aléatoire de chan
la vie est une fête :)

Avatar de l’utilisateur
chan79
Membre Légendaire
Messages: 10330
Enregistré le: 04 Mar 2007, 20:39

par chan79 » 08 Sep 2015, 21:27

Ah oui, en mettant des crochets à la place des accolades, c'est-à-dire en remplaçant "un dictionnaire" ( ou "set" ?) par une" liste", on obtient bien toujours la même chose.
Ce sont les clés utilisées dans le dictionnaire qui sont affectées à la variable de travail, et non les valeurs.

Image

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

par fatal_error » 08 Sep 2015, 21:38

ok, potentiellement c'est lié à la mémoire.

basé de http://stackoverflow.com/questions/793761/built-in-python-hash-function

le hash de l'objet est passé à lookupdic,
en testant l'interpréteur,
on observe bien ce qui est suggéré.

du coup lors de la création de {'test',...}
si 'test' associe un PyObj de type string (je connais pas python), alors le hash appliqué sur PyObjva varier d'une exec à l'autre (car les PyObj auront une adresse mémoire différente d'où des hashs différents)

il faudrait tester la supposition...

ce que je confirme,
en utilisant

sha d69ce575b98ea9f1835de66d3c0a4ce4a5afb79c
et appliquant
Code: Tout sélectionner
From c2cb4badb7aa8d3a65b547d3777c8d93a030bb11 Mon Sep 17 00:00:00 2001
From: someone
Date: Tue, 8 Sep 2015 21:48:41 +0200
Subject: [PATCH] uesless

---
 Objects/setobject.c | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/Objects/setobject.c b/Objects/setobject.c
index 03bb230..00dde6d 100644
--- a/Objects/setobject.c
+++ b/Objects/setobject.c
@@ -29,7 +29,7 @@
 
 #include "Python.h"
 #include "structmember.h"
-
+#include "stdio.h"
 /* Object used as dummy key to fill deleted entries */
 static PyObject _dummy_struct;
 
@@ -59,11 +59,21 @@ set_lookkey(PySetObject *so, PyObject *key, Py_hash_t hash)
     int cmp;
 
     entry = &so->table[i];
+
+
+
+{
+FILE *fp;
+fp=fopen("test.txt", "wa");
+fprintf(fp, "hash= %d\n", hash);
+fclose(fp);
+}
+
+
     if (entry->key == NULL)
         return entry;
 
     perturb = hash;
-
     while (1) {
         if (entry->hash == hash) {
             PyObject *startkey = entry->key;
--
1.9.1


le fichier génère un hash différent à chaque invocation de l'interpréteur de python avec pour ligne interprétée a={'test'}
la vie est une fête :)

sblouf
Messages: 2
Enregistré le: 08 Sep 2015, 04:08

par sblouf » 08 Sep 2015, 22:03

Merci pour ta réponce jvf, je vais aller creuser par là.
Et merci aux autres pour la petite anecdote du programme python, mais ce n'était pas vraiment la question. (mais j'ai quand même apris des trucs intéressants) :++:

Joker62
Membre Transcendant
Messages: 5028
Enregistré le: 24 Déc 2006, 20:29

par Joker62 » 09 Sep 2015, 17:21

Hello,

Le problème apparaît en effet avec IDLE.
Lorsque l'on utilise Pyzo, le problème n'apparaît pas.

 

Retourner vers ⚜ Salon Mathématique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 12 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