Nombres factoriels
GW-Basic, utilisé par PC-Basic
Programme avec Texte Seulement
PC-BASIC
L'expression mathématique 5! ne se prononce pas "CINQ!" - le point d'exclamation signifie factoriel. 5! se déroule à cinq multiplié par quatre multiplié par trois multiplié par deux multiplié par un, ce qui équivaut à cent vingt.
Les factorielles sont utiles pour les problèmes de comptage. Par exemple, le nombre de façons de placer cinq personnes dans une file est égal à 5!, puisque cinq personnes possibles pourraient être placées en premier dans la file, quatre personnes pourraient être placées en deuxième, et ainsi de suite.
Un programme informatique pour évaluer les factorielles, comme 5!, est facile à créer. Mais un peu plus complexe, et plus intéressant ? Un programme qui fonctionne à l'envers, arrivant au nombre factoriel (si un tel nombre existe).
Par exemple, à l'invite, entrez le nombre 120, ainsi que les limites inférieure et supérieure du nombre entier dans lesquelles effectuer la recherche. En un éclair, l'ordinateur arrive au résultat : 5! Exécutez à nouveau le programme, cette fois en entrant 130 (avec les limites) - mais il n'y a pas un tel nombre factoriel.
Une fois les bornes supérieure et inférieure entrées (voir lignes 60 et 70), l'algorithme a les limites de sa recherche : une boucle FOR/NEXT externe parcourt les bornes, tandis qu'une boucle FOR/NEXT interne calcule les factorielles, vérifiant méthodiquement pour voir s'il y a une correspondance.
Le plus gros problème avec le programme a beaucoup plus à voir avec l'interpréteur GW-BASIC qu'avec le code lui-même : il y a une limite à la taille d'un nombre que vous êtes autorisé à saisir. De plus, plus la borne supérieure est élevée, plus l'algorithme mettra du temps à effectuer la recherche !
10 KEY OFF:SCREEN 9:COLOR
15,0:CLS
26 PRINT "Factoriel - trouvera quel nombre est le résultat d'un
factoriel."
30 PRINT "Mais la plupart des nombres ne sont pas un nombre
factoriel:"
40 PRINT "En forme x! = votre numéro."
50 PRINT:INPUT "Votre
Nombre=";X:NUM=1
60 INPUT"Bornes : inférieures: ";LO
70 INPUT"Bornes :
supérieur :";HI
80 IF X=1 THEN PRINT"= 1! ou 0!":END
90 IF X=2 THEN
PRINT"= 2!":END
100 FOR SEAR=LO TO HI STEP 1
110 FOR LOOK=SEAR TO 1 STEP
-1
120 NUM=NUM*LOOK
130 NEXT LOOK
140 IF NUM=X THEN PRINT "= ";SEAR;"!":END
150 NUM=1:NEXT SEAR
160 PRINT"Pas de nombre factoriel!"