Pour le fun, j'ai essayé en GW-Basic (DosBox sous Linux) ... Ya des trucs qui ne marchent pas !
CSR qui n'a pas d'équivalent en GW-Basic par exemple ou bien la fonction INT qui ne renvoie que l'entier le plus petit et pas le plus proche (FIX, CINT ou CLNG ne donnent pas les bons résultats) ou encore la fonction FRAC qui n'existe pas ..
Alors, le programme devient ça, après mûre réflexion et avec obligation de passer en double précision sinon l'affichage avec de grands nombres devient incohérent à cause de ^E. Et puis, je me suis aussi amusé à réduire l'affichage des résultats intermédiaires dans une seule boucle sans faire les tests sur la longueur du nombre
Code : Tout sélectionner
100 ' Division Euclidienne
110 ' NCDE: Nombre de chiffres du dividende
120 ' NCDR: Nombre de chiffres du diviseur
130 ' NCQT: Nombre de chiffres du quotient
140 CLS:INPUT "Dividende:",DIVID#
150 IF DIVID#<1 THEN END 'Ça suffit, on a assez fait mumuse !
160 INPUT "Diviseur:",DIVIS#
170 IF DIVIS#=0 OR DIVID#<DIVIS# THEN GOTO 100
180 DIVID#=INT(DIVID#)
190 DIVIS#=INT(DIVIS#)
200 QUOT#=INT(DIVID#/DIVIS#)
210 REST#=DIVID#-(DIVIS#*QUOT#)
220 PRINT:PRINT
230 PRINT DIVID#;"divise par";DIVIS#;"=";QUOT#;"reste ";REST#
240 NCQT=1
250 IF QUOT#>=10 THEN NCQT=2
260 FOR I=2 TO 9
270 IF (10^I)<QUOT# THEN NCQT=I+1 ELSE GOTO 290
280 NEXT I
290 NCDE=1
300 IF DIVID#>=10 THEN NCDE=2
310 FOR I=2 TO 9
320 IF (10^I)<DIVID# THEN NCDE=I+1 ELSE GOTO 340
330 NEXT I
340 NCDR=4
350 IF DIVIS#>=10 THEN NCDR=5
360 FOR I=2 TO 9
370 IF (10^I)<DIVIS# THEN NCDR=I+4 ELSE GOTO 390
380 NEXT I
390 FOR I=NCQT TO 1 STEP -1
400 CHIF#(I)=INT((QUOT#/(10^I)-INT(QUOT#/(10^I)))*10+1*(10^-I)) ' l'ajout de 1*(10^-I) c'est pour forcer INT à renvoyer le bon résultat
410 NEXT I
420 PRINT:PRINT
430 RESU#=DIVID#
440 U$=STRING$(NCDE+NCDR-2,"#")
450 PRINT USING U$;RESU#;
460 PRINT " |";DIVIS#
470 PRINT SPC(NCDE+NCDR-1);"|";STRING$(NCQT+2,"-")
480 FOR I=NCQT TO 2 STEP -1
490 PROD#=DIVIS#*CHIF#(I)*(10^(I-1))
500 RESU#=RESU#-PROD#
510 U$=STRING$(NCDE-I+NCDR,"#")
520 PRINT USING U$;INT(10*(RESU#/(10^(I-1))));
530 PRINT SPC(I-1);"|";
540 IF I=NCQT THEN PRINT QUOT# ELSE PRINT
550 NEXT I
560 I=1
570 PROD#=DIVIS#*CHIF#(I)*(10^(I-1))
580 RESU#=RESU#-PROD#
590 U$=STRING$(NCDE-2+NCDR,"#")
600 PRINT USING U$;INT((RESU#/(10^(I-1))));
610 PRINT SPC(I);"|";
620 IF NCQT<2 THEN PRINT QUOT#
630 PRINT:PRINT
640 PRINT:PRINT "Appuyez sur une touche"
650 Z$=INPUT$(1)
660 IF Z$=CHR$(27) THEN END 'Ça suffit, on a assez fait mumuse !
670 GOTO 100
Si quelqu'un veut bien essayer ... pour voir s'il ne reste pas un ou deux bugs.
J'ai fait la même chose pour QBasic mais sans les numéros et en utilisant la sortie de boucle avec EXIT FOR. Il y a aussi la possibilité de créer la fonction Frac. Je peux mettre cette version QBasic à disposition.