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 |
|
|
| AX² + BX + C = 0 | |
| | Auteur | Message |
---|
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: AX² + BX + C = 0 Lun 10 Déc 2012 - 1:59 | |
| Salut tout le monde. Voici un petit code très documenté : les lignes en REM sont beaucoup plus nombreuses que celle portant une instruction ! Ce code est principalement destiné aux nouveaux et qui veulent s’initier au langage PANORAMIC. Il s’agit d’un programme de résolution de l’équation du second degré : AX² + BX + C = 0.C’est en fait, ça entre dans la catégorie ’ Mathématiques’ - Code:
-
' ******************************************************************************
' 2DEGRE.BAS par Papydall
' Résolution de l'équation du second dégré ax² + bx + c = 0
' ******************************************************************************
' D'après le théorème fondamental de l'algèbre des polynômes : tout polynôme de ' dégré N admet exactement N solutions (on dit aussi racines ou zéros). Ces ' racines sont réelles ou complexes, simples ou multiples et si elles sont ' complexes, elles sont conjuguées deux-à-deux. ' Ce programme permet de résoudre un polynôme du second dégré
' Le trinôme du second dégré admet donc deux racines : soit réelles simples ou ' double , soit complexes conjuguées.
' RAPPEL : un nombre complexe s'écrit sous forme z = x + i*y , avec x et y réels ' et i nombre imaginaire dont le carré vaut -1 (i² = -1). ' x s'appelle partie réelle du nombre complexe z ; y s'appelle partie imaginaire ' du nombre complexe z. ' Si y = 0 , le nombre est réel. Si x = 0 , le nombre est imaginaire pur. ' Deux nombres complexes conjugués sont deux nombres complexes dont leurs ' parties imaginaires sont de signes contraires.
' ******************************************************************************
init() : ' appel de la procédure d'initialisation demarrer() : ' appel de la procédure de demarrage end : ' Cette instruction est INDISPENSABLE ici pour que le programme puisse s'arrêter ' et ne tente pas d'exécuter la ligne suivante qui provoquerait une erreur ' ******************************************************************************
' Déclaration des étiquettes "label" , des variables globales, des objets etc.. SUB init() label suite : ' sous-programme pour faire un autre calcul label quit : ' sous-programme pour quitter l'application dim a,b,c : ' les coefficients du trinôme dim x1,x2 : ' les racines réelles dim re,im : ' Les racines complexes dim complexe% : ' flag pour indiquer si les racines sont complexes (=1) ou réelles (=0) color 0,0,0,0 : font_color 0,0,255,0 : ' fond noir, texte vert font_size 0,12 : font_bold 0 : ' Taille de la fonte 12, écriture en gras caption 0,"Résolution de l'équation du second dégré : AX² + BX + C = 0" ' création de 2 boutons : l'un pour poursuivre, l'autre pour quitter button 1 : top 1,250 : left 1,50 : width 1, 100 on_click 1,suite : ' si on clique sur ce bouton, on se branche sur le sous-programme suite button 2 : top 2,250 : left 2,300 : width 2, 80 on_click 2,quit : ' si on clique sur ce bouton, on se branche sur le sous-programme quit caption 1,"Autre calcul" : caption 2,"Quitter" : ' textes des 2 boutons END_SUB ' ****************************************************************************** ' Procédure de saisie des coefficients a,b,c SUB saisie() DIM_LOCAL r$ : ' texte de la saisie ' Saisie du coefficient A ' Cette saisie se fait par 2 boucles REPEAT : repeat : ' Cette boucle assure que le coefficient soit différent de 0 repeat : ' Cette boucle assure que le coefficient soit numérique r$ = message_input$("Entrer le paramètre A (différent de zéro)","A = ","") until numeric(r$) = 1 : ' Si on est ici, c'est qu'on a saisie bien une valeur numérique until val(r$) <> 0 : ' Si on est ici, c'est que la valeur saisie est bien différente de 0 A = val(r$) : ' On récupère la valeur saisie dans la variable A ' Saisie du coefficient B ' Cette fois, il n'est pas nécessaire que la valeur soit différente de 0 ' mais seulement qu'elle soit numérique repeat r$ = message_input$("Entrer le paramètre B","B = ","") until numeric(r$) = 1 B = val(r$) ' Saisie du coefficient C ' identique à la saisie du coefficient B repeat r$ = message_input$("Entrer le paramètre C","C = ","") until numeric(r$) = 1 c = val(r$) END_SUB ' ****************************************************************************** ' Procédure de calcul de la solution SUB resol_2degre(AX2,BX,C) DIM_LOCAL p,q,delta : ' variables locales utilisées pour le calcul p = BX/AX2 : q = C/AX2 : delta = (p/2)*(p/2)-q if delta < 0 : ' les racines sont complexes conjuguées complexe% = 1 : ' on met le flag à 1 delta = abs(delta) : ' On prend la valeur absolue pour le calcul re = 0-(p/2) : im = sqr(delta) : ' parties réelle et imaginaire de la solution else : ' les racine sont réelles complexe% = 0 x1 = 0-(p/2) + sqr(delta) : x2 = 0-(p/2) - sqr(delta) : ' calcul des 2 racines end_if END_SUB ' ****************************************************************************** ' Cette procédure fait appel à la procédure de saisie et à celle de calcul SUB demarrer() dim_local a$,b$,c$ : ' Pour un affichage correct cls : ' pour travailler sur un écran propre hide 1 : hide 2 : ' avant le calcul, on cache les 2 boutons saisie() : ' Appel de la procédure de saisie des coefficients A,B,C resol_2degre(a,b,c) : ' Appel de la procédure de la recherche de la solution ' On affiche le resultat de notre effort !!! if a = 1 then a$ = "x² " : else : a$ = str$(a)+"x² " : ' Pour ne pas afficher 1x² if a = -1 then a$ = "-x²" : ' pour ne pas afficher -1x² if b = 1 then b$ = "+x " : else : b$ = str$(b)+"x " : ' Pour ne pas afficher 1x if b = -1 then b$ = "-x " : ' pour ne pas afficher -1x if b > 1 then b$ = "+"+str$(b)+"x " if b = 0 then b$ = "" if c = 0 then c$ = " = 0" : else : c$ = str$(c)+" = 0 :" if c > 0 then c$ = "+"+c$ print_locate 50,20 : ' on positionne le curseur pour l'affichage print "La solution de : "; a$+b$+c$ if complexe% = 0 : ' Les racines sont-elles réelles ? ' oui, les racines sont réelles print_locate 50,50 if x1 = x2 : ' est-ce une racine double ? print "Une racine réelle double :" print_locate 50,80 : print "X1 = X2 = " ;x1 else : ' les racines sont distinctes print "Deux racines réelles distinctes :" print_locate 50,80 : print "X1 = " ;x1 print_locate 50,100 : print "X2 = " ;x2 end_if else : ' les racines sont belles et bien complexes print_locate 50,50 : print "Deux racines complexes conjuguées :" print_locate 50,80 : print "X1 = "; re;" + ";im; "i" print_locate 50,100 : print "X2 = "; re;" - ";im; "i" end_if show 1 : show 2 : ' on montre les 2 boutons END_SUB ' ****************************************************************************** ' sous-programme pour un autre calcul suite: ' l'utilisateur a cliqué sur le bouton 'Autre calcul' demarrer() return ' ****************************************************************************** ' sous-programme pour quitter l'application quit: ' l'utilisateur a cliqué sur le bouton 'quitter' ' on veut s'assurer par une confirmation de quitter, sinon on ne fait rien if message_confirmation_yes_no("Vous voulez vraiment quitter ?") = 1 then terminate return ' ************************** FIN ***********************************************
Bien sûr, les moins nouveaux, les anciens et même les plus anciens peuvent eux aussi utiliser ce programme !
Dernière édition par papydall le Mar 24 Oct 2017 - 23:51, édité 1 fois | |
| | | Invité Invité
| Sujet: Re: AX² + BX + C = 0 Lun 10 Déc 2012 - 2:40 | |
| L'informatique est un monde où on se casse beaucoup la tête. Le temps chez moi est beaucoup plus long à me casser la tête, et entrer dans le programme des autres, alors que je bloque sur ce que je fais, est que je n'ai pas le temps d'entrer dans vos programmes, malgré l'envie d'essayer. Un monde fou! Mais tu as un titre très expressif qui peut me permettre d'aller voir un jour ou l'autre. |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: AX² + BX + C = 0 Lun 10 Déc 2012 - 7:57 | |
| 1/ Marche nickel 2/ En effet superbement commenté et pouvant être directement intégré dans les tutos rubrique mathématiques | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: AX² + BX + C = 0 Lun 10 Déc 2012 - 16:25 | |
| Cosmos 70 et Jicehel merci pour vos interventions. Mais, Cosmos 70, avoue aussi que l’informatique est aussi un monde où l'on prend beaucoup de plaisirs, justement en se cassant la tête ! | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: AX² + BX + C = 0 Lun 10 Déc 2012 - 18:43 | |
| Plus qu'à te trouver un nouvel objectif Papydall. Je me demande sur quoi tu vas te lancer maintenant... | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: AX² + BX + C = 0 Lun 10 Déc 2012 - 19:59 | |
| - Papydall a écrit:
- Mais, Cosmos 70, avoue aussi que l’informatique est aussi un monde où l'on prend beaucoup de plaisirs, justement en se cassant la tête !
Je crois qu'on en est tous là . C'est du masochisme intellectuel. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: AX² + BX + C = 0 Lun 10 Déc 2012 - 22:32 | |
| - Jicehel a écrit:
- Plus qu'à te trouver un nouvel objectif Papydall.
Je me demande sur quoi tu vas te lancer maintenant... Peut-être je vais rester dans les maths! @Jean Claude JE CONFIRME ! | |
| | | maelilou
Nombre de messages : 180 Age : 76 Localisation : Ardennes françaises Date d'inscription : 02/05/2012
| Sujet: Re: AX² + BX + C = 0 Mer 12 Déc 2012 - 10:41 | |
| Merci Papydall. Je vais regarder le programme. Ce n'est pas tant les lignes de programmation de calcul qui m'ennuie, mais ces histoires de Form , Combo, Edit etc. Dont je n'ai toujours pas compris exactement leur rôle. Actuellement les quelques essais que j'ai fait sont dans Form 0 qui pourtant d’après ce que j'ai compris n'est que le 1er "récipient" ? En fait il faudrait que je m'y attelle une semaine d'affilée... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: AX² + BX + C = 0 Mer 12 Déc 2012 - 11:10 | |
| Un conseil: fais, un par un, les tutos que Jack a mis en ligne ! | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: AX² + BX + C = 0 Mer 12 Déc 2012 - 12:28 | |
| | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: AX² + BX + C = 0 Mer 12 Déc 2012 - 12:48 | |
| Je crois que le problème que rencontre maelilou c'est les termes employés pour définir un interface graphique sous windows. un FORM, un bouton, un EDIT, un CONTAINER etc... comment tout cela s'agence...
| |
| | | maelilou
Nombre de messages : 180 Age : 76 Localisation : Ardennes françaises Date d'inscription : 02/05/2012
| Sujet: Re: AX² + BX + C = 0 Mer 12 Déc 2012 - 13:11 | |
| Exact Nardo
J'ai programmé pendant des années dans une seule fenêtre... (1971 à 93) Et pas sous Windows.
D'où mon embarras.
Mais je le redis, c'est surtout de moi que cela vient , car je ne m'y tiens pas suffisamment.
Mais ça va venir !
Et là Klaus attention !!!
Non je rigole...
| |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: AX² + BX + C = 0 Mer 12 Déc 2012 - 13:45 | |
| Non, non, tu as raison et je te souhaite un jour d'avoir autant de bonnes idées et de programme que Klaus. C'est un bel objectif | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: AX² + BX + C = 0 Mer 12 Déc 2012 - 13:49 | |
| Salut maelilou.
J’étais dans la même situation que toi. Je n’ai découvert PANORAMIC qu’en début de cette même année 2012. Je me suis inscrit sur ce Forum le 3 Mars 2012. A cette époque, je ne savais programmer que sous DOS (d’ailleurs, durant plusieurs années avant, j’ai cessé tout contact avec l’informatique). Maintenant je me débrouille tant bien que mal et ce grâce à l’excellente communauté panoramicienne que je salue tous les membres.
Quand on a appris à conduire une deux-chevaux, on peut passer à une 4X4 sans trop de dégâts, n’est-ce pas ?
Dernière édition par papydall le Lun 31 Déc 2012 - 21:55, édité 1 fois | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: AX² + BX + C = 0 Mer 12 Déc 2012 - 13:51 | |
| Eh bien, commence par regarder ce petit programme que j'ai fait pour toi. Il montre fenêtre de base avec quelques objets. Parmi eux, il y a un bouton "Saisie" qui permet d'ouvrir une deuxième fenêtre, dans laquelle on peut saisir une ligne de texte. Lorsqu'on valide cette fenêtre, ce texte sera ajouté à un mémo dans la fenêtre de base, mais ce mémo ne peut pas être modifié par la fenêtre de base. Il y a des commentaires clairs, qui devraient te permettre de voir l'usage des form, des objets et des évènements. Voici le source: - Code:
-
' demo_form_objets.bas
' voici un programme qui montre une fenêtre avec deux zones en saisie, ' un bouton qui lance une fenêtre de saisie, et un ' memo "fixe" dans lequel on va coller ce qui est saisi dans ' la fenêtre de saisie. La fenêtre de saisie contient une zone ' de saisie, un bouton d'annulation et un bouton de validation. ' ' Une FORM est une fenêtre Windows. Elle peut contenir un ou ' plusieurs objets Panoramic (EDIT, MEMO, BUTTON, ...). ' Un programme Panoramic peut être composé d'une seule form ou ' en avoir plusieurs.
' ============== déclarations ' === les labels pour les routines évènement label ouvre_saisie, autoriser, annuler, valider ' === variables
' ============== code d'initialisation du programme ' === définir les objets de la fenêtre principale caption 0,"Démo de forms et d'objets" edit 1 : top 1,10 : left 1,10 check 2 : top 2,40 : left 2,10 : width 2,200 caption 2,"Autoriser le bouton de saisie" on_click 2,autoriser memo 3 : top 3,10 : left 3,250 : width 3,200 : height 3,400 inactive 3 button 4 : top 4,100 : left 4,10 : caption 4,"Saisie" inactive 4 : on_click 4,ouvre_saisie
' === définir la fenêtre de saisie form 100 : ' on crée une fenêtre hide 100 : ' on la cache aussitôt top 100,200 : left 100,300 : ' sa position lorsqu'elle sera visible command_target_is 100 : ' les objets suivants seront créés dans cette fenêtre edit 101 : top 101,30 : left 101,10 : width 101,200 button 102 : top 102,80 : left 102,30 : caption 102,"Annuler" on_click 102,annuler button 103 : top 103,80 : left 103,230 : caption 103,"Valider" on_click 103,valider
end
' ================== routines évènement des objets ' === cette routine autorise ou interdit la saisie autoriser: if checked(2)=1 active 4 else inactive 4 end_if return ' === cette routine ouvre la fenêtre de saisie ouvre_saisie: inactive 0 : ' ne plus accepter des saisies dans la fenêtre principale show 100 : ' montrer la fenêtre de saisie return
' === annuler la saisie par la form 100 annuler: text 101,"" : ' effacer le texte éventuellement saisi hide 100 : ' cacher la fenêtre de saisie active 0 : ' et réactiver la fenêtre principale to_foreground 0 : ' remettre la fenêtre principale en avant-plan return ' === valider la saisie par la form 100 valider: if trim$(text$(101))="" : ' est-ce que rien n'a été saisie ? message "Il faut saisir quelque chose !" return end_if item_add 3,text$(101) : ' mémoriser le texte saisi text 101,"" : ' effacer le texte éventuellement saisi hide 100 : ' cacher la fenêtre de saisie active 0 : ' et réactiver la fenêtre principale to_foreground 0 : ' remettre la fenêtre principale en avant-plan return
| |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: AX² + BX + C = 0 Mer 12 Déc 2012 - 14:13 | |
| | |
| | | maelilou
Nombre de messages : 180 Age : 76 Localisation : Ardennes françaises Date d'inscription : 02/05/2012
| Sujet: Re: AX² + BX + C = 0 Mer 12 Déc 2012 - 14:38 | |
| Merci pour cette attention. c'est vraiment sympa.
Je vais regarder cela. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: AX² + BX + C = 0 Mer 12 Déc 2012 - 22:14 | |
| Je ne sais pas vous, mais j'avais un petit problème d'affichage en avant plan de la fenêtre 0, j'ai donc modifié un peu la procédure valider. Mais bon, j'étais peut être le seul à avoir ce petit problème. Code modifié - Code:
-
' demo_form_objets.bas
' voici un programme qui montre une fenêtre avec deux zones en saisie, ' un bouton qui lance une fenêtre de saisie, et un ' memo "fixe" dans lequel on va coller ce qui est saisi dans ' la fenêtre de saisie. La fenêtre de saisie contient une zone ' de saisie, un bouton d'annulation et un bouton de validation. ' ' Une FORM est une fenêtre Windows. Elle peut contenir un ou ' plusieurs objets Panoramic (EDIT, MEMO, BUTTON, ...). ' Un programme Panoramic peut être composé d'une seule form ou ' en avoir plusieurs.
' ============== déclarations ' === les labels pour les routines évènement label ouvre_saisie, autoriser, annuler, valider ' === variables
' ============== code d'initialisation du programme ' === définir les objets de la fenêtre principale caption 0,"Démo de forms et d'objets" edit 1 : top 1,10 : left 1,10 check 2 : top 2,40 : left 2,10 : width 2,200 caption 2,"Autoriser le bouton de saisie" on_click 2,autoriser memo 3 : top 3,10 : left 3,250 : width 3,200 : height 3,400 inactive 3 button 4 : top 4,100 : left 4,10 : caption 4,"Saisie" inactive 4 : on_click 4,ouvre_saisie
' === définir la fenêtre de saisie form 100 : ' on crée une fenêtre hide 100 : ' on la cache aussitôt top 100,200 : left 100,300 : ' sa position lorsqu'elle sera visible command_target_is 100 : ' les objets suivants seront créés dans cette fenêtre edit 101 : top 101,30 : left 101,10 : width 101,200 button 102 : top 102,80 : left 102,30 : caption 102,"Annuler" on_click 102,annuler button 103 : top 103,80 : left 103,230 : caption 103,"Valider" on_click 103,valider
end
' ================== routines évènement des objets ' === cette routine autorise ou interdit la saisie autoriser: if checked(2)=1 active 4 else inactive 4 end_if return
' === cette routine ouvre la fenêtre de saisie ouvre_saisie: inactive 0 : ' ne plus accepter des saisies dans la fenêtre principale show 100 : ' montrer la fenêtre de saisie return
' === annuler la saisie par la form 100 annuler: text 101,"" : ' effacer le texte éventuellement saisi hide 100 : ' cacher la fenêtre de saisie active 0 : ' et réactiver la fenêtre principale to_foreground 0 : ' remettre la fenêtre principale en avant-plan return
' === valider la saisie par la form 100 valider: if trim$(text$(101))="" : ' est-ce que rien n'a été saisie ? message "Il faut saisir quelque chose !" return end_if item_add 3,text$(101) : ' mémoriser le texte saisi text 101,"" : ' effacer le texte éventuellement saisie to_foreground 0 : ' remettre la fenêtre principale en avant-plan hide 100 : ' cacher la fenêtre de saisie active 0 : ' et réactiver la fenêtre principale return | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: AX² + BX + C = 0 Mer 12 Déc 2012 - 22:17 | |
| ??????????????????
Ca marchait très bien, pourtant ! Je ne vois pas l'intérêt de mettre to_foreground AVANT de réactiver la form 0... | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: AX² + BX + C = 0 Mer 12 Déc 2012 - 22:21 | |
| En fait chez moi quand on valide, ce n'est pas la form 0 qui repasse devant mais la fenêtre de Panoramic Editor. En modifiant l'ordre, ça se passe bien. Après, si le problème ne se pose que chez moi, ne pas tenir compte de cette modif. je partage juste si le problème à lieu aussi chez d'autres | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: AX² + BX + C = 0 Mer 12 Déc 2012 - 22:33 | |
| Bizarre. J'ai retesté la version originale - je n'arrive pas à produire ce que tu décris. Mais soit - si ta version marche, tant mieux. | |
| | | Contenu sponsorisé
| Sujet: Re: AX² + BX + C = 0 | |
| |
| | | | AX² + BX + C = 0 | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |