Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Menu - Fonctions Mathematiques | |
| | Auteur | Message |
---|
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Menu - Fonctions Mathematiques Dim 23 Déc 2012 - 3:39 | |
| J'ai mis à jour mon programme avec le calcul sur les fractions et le début des fonctions proposée par Nardo et Papydall. J'ajouterais les autres fonctions un de ces jours - Code:
-
' -------------------------------------------------------------------- ' Quelques fonctions mathématiques: ' - Liste des nombres premiers entre 2 nombres ' - Calcul du PGCD de 2 nombres entiers ' - Calcul du PPCM de 2 nombres entiers ' - Calcul de la suite de Fibonacci ' -------------------------------------------------------------------- ' Ecrit en Basic Panoramic 0.9.24 le 23/12/2012 par Jicehel ' avec des fonctions fournies par Papydall et Nardo26 ' --------------------------------------------------------------------
' -------------------------------------------------------------------- ' Initialisation ' LABEL recommencer, quitter, verifier, annuler, Calculer2Fractions, TraiterAutreFraction LABEL chercher, calculerPGCD, calculerPPCM, simplifierFraction, calculerFactoriel, clic_operation LABEL calculerFibonacci LABEL M_nbpremiers, M_PGCD, M_PPCM, M_Simplifier, M_Factoriel, M_Calculer2Fractions, M_Fibonacci DIM F,G,I%,J,K,Temp, SMALL,LARGE,S$, PGCD%,PPCM%, operation$
' -------------------------------------------------------------------- ' Interface utilisateur, demande du message à traduire ' CAPTION 0, "FONCTIONS MATHEMATIQUES"
' Création du menu pour choisir la fonction à lancer MAIN_MENU 10 SUB_MENU 20 : PARENT 20,10 : CAPTION 20, "Choix de la fonction à lancer" SUB_MENU 21 : PARENT 21,20 : CAPTION 21, "Trouver les chiffres premiers entre 2 bornes" : ON_CLICK 21,M_nbpremiers SUB_MENU 22 : PARENT 22,20 : CAPTION 22, "Trouver le PGCD de 2 nombres entiers" : ON_CLICK 22,M_PGCD SUB_MENU 23 : PARENT 23,20 : CAPTION 23, "Trouver le PPCM de 2 nombres entiers" : ON_CLICK 23,M_PPCM SUB_MENU 24 : PARENT 24,20 : CAPTION 24, "Calculer la suite de Fibonacci" : ON_CLICK 24,M_Fibonacci SUB_MENU 25 : PARENT 25,20 : CAPTION 25, "Calculer le factoriel d'un entier" : ON_CLICK 25,M_Factoriel SUB_MENU 30 : PARENT 30,10 : CAPTION 30, "Fractions" SUB_MENU 31 : PARENT 31,30 : CAPTION 31, "Simplifier une fraction de 2 entiers" : ON_CLICK 31,M_Simplifier SUB_MENU 32 : PARENT 32,30 : CAPTION 32, "Effectuer une opération (+;-;*;/)" : ON_CLICK 32,M_Calculer2Fractions
' Création des fenêtres utilisées FORM 100:HIDE 100 : LEFT 100,100:TOP 100,100:WIDTH 100,400:HEIGHT 100,200 COMMAND_TARGET_IS 100 ALPHA 110:LEFT 110,10 :TOP 110,10 EDIT 120:LEFT 120,10 :TOP 120,30:WIDTH 120,100 ALPHA 115:LEFT 115,10 :TOP 115,70 EDIT 125:LEFT 125,10 :TOP 125,90: WIDTH 125,100 BUTTON 130:LEFT 130,40 :TOP 130,130:CAPTION 130,"LANCER" BUTTON 140:LEFT 140,140:TOP 140,130: WIDTH 140, 105 : CAPTION 140,"MENU PRINCIPAL": ON_CLICK 140, annuler BUTTON 150:LEFT 150,270:TOP 150,130: CAPTION 150,"QUITTER": ON_CLICK 150, quitter
FORM 200:HIDE 200 : LEFT 200,100:TOP 200,100:WIDTH 200,400:HEIGHT 200,160 COMMAND_TARGET_IS 200 ALPHA 210:LEFT 210,10 :TOP 210,10 ALPHA 220:LEFT 220,10 :TOP 220,30: WIDTH 220,280 BUTTON 230:LEFT 230,40 :TOP 230,60: CAPTION 230,"NOUVEAU" :ON_CLICK 230,recommencer BUTTON 240:LEFT 240,140:TOP 240,60 : WIDTH 240, 105 :CAPTION 240,"MENU PRINCIPAL": ON_CLICK 240, annuler BUTTON 250:LEFT 250,270:TOP 250,60: CAPTION 250,"QUITTER":ON_CLICK 250,quitter COMMAND_TARGET_IS 100 ON_CLOSE 100, annuler : ON_CLOSE 200, recommencer
' Fin END
M_nbpremiers: ' -------------------------------------------------------------------- ' Prépare les fenêtres pour la liste des nombres premiers ' HIDE 0 : CAPTION 100,"Liste des nombres premiers entre 2 nombres":CAPTION 110,"Indiquez la borne inférieure de la recherche :":CAPTION 115,"Indiquez la borne supérieure de la recherche :" ON_CHANGE 120,verifier : ON_CHANGE 125,verifier : ON_CLICK 130, chercher CAPTION 200,"NOMBRES PREMIERS TROUVES":CAPTION 210,"Liste des nombres premiers trouves :" GOSUB recommencer RETURN
M_Fibonacci: ' ****************************************************************************** ' Prépare les fenêtres pour calculer la suite de Fibonacci ' ' Informations issues de FIBO.BAS de PAPYDALL ' ****************************************************************************** ' Leonardo Fibonacci, mathématicien italien du XIII siècle a posé dans l'un de ' ses ouvrages le problème suivant : ' Un homme met un couple de lapins dans un lieu isolé de tous les côtés par un ' mur. Combien de couples obtient-on en un an si chaque couple engendre tous les ' mois un nouveau couple à compter du troisième mois de son existence ? ' On suppose que : ' au début du premier mois, il y a juste une paire de lapereaux ; ' les lapereaux ne procréent qu'à partir du troisième mois ; ' chaque mois, toute paire susceptible de procréer engendre effectivement une ' nouvelle paire de lapereaux ; ' la nourriture est abondante et les lapins ne meurent jamais. ' La suite de Fibonacci est donc strictement croissante. ' Les termes de cette suite sont appelés "Nombres de Fibonacci" ' ******************************************************************************
HIDE 0 : CAPTION 100,"Calcul de la suite de Fibonacci":CAPTION 110,"Entrer la valeur N (> 1)" HIDE 115 : HIDE 125 : ON_CHANGE 120,verifier : ON_CLICK 130, calculerFibonacci CAPTION 200,"NOMBRES PREMIERS TROUVES":CAPTION 210,"Liste des nombres premiers trouves :" GOSUB recommencer RETURN
calculerFibonacci: ' -------------------------------------------------------------------- ' Lance le calcul de la suiite de Fibonacci si N > 1 ' IF VAL(TEXT$(120)) < 2 MESSAGE "Le nombre entré doit être supérieur à 1" OFF_CHANGE 120 : TEXT 120, "" : ON_CHANGE 120,verifier ELSE HIDE 100 fibonacci(VAL(TEXT$(120))) CAPTION 200,"RESULTAT":CAPTION 210,"La valeur de la suite de Fibonacci pour N=" + TEXT$(120)+" est :" CAPTION 220, STR$(I%) SHOW 200 END_IF RETURN
' ****************************************************************************** SUB fibonacci(n) dim_local fib0,fib1,fib2,i fib0 = 0 : fib1 = 1 FOR i = 2 TO n fib2 = fib1 + fib0 fib0 = fib1 : fib1 = fib2 NEXT i I%=fib2 END_SUB ' ******************************************************************************
M_PGCD: ' -------------------------------------------------------------------- ' Prépare la fenêtre pour le calcul du PGCD ' HIDE 0 : CAPTION 100,"Calcul du PGCD (Plus Grand Commun Diviseur)" CAPTION 110,"Indiquez le premier nombre entier:":CAPTION 115,"Indiquez le second nombre entier :" ON_CHANGE 120,verifier : ON_CHANGE 125,verifier : ON_CLICK 130, calculerPGCD GOSUB recommencer RETURN
calculerPGCD: ' -------------------------------------------------------------------- ' Lance le calcule du PGCD ' HIDE 100 PGCD(VAL(TEXT$(120)),VAL(TEXT$(125))) CAPTION 200,"RESULTAT":CAPTION 210,"Le PGCD de "+TEXT$(120)+" et de "+TEXT$(125)+" est :" CAPTION 220, STR$(PGCD%) : SHOW 200 RETURN
' -------------------------------------------------------------------- ' La fonction qui effectue le calcul ' SUB PGCD(n1%,n2%) dim_local n3%,n4%,n5% n4% = n1% : n5% = n2% while n2% > 0 n3% = n1% : n1% = n2% : n2% = n3% - n1%* int(n3%/n1%) end_while PGCD% = n1% if PGCD% <> 0 then PPCM% = (n4%*n5%)/PGCD% END_SUB ' ------------------------------------------------------------------------------
M_PPCM: ' -------------------------------------------------------------------- ' Prépare les fenêtres pour le calcul du PPCM ' HIDE 0 : CAPTION 100,"Calcul du PPCM (Plus Petit Commun Multiple)" CAPTION 110,"Indiquez le premier nombre entier:":CAPTION 115,"Indiquez le second nombre entier :" ON_CHANGE 120,verifier : ON_CHANGE 125,verifier : ON_CLICK 130, calculerPPCM GOSUB recommencer RETURN
calculerPPCM: ' -------------------------------------------------------------------- ' Lance le calcul du PPCM ' HIDE 100 : PGCD(VAL(TEXT$(120)),VAL(TEXT$(125))) CAPTION 200,"RESULTAT":CAPTION 210,"Le PPCM de "+TEXT$(120)+" et de "+TEXT$(125)+" est :" CAPTION 220, STR$(PPCM%) : SHOW 200 RETURN
M_Simplifier: ' -------------------------------------------------------------------- ' Prépare la fenêtre pour la simplification de la fraction ' HIDE 0 : CAPTION 100,"Simplification d'une fraction de 2 entiers" CAPTION 110,"Indiquez le numerateur (entier):":CAPTION 115,"Indiquez le dénominateur (entier) :" ON_CHANGE 120,verifier : ON_CHANGE 125,verifier : ON_CLICK 130, simplifierFraction GOSUB recommencer RETURN
simplifierFraction: ' -------------------------------------------------------------------- ' Lance la simplification de l'équation ' IF VAL(TEXT$(125)) = 0 MESSAGE "Le dénominateur doit être non nul" OFF_CHANGE 125 : TEXT 125, "" : ON_CHANGE 125,verifier ELSE HIDE 100 J = VAL(TEXT$(120)) : K = VAL(TEXT$(125)) CAPTION 200,"RESULTAT":CAPTION 210,"L'équation simplifié de "+TEXT$(120) IF J=0 CAPTION 210, CAPTION$(210)+" divisé par un entier est :" CAPTION 220, "0" ELSE PGCD(J,K) CAPTION 210, CAPTION$(210)+" / "+TEXT$(125)+" est :" J = J/PGCD% : CAPTION 220, STR$(J) K = (K/PGCD%) : IF K > 1 THEN CAPTION 220, CAPTION$(220)+" / "+ STR$(K) END_IF SHOW 200 END_IF RETURN
M_Calculer2Fractions: ' -------------------------------------------------------------------- ' Prépare les fenêtres pour faire une opération entre n fractions ' HIDE 0 : CAPTION 100,"Saisie de la première fraction" CAPTION 110,"Indiquez le numerateur (entier):":CAPTION 115,"Indiquez le dénominateur (entier) :" ON_CHANGE 120,verifier : ON_CHANGE 125,verifier : ON_CLICK 130, TraiterAutreFraction GOSUB recommencer RETURN
TraiterAutreFraction: ' -------------------------------------------------------------------- ' Saisie de l'opération a effectuer et de la fraction à traiter ' IF VAL(TEXT$(125)) = 0 MESSAGE "Le dénominateur doit être non nul" OFF_CHANGE 125 : TEXT 125, "" : ON_CHANGE 125,verifier ELSE HIDE 100 F = VAL(TEXT$(120)) : G = VAL(TEXT$(125)) IF OBJECT_EXISTS(300) = 0 FORM 300:HIDE 300 : LEFT 300,100:TOP 300,100:WIDTH 300,400:HEIGHT 300,200 : COMMAND_TARGET_IS 300 CAPTION 300, "SAISIE DE L'OPERATION A EFFECTUER" ALPHA 310 : LEFT 310,180 : TOP 310,10 : EDIT 320 : LEFT 320,180 : TOP 320,30 : WIDTH 320,100 ALPHA 315 : LEFT 315,180 : TOP 315,70 : EDIT 325 : LEFT 325,180 : TOP 325,90 : WIDTH 325,100 CAPTION 310,"Indiquez le numerateur (entier):":CAPTION 315,"Indiquez le dénominateur (entier) :" operation$ = "" : CONTAINER_OPTION 380 : LEFT 380, 10 : TOP 380, 25 : HEIGHT 380, 56 : WIDTH 380, 80 ALPHA 382 : LEFT 382,10 : TOP 382, 10 : CAPTION 382,"Opération à effectuer" OPTION 383 : PARENT 383,380 : LEFT 383,7 : TOP 383, 12 : WIDTH 383, 32 : CAPTION 383, "+" : ON_CLICK 383, clic_operation OPTION 384 : PARENT 384,380 : LEFT 384, 42 : TOP 384, 12 : WIDTH 384, 32 : CAPTION 384, "-" : ON_CLICK 384, clic_operation OPTION 385 : PARENT 385,380 : LEFT 385,7 : TOP 385, 32 : WIDTH 385, 32 : CAPTION 385, "*" : ON_CLICK 385, clic_operation OPTION 386 : PARENT 386,380 : LEFT 386, 42 : TOP 386, 32 : WIDTH 386, 32 : CAPTION 386, "/" : ON_CLICK 386, clic_operation BUTTON 330:LEFT 330,40 :TOP 330,130:CAPTION 330,"CALCULER" : ON_CLICK 330,Calculer2Fractions BUTTON 340:LEFT 340,140:TOP 340,130: WIDTH 340, 105 : CAPTION 340,"MENU PRINCIPAL": ON_CLICK 340, annuler BUTTON 350:LEFT 350,270:TOP 350,130: CAPTION 350,"QUITTER": ON_CLICK 350, quitter SHOW 300 ELSE operation$ = "" : MARK_OFF 383 : MARK_OFF 384 : MARK_OFF 385 : MARK_OFF 386 OFF_CHANGE 320 : OFF_CHANGE 325 : TEXT 320, "" : TEXT 325, "": SET_FOCUS 320 : ON_CHANGE 320,verifier : ON_CHANGE 325,verifier END_IF END_IF RETURN
clic_operation: IF number_click = 383 THEN operation$ = "+" IF number_click = 384 THEN operation$ = "-" IF number_click = 385 THEN operation$ = "*" IF number_click = 386 THEN operation$ = "/" RETURN
Calculer2Fractions: ' -------------------------------------------------------------------- ' Lance la simplification de l'équation ' IF (VAL(TEXT$(325)) = 0) OR (operation$ = "") IF VAL(TEXT$(325)) = 0 THEN MESSAGE "Le dénominateur doit être non nul" : OFF_CHANGE 325 : TEXT 325, "" : ON_CHANGE 125,verifier IF operation$ = "" THEN MESSAGE "Veuillez choisir l'opération à effectuer" ELSE J = VAL(TEXT$(320)) : K = VAL(TEXT$(325)) COMMAND_TARGET_IS 0 : DELETE 300 : CAPTION 200,"RESULTAT" IF operation$ = "+" THEN F=(K*F)+(J*G) : G = G*K : CAPTION 210,"Le résultat de l'addition est : " IF operation$ = "-" THEN F=(K*F)-(J*G) : G = G*K : CAPTION 210,"Le résultat de la soustraction est : " IF operation$ = "*" THEN F=F*J : G = G*K : CAPTION 210,"Le résultat de la multiplication est : " IF operation$ = "/" THEN F=F*K : G = G*J : CAPTION 210,"Le résultat de la division est : " PGCD(F,G) F = F/PGCD% : CAPTION 220, STR$(F) G = G/PGCD% : IF G > 1 THEN CAPTION 220, CAPTION$(220)+" / "+ STR$(G) SHOW 200 END_IF RETURN
M_Factoriel: ' -------------------------------------------------------------------- ' Prépare les fenêtres pour le calcul du factoriel ' HIDE 0 : CAPTION 100,"Calcul du factoriel d'un nombre entier" CAPTION 110,"Indiquez l'entier dont vous vouler connaître le factoriel :":CAPTION 115,"" ON_CHANGE 120,verifier : OFF_CHANGE 125 : HIDE 125 : ON_CLICK 130, calculerFactoriel GOSUB recommencer RETURN
calculerFactoriel: ' -------------------------------------------------------------------- ' Calculer le factoriel d'un entier ' HIDE 100 J = VAL(TEXT$(120)) CAPTION 200,"RESULTAT":CAPTION 210,"Le résultat du factoriel de "+TEXT$(120)+" ("+TEXT$(120)+"!) est :" IF J=0 CAPTION 220,"1" ELSE I% = J -1 : K = J WHILE I% > 1 : K = K * I% : I% = I% - 1 : END_WHILE CAPTION 220, STR$(K) END_IF SHOW 200 RETURN
chercher: ' -------------------------------------------------------------------- ' Recherche les nombres entiers entre les 2 valeurs ' HIDE 100 : SMALL = VAL(TEXT$(120)) : LARGE = VAL(TEXT$(125)) IF LARGE < SMALL THEN TEMP = LARGE : LARGE = SMALL : SMALL = TEMP : ' Si l'utilisateur s'est trompé IF LARGE < SMALL + 1 MESSAGE "La borne supérieure doit être plus grande que la borne inférieure" GOSUB recommencer RETURN END_IF IF LARGE > 1 AND SMALL < 3 THEN S$=" 2 " : ELSE : S$="" IF LARGE > 2 AND SMALL < 4 THEN S$=S$+" 3 " SMALL=INT(SMALL/2)*2+1 : ' Prend le premier nombre impair comme borne inférieure LARGE=INT(LARGE/2)*2-1 : ' Et le dernier nombre impair comme borne supérieure IF SMALL=LARGE THEN LARGE = LARGE + 2 FOR K=SMALL TO LARGE STEP 2 F=0 : ' Réinitialise le compteur FOR J=3 TO SQR(K) STEP 2 IF K/J-INT(K/J)=0 THEN F=F+1 : ' Compte les facteurs, donc si F=0, ce sera un nombre premier NEXT J IF F=0 AND K<> 1 THEN S$ = S$ + RIGHT$(STRING$(7," ") + STR$(K),7) +" " : ' Pas de diviseur trouvé, on affiche le nombre premier NEXT K CAPTION 220, S$ : SHOW 200 RETURN ' ------------------------------------------------------------------
SUB Dec2Frac(xx,nbDec) ' ------------------------------------------------------------------ ' Fonction permettant de transformer un nombre réel en fraction ' DIM_LOCAL x,p0,p1,p2 DIM_LOCAL z,q0,q1,q2 IF VARIABLE("Dec2Frac$")=0 THEN DIM Dec2Frac$ x = abs(xx) p0 = 0: p1 = 1 q0 = 1: q1 = 0 WHILE 1=1 z = INT(x) p2 = z * p1 + p0 q2 = z * q1 + q0 IF ABS(ABS(xx)-p2 / q2) < POWER(10,0-NbDec) THEN EXIT_WHILE p0 = p1 : q0 = q1 p1 = p2 : q1 = q2 x = 1 / (x-z) END_WHILE IF xx < 0 THEN p2 = 0 - p2 Dec2Frac$=STR$(p2)+"/"+STR$(q2) end_sub
verifier: ' -------------------------------------------------------------------- ' Limite la taille des bornes par ce que sinon il faudrait compliquer ' le programme et que ce n'est pas le but et vérifie que l'on ne saisie ' que des chiffres pour entrer la valeur d'une des 2 bornes ' IF OBJECT_EXISTS(320)=1 OFF_CHANGE 320 : OFF_CHANGE 325 ELSE OFF_CHANGE 120 : OFF_CHANGE 125 END_IF IF NUMBER_CHANGE = 120 OR NUMBER_CHANGE = 125 OR NUMBER_CHANGE = 320 OR NUMBER_CHANGE = 325 F=NUMBER_CHANGE IF LEN(TEXT$(F)) > 7 MESSAGE "Pour des raisons pratiques, les limites doivent être inférieures à 10 000 000" TEXT F,LEFT$(TEXT$(F),7) END_IF FOR I% = 1 TO LEN(TEXT$(F)) IF ASC(MID$(TEXT$(F),I%,1)) < 48 OR ASC(MID$(TEXT$(F),I%,1)) > 57 MESSAGE "Veuillez ne saisir que des chiffres" TEXT F,"" SET_FOCUS F END_IF NEXT I% END_IF IF OBJECT_EXISTS(320)=1 ON_CHANGE 320,verifier : ON_CHANGE 325,verifier ELSE ON_CHANGE 120,verifier : ON_CHANGE 125,verifier END_IF RETURN ' ------------------------------------------------------------------
annuler: ' --------------------------------------------------------------------- ' Retourner à la fenêtre du menu principal en "fermant" les autres ' IF OBJECT_EXISTS(300) = 1 THEN DELETE 300 HIDE 100 : HIDE 200 : OFF_CHANGE 120 : OFF_CHANGE 125 : TEXT 120, "" : TEXT 125, "" : SHOW 0 RETURN ' --------------------------------------------------------------------
recommencer: ' --------------------------------------------------------------------- ' Réafficher la fenêtre pour saisir les bornes de la recherche ' HIDE 200 : OFF_CHANGE 120 : OFF_CHANGE 125 : TEXT 120, "" : TEXT 125, "": SHOW 100 : SET_FOCUS 120 ON_CHANGE 120,verifier : ON_CHANGE 125,verifier RETURN ' --------------------------------------------------------------------
quitter: TERMINATE | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Menu - Fonctions Mathematiques Dim 23 Déc 2012 - 7:14 | |
| Bonjour Jicehel, J'ai apporté quelques modifications - Modification de la procédure verifier: tu ne peux pas te fier sur OBJECT_EXISTS...(si tu relances une 2eme fois un calcul, c'est foutu). la commande NUMERIC() t'evite de faire une boucle et de vérifier les codes ASCII. - Ajout dans TraiterAutreFraction des ON_CHANGE 320 et 325 lors de la creation de FORM 300 - Ajout dans le menu de Dec2Frac - Code:
-
' -------------------------------------------------------------------- ' Quelques fonctions mathématiques: ' - Liste des nombres premiers entre 2 nombres ' - Calcul du PGCD de 2 nombres entiers ' - Calcul du PPCM de 2 nombres entiers ' - Calcul de la suite de Fibonacci ' -------------------------------------------------------------------- ' Ecrit en Basic Panoramic 0.9.24 le 23/12/2012 par Jicehel ' avec des fonctions fournies par Papydall et Nardo26 ' --------------------------------------------------------------------
' -------------------------------------------------------------------- ' Initialisation ' LABEL recommencer, quitter, verifier, annuler, Calculer2Fractions, TraiterAutreFraction LABEL chercher, calculerPGCD, calculerPPCM, simplifierFraction, calculerFactoriel, clic_operation LABEL calculerFibonacci LABEL M_nbpremiers, M_PGCD, M_PPCM, M_Simplifier, M_Factoriel, M_Calculer2Fractions, M_Fibonacci LABEL M_DetermineFraction DIM F,G,I%,J,K,Temp, SMALL,LARGE,S$, PGCD%,PPCM%, operation$
' -------------------------------------------------------------------- ' Interface utilisateur, demande du message à traduire ' CAPTION 0, "FONCTIONS MATHEMATIQUES"
' Création du menu pour choisir la fonction à lancer MAIN_MENU 10 SUB_MENU 20 : PARENT 20,10 : CAPTION 20, "Choix de la fonction à lancer" SUB_MENU 21 : PARENT 21,20 : CAPTION 21, "Trouver les chiffres premiers entre 2 bornes" : ON_CLICK 21,M_nbpremiers SUB_MENU 22 : PARENT 22,20 : CAPTION 22, "Trouver le PGCD de 2 nombres entiers" : ON_CLICK 22,M_PGCD SUB_MENU 23 : PARENT 23,20 : CAPTION 23, "Trouver le PPCM de 2 nombres entiers" : ON_CLICK 23,M_PPCM SUB_MENU 24 : PARENT 24,20 : CAPTION 24, "Calculer la suite de Fibonacci" : ON_CLICK 24,M_Fibonacci SUB_MENU 25 : PARENT 25,20 : CAPTION 25, "Calculer le factoriel d'un entier" : ON_CLICK 25,M_Factoriel SUB_MENU 30 : PARENT 30,10 : CAPTION 30, "Fractions" SUB_MENU 31 : PARENT 31,30 : CAPTION 31, "Simplifier une fraction de 2 entiers" : ON_CLICK 31,M_Simplifier SUB_MENU 32 : PARENT 32,30 : CAPTION 32, "Effectuer une opération (+;-;*;/)" : ON_CLICK 32,M_Calculer2Fractions SUB_MENU 33 : PARENT 33,30 : CAPTION 33, "Trouver une fraction à partir d'un reel" : ON_CLICK 33,M_DetermineFraction
' Création des fenêtres utilisées FORM 100:HIDE 100 : LEFT 100,100:TOP 100,100:WIDTH 100,400:HEIGHT 100,200 COMMAND_TARGET_IS 100 ALPHA 110:LEFT 110,10 :TOP 110,10 EDIT 120:LEFT 120,10 :TOP 120,30:WIDTH 120,100 ALPHA 115:LEFT 115,10 :TOP 115,70 EDIT 125:LEFT 125,10 :TOP 125,90: WIDTH 125,100 BUTTON 130:LEFT 130,40 :TOP 130,130:CAPTION 130,"LANCER" BUTTON 140:LEFT 140,140:TOP 140,130: WIDTH 140, 105 : CAPTION 140,"MENU PRINCIPAL": ON_CLICK 140, annuler BUTTON 150:LEFT 150,270:TOP 150,130: CAPTION 150,"QUITTER": ON_CLICK 150, quitter
FORM 200:HIDE 200 : LEFT 200,100:TOP 200,100:WIDTH 200,400:HEIGHT 200,160 COMMAND_TARGET_IS 200 ALPHA 210:LEFT 210,10 :TOP 210,10 ALPHA 220:LEFT 220,10 :TOP 220,30: WIDTH 220,280 BUTTON 230:LEFT 230,40 :TOP 230,60: CAPTION 230,"NOUVEAU" :ON_CLICK 230,recommencer BUTTON 240:LEFT 240,140:TOP 240,60 : WIDTH 240, 105 :CAPTION 240,"MENU PRINCIPAL": ON_CLICK 240, annuler BUTTON 250:LEFT 250,270:TOP 250,60: CAPTION 250,"QUITTER":ON_CLICK 250,quitter COMMAND_TARGET_IS 100 ON_CLOSE 100, annuler : ON_CLOSE 200, recommencer
' Fin END
M_nbpremiers: ' -------------------------------------------------------------------- ' Prépare les fenêtres pour la liste des nombres premiers ' HIDE 0 : CAPTION 100,"Liste des nombres premiers entre 2 nombres":CAPTION 110,"Indiquez la borne inférieure de la recherche :":CAPTION 115,"Indiquez la borne supérieure de la recherche :" ON_CHANGE 120,verifier : ON_CHANGE 125,verifier : ON_CLICK 130, chercher CAPTION 200,"NOMBRES PREMIERS TROUVES":CAPTION 210,"Liste des nombres premiers trouves :" GOSUB recommencer RETURN
M_Fibonacci: ' ****************************************************************************** ' Prépare les fenêtres pour calculer la suite de Fibonacci ' ' Informations issues de FIBO.BAS de PAPYDALL ' ****************************************************************************** ' Leonardo Fibonacci, mathématicien italien du XIII siècle a posé dans l'un de ' ses ouvrages le problème suivant : ' Un homme met un couple de lapins dans un lieu isolé de tous les côtés par un ' mur. Combien de couples obtient-on en un an si chaque couple engendre tous les ' mois un nouveau couple à compter du troisième mois de son existence ? ' On suppose que : ' au début du premier mois, il y a juste une paire de lapereaux ; ' les lapereaux ne procréent qu'à partir du troisième mois ; ' chaque mois, toute paire susceptible de procréer engendre effectivement une ' nouvelle paire de lapereaux ; ' la nourriture est abondante et les lapins ne meurent jamais. ' La suite de Fibonacci est donc strictement croissante. ' Les termes de cette suite sont appelés "Nombres de Fibonacci" ' ******************************************************************************
HIDE 0 : CAPTION 100,"Calcul de la suite de Fibonacci":CAPTION 110,"Entrer la valeur N (> 1)" HIDE 115 : HIDE 125 : ON_CHANGE 120,verifier : ON_CLICK 130, calculerFibonacci CAPTION 200,"NOMBRES PREMIERS TROUVES":CAPTION 210,"Liste des nombres premiers trouves :" GOSUB recommencer RETURN
calculerFibonacci: ' -------------------------------------------------------------------- ' Lance le calcul de la suiite de Fibonacci si N > 1 ' IF VAL(TEXT$(120)) < 2 MESSAGE "Le nombre entré doit être supérieur à 1" OFF_CHANGE 120 : TEXT 120, "" : ON_CHANGE 120,verifier ELSE HIDE 100 fibonacci(VAL(TEXT$(120))) CAPTION 200,"RESULTAT":CAPTION 210,"La valeur de la suite de Fibonacci pour N=" + TEXT$(120)+" est :" CAPTION 220, STR$(I%) SHOW 200 END_IF RETURN
' ****************************************************************************** SUB fibonacci(n) dim_local fib0,fib1,fib2,i fib0 = 0 : fib1 = 1 FOR i = 2 TO n fib2 = fib1 + fib0 fib0 = fib1 : fib1 = fib2 NEXT i I%=fib2 END_SUB ' ******************************************************************************
M_PGCD: ' -------------------------------------------------------------------- ' Prépare la fenêtre pour le calcul du PGCD ' HIDE 0 : CAPTION 100,"Calcul du PGCD (Plus Grand Commun Diviseur)" CAPTION 110,"Indiquez le premier nombre entier:":CAPTION 115,"Indiquez le second nombre entier :" ON_CHANGE 120,verifier : ON_CHANGE 125,verifier : ON_CLICK 130, calculerPGCD GOSUB recommencer RETURN
calculerPGCD: ' -------------------------------------------------------------------- ' Lance le calcule du PGCD ' HIDE 100 PGCD(VAL(TEXT$(120)),VAL(TEXT$(125))) CAPTION 200,"RESULTAT":CAPTION 210,"Le PGCD de "+TEXT$(120)+" et de "+TEXT$(125)+" est :" CAPTION 220, STR$(PGCD%) : SHOW 200 RETURN
' -------------------------------------------------------------------- ' La fonction qui effectue le calcul ' SUB PGCD(n1%,n2%) dim_local n3%,n4%,n5% n4% = n1% : n5% = n2% while n2% > 0 n3% = n1% : n1% = n2% : n2% = n3% - n1%* int(n3%/n1%) end_while PGCD% = n1% if PGCD% <> 0 then PPCM% = (n4%*n5%)/PGCD% END_SUB ' ------------------------------------------------------------------------------
M_PPCM: ' -------------------------------------------------------------------- ' Prépare les fenêtres pour le calcul du PPCM ' HIDE 0 : CAPTION 100,"Calcul du PPCM (Plus Petit Commun Multiple)" CAPTION 110,"Indiquez le premier nombre entier:":CAPTION 115,"Indiquez le second nombre entier :" ON_CHANGE 120,verifier : ON_CHANGE 125,verifier : ON_CLICK 130, calculerPPCM GOSUB recommencer RETURN
calculerPPCM: ' -------------------------------------------------------------------- ' Lance le calcul du PPCM ' HIDE 100 : PGCD(VAL(TEXT$(120)),VAL(TEXT$(125))) CAPTION 200,"RESULTAT":CAPTION 210,"Le PPCM de "+TEXT$(120)+" et de "+TEXT$(125)+" est :" CAPTION 220, STR$(PPCM%) : SHOW 200 RETURN
M_Simplifier: ' -------------------------------------------------------------------- ' Prépare la fenêtre pour la simplification de la fraction ' HIDE 0 : CAPTION 100,"Simplification d'une fraction de 2 entiers" CAPTION 110,"Indiquez le numerateur (entier):":CAPTION 115,"Indiquez le dénominateur (entier) :" ON_CHANGE 120,verifier : ON_CHANGE 125,verifier : ON_CLICK 130, simplifierFraction GOSUB recommencer RETURN
simplifierFraction: ' -------------------------------------------------------------------- ' Lance la simplification de l'équation ' IF VAL(TEXT$(125)) = 0 MESSAGE "Le dénominateur doit être non nul" OFF_CHANGE 125 : TEXT 125, "" : ON_CHANGE 125,verifier ELSE HIDE 100 J = VAL(TEXT$(120)) : K = VAL(TEXT$(125)) CAPTION 200,"RESULTAT":CAPTION 210,"L'équation simplifié de "+TEXT$(120) IF J=0 CAPTION 210, CAPTION$(210)+" divisé par un entier est :" CAPTION 220, "0" ELSE PGCD(J,K) CAPTION 210, CAPTION$(210)+" / "+TEXT$(125)+" est :" J = J/PGCD% : CAPTION 220, STR$(J) K = (K/PGCD%) : IF K > 1 THEN CAPTION 220, CAPTION$(220)+" / "+ STR$(K) END_IF SHOW 200 END_IF RETURN
M_Calculer2Fractions: ' -------------------------------------------------------------------- ' Prépare les fenêtres pour faire une opération entre n fractions ' HIDE 0 : CAPTION 100,"Saisie de la première fraction" CAPTION 110,"Indiquez le numerateur (entier):":CAPTION 115,"Indiquez le dénominateur (entier) :" ON_CHANGE 120,verifier : ON_CHANGE 125,verifier : ON_CLICK 130, TraiterAutreFraction GOSUB recommencer RETURN
TraiterAutreFraction: ' -------------------------------------------------------------------- ' Saisie de l'opération a effectuer et de la fraction à traiter ' IF VAL(TEXT$(125)) = 0 MESSAGE "Le dénominateur doit être non nul" OFF_CHANGE 125 : TEXT 125, "" : ON_CHANGE 125,verifier ELSE HIDE 100 F = VAL(TEXT$(120)) : G = VAL(TEXT$(125)) IF OBJECT_EXISTS(300) = 0 FORM 300:HIDE 300 : LEFT 300,100:TOP 300,100:WIDTH 300,400:HEIGHT 300,200 : COMMAND_TARGET_IS 300 CAPTION 300, "SAISIE DE L'OPERATION A EFFECTUER" ALPHA 310 : LEFT 310,180 : TOP 310,10 : EDIT 320 : LEFT 320,180 : TOP 320,30 : WIDTH 320,100 ALPHA 315 : LEFT 315,180 : TOP 315,70 : EDIT 325 : LEFT 325,180 : TOP 325,90 : WIDTH 325,100 ON_CHANGE 320,verifier : ON_CHANGE 325,verifier CAPTION 310,"Indiquez le numerateur (entier):":CAPTION 315,"Indiquez le dénominateur (entier) :" operation$ = "" : CONTAINER_OPTION 380 : LEFT 380, 10 : TOP 380, 25 : HEIGHT 380, 56 : WIDTH 380, 80 ALPHA 382 : LEFT 382,10 : TOP 382, 10 : CAPTION 382,"Opération à effectuer" OPTION 383 : PARENT 383,380 : LEFT 383,7 : TOP 383, 12 : WIDTH 383, 32 : CAPTION 383, "+" : ON_CLICK 383, clic_operation OPTION 384 : PARENT 384,380 : LEFT 384, 42 : TOP 384, 12 : WIDTH 384, 32 : CAPTION 384, "-" : ON_CLICK 384, clic_operation OPTION 385 : PARENT 385,380 : LEFT 385,7 : TOP 385, 32 : WIDTH 385, 32 : CAPTION 385, "*" : ON_CLICK 385, clic_operation OPTION 386 : PARENT 386,380 : LEFT 386, 42 : TOP 386, 32 : WIDTH 386, 32 : CAPTION 386, "/" : ON_CLICK 386, clic_operation BUTTON 330:LEFT 330,40 :TOP 330,130:CAPTION 330,"CALCULER" : ON_CLICK 330,Calculer2Fractions BUTTON 340:LEFT 340,140:TOP 340,130: WIDTH 340, 105 : CAPTION 340,"MENU PRINCIPAL": ON_CLICK 340, annuler BUTTON 350:LEFT 350,270:TOP 350,130: CAPTION 350,"QUITTER": ON_CLICK 350, quitter SHOW 300 ELSE operation$ = "" : MARK_OFF 383 : MARK_OFF 384 : MARK_OFF 385 : MARK_OFF 386 OFF_CHANGE 320 : OFF_CHANGE 325 : TEXT 320, "" : TEXT 325, "": SET_FOCUS 320 : ON_CHANGE 320,verifier : ON_CHANGE 325,verifier END_IF END_IF RETURN
clic_operation: IF number_click = 383 THEN operation$ = "+" IF number_click = 384 THEN operation$ = "-" IF number_click = 385 THEN operation$ = "*" IF number_click = 386 THEN operation$ = "/" RETURN
Calculer2Fractions: ' -------------------------------------------------------------------- ' Lance la simplification de l'équation ' IF (VAL(TEXT$(325)) = 0) OR (operation$ = "") IF VAL(TEXT$(325)) = 0 THEN MESSAGE "Le dénominateur doit être non nul" : OFF_CHANGE 325 : TEXT 325, "" : ON_CHANGE 125,verifier IF operation$ = "" THEN MESSAGE "Veuillez choisir l'opération à effectuer" ELSE J = VAL(TEXT$(320)) : K = VAL(TEXT$(325)) COMMAND_TARGET_IS 0 : DELETE 300 : CAPTION 200,"RESULTAT" IF operation$ = "+" THEN F=(K*F)+(J*G) : G = G*K : CAPTION 210,"Le résultat de l'addition est : " IF operation$ = "-" THEN F=(K*F)-(J*G) : G = G*K : CAPTION 210,"Le résultat de la soustraction est : " IF operation$ = "*" THEN F=F*J : G = G*K : CAPTION 210,"Le résultat de la multiplication est : " IF operation$ = "/" THEN F=F*K : G = G*J : CAPTION 210,"Le résultat de la division est : " PGCD(F,G) F = F/PGCD% : CAPTION 220, STR$(F) G = G/PGCD% : IF G > 1 THEN CAPTION 220, CAPTION$(220)+" / "+ STR$(G) SHOW 200 END_IF RETURN
M_Factoriel: ' -------------------------------------------------------------------- ' Prépare les fenêtres pour le calcul du factoriel ' HIDE 0 : CAPTION 100,"Calcul du factoriel d'un nombre entier" CAPTION 110,"Indiquez l'entier dont vous vouler connaître le factoriel :":CAPTION 115,"" ON_CHANGE 120,verifier : OFF_CHANGE 125 : HIDE 125 : ON_CLICK 130, calculerFactoriel GOSUB recommencer RETURN
calculerFactoriel: ' -------------------------------------------------------------------- ' Calculer le factoriel d'un entier ' HIDE 100 J = VAL(TEXT$(120)) CAPTION 200,"RESULTAT":CAPTION 210,"Le résultat du factoriel de "+TEXT$(120)+" ("+TEXT$(120)+"!) est :" IF J=0 CAPTION 220,"1" ELSE I% = J -1 : K = J WHILE I% > 1 : K = K * I% : I% = I% - 1 : END_WHILE CAPTION 220, STR$(K) END_IF SHOW 200 RETURN
chercher: ' -------------------------------------------------------------------- ' Recherche les nombres entiers entre les 2 valeurs ' HIDE 100 : SMALL = VAL(TEXT$(120)) : LARGE = VAL(TEXT$(125)) IF LARGE < SMALL THEN TEMP = LARGE : LARGE = SMALL : SMALL = TEMP : ' Si l'utilisateur s'est trompé IF LARGE < SMALL + 1 MESSAGE "La borne supérieure doit être plus grande que la borne inférieure" GOSUB recommencer RETURN END_IF IF LARGE > 1 AND SMALL < 3 THEN S$=" 2 " : ELSE : S$="" IF LARGE > 2 AND SMALL < 4 THEN S$=S$+" 3 " SMALL=INT(SMALL/2)*2+1 : ' Prend le premier nombre impair comme borne inférieure LARGE=INT(LARGE/2)*2-1 : ' Et le dernier nombre impair comme borne supérieure IF SMALL=LARGE THEN LARGE = LARGE + 2 FOR K=SMALL TO LARGE STEP 2 F=0 : ' Réinitialise le compteur FOR J=3 TO SQR(K) STEP 2 IF K/J-INT(K/J)=0 THEN F=F+1 : ' Compte les facteurs, donc si F=0, ce sera un nombre premier NEXT J IF F=0 AND K<> 1 THEN S$ = S$ + RIGHT$(STRING$(7," ") + STR$(K),7) +" " : ' Pas de diviseur trouvé, on affiche le nombre premier NEXT K CAPTION 220, S$ : SHOW 200 RETURN
' ------------------------------------------------------------------ ' Conversion d'une valeur décimale en fraction ' M_DetermineFraction: DIM DetermineFraction$ DIM DetermineFraction_i% REPEAT DetermineFraction$=MESSAGE_INPUT$("Trouver une fraction (approximation)","Nombre à virgule:","") IF DetermineFraction$<>"" IF NUMERIC(DetermineFraction$)=0 THEN MESSAGE "Veuillez entrer un nombre à virgule svp" END_IF UNTIL NUMERIC(DetermineFraction$)=1 OR DetermineFraction$="" IF DetermineFraction$<>"" DetermineFraction_i%= INSTR(DetermineFraction$,".") IF DetermineFraction_i% <> 0 THEN DetermineFraction_i% = LEN(DetermineFraction$)-DetermineFraction_i% Dec2Frac(VAL(DetermineFraction$),DetermineFraction_i%+1) DetermineFraction_i%=MESSAGE_INFORMATION_OK(DetermineFraction$+" = "+ Dec2Frac$) END_IF FREE DetermineFraction_i%:FREE DetermineFraction$ RETURN
SUB Dec2Frac(xx,nbDec) ' ------------------------------------------------------------------ ' Fonction permettant de transformer un nombre réel en fraction ' DIM_LOCAL x,p0,p1,p2 DIM_LOCAL z,q0,q1,q2 IF VARIABLE("Dec2Frac$")=0 THEN DIM Dec2Frac$ x = abs(xx) p0 = 0: p1 = 1 q0 = 1: q1 = 0 WHILE 1=1 z = INT(x) p2 = z * p1 + p0 q2 = z * q1 + q0 IF ABS(ABS(xx)-p2 / q2) < POWER(10,0-NbDec) THEN EXIT_WHILE p0 = p1 : q0 = q1 p1 = p2 : q1 = q2 x = 1 / (x-z) END_WHILE IF xx < 0 THEN p2 = 0 - p2 Dec2Frac$=STR$(p2)+"/"+STR$(q2) end_sub
' -------------------------------------------------------------------- ' Limite la taille des bornes par ce que sinon il faudrait compliquer ' le programme et que ce n'est pas le but et vérifie que l'on ne saisie ' que des chiffres pour entrer la valeur d'une des 2 bornes ' verifier: OFF_CHANGE NUMBER_CHANGE IF NUMERIC(TEXT$(NUMBER_CHANGE))=0 MESSAGE "Veuillez ne saisir que des chiffres" TEXT NUMBER_CHANGE,"" : SET_FOCUS NUMBER_CHANGE ELSE IF LEN(TEXT$(NUMBER_CHANGE))>7 MESSAGE "Pour des raisons pratiques, les limites doivent être inférieures à 10 000 000" TEXT NUMBER_CHANGE,"" : SET_FOCUS NUMBER_CHANGE END_IF END_IF ON_CHANGE NUMBER_CHANGE,verifier RETURN
' ------------------------------------------------------------------
annuler: ' --------------------------------------------------------------------- ' Retourner à la fenêtre du menu principal en "fermant" les autres ' IF OBJECT_EXISTS(300) = 1 THEN DELETE 300 HIDE 100 : HIDE 200 : OFF_CHANGE 120 : OFF_CHANGE 125 : TEXT 120, "" : TEXT 125, "" : SHOW 0 RETURN ' --------------------------------------------------------------------
recommencer: ' --------------------------------------------------------------------- ' Réafficher la fenêtre pour saisir les bornes de la recherche ' HIDE 200 : OFF_CHANGE 120 : OFF_CHANGE 125 : TEXT 120, "" : TEXT 125, "": SHOW 100 : SET_FOCUS 120 ON_CHANGE 120,verifier : ON_CHANGE 125,verifier RETURN ' --------------------------------------------------------------------
quitter: TERMINATE | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Menu - Fonctions Mathematiques Dim 23 Déc 2012 - 9:59 | |
| Merci Nardo | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Menu - Fonctions Mathematiques Dim 23 Déc 2012 - 11:59 | |
| Bonjour tout le monde.
@Jicehel @Nardo26
REMARQUE IMPORTANTE :
** Pour le calcul de la suite de Fibonacci, il s’agit d’une suite donc comportant une série de nombres. Or vous affichez seulement le dernier terme ce qui veut dire seulement que le terme affiché est Fn et la non la suite complète. Donc pour être dans les règles de l’art, il faut afficher toute la série.
** Dans mon code, j’ai utilisé une variable réelle i pour le calcul de la série, bien que tous les termes de la série soient des entiers. Ceci parce les valeurs de la suite croient très vite et pour une variable entière i%, il y aura dépassement de capacité d’où des valeurs aberrantes ! Essayez de calculer Fibonacci(50) ; vous obtiendrez la valeur incorrecte de -298632863 au lieu de la bonne valeur 12586269025. Donc utilisez comme variable i et non i%
EDIT : Je prépare aussi un code pour les statistiques. A suivre ....!
Ma grande petite-fille âgée de 45 mois s’est approprié mon ordinateur et m’empêche d’y toucher. Alors A+ !
| |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Menu - Fonctions Mathematiques Dim 23 Déc 2012 - 12:12 | |
| Tu as raison Papydall, bien vu, ce sera corrigé dans la prochaine version bientôt. Pour le moment en route pour Rennes, je prends l'ordi mais bon, je ne sais pas si je programmerais.
| |
| | | Contenu sponsorisé
| Sujet: Re: Menu - Fonctions Mathematiques | |
| |
| | | | Menu - Fonctions Mathematiques | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |