aspexplorer (aspexplorer) wrote,
aspexplorer
aspexplorer

Il est temps que je change de boulot

Lorsque voici treize ans presque jour pour jour, je montais à Paris pour y commencer ma vie professionnelle, je fuis accueilli dans les locaux de ma bîte de service, dans le 9e arrondissement, en compagnie de deux autres impétrants aux dents longues et aux cravates en bataille, désireux de faire carrière dans la jongle impitoyable de l'informatique de gestion. Enfin, quand je parle de cravate, ça valait pour moi et mon grassouillet collègue, mais pas pour le troisième, qui était du genre féminin. Autre singularité, contrairement à nous deux, ce n'était pas du tout une geek - plutôt le genre punk assagie en fait. Du coup, elle n'avait aucune notion même vague de programmation, et nous nous mîmes en devoir de l'y initier.

Pour l'accompagner dans son premier programme cobol, nous lui posâmes donc une colle dont tous deux connaissions la réponse. La colle est la suivante : soient deux variables A et B, contenant respectivement, pour fixer les esprits, les valeurs 7 et 15. Comment inverser les valeurs ?

Un naïf connaissant l'opération d'affectation pseudo-coderait alors :
(A=7, B=15)
A := B (A=15, B=15)
B := A (A=15, B=15)
Ce qui conduit bien sûr à l'écrasement de l'une des variables par l'autre, c'est un exemple typique de bug.

Bizarrement, mademoiselle punkette nous scotcha en flairant tout de suite l'arnaque et en trouvant toute seule la solution, consistant à passer par une variable intermédiaire C :
(A=7, B=15, C=whatsofuck)
C := A (C=7, A=7, B=15)
A := B (C=7, A=15, B=15)
B := C (C=7, A=15, B=7)
On avait l'air bien cons.

Depuis que je fais de la programmation, c'est à dire depuis pas loin de trente ans, j'ai toujours tenu pour acquis que c'était la seule méthode pour swaper deux variables, et en tout cas, j'en étais venu à considérer comme inévitable le recours à la variable intermédiaire C, tout comme sont inévitables les pertes thermiques dans un moteur ou les affaires de dopage du Tour de France.

Or dans le dernier numéro de "Pour la Science", dans l'habituelle rubrique de curiosités mathématiques de fin de journal, j'ai découvert que j'étais un con. Oui, il est possible d'échanger deux variables sans avoir recours à une variable intermédiaire :
(A=7, B=15)
A := B - A (A=8, B=15)
B := B - A (A=8, B=7)
A := A + B (A=15, B=7)
Ce genre de chose s'appelle du calcul "in situ". Et là je me sens encore plus con.

-oOo-

Need moar data storage. Buy extra HD please...
Tags: science
Subscribe
  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 50 comments