Le pub des programmeurs
- 1 925 réponses
- 117 participants
- 123 272 vues
- 130 followers
Anonyme
521410
Sujet de la discussion Posté le 25/08/2005 à 17:21:03Le pub des programmeurs
Salut y a des programeurs sur AF si oui vous bossez sous quoi ?
miles1981
8352
Je poste, donc je suis
Membre depuis 20 ans
1711 Posté le 08/02/2018 à 15:34:35
Oui en Python, ctypes fait le job.
Audio Toolkit: http://www.audio-tk.com/
Truelle est un manchot
10420
Drogué·e à l’AFéine
Membre depuis 14 ans
1712 Posté le 01/03/2018 à 21:16:16
Bon merki avec beauuuucoup de retard au fait pour les réponses!
Juste pour savoir, il y en a qui touche un peu à QtQuick/QML?
Juste pour savoir, il y en a qui touche un peu à QtQuick/QML?
Dr Pouet
52037
Membre d’honneur
Membre depuis 20 ans
1713 Posté le 25/07/2018 à 21:40:58
Pour initier le sujet et en partant de cette (excellente) vidéo sur Fibonacci :
Je propose :
Testable par simple copier-coller ici :
https://repl.it/languages/python
La dernière ligne appelle la fonction qui va résoudre le problème. Toutes les lignes avant sont la définition de la fonction.
Avec comme paramètres pour la fonction :
- nombre de disques à déplacer
- nom de la pile de départ
- nom de la pile d'arrivée
- nom de la pile servant de "pivot"
Spoiler - Cliquer ici pour lire la suite
Citation de Dr :
Il monte et descend les escaliers, comme un con. Et puis pouf, au moment où on ne s’y attend pas, et sans s’en apercevoir, on est dans la récursivité et Fibonacci. Il est fort !
Je ne sais pas pour quel age, mais ça doit aussi pouvoir intriguer des enfants...
Citation de El :
J'aimerais bien trouver un truc aussi limpide pour expliquer la résolution des tours de Hanoi par algorithme récursif
Je propose :
def hanoi(n,dep,arr,piv):
if n == 1:
print "Déplacer un disque de "+dep+" vers "+arr
else:
hanoi(n-1,dep,piv,arr)
hanoi(1,dep,arr,piv)
hanoi(n-1,piv,arr,dep)
hanoi(3,'a','c','b')
Testable par simple copier-coller ici :
https://repl.it/languages/python
La dernière ligne appelle la fonction qui va résoudre le problème. Toutes les lignes avant sont la définition de la fonction.
Avec comme paramètres pour la fonction :
- nombre de disques à déplacer
- nom de la pile de départ
- nom de la pile d'arrivée
- nom de la pile servant de "pivot"
[ Dernière édition du message le 25/07/2018 à 21:55:50 ]
Dr Pouet
52037
Membre d’honneur
Membre depuis 20 ans
1714 Posté le 25/07/2018 à 21:43:26
Citation de srak :
Il n'y a pas une règle du genre: pas le droit de poser un disque plus grand sur un disque plus petit?
Tout à fait. Mais c’est pris en compte. On enlève les n-1 au-dessus de la pile, on déplace le plus grand, on remet la pile au-dessus. Donc ça marche.
On peut vérifier avec des petites valeurs de n !
Avec 4, ça fait précisément le gif du Migo (en moins joli) :
Spoiler - Cliquer ici pour lire la suite
Déplacer un disque de a vers b
Déplacer un disque de a vers c
Déplacer un disque de b vers c
Déplacer un disque de a vers b
Déplacer un disque de c vers a
Déplacer un disque de c vers b
Déplacer un disque de a vers b
Déplacer un disque de a vers c
Déplacer un disque de b vers c
Déplacer un disque de b vers a
Déplacer un disque de c vers a
Déplacer un disque de b vers c
Déplacer un disque de a vers b
Déplacer un disque de a vers c
Déplacer un disque de b vers c
Déplacer un disque de a vers b
Déplacer un disque de a vers c
Déplacer un disque de b vers c
Déplacer un disque de a vers b
Déplacer un disque de c vers a
Déplacer un disque de c vers b
Déplacer un disque de a vers b
Déplacer un disque de a vers c
Déplacer un disque de b vers c
Déplacer un disque de b vers a
Déplacer un disque de c vers a
Déplacer un disque de b vers c
Déplacer un disque de a vers b
Déplacer un disque de a vers c
Déplacer un disque de b vers c
[ Dernière édition du message le 25/07/2018 à 21:46:50 ]
Dr Pouet
52037
Membre d’honneur
Membre depuis 20 ans
1715 Posté le 25/07/2018 à 21:52:49
Et ça explique aussi l'équation donnée par 8oris :
Citation de 8oris :
Un classique :
U(n) (le nombre de mouvements) est égal à 2U(n−1)+1
[ Dernière édition du message le 25/07/2018 à 21:53:16 ]
Anonyme
30851
1716 Posté le 26/07/2018 à 08:01:44
Citation :
def hanoi(n,dep,arr,piv):
if n == 1:
print "Déplacer un disque de "+dep+" vers "+arr
else:
hanoi(n-1,dep,piv,arr)
hanoi(1,dep,arr,piv)
hanoi(n-1,piv,arr,dep)
Une fonction récursive ? C'est pas interdit ca normalement ?
Dr Pouet
52037
Membre d’honneur
Membre depuis 20 ans
1717 Posté le 26/07/2018 à 08:33:23
Ah bah non ! Surtout dans un cas comme celui-là, ce serait dommage de se priver.
Par contre, il faut veiller à ne pas partir en boucle infinie. Et puis si on prévoit de l’appliquer sur de grandes valeurs, ce n’est pas le plus efficace (quand elle s’appelle plusieurs fois, comme ici : deux fois).
Par contre, il faut veiller à ne pas partir en boucle infinie. Et puis si on prévoit de l’appliquer sur de grandes valeurs, ce n’est pas le plus efficace (quand elle s’appelle plusieurs fois, comme ici : deux fois).
EraTom
2282
AFicionado·a
Membre depuis 13 ans
1718 Posté le 26/07/2018 à 08:50:52
Interdit par quoi ?
L'écueil des fonctions récursives c'est l'explosion de l'occupation mémoire : dans l'exemple donné il y aura U(n) appels de la fonction, avec à chaque fois une sauvegarde du contexte et un passage d'argument (et donc une nouvelle allocation) avant de tomber sur la condition d'arrêt puis de "fermer" les fonctions.
Un autre écueil possible est de dépasser les tailles max des types utilisé.
Par exemple pour le factoriel de n en C :
On peut bien sûr choisir un long en argument de sortie, mais on ne fait que repousser le problème sans réellement mettre de garde fou.
Enfin... Là je noirci le tableau. Les fonctions récursives sont aussi très pratiques pour parcourir un arbre ou un graphe.
L'écueil des fonctions récursives c'est l'explosion de l'occupation mémoire : dans l'exemple donné il y aura U(n) appels de la fonction, avec à chaque fois une sauvegarde du contexte et un passage d'argument (et donc une nouvelle allocation) avant de tomber sur la condition d'arrêt puis de "fermer" les fonctions.
Un autre écueil possible est de dépasser les tailles max des types utilisé.
Par exemple pour le factoriel de n en C :
int factoriel (int n)
{
if (n < 0) {
exit (EXIT_FAILURE);
}
elseif ( n == 0) {
return 1;
}
else {
return n * factoriel (n - 1);
}
}
On peut bien sûr choisir un long en argument de sortie, mais on ne fait que repousser le problème sans réellement mettre de garde fou.
Enfin... Là je noirci le tableau. Les fonctions récursives sont aussi très pratiques pour parcourir un arbre ou un graphe.
Jimbass
11603
Drogué·e à l’AFéine
Membre depuis 18 ans
1719 Posté le 26/07/2018 à 08:51:54
Dans un système embarqué, la récursion c'est verboten !
Parce que ca consomme beaucoup de mémoire sur la pile, et tu ne sais pas combien à l'avance. Et si tu as des contraintes temps-réel, c'est plus dur de savoir précisément combien de temps ça prend.
Quant au type 'long', attention : sa taille dépend des systèmes, et sur la plupart des bécanes il fait la même taille qu'un 'int'.
Pour être sûr d'avoir un mot 64 bits, il faut utiliser 'long long'.
Ou mieux encore, utiliser stdint.h
Parce que ca consomme beaucoup de mémoire sur la pile, et tu ne sais pas combien à l'avance. Et si tu as des contraintes temps-réel, c'est plus dur de savoir précisément combien de temps ça prend.
Quant au type 'long', attention : sa taille dépend des systèmes, et sur la plupart des bécanes il fait la même taille qu'un 'int'.
Pour être sûr d'avoir un mot 64 bits, il faut utiliser 'long long'.
Ou mieux encore, utiliser stdint.h
Musikmesser 2013 - Bullshit Gourous - Tocxic Instruments - festivals Foud'Rock, Metal Sphère et la Tour met les Watts
[ Dernière édition du message le 26/07/2018 à 08:56:14 ]
Dr Pouet
52037
Membre d’honneur
Membre depuis 20 ans
1720 Posté le 26/07/2018 à 08:57:30
Citation de Jimbass :
Dans un système embarqué, la récursion c'est verboten !
Oui mais là on est loin des programmes pour débutants ! (« Système embarqué » = avion, satellite...)
Et il y a justement une interview dans le Monde du créateur de Python. Qui pense d’ailleurs prendre sa retraite prochainement pour son activité de pilotage des évolutions du langage :
https://abonnes.lemonde.fr/pixels/article/2018/07/25/je-n-imaginais-pas-que-python-connaitrait-un-tel-succes_5335917_4408996.html
- < Liste des sujets
- Charte