September 22, 200520 yr Bonjour, je planche sur un problème depuis quelques temps (j'aide quelq'un). Le sujet: Ecrire l'algorithme qui trouve le chiffre des unités d'un nombre entier donné Sachant que ce quelqu'un n'a pas vu l'incrémentation ni la décrémentation. Seulement les instructions de base. Merci de donner quelques indices.
September 22, 200520 yr En quel langage ? Si le langage le permet, il suffit de faire "unité= nombre % 10". % étant l'opérateur modulo (reste de la division, ici par 10).
September 22, 200520 yr L'agorithmie, ce n'est pas un langage, c'est une façon de procéfer. L'algo, ça peut être : prendre le reste de la division par 10 de ce nombre. Après en C ou en php ou dans la plupart des langages, c'est nombre%10.
September 22, 200520 yr En pseudo-langage, et en utilisant un algo simple au lieu de l'opérateur modulo, ça pourrait donner un truc comme : nombre = 328; Tant que nombre > 10 : nombre = nombre - 10; ecrire le nombre
September 22, 200520 yr Un petit peu long ton truc : si tu prends 3 milliards, tu vas attendre longtemps avant d'avoir l'unité. Si tu manipules que des entiers, tu peux tenter ceci : x = nombre / 10; solution = nombre - x * 10; C'est l'équivalent du modulo, mais il suppose que '/' soit une division entière.
September 22, 200520 yr raté, ton truc ça donne zéro à tous les coups... x = nombre / 10; solution = nombre - x * 10 => solution = nombre - (nombre/10)*10 => solution = nombre - nombre => solution = 0 Je maintiens que mon algo fonctionne mieux
September 22, 200520 yr => solution = nombre - (nombre/10)*10 = 0 Comment tu es pointillieux ! Il sous entendait bien sûr la division euclidiènne solution = nombre - 10*E(nombre/10) (avec E(x) partie entière (tronquée) de x) Au moins de cette façon, on a un aglo qui fonctionne en temps constant o(1), ce qui évite d'avoir à réfléchir aux limites justement (les grands nombres pour le coup)
September 22, 200520 yr Ouais, bon, admettons... Mais bon, le but semblait ici d'appredre les bases de l'algorithmie, c'est-à-dire surtout l'art d'enchaîner boucles et tests. Si on veut rire y'a aussi : nombre - (floor(nombre/10) * 10) Chuis sûr qu'on peut faire un concours sur les algos les plus tordus même
September 22, 200520 yr x = nombre / 10;solution = nombre - x * 10; +1 ya pas mieux Sinon pour manipuler le tant que ------------------------------------------ var = 0 Tant que (nombre - var) mod 10 différent de 0 alors var = var + 1 Solution = var Ce qui donne en récursif: ------------------------------------------ fonction CherchUnit (nombre n, var v) début Si (n - v) mod 10 différent de 0 alors CherchUnit(n, var +1) Sinon Solution = v fin Premier appel => CherchUnit(LeNombre, 0) Edited September 22, 200520 yr by Jiriki
September 22, 200520 yr Si on veut rire y'a aussi : nombre - (floor(nombre/10) * 10)Chuis sûr qu'on peut faire un concours sur les algos les plus tordus même Ben floor, c'est la fonction qui fait ce que fait E en maths il se semble
September 22, 200520 yr Euh oui c'est vrai ! (en fait j'étais parti sur une autre idée que j'ai resimplifiée, et au final je retombe là-dessus ) Bon, c'est pas tout ça, mais je vais aller me faire un casse-dalle :)
Archived
This topic is now archived and is closed to further replies.