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 |
|
|
| Le compte est bon | |
| | 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: Le compte est bon Lun 5 Nov 2012 - 1:09 | |
| Salut tout le monde. Je vous propose un jeu très connu qui est diffusé sur France 3 : c’est le fameux jeu : « le compte est bon ». Petit rappel : il s’agit de trouver un nombre entier (choisi entre 101 et 999) à partir de 6 nombres choisis parmi (1,2,3,4,5,6,7,8,9,10,25,50,75,100) en utilisant les 4 opérations arithmétiques (+,-,*,/).
Le programme choisit au hasard les 6 plaques ainsi que le nombre à obtenir. Le bouton OK lance la recherche de la solution. Si le compte est possible, le programme trouvera la solution plus ou moins rapidement (entre 0 et quelques dizaines de secondes). Sinon, le message ‘je n’ai pas trouvé’ est affiché : le programme ne donne pas la valeur approché. On peut construire une nouvelle partie (en cliquant sur ‘Nouvelle partie’) ; on peut également construire manuellement une partie (en saisissant les valeurs dans les cases appropriées). On peut activer ou désactiver la musique.
Pour la saisie de la solution de l’utilisateur : cette partie du programme n’est pas automatisée. Si on tient à la faire, vous saisissez manuellement les valeurs. Le signe de l’opération est par défaut l’operateur de l’adition(+) mais vous pouvez le changer en cliquant sur l’un des 4 signes se trouvant à gauche.
Dans tout le programme vous êtes accompagnés par la voix de Virginie : c’est pourquoi le programme nécessite la KGF.DLL de Klaus. Le programme utilise aussi, pour la musique, le fichier ‘comptebon.mp3’.
Vous pouvez téléchargez, sur mon WebDav ‘LeCompteEstBon.zip’ qui contient les 3 fichiers suivants : LeCompteEstBon.bas comptebon.mp3 kgf.dll
Dézipez–le dans un dossier de votre choix ; chargez dans Paroramic_editor LeCompteEstBon.bas ; sauvegardez-le pour forcer Panoramic à reconnaitre le répertoire courant ; allumez vos haut-parleurs ; montez le son ; lancez l’exécution et enfin ..... passez des bons moments !
REMARQUE : Le programme est loin d’être optimisé ; il peut très bien être amélioré. Si vous pouvez (et voulez) apporter des modifications sur le programme : faites-le. Quant à moi, ma science s’arrête là !
| |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Lun 5 Nov 2012 - 3:48 | |
| Balaise l' algorithme ! Tu peux faire des améliorations sur l'interface et la saisie des chiffres, mais c'est déjà énorme ! Ps: ton programme cherche à se servir de tout les chiffres. Parfois il me faut moins de lignes que lui pour trouver la solution... | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Le compte est bon Lun 5 Nov 2012 - 6:52 | |
| Bravo Papydall, je ne peux pas pousser les tests trop loin ce matin, mais le jeu fonctionne chez moi. Bonne idée | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Le compte est bon Lun 5 Nov 2012 - 7:48 | |
| Bravo Papydall, Il est incollable et rapide... Heu par contre virginie parle une langue inconnue et la voix est très "virile" | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Le compte est bon Lun 5 Nov 2012 - 7:59 | |
| Moi, j'ai mis une voix d'homme (celles en plus que j'avais ajouté avec eSpeak) et j'ai mis une vitesse à -6 pour qu'il ne parle pas trop vite (j'ai écris Papydal aussi sinon il dit Papidaul à moins que le all se dise ol, dis moi papydall si tel est le cas ...) | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Le compte est bon Lun 5 Nov 2012 - 10:14 | |
| @Jean Claude
Le programme utilise la langue par défaut. Vérifie que c’est bien Virginie qui est par défaut (et non en défaut!). Sa voix est vraiment douce !
@Jicehel Moi je n'ai pas trouvé mieux que la voix de Virginie. Elle est très ... heu .... féminine ... quoi! Prononcez papydall avec un a et non avec un o!
@Ygeronimi et les autres Si vous pouvez (et voulez) apporter des améliorations sur l'interface (ou autre), allez-y, foncez!
@tous Le programme ne donne pas la solution la plus simple : Exemple : pour les valeurs suivantes : 100, 5, 5, 5, 2, 4 et le nombre à trouver 393, il fait 100+5 = 105 105-5 = 100 100*4 = 400 5+2 =7 400-7 = 393
Suggestion : Essayer les valeurs suivantes :(le compte est possible et le programme trouve la solution assez rapidement) 7, 7, 7, 7, 7, 7 et le nombre à trouver est 777 8, 8, 8, 8, 8, 8 et 888
Pouvez-vous trouver la solution avant de l'afficher?
| |
| | | sergeauze
Nombre de messages : 391 Age : 72 Localisation : Hautes Alpes France Date d'inscription : 09/01/2010
| Sujet: Re: Le compte est bon Lun 5 Nov 2012 - 14:31 | |
| J'adopte ! J'ai toujours reve de devenir un as du calcul | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Le compte est bon Lun 5 Nov 2012 - 14:53 | |
| J’ai apporté une petite modification sur le programme : ajout d’un test sur la validité du Nombre_A_Trouver%. Aussi, tous les messages d’erreur seront prononcés. Mon Webdav est mis à jour pour ceux qui n’ont pas encore télécharger. Pour les autres voici le code modifié - Code:
-
' ******************************** ' * * ' * LE_COMPTE_EST_BON.BAS * ' * * ' * PAR PAPYDALL * ' * * ' ******************************** run() end ' ****************************************************************************** SUB run() Initialisation() : Declaration() : Presentation() : Menu()
END_SUB ' ****************************************************************************** SUB Initialisation() label click ,change dim res%,txt$, volume%,vitesse%,langue%,dossier$,no% DIM plaque%(6),Plaque_Possible%(24),Nombre_A_Trouver%,maxi%,operateur$ dim a,aa,b,bb,c,cc,d,dd,e,ee,f,i0%,i1%,i2%,i3%,i4%,i5%,l% dim cod1,cod2,cod3,cod4,cod5,cod6,cod7,cod8,cod9,cod10,cod11 dim x,x1,x2,x3,x4,x5,u,v,w,z2%,z3%,z4%,z5%,debut_temps%,temps%,Nb_Operation% Dim plus$,moins$,fois$,sur$,egal$ dim nom_programme$,auteur$,date_creation$,version_programme$,modif$ dim_local i%,j% data 1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,25,50,75,100 FOR i% = 1 TO 24 : READ Plaque_Possible%(i%) : NEXT i% Nombre_A_Trouver% = int(rnd(900)+100) dossier$ = dir_current$ Application_title "LE COMPTE EST BON" caption 0,"LE COMPTE EST BON PAR PAPYDALL" width 0,1000 : height 0,700 : color 0,0,0,0 : font_color 0,0,255,0 : cls font_bold 0 : font_size 0,16 nom_programme$ = "Le compte est bon" auteur$ = "Papydall" date_creation$ = "30 Octobre 2012" modif$ = "06 Novembre 2012" version_programme$ = "V01.00" plus$ = "+" : moins$ = "-" : fois$ = "x" : sur$ = "÷" : egal$ = "=" volume% = 100 : ' niveau de volume (0 ... 100) vitesse% = 0-4 : ' vitesse d'élocution (-10 ... 10) langue% = 0 : ' N° de la langue installée (0 = langue par défaut' dll_on "KGF.DLL" txt$ = "Salut tout le monde! " txt$ = txt$ + "Papydall vous propose : le compte est bon. " txt$ = txt$ + "Bon divertissement!" : ' texte à prononcer
Speak(txt$,volume%,vitesse%,langue%) music() END_SUB ' ****************************************************************************** SUB Declaration() dim_local i%,j% container 100 : color 100,10,20,100 : hide 100 top 100,10 : left 100,20 : height 100,150 : width 100,475 for i% = 101 to 106 combo i% : parent i%,100 hint i%,"Valeur numérique (de 1 à 10, 25, 50, 75 et 100)" top i%,30 : left i%,65*(i%-100) : width i%,60: height i%, 50 font_color i%,0,0,255 : color i%,255,255,255 for j% = 1 to 19 step 2 : item_add i%,str$(plaque_possible%(j%)) : next j% for j% = 21 to 24 : item_add i%,str$(plaque_possible%(j%)): next j% tirage_plaque%(1,i%,1) next i% combo 107 : hint 107,"Valeur numérique entre 101 et 999" parent 107,100 : top 107,100 : left 107,150 : font_color 107,255,0,0 font_bold 107 : width 107,65 : height 107,22 : text 107,str$(Nombre_A_Trouver%) for i% = 101 to 107 : on_change i%,change : next i% button 108 : parent 108,100 : top 108,100 : left 108, 250 :width 108,30 caption 108,"OK" : on_click 108,click container 600 : color 600,10,20,100 : hide 600 top 600,10: left 600,500 : width 600,300 : height 600,600 for i% = 1 to 7 alpha 600+i% : parent 600+i%,600 : top 600+i%,40*i% : left 600+i%,20 next i% button 608 : parent 608,600 : top 608,450 : left 608,75 : width 608,150 font_size 608,8 : caption 608,"Afficher la solution" on_click 608,click : inactive 608
form 2000 : hide 2000 : top 2000,300 : left 2000,300 width 2000,400 : height 2000,200 : caption 2000,"A-propos" button 2100 :parent 2100,2000 : top 2100,140 : left 2100,180 caption 2100,"Fermer" : on_click 2100,click : ' ---> cacher_a_propos
alpha 2110 : parent 2110,2000 top 2110,10 : left 2110,10 : caption 2110,"Programme.......: " + nom_programme$ alpha 2120 : parent 2120,2000 top 2120,30 : left 2120,10 : caption 2120,"Auteur..............: " + auteur$ alpha 2130 : parent 2130,2000 top 2130,50 : left 2130,10 : caption 2130,"Créé le.............: " + date_creation$ alpha 2140 : parent 2140,2000 top 2140,70 : left 2140,10 : caption 2140,"Dernière modif.: " + modif$ alpha 2150 : parent 2150,2000 top 2150,90 : left 2150,10 : caption 2150,"Version.............: "+version_programme$
container 200 : color 200,10,20,100 : hide 200 top 200,160 : left 200,20 : height 200,450 : width 200,475 for i% = 1 to 5 no% = 200 - 2 + (3 * i%) : edit no% : parent no%,200 top no%,80+80*(i%-1) : left no%,120 : width no%,55 : height no%,50 font_color no%,0,0,255 : color no%,255,255,255 no% = 200 - 1 + (3 * i%) : edit no% : parent no%,200 top no%,80+80*(i%-1) : left no%,240 : width no%,55 : height no%,50 font_color no%,0,0,255 : color no%,255,255,255 no% = 200 - 0 + (3 * i%) : edit no% : parent no%,200 top no%,80+80*(i%-1) : left no%,360 : width no%,55 : height no%,50 font_color no%,0,0,255 : color no%,255,255,255 next i% FOR i% = 300 to 319 : alpha i% : parent i%,200 : next i% top 300,80 : left 300,20 : caption 300,plus$ top 301,80 : left 301,42 : caption 301,moins$ top 302,100 : left 302,20 : caption 302,fois$ top 303,100 : left 303,40 : caption 303,sur$ top 304,160 : left 304,20 : caption 304,plus$ top 305,160 : left 305,42 : caption 305,moins$ top 306,180 : left 306,20 : caption 306,fois$ top 307,180 : left 307,40 : caption 307,sur$ top 308,240 : left 308,20 : caption 308,plus$ top 309,240 : left 309,42 : caption 309,moins$ top 310,260 : left 310,20 : caption 310,fois$ top 311,260 : left 311,40 : caption 311,sur$ top 312,320 : left 312,20 : caption 312,plus$ top 313,320 : left 313,42 : caption 313,moins$ top 314,340 : left 314,20 : caption 314,fois$ top 315,340 : left 315,40 : caption 315,sur$ top 316,400 : left 316,20 : caption 316,plus$ top 317,400 : left 317,42 : caption 317,moins$ top 318,420 : left 318,20 : caption 318,fois$ top 319,420 : left 319,40 : caption 319,sur$
for i% = 0 to 19 : on_click 300+i%,click : next i% for i% = 0 to 4 alpha 400+i% : parent 400+i%,200 top 400+i%,80*(1+i%) : left 400+i%,200 : caption 400+i%,plus$ next i% for i% = 0 to 4 alpha 500+i% : parent 500+i%,200 top 500+i%,80*(1+i%) : left 500+i%,320 : caption 500+i%,egal$ next i% classement() END_SUB ' ****************************************************************************** SUB presentation() dim_local i
scene3d 1 : color 1, 0,0,0 3d_text 1,"PAPYDALL " : full_space 1 3d_color 1,0,0,255 : 3d_position 1,-2,-.5,1 for i = 0 to 360 step 2: 3d_x_rotate 1,i : wait 10 : next i for i = 1 to .005 step -.005 : 3d_scale 1,i,i,i : wait 10 : next i 3d_text 2,"VOUS PROPOSE " : 3d_color 2,255,0,0 3d_position 2,-3.5,-.5,1 for i = 0 to 360 step 2: 3d_x_rotate 2,i : wait 10 : next i for i = 1 to .005 step -.005 : 3d_scale 2,i,i,i : wait 10 : next i 3d_text 3,"LE COMPTE EST BON" : 3d_color 3,0,255,0 3d_position 3,-1.5,-.5,1 for i = 0 to 500 step 2 : 3d_y_rotate 3,i : 3d_z_rotate 3,i : wait 30 : next i for i = 1 to .01 step -.005 : 3d_scale 3,i,i,i : wait 30 : next i : delete 1
END_SUB ' ****************************************************************************** ' Menu SUB menu() main_menu 10 sub_menu 11 : parent 11,10 : caption 11,"Nouvelle partie" : on_click 11,click sub_menu 12 : parent 12,10 : caption 12,"Musique" sub_menu 13 : parent 13,10 : caption 13,"Quitter" : on_click 13,click sub_menu 14 : parent 14,10 : caption 14,"Aide" : on_click 14,click sub_menu 15 : parent 15,12 : caption 15,"Activer le son" : on_click 15,click sub_menu 16 : parent 16,12 : caption 16,"Désactiver le son": on_click 16,click sub_menu 17 : parent 17,10 : caption 17,"A-propos..." : on_click 17,click active 16 : inactive 15 : show 100 : show 200 : show 600 END_SUB ' ****************************************************************************** ' Traiter les différents ON_CLICK click: if clicked(11) = 1 then new() : return : ' Nouvelle partie if clicked(14) = 1 then aide() : return if clicked(16) = 1 then inactive 16 : active 15 : nomusic() : return if clicked(15) = 1 then inactive 15 : active 16 : music() : return if clicked(17) = 1 then A_propos() : return if clicked(13) = 1 then quitter() : return if clicked(108) = 1 then efface() : calcul() if clicked(608) = 1 then Affiche_Solution() : Affiche_Temps() if clicked(300) = 1 then caption 400,plus$ : return if clicked(301) = 1 then caption 400,moins$ : return if clicked(302) = 1 then caption 400,fois$ : return if clicked(303) = 1 then caption 400,sur$ : return
if clicked(304) = 1 then caption 401,plus$ : return if clicked(305) = 1 then caption 401,moins$ : return if clicked(306) = 1 then caption 401,fois$ : return if clicked(307) = 1 then caption 401,sur$ : return
if clicked(308) = 1 then caption 402,plus$ : return if clicked(309) = 1 then caption 402,moins$ : return if clicked(310) = 1 then caption 402,fois$ : return if clicked(311) = 1 then caption 402,sur$ : return
if clicked(312) = 1 then caption 403,plus$ : return if clicked(313) = 1 then caption 403,moins$ : return if clicked(314) = 1 then caption 403,fois$ : return if clicked(315) = 1 then caption 403,sur$ : return
if clicked(316) = 1 then caption 404,plus$ : return if clicked(317) = 1 then caption 404,moins$ : return if clicked(318) = 1 then caption 404,fois$ : return if clicked(319) = 1 then caption 404,sur$ : return
if clicked(2100) = 1 then cacher_a_propos()
return ' ***************************************************************************** ' Traiter les différents ON_CHANGE change: active 108 for l% = 101 to 106 if numeric(text$(l%)) > 0 plaque%(l%-100) = val(text$(l%)) else txt$ = "Valeur numérique SVP! Vous ne savez pas lire ?" erreur(txt$) : message txt$ :inactive 108 end_if if plaque%(l%-100) < 1 or plaque%(l%-100) > 100 txt$ = "Valeur incorrecte! Vous ne savez pas lire ?" erreur(txt$) : message txt$ : inactive 108 end_if next l% if numeric(text$(107)) > 0 Nombre_A_Trouver% = val(text$(107)) else txt$ = "Valeur numérique SVP! Vous ne savez pas lire ?" erreur(txt$) : message txt$ : inactive 108 end_if classement() return ' ****************************************************************************** SUB Speak(t$,vol%,vit%,lang%) res% = dll_call4("Speak",adr(t$),vol%,vit%,lang%) END_SUB ' ****************************************************************************** ' Joue la musique caractéristique du jeu "LE COMPTE EST BON" SUB music() if file_exists(dossier$ + "\comptebon.mp3") = 1 sound 3000 : file_load 3000,dossier$ +"\comptebon.mp3" : play 3000 end_if END_SUB ' ****************************************************************************** ' Arrêter la musique SUB nomusic() if object_exists(3000) = 1 inactive 16 : active 15 : delete 3000 end_if END_SUB
' ****************************************************************************** ' Tirage aléatoire des plaques SUB tirage_plaque%(aleat%,i%,p%) aleat% = int(rnd(24)+1) : p% = plaque_possible%(aleat%) text i%,str$(p%) : plaque%(i%-100) = p% END_SUB ' ****************************************************************************** ' Classement décroissant SUB classement() dim_local i%,j%, aux% if Nombre_A_Trouver% > 999 txt$ = "Valeur incorrecte! Vous ne savez pas lire ?" erreur(txt$) : message txt$ : inactive 108 : exit_sub end_if FOR i% = 5 TO 1 STEP -1 FOR j% = 1 TO i% IF plaque%(j%) < plaque%(j% + 1) aux% = plaque%(j%): plaque%(j%) = plaque%(j%+1): plaque%(j%+1) = aux% END_IF NEXT j% NEXT i% END_SUB ' ****************************************************************************** SUB efface() dim_local i% for i% = 601 to 607 : caption i%,"" : next i% : display END_SUB ' ****************************************************************************** ' Nouvelle partie SUB new() dim_local i% l% = 0 for i% = 101 to 106 : tirage_plaque%(1,i%,1) : next i% Nombre_A_Trouver% = int(rnd(900)+100) : text 107,str$(Nombre_A_Trouver%) classement() for i% = 201 to 215 : text i%,"" : next i% END_SUB ' ****************************************************************************** SUB erreur(tex$) nomusic() : Speak(tex$,volume%,vitesse%,langue%) : music() END_SUB ' ****************************************************************************** SUB Aide() dim_local t$ t$ = "Le but est d'obtenir un nombre (de 101 à 999) à partir d'opérations" t$ = t$ + " élémentaires (+, -, ×, ÷)" t$ = t$ + chr$(13) + "sur des entiers naturels, en partant de nombres tirés au hasard" t$ = t$ + " (de 1 à 10, 25, 50, 75 et 100)." t$ = t$ + chr$(13) + "Le jeu comporte vingt-quatre plaques : " t$ = t$ + "les nombres de 1 à 10 présents en double exemplaire " t$ = t$ + chr$(13) + "et les nombres 25,50,75 et 100 présents en un seul exemplaire." message t$ END_SUB ' ****************************************************************************** ' montrer la fenêtre A-propos SUB a_propos() show 2000 END_SUB ' ****************************************************************************** ' cacher la fenêtre A_propos SUB cacher_a_propos() hide 2000 END_SUB ' ****************************************************************************** ' Le compte est-il bon ? SUB test(nombre,nop%) if nombre = Nombre_A_Trouver% then Nb_Operation% = nop% : Le_Compte_Est_Bon() END_SUB ' ****************************************************************************** SUB Calcul() if Nombre_A_Trouver% < 101 txt$ = "Valeur incorrecte! Vous ne savez pas lire ?" erreur(txt$) : message txt$ : inactive 108 exit_sub end_if txt$ = "VEUILLEZ PATIENTER, JE CALCULE" caption 0,txt$ : nomusic() : inactive 608 : Speak(txt$,volume%,vitesse%,langue%) l% = 0 : aa = 0 : debut_temps% = val(mid$(time$,7,2)) FOR i0% = 1 TO 5 a = plaque%(i0%) if a <> aa bb = 0 FOR i1% = i0% + 1 TO 6 b = plaque%(i1%) if b <> bb x = a + b : test(x,1) : Calcul1() : Calcul2() x = a - b : IF x <> 0 THEN test(x,1): Calcul1(): Calcul2() x = a * b : IF x <> a + b - 1 THEN test(x,1): Calcul1(): Calcul2() x = a / b : IF x = INT(x) AND b <> 1 THEN test(x,1): Calcul1(): Calcul2() bb = b end_if NEXT i1% aa = a end_if NEXT i0% non_trouve() END_SUB ' ****************************************************************************** SUB Calcul1() z2% = 1: cc = 0 FOR i2% = 1 TO 6 if i2% <> i0% and i2% <> i1% c = plaque%(i2%) if c <> cc cod1 = 0 : x2 = x + c : test(x2,2) : Calcul3() : Calcul4() x2 = ABS(x - c) : IF x2 <> 0 THEN test(x2,2) : Calcul3() : Calcul4() cod1 = 1 : x2 = x * c IF x2 <> x + c - 1 THEN test(x2,2) : Calcul3() : Calcul4() cod1 = 2 : x2 = x / c : v = c IF x2 < 1 THEN x2 = c / x : v = x IF x2 = INT(x2) AND v <> 1 THEN test(x2,2) : Calcul3() : Calcul4() cc = c end_if end_if NEXT i2% END_SUB ' ****************************************************************************** SUB Calcul2() z2% = 2: IF i0% >= 5 THEN exit_sub cc = 0 FOR i2% = i0% + 1 TO 5 if i2% <> i1% c = plaque%(i2%) if c <> cc dd = 0 FOR i3% = i2% + 1 TO 6 if i3% <> i1% d = plaque%(i3%) if d <> dd x2 = c + d : Calcul5() : Calcul6() x2 = c - d : IF x2 <> 0 THEN Calcul5() : Calcul6() x2 = c * d : IF x2 <> c + d - 1 THEN Calcul5() : Calcul6() x2 = c / d : IF x2 = INT(x2) AND d <> 1 THEN Calcul5() : Calcul6() dd = d end_if end_if NEXT i3% cc = c end_if end_if NEXT i2% END_SUB ' ****************************************************************************** SUB Calcul3() z3% = 1: dd = 0 FOR i3% = 1 TO 6 if i3% <> i0% and i3% <> i1% and i3% <> i2% d = plaque%(i3%) if d <> dd if cod1 < 1 cod3 = 1 : x3 = x2 * d IF x3 <> x2 + d - 1 THEN test(x3,3) : Calcul7() : Calcul8() else cod3 = 0 : x3 = x2 + d : test(x3,3) : Calcul7() : Calcul8() x3 = ABS(x2 - d) : IF x3 <> 0 THEN test(x3,3): Calcul7() : Calcul8() end_if if cod1 <> 2 cod3 = 2 : x3 = x2 / d : v = d IF x3 < 1 THEN x3 = d / x : v = x IF x3 = INT(x3) AND v <> 1 THEN test(x3,3): Calcul7() : Calcul8() end_if dd = d end_if end_if NEXT i3% END_SUB ' ****************************************************************************** SUB Calcul4() z3% = 2: IF i0% >= 5 THEN exit_sub dd = 0 FOR i3% = i0% + 1 TO 5 if i3% <> i1% and i3% <> i2% d = plaque%(i3%) if d <> dd ee = 0 FOR i4% = i3% + 1 TO 6 if i4% <> i1% and i4% <> i2% e = plaque%(i4%) if e <> ee x3 = d + e : Calcul9() : Calcul10() x3 = d - e : IF x3 <> 0 THEN Calcul9() : Calcul10() x3 = d * e : IF x3 <> d + e - 1 THEN Calcul9() : Calcul10() x3 = d / e : IF x3 = INT(x3) AND e <> 1 THEN Calcul9() : Calcul10() ee = e end_if end_if NEXT i4% dd = d end_if end_if NEXT i3% END_SUB ' ****************************************************************************** SUB Calcul5() z3% = 3 : x3 = x + x2 : test(x3,3) : Calcul11() x3 = ABS(x - x2) : IF x3 <> 0 THEN test(x3,3) : Calcul11() x3 = x * x2 : IF x3 <> x + x2 - 1 THEN test(x3,3) : Calcul11() x3 = x / x2 : v = x2 : IF x3 < 1 THEN x3 = x2 / x : v = x IF x3 = INT(x3) AND v <> 1 THEN test(x3,3) : Calcul11() END_SUB ' ****************************************************************************** SUB Calcul6() z3% = 4: IF i2% >= 5 THEN EXIT_SUB FOR i4% = i2% + 1 TO 5 if i4% <> i1% and i4% <> i3% e = plaque%(i4%) FOR i5% = i4% + 1 TO 6 if i5% <> i1% and i5% <> i3% f = plaque%(i5%) x3 = e + f : Calcul17() : x3 = e - f : IF x3 <> 0 THEN Calcul17() x3 = e * f : IF x3 <> e + f - 1 THEN Calcul17() x3 = e / f : IF x3 = INT(x3) AND f <> 1 THEN Calcul17() end_if NEXT i5% end_if NEXT i4% END_SUB ' ****************************************************************************** SUB Calcul7() z4% = 1: ee = 0 FOR i4% = 1 TO 6 if i4% <> i0% and i4% <> i1% and i4% <> i2% and i4% <> i3% e = plaque%(i4%) if e <> ee if cod3 < 1 cod7 = 1: x4 = x3 * e IF x4 <> x3 + e - 1 THEN test(x4,4) : Calcul12() else cod7 = 0: x4 = x3 + e : test(x4,4) : Calcul12() x4 = ABS(x3 - e) : IF x4 <> 0 THEN test(x4,4) : Calcul12() end_if if cod3 <> 2 cod7 = 2: x4 = x3 / e : v = e IF x4 < 1 THEN x4 = e / x3 : v = x3 IF x4 = INT(x4) AND v <> 1 THEN test(x4,4) : Calcul12() end_if ee = e end_if end_if NEXT i4% END_SUB ' ****************************************************************************** SUB Calcul8() z4% = 2 : IF i0% >= 5 THEN EXIT_SUB FOR i4% = i0% + 1 TO 5 if i4% <> i1% and i4% <> i2% and i4% <> i3% e = plaque%(i4%) FOR i5% = i4% + 1 TO 6 if i5% <> i1% and i5% <> i2% and i5% <> i3% f = plaque%(i5%) x4 = e + f : Calcul13() : x4 = e - f : IF x4 <> 0 THEN Calcul13() x4 = e * f : IF x4 <> e + f - 1 THEN Calcul13() x4 = e / f : IF x4 = INT(x4) AND f <> 1 THEN Calcul13() end_if NEXT i5% end_if NEXT i4% END_SUB ' ****************************************************************************** SUB Calcul9() z4% = 3 : x4 = x2 + x3 : test(x4,4) : Calcul14() x4 = ABS(x2 - x3) : IF x4 <> 0 THEN test(x4,4) : Calcul14() x4 = x2 * x3 : IF x4 <> x2 + x3 - 1 THEN test(x4,4) : Calcul14() x4 = x2 / x3 : v = x3 : IF x4 < 1 THEN x4 = x3 / x2 : v = x2 IF x4 = INT(x4) AND v <> 1 THEN test(x4,4) : Calcul14() END_SUB ' ****************************************************************************** SUB Calcul10() z4% = 4 FOR i5% = 1 TO 6 if i5% <> i0% and i5% <> i1% and i5% <> i2% and i5% <> i3% and i5% <> i4% f = plaque%(i5%) x4 = x3 + f : Calcul15() : x4 = ABS(x3 - f): IF x4 <> 0 THEN Calcul15() x4 = x3 * f : IF x4 <> x3 + f - 1 THEN Calcul15() x4 = x3 / f : v = f : IF x4 < 1 THEN x4 = f / x3: v = x3 IF x4 = INT(x4) AND v <> 1 THEN Calcul15() end_if NEXT i5% END_SUB ' ****************************************************************************** SUB Calcul11() z4% = 1 : ee = 0 FOR i4% = 1 TO 6 if i4% <> i0% and i4% <> i1% and i4% <> i2% and i4% <> i3% e = plaque%(i4%) if e <> ee cod11 = 0 : x4 = x3 + e : test(x4,4) : Calcul16() x4 = ABS(x3 - e) : IF x4 <> 0 THEN test(x4,4) : Calcul16() cod11 = 1 : x4 = x3 * e IF x4 <> x3 + e - 1 THEN test(x4,4): Calcul16() cod11 = 2 : x4 = x3 / e : v = e IF x4 < 1 THEN x4 = e / x3 : v = x3 IF x4 = INT(x4) AND v <> 1 THEN test(x4,4) : Calcul16() ee = e end_if end_if NEXT i4% END_SUB ' ****************************************************************************** SUB Calcul12() z5% = 1 FOR i5% = 1 TO 6 if i5% <> i0% and i5% <> i1% and i5% <> i2% and i5% <> i3% and i5% <> i4% f = plaque%(i5%) if cod7 < 1 x5 = x4 * f : test(x5,5) else x5 = x4 + f : test(x5,5) : x5 = ABS(x4 - f) : test(x5,5) end_if if cod7 <> 2 x5 = x4 / f : IF x5 < 1 THEN x5 = f / x4 test(x5,5) end_if end_if NEXT i5% END_SUB ' ****************************************************************************** SUB Calcul13() z5% = 2 : x5 = x3 + x4 : test(x5,5) : x5 = ABS(x3 - x4) : test(x5,5) x5 = x3 * x4 : test(x5,5) x5 = x3 / x4 : IF x5 < 1 THEN x5 = x4 / x3 test(x5,5) END_SUB ' ****************************************************************************** SUB Calcul14() z5% = 1 FOR i5% = 1 TO 6 if i5% <> i0% and i5% <> i1% and i5% <> i2% and i5% <> i3% and i5% <> i4% f = plaque%(i5%) x5 = x4 + f : test(x5,5) : x5 = ABS(x4 - f) : test(x5,5) x5 = x4 * f : test(x5,5) x5 = x4 / f : IF x5 < 1 THEN x5 = f / x4 test(x5,5) end_if NEXT i5% END_SUB ' ****************************************************************************** SUB Calcul15() z5% = 3 : x5 = x2 + x4 : test(x5,5) : x5 = ABS(x2 - x4) : test(x5,5) x5 = x2 * x4 : test(x5,5) x5 = x2 / x4 : IF x5 < 1 THEN x5 = x4 / x2 test(x5,5) END_SUB ' ****************************************************************************** SUB Calcul16() z5% = 1 FOR i5% = 1 TO 6 if i5% <> i0% and i5% <> i1% and i5% <> i2% and i5% <> i3% and i5% <> i4% f = plaque%(i5%) if cod11 < 1 x5 = x4 * f : test(x5,5) else x5 = x4 + f : test(x5,5) : x5 = ABS(x4 - f) : test(x5,5) end_if if cod11 <> 2 x5 = x4 / f : IF x5 < 1 THEN x5 = f / x4 test(x5,5) end_if end_if NEXT i5% END_SUB ' ****************************************************************************** SUB Calcul17() z4% = 5 x4 = x + x2 : Calcul13() : x4 = ABS(x - x2) : IF x4 <> 0 THEN Calcul13() x4 = x * x2 : IF x4 <> x + x2 - 1 THEN Calcul13() x4 = x / x2 : v = x2 : IF x4 < 1 THEN x4 = x2 / x: v = x Calcul13() z4% = 6 : x4 = x + x3 : x5 = x2 * x4: test(x5,5) : x5 = x2 / x4 IF x5 < 1 THEN x5 = x4 / x2 test(x5,5): x4 = ABS(x - x3) IF x4 <> 0 x5 = x2 * x4 : test(x5,5) x5 = x2 / x4 : IF x5 < 1 THEN x5 = x4 / x2 test(x5,5) end_if x4 = x * x3 : IF x4 <> x + x3 - 1 THEN Calcul18() x4 = x / x3 : v = x3 : IF x4 < 1 THEN x4 = x3 / x : v = x Calcul18() z4% = 3 : x4 = x2 + x3 : Calcul19() : x4 = ABS(x2 - x3) IF x4 <> 0 THEN Calcul19() x4 = x2 * x3 : IF x4 <> x2 + x3 - 1 THEN Calcul20() x4 = x2 / x3 : v = x3 : IF x4 < 1 THEN x4 = x3 / x2 : v = x2 Calcul20() END_SUB ' ****************************************************************************** SUB Calcul18() z5% = 3 : x5 = x4 + x2 : test(x5,5) : x5 = ABS(x4 - x2) : test(x5,5) END_SUB ' ****************************************************************************** SUB Calcul19() z5% = 4 : x5 = x4 * x : test(x5,5) x5 = x4 / x : IF x5 < 1 THEN x5 = x / x4 test(x5,5) END_SUB ' ****************************************************************************** SUB Calcul20() z5% = 4 : x5 = x4 + x : test(x5,5) : x5 = ABS(x4 - x) : test(x5,5) END_SUB ' ****************************************************************************** SUB Le_Compte_Est_Bon() temps% = val(mid$(time$,7,2)) - debut_temps% if temps% < 0 then temps% = temps% + 60 txt$ = "LE COMPTE EST BON" : caption 601,txt$ Speak(txt$,volume%,vitesse%,langue%) music() : active 16 : inactive 15 active 608 : end END_SUB ' ****************************************************************************** SUB non_trouve() temps% = val(mid$(time$,7,2)) - debut_temps% if temps% < 0 then temps% = temps% + 60 txt$ = "je n'ai pas trouvé!" : caption 601,txt$ music() : active 16 : inactive 15 Speak(txt$,volume%,vitesse%,langue%) : Affiche_Temps() END_SUB ' ****************************************************************************** SUB Affiche_Solution() w = x: u = a: v = b Operation(): Affiche_Operation(): IF Nb_operation% = 1 THEN EXIT_SUb w = x2 select z2% case 1 : u = x : v = c case 2 : u = c : v = d end_select
Operation(): Affiche_Operation(): IF Nb_Operation% = 2 THEN EXIT_SUB w = x3 select z3% case 1 : u = x2 : v = d case 2 : u = e : v = d case 3 : u = x : v = x2 case 4 : u = e : v = f end_select
Operation(): Affiche_Operation(): IF Nb_operation% = 3 THEN EXIT_SUB w = x4 select z4% case 1 : u = x3 : v = e case 2 : u = e : v = f case 3 : u = x2 : v = x3 case 4 : u = x3 : v = f case 5 : u = x : v = x2 case 6 : u = x : v = x3 end_select
Operation(): Affiche_Operation(): IF Nb_operation% = 4 THEN EXIT_SUB w = x5 select z5% case 1 : u = x4 : v = f case 2 : u = x3 : v = x4 case 3 : u = x2 : v = x4 case 4 : u = x : v = x4 end_select Operation() : Affiche_Operation() END_SUB ' ****************************************************************************** SUB Operation() dim_local aux% operateur$ = "" IF u < v THEN aux% = u : u = v : v = aux% IF w = u + v THEN operateur$ = " + " : EXIT_SUB IF w = u - v THEN operateur$ = " - " : EXIT_SUB IF w = u * v THEN operateur$ = " * " : EXIT_SUB IF w = u / v THEN operateur$ = " ÷ " if operateur$ = "" then operateur$ = " * " : v = x2 END_SUB
' ****************************************************************************** SUB Affiche_Operation() l% = l% + 1 if l% < 6 then caption 601+l%,str$(u) + operateur$ + str$(v) + " = " + str$(w) END_SUB ' ****************************************************************************** SUB Affiche_Temps() caption 607,"Après " + str$(temps%) + " seconde(s)" caption 0,"terminé" : inactive 608 end END_SUB ' ****************************************************************************** SUB QUITTER() txt$ = "Vous voulez quitter vraiment ?" nomusic() Speak(txt$,volume%,vitesse%,langue%) if message_confirmation_yes_no (txt$) = 1 terminate : else : active 16 : inactive 15 : music() end_if END_SUB ' ******************************************************************************
RAPPEL : Le programme a besoin de KGF.DLL et de comptebon.mp3 qui se trouvent sur mon Webdav dans LeCompteEstBon.zip
Dernière édition par papydall le Mar 6 Nov 2012 - 2:21, édité 1 fois (Raison : CORRECTION D'UN BUG) | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Le compte est bon Lun 5 Nov 2012 - 15:12 | |
| Hello Papydall! Bravo pour ton programme! Cependant, même si il est impossible d'avoir quatre "1" au tirage, j'ai voulu voir si le programme fonctionnait bien malgré tout! Donc j'ai fait un tirage de "1", "1", "1", "1", "10", "10", et j'ai demandé 117. La solution, c'est: 10+1=11; 11+1=12; 12+1=13; 10-1=9; 13x9=117. Et ton programme trouve bien la solution! Mais quand on clique sur le bouton "afficher la solution", voit ce qu'il affiche!!! Surtout la fin: 13+2=117 Trop fort! J'avais bien besoin de rigoler un coup avec tous mes problèmes en ce moment! Surtout ne le prend pas mal, je ne me moque pas de toi. Je te laisse chercher le hic, moi j'ai pas la tête à ça en ce moment! A + et bon courage. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Le compte est bon Lun 5 Nov 2012 - 21:06 | |
| Salut Bignono Tu ne Rigole tant que tu veux, je ne peux que faire autant ! Je ne prends jamais mal des telles remarques. Au contraire, ça pousse à chercher ce qui ne va pas bien. Le problème est certainement relatif à l’affichage et non au calcul. Pour le moment je n’arrive pas à bien cibler le hic mais je reverrais ma copie. J’ai une toute petite piste à explorer, mais pour plus tard. NOT NOW. A propos, on peut avoir quatre "1" au tirage et même plus. Rien n’empêche cette éventualité. A+ | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Le compte est bon Mar 6 Nov 2012 - 2:39 | |
| J’ai corrigé le bug signalé par Bignono. Le code de mon précédent post a été modifié. Mon webdav est à jour. J’espère que tout est bien ! | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| | | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Le compte est bon Mar 6 Nov 2012 - 6:49 | |
| | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Le compte est bon Mar 6 Nov 2012 - 9:04 | |
| Bonjour Papydall, Je viens de télécharger la dernière version du compte est bon, mais je suis tombé sur un compte faisable et que ton programme n'a pas trouvé. Si précedemment l'affichage m'a bien fait rigoler, là c'est semble-t-il plus sérieux et plus ennuyeux. Cela doit remettre en cause ton algorythme de calcul! Bon courage quand même à toi! Mais ton programme est quand même vraiment bien fait. A + | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Le compte est bon Mar 6 Nov 2012 - 16:28 | |
| L’algorithme du calcul du compte est bon est un algorithme essentiellement récursif. Transformer un algorithme récursif en un algorithme itératif n’est pas toujours évident ! Maintenant disons ceci : le programme tel quel peut trouver le bon compte dans la majorité des cas où c’est possible. Mais il peut aussi passer à côté pour certains cas même si une solution existe ! Aussi, la solution proposée par le programme n’est pas la plus simple. On peut certainement exhiber d’autres cas où le programme est pris en défaut. A défaut d’être un bon programmeur, j’essaye d’être un expérimentateur ! Ce que j’ai publié n’est qu’un essai de ma part. Il n’est pas parfait je vous l’accorde !. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Le compte est bon Mar 6 Nov 2012 - 17:02 | |
| Lance un concours Papydall pour que quelqu'un trouve un algorithme plus performant... Un les matheux... Jean Debord ? Nardo ? Klaus ? Jean-Claude ? je ne sais pas qui d'autre, je mets les premiers noms qui me passent par la tête mais peut être que pan59, ygeronimi, sergeauze, bignono, Minibug ou maelilou nous surprendront | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Le compte est bon Mar 6 Nov 2012 - 18:25 | |
| Je suis d'accord, mais tu as oublié "Jicehel" ! qui peut très bien faire partie du groupe.
Dernière édition par papydall le Sam 10 Nov 2012 - 15:40, édité 1 fois | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Le compte est bon Mar 6 Nov 2012 - 20:42 | |
| Heu là dessus pas trop non, moi les algorithmes de maths, alors là... ce n'est pas du tout mon truc... | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mar 6 Nov 2012 - 20:46 | |
| | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Le compte est bon Mar 6 Nov 2012 - 20:49 | |
| | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Le compte est bon Mar 6 Nov 2012 - 20:59 | |
| Nous avons une machine à laver et une usine à gaz, manque plus qu’un petit algo fort sympa pour faire plaisir à Jicehel et à moi aussi ! J’y réfléchirais le temps venu !
En tout cas thank you pour vos réactions!
| |
| | | Contenu sponsorisé
| Sujet: Re: Le compte est bon | |
| |
| | | | Le compte est bon | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |