Division Euclidienne

Les derniers trucs auxquels vous avez joué, les derniers ordinateurs que vous avez bidouillés.

Modérateur : Politburo

Répondre
Ben
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 1072
Inscription : 21 août 2016 19:04

Division Euclidienne

Message par Ben » 10 déc. 2016 20:13

Je viens de passer quelques heures sur le C-128, pour programmer la division euclidienne, mais avec tout le détail, comme quand on les faisait à l'école :-)

C'est le topic de Thierry Loiseau qui m'a inspiré (A revoir ici)

Exemple:

Code : Tout sélectionner

                              division euclidienne
                              --------------------
dividente=? 125689
diviseur=? 125
quotient= 1005
reste= 64


voulez-vous le detail (o/n)

   125689 ! 125
   0      +-------
  ---     ! 001005
   12
    0
   ---
   125
   125
  -----
     06
      0
     ---
      68
       0
      ---
      689
      625
     -----
       64
On s'amuse comme on peut ;-)


Le code, si ça intéresse quelqu'un:

Code : Tout sélectionner

10 scnclr:fast
20 print tab(30);"division euclidienne"
30 print tab(30);"--------------------"
40 input "dividente=";d1
50 input "diviseur=";d2
60 if d2=0 then 10
70 if d2>=d1 then 10
80 qo=int(d1/d2):re=d1-(d2*qo)
90 print "quotient=";qo
100 print "reste="re
110 print "qqvoulez-vous le detail (o/n)"
120 get a$:if a$="o" then 150
130 if a$="n" then 10
140 goto 120
150 scnclr
160 ld=1+int(log(d1)/log(10))
170 dt=d1/10^ld
180 x=3:y=0:x1=ld+5:r3=0:cp=0
190 print tab(2);d1;"!";d2
200 print tab(4+ld);"+-------":print tab(4+ld);"!"
210 i=int(dt*10):dt=(dt*10-i)+0.0000001:i=i+(r3*10)
220 if cp>0 then char 1,x,y,right$(str$(i),1)
230 y=y+1
240 r1=int(i/d2):x1=x1+1:char 1,x1,2,right$(str$(r1),1)
250 r2=r1*d2:gosub 330:char 1,x-len(r$)+1,y,r$
260 y=y+1:for a=0 to len(r$)+1:char 1,x-len(r$)+a,y,"-":next a
270 y=y+1:r3=i-r2:gosub 370:char 1,x-len(r$)+1,y,r$
280 cp=cp+1:x=x+1
290 if cp<ld then 210
300 get a$:if a$="" then 300
310 goto 10
320 rem calcul de la longueur de r2
330 r$=str$(r2)
340 r$=right$(r$,len(r$)-1)
350 return
360 rem calcul de la longueur de r2
370 r$=str$(r3)
380 r$=right$(r$,len(r$)-1)
390 return

Avatar de l’utilisateur
Marge
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4241
Inscription : 01 oct. 2008 14:39
Localisation : En bas, tout au fond à gauche.

Re: Division Euclidienne

Message par Marge » 10 déc. 2016 23:28

Bonsoir,

Oui, très bien.

Bien sûr, ça m'intéresse, notamment pour montrer l'utilité de ces machines à mes gosses ! Merci à toi (et à Thierry), je vais tenter de l'adapter à mon Sharp Pocket PC-1403.

(il faudrait ajouter des questions et des punitions s'ils se trompent, genre "tu dois donner ton argent de poche du mois à papa pour garantir la survie de ces engins si utiles à ton apprentissage, hein...". Non, je blague, mon Ouaf ne le tolérerait pas !) :wink:
Quoique, pour blaguer... :D
3 hommes, 3 demis, un 3a... Magnéto, Serge !

« Boris », c'est juste Maurice enrhumé.

Ben
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 1072
Inscription : 21 août 2016 19:04

Re: Division Euclidienne

Message par Ben » 11 déc. 2016 18:45

Content que ce programme puisse servir à quelqu'un ;-) Tiens moi au courant de ton adaptation

Répondre

Revenir vers « A quoi t'as joué hier ? »