Aller au contenu

Problème d'algo


Benaddar

Messages recommandés

Posté(e)

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.

Posté(e)

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).

Posté(e)

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.

Posté(e)

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

Posté(e)

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.

Posté(e)

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 :francais:

Posté(e)
=> solution = nombre - (nombre/10)*10 = 0

:reflechis:

Comment tu es pointillieux ! :p

Il sous entendait bien sûr la division euclidiènne :-D

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) :-D

Posté(e)

Ouais, bon, admettons... :reflechis:

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 :p

Posté(e)
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)

Posté(e)
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 :reflechis:

Ben floor, c'est la fonction qui fait ce que fait E en maths il se semble :p

Posté(e)

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 :mdr:)

Bon, c'est pas tout ça, mais je vais aller me faire un casse-dalle :)

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...